SlideShare a Scribd company logo
1 of 26
Download to read offline
Implements the RPS/RFS for FreeBSD,[object Object],@gokzy,[object Object],1,[object Object]
誰?,[object Object],八王子の山奥の大学院生,[object Object],夕方は夕日に照らされる高尾山がキレイ,[object Object],夜は星がキレイ,[object Object],twitter,[object Object],@gokzy,[object Object],2,[object Object]
GSoCで何やんの?,[object Object],Implements the RPS/RFS for FreeBSD,[object Object],Mono-queue NICで受信処理をスケールさせる,[object Object],Linux 2.6.35に入ったRPS/RFSを移植する,[object Object],参考になるコードがあって簡単,[object Object],それでいて金がもらえて(゚∀゚)ウマウマ,[object Object],3,[object Object]
世の中には2種類のNICがある,[object Object],4,[object Object],Multi-queue,[object Object],複数のCPUに割り込み可,[object Object],queueを複数もつ,[object Object],お高い高級品,[object Object],Mono-queue,[object Object],1CPUにのみ割り込み可,[object Object],queueが1つ,[object Object],お求めやすい庶民の品,[object Object],Serverでもオンボはこれのことも,[object Object]
世の中には2種類のNICがある,[object Object],5,[object Object],Multi-queue,[object Object],複数のCPUに割り込み可,[object Object],queueを複数もつ,[object Object],お高い高級品,[object Object],Mono-queue,[object Object],1CPUにのみ割り込み可,[object Object],queueが1つ,[object Object],お求めやすい庶民の品,[object Object],Serverでもオンボはこれのことも,[object Object]
Mono-queue NICに高負荷をかける,[object Object],不幸になる,[object Object],パケットがドロップしようが1CPUに負荷が集中,[object Object],6,[object Object]
FreeBSDの,[object Object],  TCP受信処理を見ましょう,[object Object],7,[object Object],どうしてそうなるの?,[object Object]
FreeBSDのTCP受信処理の流れ,[object Object],8,[object Object]
Multi-queue NICだと,[object Object],9,[object Object]
Mono-queue NICだと,[object Object],10,[object Object]
処理を分散させる,[object Object],11,[object Object]
Receive Packet Steering - RPS,[object Object],Mono-queueのNICで,[object Object],割り込みが1CPUにしかかけられない,[object Object],プロトコルスタック処理を分散させる,[object Object],netisr threadのディスパッチ先をフロー毎に振り分ける,[object Object],SMPを有効活用できる,[object Object],12,[object Object]
RPSでのディスパッチ先の決め方,[object Object],同一フローは同じnetisrにディスパッチ,[object Object],オーダーを保証するため,[object Object],宛先CPUの決め方,[object Object],hashを求める,[object Object],IPアドレス(src,dst)とTCP,UDPポート(src,dst)から,[object Object],次式でディスパッチ先のCPUが決まる,[object Object],hash値 % netisr thread数,[object Object],十数行追加するだけの簡単なお仕事,[object Object],これで$2000 GET,[object Object],13,[object Object]
これ気になりますよね,[object Object],CPUをまたいでいる,[object Object],データローカリティの低下,[object Object],14,[object Object]
ディスパッチ先をアプリケーションが動いているCPUに,[object Object],15,[object Object]
Receive Flow Steering - RFS,[object Object],パケットの受信処理を,そのパケットの宛先のアプリケーションが動いているCPUでやる,[object Object],データローカリティが向上,[object Object],16,[object Object]
RFSでのディスパッチ先の決め方,[object Object],17,[object Object],青プロセスが宛先のパケットを受信,[object Object]
RFSでのディスパッチ先の決め方,[object Object],18,[object Object],青プロセスが動いているCPU3のqueueに積む,[object Object]
青プロセスが,[object Object],19,[object Object],青プロセス向けのパケット受信,[object Object]
青プロセスがCPU2に移動,[object Object],20,[object Object],青プロセス向けのパケット受信,[object Object]
CPU2のqueueに積むと…,[object Object],21,[object Object],順序が入れ替わる可能性がある,[object Object]
プロセスの移動が発生し同一フローで未処理がある場合,[object Object],22,[object Object],パケットが残っているqueueに積む,[object Object]
フローごとにqueueの長さを管理,[object Object],23,[object Object],ここでは青パケットはのqueue_lenは3,[object Object]
ディスパッチ先を変えない条件,[object Object],24,[object Object],queue_len > 0 なら元のnetisrのqueueに積む,[object Object]
ディスパッチ先を変更する条件,[object Object],queue_len == 0 にると移動,[object Object],25,[object Object]
まとめ,[object Object],Mono-queue NICをSMP環境で有効活用!!,[object Object],パケットのオーダーを守るように実装,[object Object],ちなみにLinuxの実装もだいたい同じ,[object Object],2.6.35以降なら即試せます,[object Object],/sys/class/net/eth[0-9]/queues/rx-[0-9]/rps_cpus,[object Object],/sys/class/net/eth[0-9]/queues/rx-[0-9]/rps_flow_cnt,[object Object],/proc/sys/net/core/rps_sock_flow_entries,[object Object],26,[object Object]

More Related Content

What's hot

Unix32 v 20100508
Unix32 v 20100508Unix32 v 20100508
Unix32 v 20100508xylnao
 
197x Timer with Your Messages
197x Timer with Your Messages197x Timer with Your Messages
197x Timer with Your MessagesKuniaki Igarashi
 
UNIX/32V
UNIX/32V UNIX/32V
UNIX/32V xylnao
 
IPv6おためしかっ!
IPv6おためしかっ!IPv6おためしかっ!
IPv6おためしかっ!Jun Morimoto
 
20220207 sd輪読&座談会#33 kitazaki
20220207 sd輪読&座談会#33 kitazaki20220207 sd輪読&座談会#33 kitazaki
20220207 sd輪読&座談会#33 kitazakiAyachika Kitazaki
 
MPSoCのPLの性能について
MPSoCのPLの性能についてMPSoCのPLの性能について
MPSoCのPLの性能についてmarsee101
 
HaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミングHaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミングKiwamu Okabe
 
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)洋史 東平
 
NetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry PiNetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry Pitokudahiroshi
 
ネットワークプロトコル探索隊 LLDP-Link Layer Discovery Protocol-
ネットワークプロトコル探索隊 LLDP-Link Layer Discovery Protocol-ネットワークプロトコル探索隊 LLDP-Link Layer Discovery Protocol-
ネットワークプロトコル探索隊 LLDP-Link Layer Discovery Protocol-ZenSekibe
 
Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話
Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話
Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話Genta Iha
 
Rubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなしRubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなしMasaki Matsushita
 
オープンソース開発と、 あるフレームバッファコンソールの話 ~名古屋応用編~
オープンソース開発と、あるフレームバッファコンソールの話~名古屋応用編~オープンソース開発と、あるフレームバッファコンソールの話~名古屋応用編~
オープンソース開発と、 あるフレームバッファコンソールの話 ~名古屋応用編~nullnilaki
 
Bossan dentoo
Bossan dentooBossan dentoo
Bossan dentookubo39
 
OpenSolaris Printing Environment
OpenSolaris Printing EnvironmentOpenSolaris Printing Environment
OpenSolaris Printing EnvironmentNaruhiko Ogasawara
 
NetBSD, On the ROAD 2016
NetBSD, On the ROAD 2016NetBSD, On the ROAD 2016
NetBSD, On the ROAD 2016Jun Ebihara
 
20120519 #qpstudy インターフェース入門
20120519 #qpstudy インターフェース入門20120519 #qpstudy インターフェース入門
20120519 #qpstudy インターフェース入門Hiyou Shinnonome
 

What's hot (20)

Unix32 v 20100508
Unix32 v 20100508Unix32 v 20100508
Unix32 v 20100508
 
197x Timer with Your Messages
197x Timer with Your Messages197x Timer with Your Messages
197x Timer with Your Messages
 
UNIX/32V
UNIX/32V UNIX/32V
UNIX/32V
 
IPv6おためしかっ!
IPv6おためしかっ!IPv6おためしかっ!
IPv6おためしかっ!
 
20220207 sd輪読&座談会#33 kitazaki
20220207 sd輪読&座談会#33 kitazaki20220207 sd輪読&座談会#33 kitazaki
20220207 sd輪読&座談会#33 kitazaki
 
MPSoCのPLの性能について
MPSoCのPLの性能についてMPSoCのPLの性能について
MPSoCのPLの性能について
 
HaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミングHaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミング
 
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
 
NetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry PiNetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry Pi
 
20210510 software design
20210510 software design20210510 software design
20210510 software design
 
ネットワークプロトコル探索隊 LLDP-Link Layer Discovery Protocol-
ネットワークプロトコル探索隊 LLDP-Link Layer Discovery Protocol-ネットワークプロトコル探索隊 LLDP-Link Layer Discovery Protocol-
ネットワークプロトコル探索隊 LLDP-Link Layer Discovery Protocol-
 
Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話
Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話
Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話
 
Rubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなしRubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなし
 
オープンソース開発と、 あるフレームバッファコンソールの話 ~名古屋応用編~
オープンソース開発と、あるフレームバッファコンソールの話~名古屋応用編~オープンソース開発と、あるフレームバッファコンソールの話~名古屋応用編~
オープンソース開発と、 あるフレームバッファコンソールの話 ~名古屋応用編~
 
GR-CITRUSハンズオン
GR-CITRUSハンズオンGR-CITRUSハンズオン
GR-CITRUSハンズオン
 
Bossan dentoo
Bossan dentooBossan dentoo
Bossan dentoo
 
OpenSolaris Printing Environment
OpenSolaris Printing EnvironmentOpenSolaris Printing Environment
OpenSolaris Printing Environment
 
NetBSD, On the ROAD 2016
NetBSD, On the ROAD 2016NetBSD, On the ROAD 2016
NetBSD, On the ROAD 2016
 
20210705 sd#26 kitazaki
20210705 sd#26 kitazaki20210705 sd#26 kitazaki
20210705 sd#26 kitazaki
 
20120519 #qpstudy インターフェース入門
20120519 #qpstudy インターフェース入門20120519 #qpstudy インターフェース入門
20120519 #qpstudy インターフェース入門
 

Similar to [kernel/vm] Implements the RPS/RFS for FreeBSD

法政大学情報科学部 2012年度コンピュータネットワーク-第10回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第10回授業-Web公開用法政大学情報科学部 2012年度コンピュータネットワーク-第10回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第10回授業-Web公開用Ruo Ando
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~モノビット エンジン
 
Technical report for IPv6 Routing w/ bgp4+
Technical report for IPv6 Routing w/ bgp4+Technical report for IPv6 Routing w/ bgp4+
Technical report for IPv6 Routing w/ bgp4+Toshiki Tsuboi
 
IPv6冗長で差をつけよう 2011年夏の思い出作り VRRP編
IPv6冗長で差をつけよう  2011年夏の思い出作り VRRP編IPv6冗長で差をつけよう  2011年夏の思い出作り VRRP編
IPv6冗長で差をつけよう 2011年夏の思い出作り VRRP編@ otsuka752
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup samplemganeko
 
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~npsg
 
構造化オーバーレイネットワークに適した分散双方向連結リストDDLL
構造化オーバーレイネットワークに適した分散双方向連結リストDDLL構造化オーバーレイネットワークに適した分散双方向連結リストDDLL
構造化オーバーレイネットワークに適した分散双方向連結リストDDLLKota Abe
 
Hydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違いHydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違いMasakazu Asama
 
ロードバランスへの長い道
ロードバランスへの長い道ロードバランスへの長い道
ロードバランスへの長い道Jun Kato
 
Linux packet-forwarding
Linux packet-forwardingLinux packet-forwarding
Linux packet-forwardingMasakazu Asama
 
VPP事始め
VPP事始めVPP事始め
VPP事始めnpsg
 
SD-WAN導入の現場でみえてきたアレコレ
SD-WAN導入の現場でみえてきたアレコレSD-WAN導入の現場でみえてきたアレコレ
SD-WAN導入の現場でみえてきたアレコレKoji Komatsu
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】Masahito Zembutsu
 

Similar to [kernel/vm] Implements the RPS/RFS for FreeBSD (20)

法政大学情報科学部 2012年度コンピュータネットワーク-第10回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第10回授業-Web公開用法政大学情報科学部 2012年度コンピュータネットワーク-第10回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第10回授業-Web公開用
 
Kernel vm-2014-05-25
Kernel vm-2014-05-25Kernel vm-2014-05-25
Kernel vm-2014-05-25
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
 
Technical report for IPv6 Routing w/ bgp4+
Technical report for IPv6 Routing w/ bgp4+Technical report for IPv6 Routing w/ bgp4+
Technical report for IPv6 Routing w/ bgp4+
 
IPv6冗長で差をつけよう 2011年夏の思い出作り VRRP編
IPv6冗長で差をつけよう  2011年夏の思い出作り VRRP編IPv6冗長で差をつけよう  2011年夏の思い出作り VRRP編
IPv6冗長で差をつけよう 2011年夏の思い出作り VRRP編
 
SRv6 study
SRv6 studySRv6 study
SRv6 study
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
 
20060520.tcp
20060520.tcp20060520.tcp
20060520.tcp
 
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
 
InfiniBand on Debian
InfiniBand on DebianInfiniBand on Debian
InfiniBand on Debian
 
構造化オーバーレイネットワークに適した分散双方向連結リストDDLL
構造化オーバーレイネットワークに適した分散双方向連結リストDDLL構造化オーバーレイネットワークに適した分散双方向連結リストDDLL
構造化オーバーレイネットワークに適した分散双方向連結リストDDLL
 
Hydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違いHydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違い
 
Bsd suki
Bsd sukiBsd suki
Bsd suki
 
ロードバランスへの長い道
ロードバランスへの長い道ロードバランスへの長い道
ロードバランスへの長い道
 
Linux packet-forwarding
Linux packet-forwardingLinux packet-forwarding
Linux packet-forwarding
 
VPP事始め
VPP事始めVPP事始め
VPP事始め
 
IPv6 Update
IPv6 UpdateIPv6 Update
IPv6 Update
 
SD-WAN導入の現場でみえてきたアレコレ
SD-WAN導入の現場でみえてきたアレコレSD-WAN導入の現場でみえてきたアレコレ
SD-WAN導入の現場でみえてきたアレコレ
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
 

[kernel/vm] Implements the RPS/RFS for FreeBSD

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.