APIC은 Advanced Programmable Interrupt Controller의 약자로서 SMB 환경에서의 인터럽트와 관련된 기술입니다. APIC은 기존의 Single Processor(CPU)환경에서 주로 사용되던 PIC(Programmable Interrupt Controller)를 보완하기 위해서 개발된 것입니다

APIC은 기존의 PC-AT기반의 인터럽트 관리 기능의 한계를 넘기 위해서 새로 만들어진 규격입니다. 프로세서의 속도가 AT 시절 이후로 몇 백배 이상 빨라졌지만, 기본적인 구조는 크게 바뀌지 않았습니다. 특히 인터럽트 관련 부분은 8259 인터럽트 콘트롤러를 사용할 때와 비교해서 달라진게 별로 없었습니다. 그러나, 갖가지 새로운 주변 장치들이 개발되면서 필요한 인터럽트의 숫자는 계속 늘어나게 됩니다. IRQ 충돌이라는 문제가 생기기 시작한 겁니다. 그외에도 여러가지 한계들이 드러나게 되죠 (예를 들어서 느린 속도). 그래서, 새로운 개념의 인터럽트 컨트롤러가 필요하게 되고, APIC이란게 제시됩니다. APIC은 로컬 APIC이라는 것과 I/O APIC이라는 것으로 나누어져 있습니다. 로컬 APIC은 각각의 프로세서에 인터럽트 신호를 전달하고, 멀티 프로세서 시스템도 고려해서 설계되어 있습니다. I/O APIC은 시스템당 최대 8개까지 있을 수 있고, 각종 입출력 장치로부터 인터럽트 신호를 모아서 로컬 APIC으로 전달합니다. 인텔의 경우 시스템 당 보통 24개의 인터럽트를 가지도록 설계하고 있지만, 여러개의 I/O APIC을 사용할 경우 시스템 하나가 수백개의 IRQ를 가지게 설계할 수도 있습니다. IRQ 충돌이란 악몽이 해결되는 겁니다.

그러면, 실제로 우리가 접할 수 있는 상황으로 부연 설명해보겠습니다.

Q: APIC는 IRQ 공유를 유발시킬까?
A: 리눅스 시스템이나 윈도우즈 2000/XP를 설치할 때, 많은 분들이 APIC 때문에 IRQ 공유가 일어나는 것으로 알고 있습니다만, 실제는 그렇지 않습니다. 정확히 말하면, 시스템이 APIC(Advanced Programmable Interrupt Controller)를 제대로 지원하지 못해서 일어나는 현상입니다. 실제로 인텔은 1994년도부터 자사의 프로세서가 로컬 APIC 을 지원하도록 설계하기 시작했습니다. 그러나, 지원하는 칩셋과 운영 체제에서 제대로 지원을 하지 못해서 반쪽짜리였죠.리눅스의 경우 APIC를 제대로 지원하기 시작한것은 Redhat 9 부터이고, Microsoft가 APIC을 제대로 지원하기 시작한 것은 윈도우즈 2000 이후부터입니다. 문제는 여전히 칩셋과 마더보드에서 APIC을 제대로 지원하지 못하는 경우가 많았습니다. 여기서 문제가 발생하기 시작한겁니다. APIC을 지원하지 못할 경우, PIC을 사용하면서, IRQ 공유 같은 문제가 발생하게 됩니다. 제가 사용하고 있는 시스템중 하나는 APIC을 지원하는 Gigabyte의 7VTXH이고, 다른 하나는 APIC을 지원하지 못하는 시스템입니다. 둘을 비교해보면, 7VTXH는 IRQ 번호가 15번을 넘어가는 장치들이 보입니다 (각각의 장치들이 독자적인 IRQ를 사용하고 있습니다). 반면 다른 시스템은 IRQ 번호가 15번을 넘지 못하고 공유하는 현상이 나타나죠. 둘다 최근에 구입한 시스템인데도 APIC 지원이 되는게 있고 안되는게 있습니다. 그리고, Windows 2000의 경우 IRQ 점유 상황을 표시하는 방법에 약간 문제가 있습니다. 같은 하드웨어에 XP를 설치할 경우 APIC를 활성화해도 IRQ 하나에 여러 장치가 몰려서 나타나는 현상은 안일어납니다. 결론은 APIC와 IRQ 공유는 관련이 없다는 겁니다.

Q: APIC를 사용하는것이 좋은가?
A: 시스템만 잘 지원한다면 멀티 코어-멀티프로세서 환경에서는 APIC를 사용하는것이 바람직합니다. 문제는 아직도 이를 제대로 지원하는 시스템이 적다는데 있습니다. 대체로 사용하는 드라이버가 WHQL이면 제대로 지원한다고 보시면 됩니다. 그러나, 제대로 지원하지 못하는 장치를 사용할 경우에는 표준 PC를 사용하는 것이 좋습니다. APIC은 메인보드가 제대로 지원해야 하고, 사용하는 운영 체제도 고려해야 합니다. Redhat9 이후내지는 Windows 2000 이후의 제품을 사용하고 있고, 메인보드가 제대로 지원한다면 별문제없이 사용할 수 있습니다. 그러나, 최근 출시된 서버(다시말해 메인보드)제품 중에도 지원하는 제품이 있고, 지원하지 않는 제품이 있습니다. 그리고 하드웨어 벤더측에서는 분명히 지원하고 있다고 밝히고 있음에도 실제로는 제대로 지원하지 않는 경우도 허다합니다. 이런경우는 하드웨어의 BIOS나 운영체제의 커널쪽에서 강제로 APIC(IO-APIC)를 Disable 해버리는 수밖에는 없읍니다. 이 경우 이론적으로는 성능저하가 발생할수 있지만, 실제 운영상에서는 그리 큰 문제가 될만한 속도저하가 발생되는 경우는 드문편입니다.

About I/O-APIC 및 APIC Error 의 해결

About I/O-APIC 및 APIC Error 의 해결”에 대한 1개의 생각

  • 2019년 10월 25일 9:57 오후
    고유주소

    리눅스를 깔려고 하는데 해당 문제로 인해서 라이브리눅스밖에 사용할 수 없습니다.
    해결 방법이 있습니까

    응답

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다