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

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 kitazaki
Ayachika 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 Pi
tokudahiroshi
 
20210510 software design
20210510 software design20210510 software design
20210510 software design
Ayachika Kitazaki
 
ネットワークプロトコル探索隊 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
 
GR-CITRUSハンズオン
GR-CITRUSハンズオンGR-CITRUSハンズオン
GR-CITRUSハンズオン
三七男 山本
 
Bossan dentoo
Bossan dentooBossan dentoo
Bossan dentookubo39
 
OpenSolaris Printing Environment
OpenSolaris Printing EnvironmentOpenSolaris Printing Environment
OpenSolaris Printing Environment
Naruhiko Ogasawara
 
NetBSD, On the ROAD 2016
NetBSD, On the ROAD 2016NetBSD, On the ROAD 2016
NetBSD, On the ROAD 2016
Jun Ebihara
 
20210705 sd#26 kitazaki
20210705 sd#26 kitazaki20210705 sd#26 kitazaki
20210705 sd#26 kitazaki
Ayachika Kitazaki
 
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
 
SRv6 study
SRv6 studySRv6 study
SRv6 study
Hiro Mura
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
mganeko
 
20060520.tcp
20060520.tcp20060520.tcp
20060520.tcp
Ken SASAKI
 
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
npsg
 
InfiniBand on Debian
InfiniBand on DebianInfiniBand on Debian
InfiniBand on Debian
Taisuke Yamada
 
構造化オーバーレイネットワークに適した分散双方向連結リストDDLL
構造化オーバーレイネットワークに適した分散双方向連結リストDDLL構造化オーバーレイネットワークに適した分散双方向連結リストDDLL
構造化オーバーレイネットワークに適した分散双方向連結リストDDLL
Kota Abe
 
Hydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違いHydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違い
Masakazu Asama
 
Bsd suki
Bsd sukiBsd suki
Bsd suki
yamori813
 
ロードバランスへの長い道
ロードバランスへの長い道ロードバランスへの長い道
ロードバランスへの長い道
Jun Kato
 
Linux packet-forwarding
Linux packet-forwardingLinux packet-forwarding
Linux packet-forwardingMasakazu Asama
 
VPP事始め
VPP事始めVPP事始め
VPP事始め
npsg
 
IPv6 Update
IPv6 UpdateIPv6 Update
IPv6 Update
Shinsuke SUZUKI
 
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