multiqueue network device 에 대해서 테스트 중입니다.

monovision의 이미지

안녕하세요.

시스템의 네트워크쪽에 부하가 있어 이 처리량을 좀 늘려보기 위해 multiqueue network device 라는 것을 알아보고 있는데요.
자료가 너무나 없네요.

시스템은 멀티 코어인데 네트워크가 하나의 cpu core 만 주구장창 사용하여 시스템 전체적으로 부하가 생기는 상황입니다.
이를 해결하고자 여러가지 방법을 찾아보고 최종적으로 테스트 중인게 multiqueue 인데...
몇가지 없는 문서를 찾아 적용을 했는데
이게 제대로 돌아가고 있는건지도 모르겠습니다.
자료가 너무나도 적네요 ;;;

혹시 multiqueue network device 를 사용해 보신분이 계시면 어떻게 사용하였는지 궁금합니다.

bushi의 이미지

http://www.ibm.com/developerworks/linux/library/l-scalability/index.html

중간쯤... Ethernet SMP IRQ affinitization 부터 보시면 되겠습니다.
irqbalance 데몬이 떠 있으면, 이놈이 주기적으로 검사해서 CPU를 분배해 줍니다.
irqbalance 를 죽이고 ethernet irq 만 모든 CPU 에 분배한다면
시스템 전체적으로 볼 때 결코 긍정적인 결과를 가져오지는 않을 겁니다.

추가.

tx 쪽은 어플리케이션 만들기나름아닌가라고 생각한 체로 검색을 쫌 해봤습니다.
http://www.linuxinsight.com/files/ols2007/zhu-reprint.pdf

ether 칩셋이 multiqueue를 지원한다면,
per-CPU 변수로 tx queue 를 바인딩해서 칩셋이 지원하는 각각의 Tx entry point 를 사용할 수 있게한다는 내용이군요.
NIC 을 좀 더 잘 활용할 순 있는 것 같은데 CPU 부하와는 절대적인 관계가 없을 것 같습니다.
50% 의 능력으로 10분간 돌리느냐 100% 의 능력으로 5분간 돌리느냐...식의 관점에서 접근해야겠네요.

OTL

monovision의 이미지

먼저 답변 감사합니다.
irqbalance 는 오동작(?) 을 하는 경우가 많아 사용하지 않고 있습니다.
결정적으로 irqbalace 를 올리고도 /proc/interrupts 를 모니터링 하면 주구장창 하나의 코어만 사용하구요 ^^;;;
모든 cpu 를 사용하기 위해 intel 기가 랜카드계열 (e1000.ko e1000e.ko 사용)에 아래와 같은 옵션을 주고 사용하고 있는데 이게 multiqueue 랑 상관이 있는지 모르겠다는것도 하나의 문제입니다.
제대로 된 문서가 없어 답답하기 그지 없습니다. ;;;

root] cat /etc/modprobe.conf
options e1000 InterruptThrottleRate=0
options e1000e IntMode=3 InterruptThrottleRate=0

커널 문서나 구글링을 통해서 찾은 문서에서는 tc qdisc 를 사용하라고 하는데 결정적으로 문서에 있는 커맨드 자체가 안 먹히는 경우가 너무 많다눈 사실 ;;;
이래저래 검색하고 여러가지 작업 끝에 queue 를 생성하고 스케쥴링까지 넣어줬는데... 하나의 queue 만 사용합니다. 털썩 ㅡ.ㅡ;
게다가 tc qdisc 에서 생성한 queue 를 각 cpu 코어마다 할당하는 방법까지 알아봐야 하니.. 갈길이 태산인듯합니다.
아직도 계속 테스트를 해보아야겠죠 머 쩝.

smp affinity 는 제일 처음에 테스트 해보았습니다.
잘되긴 하는데 뭔가 께름칙하고 ;;;

최종적으로 원하는 형태는 아래와 같은 형태입니다.

root] cat /proc/interrupts
213:      40177   86056046      17881   77945363       4553   70453537  134051180  104619669   PCI-MSI-edge      eth6 (queue 3)
214:      50406   71188577   35032730   82402687      19479   89707057  104617457   91940995   PCI-MSI-edge      eth5 (queue 2)
215:     149864  102801012      15661   93779415      55453  108199154   90824554   78353347   PCI-MSI-edge      eth4 (queue 1)
216:   51251250   81089624     222192   84825724     731594   86330132  101718157   86068177   PCI-MSI-edge      eth3 (queue 0)
217:          6       8733          0        621        349       3489          0      19437   PCI-MSI-edge      eth3

위의 상태는 TOE 를 지원하는 아주 고가의 랜카드에서 multiqueue 를 활성화 시켰을때의 내용입니다. ( 해당 lan 카드 README 파일대로 적용했을 경우... )
eth3 하나만 활성화 시켰을 때 위 처럼 queue가 4개가 생성이 되고 각각의 queue 가 irq 를 가지고 있습니다.

즉, 최종 목표는 하나의 real etherenet device 에 (가상 ethernet device 를 잡고, 각 device 에) queue 를 할당하여 각 queue 별로 원하는 cpu core 에 스케쥴링을 하는게 목표입니다.
될지 안될지도 모르는 불확실한 것을 가지고 해야하니 막막하네요.

bushi의 이미지

linux netdev 에 올라온 메일들...
제가 이해하는게 맞다면, multiqueue 자체적으로 CPU load balance 에 능동적인 영향을 끼칠만한 뭔가는 없습니다.
단지 CPU 별로 칩셋의 queue 를 할당해서 여러 개를 병렬화 시키겠다는 것 뿐이고,
irqbalance 등의 동적인 것이든 강제로 설정한 것이든 smp affinity 를 반드시 사용해야 효과를 볼 것 같은데요.
그렇지 않으면 뭐가 됐건간에 계속 한개의 CPU, 그러니까 한개의 queue 만 사용하리라 생각합니다.

글 말미에 언급하신 '가상의 장치' 와 '개별 irq' 건은 이것과는 좀 다른 개념인 것 같습니다.
각 queue 마다 irq 를 진짜로 배정해주는... 고가의 h/w 라면 s/w 로 삽질할 필요가 없죠.
정말로 개별적인 별도의 장치들을 마치 하나인 것 처럼 묶어주는 s/w 는 이미 나와 있기도하고.

OTL

monovision의 이미지

Quote:

각 queue 마다 irq 를 진짜로 배정해주는... 고가의 h/w 라면 s/w 로 삽질할 필요가 없죠.

제 말이 그말입니다.
저는 아무리 찾아봐도 더 이상의 자료는 찾지도 못하겠는데 위에서는 자꾸 찾아보라네요.
어디다가 써먹을지 어떻게 써먹을지 어떻게 사용할지도 하나도 안 알려주고 찾아만 보라고 하니 슬슬 짜증만 납니다. ㅡ.ㅡ;;;
군대도 아니고 쩝.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.