第17回 FreeBSD勉強会 マルチコアとネットワークスタックの高速化技法
浅田さん:FreeBSDでのChecksum Offloading: ・ifconfig -m ix0 | grep capabilities →どんな種類に対応しているかを確認できる ・ifconfig で設定可能 →デフォルトで有効にされるかも #FreeBSDStudy
2013-04-22 20:08:33浅田さん:どれくらい性能に影響するのか?: ・有効:7.99Gbits ・向こう6.66Gbits #FreeBSDStudy
2013-04-22 20:09:12浅田さん:Large Segment Offload(TCP Segmentation Offload): ・パケット送信時の分割処理をNICへオフロード(MTUサイズで分割) ・OSはパケット分割処理分、軽く #FreeBSDStudy
2013-04-22 20:10:10浅田さん:Large Segment Offloadはどれくらい性能に影響するのか?: ・今回の実験では、無効にしたほうが速かった… #FreeBSDStudy
2013-04-22 20:11:31浅田さん:Large Receive Offload: ・LSOの逆 ・受信パケットをNIC上で結合 →TCPなら、1つの大きなパケットとしてOSへ渡す ・プロトコルスタックの呼び出し回数を減らすことができる #FreeBSDStudy
2013-04-22 20:12:32浅田さん:LSO・LROのSW実装: ・Linuxではこれらをソフトウェアで実装している ・S/Wで実装したとしても、結果的にプロトコルスタックの呼び出し回数が減るなら、効果はある ・FreeBSDではH/Wのみ #FreeBSDStudy
2013-04-22 20:14:00浅田さん:TOEがNW I/Oパフォーマンスの解決策か?: ・使い方によっては、TOEが効いてくるが、効かない場合もあるね、と →Intelが論文を →パケットが大きくて、ストレージのI/Oをやっている場合は良いが、小さいパケットだとあまり効かない #FreeBSDStudy
2013-04-22 20:16:06浅田さん:どの処理が重いのか: ・プロトコル処理よりもむしろNIC・メモリ・CPUキャッシュが? #FreeBSDStudy
2013-04-22 20:17:32浅田さん:Intel QuickData Technology: ・NICのバッファ→アプリケーションのバッファへDMA転送 →APIを変えない今の実装だと、ユーザーランドへのコピーが発生。データーが大きいと重い ・チップセットに実装 #FreeBSDStudy
2013-04-22 20:19:15浅田さん:Intel Data Direct I/O Technology: ・従来、NICはメモリにパケットを書き込み、CPUはメモリからキャッシュにパケットを読み込んでからアクセスしていた ・DDIOでは、NICからCPUのキャッシュへDMA #FreeBSDStudy
2013-04-22 20:20:30浅田さん: →最近のものなので、Xeonのハイエンド用みたいになっているので、最新のXeonと 10G NICでサポート #FreeBSDStudy
2013-04-22 20:21:13浅田さん:旧型のプロトコルスタックではマルチスレッドで処理できない: ・システムに1つしかないキュー ・並列化されていないソフトウェア割り込み #FreeBSDStudy
2013-04-22 20:21:57浅田さん:FreeBSD Network Stackのマルチスレッド対応: ・マルチスレッド化されたランキューに積んでスケジュール ・Direct Dispatch ・これらの組み合わせ #FreeBSDStudy
2013-04-22 20:23:42浅田さん: ・net.isr.dispatch=deferred net.isr.maxthreads(最大値。スレッドごとに受信キューを持つ) net.isr.bindthreads(CPUに受信キューを固定) #FreeBSDStudy
2013-04-22 20:24:58浅田さん:送り先スレッドの選択方法は?: ・プロトコル毎にポリシー →(NETISR_POLICY_*)とハンドラ関数で設定されている #FreeBSDStudy
2013-04-22 20:25:51浅田さん:Direct Dispatch: ・net.isr.dispatch=direct ・常に割り込みコンテキストでプロトコル処理を実施 →ずっと負荷が高くてNIC上にパケットが残り続ける場合に他のプロセスが動けなくなるので、そのあたりのケアも #FreeBSDStudy
2013-04-22 20:27:11浅田さん:それでも1つのNICからのパケットは1つのCPUで処理される: ・1つのNICは1つの割り込みしか持たない ・受信処理の途中でパケットを複数のコアに割り振る仕組みがない →NICが複数でCPUも複数コアなら良いが… #FreeBSDStudy
2013-04-22 20:28:39