In /proc/interrupts, I can see that some interrupt numbers belong to IO-APIC-fasteoi and some belong to IO-APIC-edge.
What is the difference between the two types of interrupt controllers?
The difference lies in the way the interrupts are triggered. The -edge interrupt are edge triggered. This is a rising level on the interrupt line. The -fasteoi interrupts are level interrupts that are triggered until the interrupt event is acknowledged in the programmable interrupt controller (PIC). The EOI stands for End Of Interrupt. See also Wikipedia article on EOI.