Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
俺の仮想マシンルーターがこんなに遅いはずはない/ KernelVM online 1
Search
Toshifumi NISHINAGA
June 06, 2020
3.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
俺の仮想マシンルーターがこんなに遅いはずはない/ KernelVM online 1
Toshifumi NISHINAGA
June 06, 2020
More Decks by Toshifumi NISHINAGA
See All by Toshifumi NISHINAGA
マイコンでもRustのtestがしたい その2/KernelVM Tokyo 18
tnishinaga
2
2.7k
マイコンでもRustのtestがしたい/KernelVM Kansai 11
tnishinaga
1
1.9k
BareMetalで遊ぶRaspberry Pi 5 PCIe編/KernelVM Tokyo17
tnishinaga
2
3.9k
probe-rsの紹介と最近の貢献紹介/CELF-02-03
tnishinaga
1
840
SecurityCamp2023基板作るコース講義資料/Security Camp 2023 Lecture Materials
tnishinaga
8
2.8k
RP2040のPIOを使う話/KernelVM Hokuriku 6
tnishinaga
4
9k
JTAGでArmプロセッサをデバッグする方法のつづき/KernelVM_Tokyo16
tnishinaga
0
760
CMSIS-DAPの概要と使い方/KernelVM Online5
tnishinaga
1
2.4k
JTAGでarmプロセッサをデバッグする話/KernelVM Online4
tnishinaga
5
4k
Featured
See All Featured
Evolving SEO for Evolving Search Engines
ryanjones
0
290
Optimising Largest Contentful Paint
csswizardry
37
4k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
The SEO identity crisis: Don't let AI make you average
varn
0
560
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
Six Lessons from altMBA
skipperchong
29
4.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
600
Ruling the World: When Life Gets Gamed
codingconduct
0
330
Test your architecture with Archunit
thirion
2
2.4k
Transcript
俺の仮想マシンルーターが こんなに遅いはずはない 2020/06/06 KernelVM Online part 1 Toshifumi NISHINAGA (@tnishinaga)
2020/6/6 1
今⽇のコード https://github.com/tnishinaga/kernelvm-online1-router-config 2020/6/6 2
Special Thanks 2020/6/6 3
リモートワーク時代到来 • PPPoE接続IPv4回線がとても遅くなった • ⼣⽅など下り1Mbpsを切ることもある • DS-Lite(IPv4 over IPv6)もそんな速くない •
どの時間も上り下り70Mbpsで頭打ち • IPv6は数百Mbpsでる • EdgeRouter Liteの性能限界っぽい • 測定中 ksoftirqがCPUを100%使⽤ 2020/6/6 5
インターネットを速くするために • DS-Liteが満⾜に動く性能のルーターを作ろう 2020/6/6 6
ルーター新調 • LIVA Z-4と拡張パーツを購⼊ • CPU: Celeron N3350 @ 1.1GHz,
2 core • Mem: SO-DIMM DDR3L 8GB* • SSD: M.2 2242 SATA 128GB* • NIC: Gigabit Ethernet(RTL8111H) x 2 • お値段 約3万円 *は換装パーツ 2020/6/6 7
セットアップ • LIVA Zにdebianをインストール • KVM上にルーターを構築 • UTMも収納したかった • Gigabit程度なら速度低下もないはず
2020/6/6 8
セットアップ • LIVA Zにdebianをインストール • KVM上にルーターを構築 • UTMも収納したかった • Gigabit程度なら速度低下もないはず
•↑本当に? 2020/6/6 9
今⽇の発表内容 • VMでルーターを作っても速度低下がないのかを知るため、ホ ストマシンとVMでルーティング時のスループット差を検証し たので共有する • 道中、VMだけで起こる謎現象に遭遇したので解決策を募集 • 資料にのみ記載。解決⽅法ご存じの⽅はTwitter等で教えて下さい。 2020/6/6
10
物理マシンのスループット 調査 2020/6/6 11
物理マシンのスループット調査 • 以下を⽐較して調査するため • 物理マシン上に直接⼊れたLinux • VM上に⼊れたVyOS(Linux base) 2020/6/6 12
物理マシンのスループットを調査する • NICのスループット調査 • ブリッジ時のスループット調査 • パケットフォワード時のスループット調査 • ipip6トンネル時のスループット調査 2020/6/6
13
計測条件 • LIVA-Z • debian buster x86_64 • iperf version
2.0.12 • iptablesの設定は全削除 • PC(MacBookPro 2018) • Mac OSX Catalina 10.15.5 • iperf version 2.0.13 • Tuneware Almighty dock C2 gigabit ethernet • PC(ThinkPad x230) • VyOS 1.3 • iperf version 2.0.12 2020/6/6 14
NICのスループット計測 • ⽬的 • 各NIC単体のスループットを測る • 確認⼿順 1. LIVA Z上にiperf
serverを建てる 2. 各NICの下にGigabit NICを持ったPCを接続する 3. iperfで60秒間のスループットを測る 2020/6/6 15
LIVA Z NICのスループット計測 enp1s0 enp3s0 PC PC 2020/6/6 16 iperf
server 192.168.1.1 2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 192.168.2.1 2001:db8:dead:cafe::1 192.168.2.2 2001:db8:dead:cafe::2 ※ IPv4は/24, IPv6は/64
LIVA Z NICのスループット計測 enp1s0 enp3s0 PC PC 2020/6/6 17 iperf
server 192.168.1.1 2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 192.168.2.1 2001:db8:dead:cafe::1 192.168.2.2 2001:db8:dead:cafe::2 ※ IPv4は/24, IPv6は/64
NICスループット計測結果 2020/6/6 18 0 100 200 300 400 500 600
700 800 900 1000 enp1s0 enp3s0 IPv4(Mbps) IPv6(Mbps)
ブリッジ時のスループット計測 • ⽬的 • (ソフトウェア)ブリッジ性能を計測する • 確認⼿順 1. LIVA ZのLinuxで各NICをbridgeする
2. 各NICの下にGigabit NICを持ったPCを接続する 3. ⽚⽅のPでiperf server,もう⽚⽅でiperf clientを起動する 4. 60秒間のスループットを計測する 2020/6/6 19
LIVA Z ブリッジ時のスループット計測 enp1s0 enp3s0 PC PC 2020/6/6 20 192.168.1.1
2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 ※ IPv4は/24, IPv6は/64 br0 192.168.1.3 2001:db8:dead:beaf::3
LIVA Z ブリッジ時のスループット計測 enp1s0 enp3s0 PC PC 2020/6/6 21 192.168.1.1
2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 ※ IPv4は/24, IPv6は/64 br0 192.168.1.3 2001:db8:dead:beaf::3
ブリッジ時のスループット計測結果 2020/6/6 22 0 100 200 300 400 500 600
700 800 900 1000 IPv4 IPv6 Mbps br0 enp1s0
パケットフォワードのスループット計測 • ⽬的 • パケットフォワードの性能を計測する • 確認⼿順 1. LIVA ZのLinuxで各NICのIPv4/IPv6
forwardingを有効にする 2. LIVA ZのLinuxでip routingの設定を⾏う 1. sudo /sbin/sysctl -w net.ipv4.ip_forward=1 2. sudo /sbin/sysctl -w net.ipv6.conf.all.forwarding=1 3. 各NICの下にGigabit NICを持ったPCを接続する 4. 各PCに静的ルーティング設定する 1. Mac: sudo route add -net 192.168.2.0/24 192.168.1.1 2. Mac: sudo route add -inet6 2001:db8:dead:cafe::/64 2001:db8:dead:beaf::1 3. VyOS: set protocols static route 192.168.1.0/24 next-hop 192.168.2.1 4. VyOS: set protocols static route6 2001:db8:dead:beaf::/64 next-hop 2001:db8:dead:cafe::1 5. ⽚⽅のPCでiperf server,もう⽚⽅でiperf clientを起動する 6. 60秒間のスループットを計測する 2020/6/6 23
LIVA Z パケットフォワードのスループット計測 enp1s0 enp3s0 PC PC 2020/6/6 24 192.168.1.1
2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 192.168.2.1 2001:db8:dead:cafe::1 192.168.2.2 2001:db8:dead:cafe::2 ※ IPv4は/24, IPv6は/64
LIVA Z パケットフォワードのスループット計測 enp1s0 enp3s0 PC PC 2020/6/6 25 192.168.1.1
2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 192.168.2.1 2001:db8:dead:cafe::1 192.168.2.2 2001:db8:dead:cafe::2 ※ IPv4は/24, IPv6は/64
パケットフォワードのスループット 2020/6/6 26 0 100 200 300 400 500 600
700 800 900 1000 IPv4 IPv6 Mbps forward br0 enp1s0
ipip6 tunnel利⽤時のスループット調査 • ⽬的 • ipip6 tunnel利⽤時のスループットを計測する • (DS-Lite利⽤時の最⼤スループットの確認⽤) •
確認⼿順 1. 対向VyOSでipip6トンネルを設定する 2. LIVA Zのlinuxでipip6トンネルを設定する 3. 対向VyOSでiperf server,PCでiperf clientを起動する 4. 60秒間のスループットを計測する 2020/6/6 27
LIVA Z ipip6 tunnel利⽤時のスループット調査 enp1s0 enp3s0 PC VyOS (ipip6 remote)
2020/6/6 28 2001:db8:dead:beaf::2 192.168.1.2 ※ IPv4は/24, IPv6は/64 ipip6 local 192.168.2.1 2001:db8:dead:beaf::1 192.168.1.1
LIVA Z ipip6 tunnel利⽤時のスループット調査 enp1s0 enp3s0 PC VyOS (ipip6 remote)
2020/6/6 29 2001:db8:dead:beaf::2 192.168.1.2 ※ IPv4は/24, IPv6は/64 ipip6 local 192.168.2.1 2001:db8:dead:beaf::1 192.168.1.1
ipip6 tunnel利⽤時のスループット調査 2020/6/6 30 0 100 200 300 400 500
600 700 800 900 1000 IPv4 IPv6 Mbps ipip6 forward br0 enp1s0
物理マシンスループット調査まとめ • 各ポート概ね1Gbpsの速度が でている • bridge, forward等してもさほ どスループット差はない • ipip6トンネルも900Mbps以上
出ている 2020/6/6 31 0 100 200 300 400 500 600 700 800 900 1000 IPv4 IPv6 Mbps ipip6 forward br0 enp1s0
仮想マシンのスループット 調査 2020/6/6 32
VM性能調査 • VMの性能限界を調査する • VMまでのスループット調査 • ブリッジ時のスループット調査 • パケットフォワード時のスループット調査 •
ipip6 tunnel利⽤時のスループット調査 2020/6/6 33
VMまでのスループット調査 • ⽬的 • VMまでのスループットを測る • 物理NICとの差を調べる • 確認⼿順 1.
LIVA Zのenp1s0をbr0に所属させる 2. LIVA Z上にkvmでVyOSのVMを建てる 1. NICはbr0に接続 3. 各NICの下にGigabit NICを持ったPCを接続する 4. iperfで60秒間のスループットを測る 2020/6/6 34
なぜブリッジを使うか • スループットはmacvtapのほうが良くなる • 代わりに様々な問題を引いた • 引いた問題については後述 2020/6/6 35
LIVA Z VMまでのスループット調査 enp1s0 PC 2020/6/6 37 VyOS iperf server
192.168.1.1 192.168.1.2 vnet0 eth0 br0 ※ IPv4は/24, IPv6は/64
LIVA Z VMまでのスループット調査 enp1s0 PC 2020/6/6 38 VyOS iperf server
192.168.1.1 192.168.1.2 ※ IPv4は/24, IPv6は/64 vnet0 eth0 br0
VMまでのスループット調査結果 2020/6/6 39 0 100 200 300 400 500 600
700 800 900 1000 IPv4(Mbps) Mbps host nic vm nic
VMでのbridgeスループット調査 • ⽬的 • VM上でのbridgeスループットを調べる • 確認⼿順 1. LIVA Z上にkvmでVyOSのVMを建てる
1. NICはbridgeに接続 2. trustGuestRxFiltersをyesにする 2. VyOSでbridgeをつくる 3. 各NICの下にGigabit NICを持ったPCを接続する 4. iperfで60秒間のスループットを測る 2020/6/6 40
LIVA Z VyOS VMでのbridgeスループット調査 enp1s0 enp3s0 vnet0 vnet1 PC PC
eth0 eth1 2020/6/6 41 br2 192.168.1.1 2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 192.168.1.3 br0 br1 2001:db8:dead:beaf::3
LIVA Z VyOS VMでのbridgeスループット調査 enp1s0 enp3s0 vnet0 vnet1 PC PC
eth0 eth1 2020/6/6 42 br2 192.168.1.1 2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 192.168.1.3 br0 br1 2001:db8:dead:beaf::3
VMでのbridgeスループット調査 2020/6/6 43 0 100 200 300 400 500 600
700 800 900 1000 IPv4(Mbps) IPv6(Mbps) Mbps host bridge vm bridge
VMでのパケットフォワード調査 • ⽬的 • VM上でのパケットフォワードのスループットを調べる • 確認⼿順 1. LIVA Z上にkvmでVyOSのVMを建てる
1. NICはbridge接続 2. VyOSでeth0とeth1にパケットフォワード設定する 3. 各PCに静的ルーティング設定する 1. Mac: sudo route add -net 192.168.2.0/24 192.168.1.1 2. Mac: sudo route add -inet6 2001:db8:dead:cafe::/64 2001:db8:dead:beaf::1 3. VyOS: set protocols static route 192.168.1.0/24 next-hop 192.168.2.1 4. VyOS: set protocols static route6 2001:db8:dead:beaf::/64 next-hop 2001:db8:dead:cafe::1 4. 各NICの下にGigabit NICを持ったPCを接続する 5. iperfで60秒間のスループットを測る 2020/6/6 44
LIVA Z VyOS VMでのパケットフォワード調査 enp1s0 enp3s0 vnet0 vnet1 PC PC
eth0 eth1 2020/6/6 45 192.168.1.1 192.168.1.2 2001:db8:dead:beaf::2 192.168.2.2 br0 br1 2001:db8:dead:cafe::2 2001:db8:dead:beaf::1 192.168.2.1 2001:db8:dead:cafe::1
LIVA Z VyOS VMでのパケットフォワード調査 enp1s0 enp3s0 vnet0 vnet1 PC PC
eth0 eth1 2020/6/6 46 192.168.1.1 192.168.1.2 2001:db8:dead:beaf::2 192.168.2.2 br0 br1 2001:db8:dead:cafe::2 2001:db8:dead:beaf::1 192.168.2.1 2001:db8:dead:cafe::1
VMでのパケットフォワード調査結果 2020/6/6 47 0 100 200 300 400 500 600
700 800 900 1000 host forward vm forward Mbps IPv4
ipip6 tunnel利⽤時のスループット調査 • ⽬的 • VMでのipip6 tunnel利⽤時のブリッジ性能を計測する • (DS-Lite利⽤時の最⼤スループットの確認⽤) •
確認⼿順 1. 対向VyOSでipip6トンネルを設定する 2. VMのVyOSでipip6トンネルを設定する 3. 対向VyOSでiperf server,PCでiperf clientを起動する 4. 60秒間のスループットを計測する 2020/6/6 48
LIVA Z VyOS VMでのパケットフォワード調査 enp1s0 enp3s0 vnet0 vnet1 PC VyOS
eth0 eth1 2020/6/6 49 192.168.1.1 192.168.1.2 192.168.2.1 br0 br1 2001:db8:dead:beaf::2 2001:db8:dead:beaf::1
LIVA Z VyOS VMでのパケットフォワード調査 enp1s0 enp3s0 vnet0 vnet1 PC VyOS
eth0 eth1 2020/6/6 50 192.168.1.1 192.168.1.2 192.168.2.1 br0 br1 2001:db8:dead:beaf::2 2001:db8:dead:beaf::1
ipip6 tunnel利⽤時のスループット調査 2020/6/6 51 0 100 200 300 400 500
600 700 800 900 1000 host ipip6 vm ipip6 Mbps IPv4 ipip6
仮想マシンスループット調査結果まとめ 2020/6/6 52 0 100 200 300 400 500 600
700 800 900 1000 IPv4(Mbps) IPv6(Mbps) Mbps vm nic vm bridge vm forward vm ipip6
今回の結論 • ルーターを仮想マシンで作るのは難しい • 物理マシンに直接インストールして作ろう 2020/6/6 53
謎現象。解決⽅法募集中。 2020/6/6 54
謎現象 • macvtapで接続すると様々な謎現象が起こる • IPv6の疎通だけが取れない • ⽚側からはVMに疎通が取れるが、もう⽚側からは取れない • ⽚側だけarpがhostマシン側で落とされてる様⼦ •
IPv6通信が途中で途切れる • bridgeでもIPv6はうまく動かないことがある • VMでbridgeを作ると、途中まで確⽴していたneighborがFAILDになる 2020/6/6 55
LIVA Z IPv6の疎通が取れなくなる enp1s0 PC 2020/6/6 56 VyOS iperf server
192.168.1.1 2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 ※ IPv4は/24, IPv6は/64 vnet0 eth0
LIVA Z VyOS PC1からはVMに疎通が取れるが、 PC2からはVMに疎通が取れない enp1s0 enp3s0 vnet0 vnet1 PC1
PC2 eth0 .100 eth1 .200 2020/6/6 57 vlan 100 vlan 200 br0 192.168.1.1 2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 192.168.1.3 2001:db8:dead:beaf::3
LIVA Z VyOS IPv6通信が途中で疎通が取れなくなる enp1s0 enp3s0 vnet0 vnet1 PC VyOS
eth0 eth1 2020/6/6 58 192.168.1.1 192.168.1.2 2001:db8:dead:beaf::1 2001:db8:dead:beaf::2 192.168.2.1
発表後検証 2020/6/6 59
VMまでの双⽅向スループット調査 • ⽬的 • VMまでのスループットを測る • 物理NICとの差を調べる • 確認⼿順 1.
LIVA Zのenp1s0をbr0に所属させる 2. LIVA Z上にkvmでVyOSのVMを建てる 1. NICはbr0に接続 3. NICの下にGigabit NICを持ったPCを接続する 4. iperfで60秒間のスループットを双⽅向に測る 2020/6/6 60
LIVA Z VMまでの双⽅向スループット調査 enp1s0 PC 2020/6/6 61 VyOS iperf server
192.168.1.1 192.168.1.2 vnet0 eth0 br0 ※ IPv4は/24, IPv6は/64 2001:db8:dead:beaf::2 2001:db8:dead:beaf::1
LIVA Z VMまでの双⽅向スループット調査 enp1s0 PC 2020/6/6 62 VyOS iperf server
192.168.1.1 192.168.1.2 ※ IPv4は/24, IPv6は/64 vnet0 eth0 br0 2001:db8:dead:beaf::2 2001:db8:dead:beaf::1
VMまでのスループット調査結果 2020/6/6 63 0 100 200 300 400 500 600
700 800 900 1000 IPv4 IPv6 Mbps 双⽅向スループット thinkpad -> VM VyOS VM VyOS -> thinkpad