systemd-nspawnがdocker、podman、およびqemuよりも遅いのはなぜですか? ! nspawnのパフォーマンスを向上させる方法は?

systemd-nspawnがdocker、podman、およびqemuよりも遅いのはなぜですか? ! nspawnのパフォーマンスを向上させる方法は?

なぜ遅くて遅いのですnspawnか? ! CPU 操作は docker、podman、または qemu より 2 倍長くなります。docker podmanqemu

私が行ったベンチマークは次のとおりです。

まず、次のコマンドを使用して、ホストカーネル(およびqemuベンチマークのqemuゲストカーネル)ですべてのスペクター/メルトダウン軽減を無効にしました。

GRUB_CMDLINE_LINUX_DEFAULT=noibrs noibpb nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off tsx=on tsx_async_abort=off mitigations=off spectre_v2_user=off spec_store_bypass_disable=off nx_huge_pages=off kvm.nx_huge_pages=off kvm-intel.vmentry_l1d_flush=never srbds=off

その後、このベンチマークを使用しました。

git clone https://github.com/tsuna/contextswitch
cd contextswitch
time make

私はnspawnスーパーフル権限でテストしました。

export SYSTEMD_NSPAWN_USE_CGNS=0
systemd-nspawn  --keep-unit --register=no --boot --capability=all --private-users=false --system-call-filter="@default @aio @basic-io @chown @clock @cpu-emulation @debug @file-system @io-event @ipc @keyring @memlock @module @mount @network-io @obsolete @privileged @process @raw-io @reboot @resources @setuid @signal @swap @sync @system-service @timer" --bind=/sys/fs/cgroup  --machine=testtt -D busterdir

また、次の権限でテストしましたpodman

podman run --rm -it --privileged debian:10 bash

また、次の権限でテストしましたdocker

docker run --rm -it  --privileged  debian:10 bash

私はテストしましたqemu

qemu-system-x86_64 -name buster20210121210102 -m 2G -enable-kvm -cpu host -smp cores=4,threads=2,sockets=1 -object iothread,id=myio1 -device virtio-blk-pci,drive=mydisk0,iothread=myio1 -drive file=buster20210121210102.qcow2,if=none,id=mydisk0,format=qcow2,aio=native,cache=none

結果は次のとおりです。

# baremetal
real    0m12.998s

# nspawn
real    0m30.777s  <==== :(

# docker
real    0m15.127s

#podman
real    0m15.207s

# qemu without mitigations
real    0m15.979s

ここでは、テスト全体の結果としてnspawnのパフォーマンスを向上させるように要求しました。 https://github.com/systemd/systemd/issues/18370

systemd-nspawnがなぜ遅いのか知っていますか?どのように改善できますか?

ベストアンサー1

パフォーマンスの問題は、nspawnのシステムコールをホワイトリストに追加すると--system-call-filterパフォーマンスが向上すると思われたためです。しかし、systemdで説明したように、郵便リストを使用する必要があります。export SYSTEMD_SECCOMP=0これは、nspawnがホワイトリストに登録したときにシステムコールを処理し続けるためです。

SYSTEMD_SECCOMPsystemd v247に追加されました(debian Busterにはv241がありますが、バックポートストアにはv247があります)。

したがって、nspawnをベアメタルコンソールと同じくらい速くするには:

export SYSTEMD_SECCOMP=0
systemd-nspawn --capability=all -D ./bbusterboot --boot

これはinと同じで、--privileged使用される場合はdocker/podman必要ありません。--system-call-filterSYSTEMD_SECCOMP

もちろん、これはセキュリティには悪いので、信頼できるコードを実行するときは安全な環境でのみ実行してください。

baremetal、nspawn、docker、podman、または使用中のすべてのアイテムのパフォーマンスを向上させる最大のパフォーマンスが必要な場合は、上記の質問で説明したように、すべてのスペクター/メルトダウン軽減を無効にします(ただし、次のような場合はセキュリティには適していません)。広告を含むブラウザなど、信頼できないコードを実行している場合。


詳しくは、以下をお読みください。https://github.com/systemd/systemd/issues/18370

おすすめ記事