Improving Passive Packet Capture 학술

Improving Passive Packet Capture

오늘 연구소에서 나올 때 집어들고 나와서 재미있게 봤당. ㅋㅋ
링 버퍼와 rtirq를 조합해서 패킷 로스를 확 줄인 내용.

보면서 느낀 것은 옛날 리눅스 네트웍 성능 정말 개판이었구나 (..)

읽기 귀찮을 분들을 위해 간추려서 설명하면..
  1. 폴링 전혀 안 쓰면 인터럽트 처리만 하다가 CPU 새 된다.
  2. 폴링 쓰면 훨 낫지만 여전히 패킷 로스가 많이 난다.
  3. mmap 쓰고 링 버퍼를 굴리면 일단 패킷 로스가 현격히 줄어든다.
  4. CPU 남아도는 상황에서도 패킷 로스가 나는 괴현상이 발생하는데, 그 이유는 poll 호출 비용이 꽤 커서 그새 들어오는 패킷은 로스난다는 것이다.
  5. 따라서 rtirq로 우선순위를 주면 패킷 로스가 거의 없어진다.
  6. 그러나 이러면 커널 패치를 해야되니 귀찮다. 어댑티브 폴링을 해서 패치 없이 어느 정도 해결할 수 있다.
링 버퍼와 패킷 로스가 뭔 말인지 모를 분들을 위해 설명하면..

고속 네트웍에서는 패킷 들어올 때마다 메모리 할당 노가다 하느라고 비용이 많이 드는데, 커다란 버퍼를 하나 만들어놓고 돌려가면서 덮어쓰기만 하는 버퍼를 링 버퍼라고 말합니다. 일반적인 어플리케이션이라면 처리할 때까지 커널 큐에서 관리를 해야되지만, 네트워크 모니터링, 침입 탐지 등의 특수한 응용에서는 불필요한 메모리 할당을 제거하고 성능을 끌어올리기 위해 링 버퍼를 씁니다. 링 버퍼를 쓰면 유저스페이스에서 처리 속도가 못 따라가는 경우, 덮어쓰기가 발생하므로 패킷 로스가 발생하게 됩니다.

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://www.xeraph.com/tb/4274545 [도움말]

덧글

  • merius 2008/04/08 17:59 # 삭제 답글

    저기서 말하는 링버퍼가 어디 있는거야?
  • xeraph 2008/04/08 18:01 # 답글

    드라이버가 mmap으로 잡고 userspace로 넘김.. 근데 나도 코드를 안 봐서리 험..
댓글 입력 영역