TC アタッチするとき skb の大きさいじれないかなあ(そもそも一部分だけ舐められるように指定する、など)sk_buff の読み方、おかしいかも。__sk_buff.len() は buf の長さであってパケットの長さではなさそう?iperf3 は Retr を setsockopt で見ていたbridge interface は gro, tso などを切っても MTU 65536 でパケットをまとめてくる
Docker は内部で netns 切ってた気がするから、そこにアタッチされた veth で tso 切ればいいんではないか
container 内部から切れないhttps://qiita.com/sugimount/items/5c92c4976f9949650403
ip a で veth name 得て
ethtool -
netns をもってきて veth の tso を切れば本来のパケット単位で TC classifier を動かすことができたが、今度は userspace 側から読む部分で律速していそうSimpleAnalyzer は eBPF 側でどのようにペイロード読ませてもいい感じに読めてしまっている。eBPF 側では ctx.len() だけパケットを読まないとやはりダメっぽい(TLS 1.2 の復号がしくるようになった)。つまり、現状の実装はちゃんとしている。結局のところ、転送の箇所で律速するという結論になりそう。並列性を高めたときも同様。実は、暗号通信の復号自体にはそこまで大きなレイテンシは関わってこない。
up_rx, up_tx は消し去ることが可能で、さらに
eBPF memory usage
$ sudo bpftool map show528: ringbuf name UNKNOWN_PACKETS flags 0x0
key 0B value 0B max_entries 1048576 memlock 1065304B
pids ebpf-afw-tui(90261)
531: hash name V4_RULE_MAP flags 0x0
key 16B value 4B max_entries 1024 memlock 91840B
pids ebpf-afw-tui(90261)
$ sudo bpftool prog show683: sched_cls name ebpf_afw_in tag 5558b060b5fa3c5a gpl run_time_ns 1046607047 run_cnt 808320
loaded_at 2024-01-26T19:13:42+0900 uid 0
xlated 7384B jited 4216B memlock 8192B map_ids 531,528,529,532,527
pids ebpf-afw-tui(90261)
684: sched_cls name ebpf_afw_e tag aba97564b994c0a9 gpl run_time_ns 94870145 run_cnt 45373
loaded_at 2024-01-26T19:13:42+0900 uid 0
xlated 7384B jited 4222B memlock 8192B map_ids 531,528,529,532,527
pids ebpf-afw-tui(90261)
最終
iperf3- Host, 1 CPU (virtually)
- Host, 1 CPU
- Host, 8 CPUs
- Allowed, 1 CPU (virtually)
- Allowed, 1 CPU
- Allowed, 8 CPUs
- Transfer, 1 CPU (virtually)
- Transfer, 1 CPU
- Transfer, 8 CPUs
- Analyzed, 1 CPU (virtually)
- Analyzed, 1 CPU
- Analyzed, 8 CPUs
ping- Host, 8 CPUs
- rtt min/avg/max/mdev = 0.230/0.269/0.307/0.019 ms
- Allowed, 8 CPUs
- rtt min/avg/max/mdev = 0.304/0.352/0.378/0.018 ms
- Transfer, 8 CPUs
- rtt min/avg/max/mdev = 0.309/0.376/0.409/0.024 ms
- Analyzed, 8 CPUs
- rtt min/avg/max/mdev = 0.320/0.376/0.420/0.023 ms
browser https://www.softlab.cs.tsukuba.ac.jp/alumni.html- Host, 8 CPUs
- Allowed, 8 CPUs
- Transfer, 8 CPUs
- Analyzed, 8 CPUs
Outdated
As of https://git.softlab.cs.tsukuba.ac.jp/ichiki/ebpf-afw-rust/commit/55095566341fdf11c3a544a24dbcbe704eb8e924 の記録。並列性が足りていない + 無駄な MPSC チャネルがあるためパフォーマンスが低いiperf3- Host, 1 CPU (virtually)
- Host, 1 CPU
- Host, 8 CPUs
- Allowed, 1 CPU (virtually)
- Allowed, 1 CPU
- Allowed, 8 CPUs
- Transfer, 1 CPU (virtually)
- Transfer, 1 CPU
- Transfer, 8 CPUs
- Analyzed, 1 CPU (virtually)
- Analyzed, 1 CPU
- Analyzed, 8 CPUs
ping- Host, 8 CPUs
- rtt min/avg/max/mdev = 0.230/0.269/0.307/0.019 ms
- Allowed, 8 CPUs
- rtt min/avg/max/mdev = 0.316/0.374/0.429/0.029 ms
- Transfer, 8 CPUs
- rtt min/avg/max/mdev = 0.326/0.366/0.398/0.021 ms
- Analyzed, 8 CPUs
- rtt min/avg/max/mdev = 0.315/0.382/0.420/0.030 ms
browser https://www.softlab.cs.tsukuba.ac.jp/alumni.html- Host, 8 CPUs
- Allowed, 8 CPUs
- Transfer, 8 CPUs
- Analyzed, 8 CPUs