« Apache Benchがマルチコアに対応してほしいと思うのね。 | ホーム | Knoppixを起動するUSBメモリを作ろう。 »
2010年4月21日
Receive-Side Scalingとな?
(11:48訂正、shirley(M/B:D510MO/NIC:Realtek8111DL)だと無手順でばらけました。)
前のエントリで書いたApache Benchの件は、ちと早計というか、違う問題のようだということが分かって来た。あのあとぐぐってみると、気になる記事を見つけたの。
http://blog.nomadscafe.jp/2010/01/cpu.html
アプリケーションがマルチスレッドでもマルチコアCPUを活かせない件 - blog.nomadscafe.jp
memcachedの通信は主にeth1で行われるのですが、このeth1に関する割り込み処理がCPU1でしか行われていません。ソフトウェア割り込みはハードウェア割り込みが行われたCPUでしか行われないのもこの傾向を強めます。
マルチコアCPUの性能を活かすために考えられることは、ネットワークの割り込み処理を複数のCPUに分散することだと思うのですが、最新のNICにはRX/TX Multiple Queue(正式名称がわからない。Receive Side ScalingとかScalable I/O?)機能が備わっています。もともとRX/TX Multiple Queueは10GbpsのNICなどに備わっていた機能で、複数の割り込みチャンネルを持つことでネットワーク処理の分散を実現しています。最近のIntelやBroadcomの1GbpsのNICにも同じ機能があります。
emma:~# cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3
0: 45 0 6 0 IO-APIC-edge timer
1: 0 0 8 0 IO-APIC-edge i8042
6: 1 0 2 0 IO-APIC-edge floppy
7: 0 0 0 0 IO-APIC-edge parport0
8: 0 0 1 0 IO-APIC-edge rtc0
9: 0 0 0 0 IO-APIC-fasteoi acpi
14: 0 0 0 0 IO-APIC-edge ide0
15: 0 0 0 0 IO-APIC-edge ide1
16: 0 0 236 0 IO-APIC-fasteoi ohci_hcd:usb1, ohci_hcd:usb3, hda_intel
17: 0 0 0 0 IO-APIC-fasteoi ehci_hcd:usb2
18: 0 0 0 0 IO-APIC-fasteoi ohci_hcd:usb5, ohci_hcd:usb6, ohci_hcd:usb7
19: 0 0 0 0 IO-APIC-fasteoi ehci_hcd:usb4
22: 0 0 2002 2 IO-APIC-fasteoi ohci1394, ahci
25: 0 0 3150 0 PCI-MSI-edge eth0
26: 0 0 0 0 PCI-MSI-edge hda_intel
NMI: 0 0 0 0 Non-maskable interrupts
LOC: 8113 12668 9084 7116 Local timer interrupts
SPU: 0 0 0 0 Spurious interrupts
PMI: 0 0 0 0 Performance monitoring interrupts
PND: 0 0 0 0 Performance pending work
RES: 3646 3930 2110 2260 Rescheduling interrupts
CAL: 42 124 135 122 Function call interrupts
TLB: 4 0 3 7 TLB shootdowns
TRM: 0 0 0 0 Thermal event interrupts
THR: 0 0 0 0 Threshold APIC interrupts
MCE: 0 0 0 0 Machine check exceptions
MCP: 6 6 6 6 Machine check polls
ERR: 4
MIS: 0
確かにこのページで語られてるのと同じ状況。mary,emmaでも同じだった。httpdを入れてないので確認してないけど、/proc/interruptsを見る限りnellyでも同じっぽい。shirleyではばらけたぞ。
うちのマシンは揃ってRealTek製の8111C(shirleyだけ8111DL)のチップだったのだけど、これらは"Receive-Side Scaling"の機能であれば対応しているらしい。
http://www.realtek.com.tw/products/productsView.aspx?Langid=1&PFid=5&Level=5&Conn=4&ProdID=142
Realtek (8111C)
http://www.realtek.com.tw/products/productsView.aspx?Langid=1&PNid=13&PFid=5&Level=5&Conn=4&ProdID=193
Realtek (8111DL)
これがLinux上でどう対応づけすればいいのか調べ中でござる...。
トラックバック(0)
トラックバックURL: http://foursics.jp/cgi-bin/mt/mt-tb.cgi/300
コメントする