• 各測定時の条件
    • ホスト上でアプリケーションを実行する(baseline)
    • afw を接続し、すべての通信を許可する
    • afw を接続し、パケットをユーザ空間に毎回転送する
    • afw を接続し、パケットをユーザ空間に毎回転送する(遅延解析も行う)


1core iperf3 with azuma1

  • host 上で実行
    • 931 Mbps, Retr 0(receiver 側)
    • CPU 使用率 56 %
  • 全部許可
    • 829 Mbps, Retr 0(receiver 側)
    • CPU 使用率 100 %
  • 転送のみ
    • 138 Mbps, Retr 132(receiver 側)
      • Retr は TCP retransmission が発生した回数のこと
      • ringbuf がいっぱいになったときに発生する
    • CPU 使用率 100 %
  • 遅延解析(SimpleAnalyzer
    • 108 Mbps, Retr 363(receiver 側)
    • CPU 使用率 100 %
    • TCP のペイロードから “abc” のパターンを探す解析器

 

1core ping with azuma1

-f -i 0.001 -c 10000
  • host 上で実行
  • rtt min/avg/max/mdev = 0.128/0.174/1.321/0.028 ms, ipg/ewma 1.397/0.163 ms
  • 全部許可
    • rtt min/avg/max/mdev = 0.150/0.197/0.355/0.014 ms, ipg/ewma 1.444/0.234 ms
  • 転送のみ
    • rtt min/avg/max/mdev = 0.159/0.203/0.411/0.016 ms, ipg/ewma 1.394/0.016 ms
  • 遅延解析(SimpleAnalyzer
    • rtt min/avg/max/mdev = 0.157/0.215/1.891/0.027 ms, ipg/ewma 1.385/0.197 ms


メモリ使用量計測

RUST_BACKTRACE=1 sudo /usr/bin/time -v ./target/release/ebpf-afw-tui --interface br-munw --packet-direction-inverted

  • 前提
    • コンテナのメモリ使用量は docker container stats で得られたコンテナの MEM USAGE を掲載している。
    • RSS(Resident Set Size)を計測して下記に掲載している。
  • iperf3 を動作させているときのメモリ使用量を計測する
  • コンテナ(baseline)
    • 820 KiB
  • アプリケーションレベル・ファイアウォール(Allow)
    • 39120 kbytes
  • コンテナ(Allow)
    • 912 KiB
  • アプリケーションレベル・ファイアウォール(Analyzed)
    • 39508 kbytes
  • コンテナ(Analyzed)
    • 912 KiB


ブラウザ動作

docker compose run -e XDG_RUNTIME_DIR=/tmp \
           -e WAYLAND_DISPLAY=wayland-0 \
           -e SSLKEYLOGFILE=/tmp/keys/key.log \
           -v $XDG_RUNTIME_DIR/wayland-0:/tmp/wayland-0 \
           --user=$(id -u):$(id -g) \
           firefox firefox-esr


about:config で設定する事項

keyvalue
security.tls.version.fallback-limit3
security.tls.version.max3
network.http.http2.enabledfalse

  • https://www.softlab.cs.tsukuba.ac.jp/alumni.html
    • host 上で実行
      • Finish: 3.50 seconds
      • NaN kbytes
    • 全部許可
      • Finish: 4.68 seconds
      • 39124 kbytes
    • 転送のみ
      • Finish: 6.49 seconds
      • 39124 kbytes
        • unnecessarily buffered だったので即時破棄するように
    • 復号しながら遅延解析(TlsHttpAnalyzer
      • Finish: 6.83 seconds
      • 39380 kbytes
  • 勢いよく HTTP/1.1 over TLS 1.2 な通信を流してあげると rustls あたりのログが流れたタイミングでデッドロックが起きているのかアプリケーションレベル・ファイアウォールが停止する(?)
    • 1 CPU に絞るとすぐにこれが発生するので直す必要あり





1core iperf3 with azuma1

  • × 遅延解析(HttpAnalyzer
    • 931 Mbps(receiver 側)
    • CPU 使用率 63 %
      • HttpAnalyzer だと実際のところは解析を途中でやめている。各 TCP セグメントに含まれるパースに失敗している時点でそこまで処理が進められていなさそうなので SimpleAnalyzer を実装し、TCP ペイロードに対して単純に Aho-Corasick 法でマッチさせるような解析器を作成する��する