首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么系统-n产卵比码头,播客和qemu慢?!如何提高下一代的性能?

为什么系统-n产卵比码头,播客和qemu慢?!如何提高下一代的性能?
EN

Unix & Linux用户
提问于 2021-01-25 09:54:21
回答 1查看 2.9K关注 0票数 4

为什么nspawndocker podman甚至qemu慢呢?!CPU任务所需时间是停靠、podman或qemu所需时间的两倍。

下面是我做过的一个基准测试:

首先,我使用以下方法禁用了主机内核( qemu基准测试中的qemu来宾内核)中的所有频谱/熔毁缓解措施:

代码语言:javascript
复制
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

then我使用了这个基准测试:

代码语言:javascript
复制
git clone https://github.com/tsuna/contextswitch
cd contextswitch
time make

我用超级全权限测试了nspawn

代码语言:javascript
复制
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

代码语言:javascript
复制
podman run --rm -it --privileged debian:10 bash

我也用特权测试了docker

代码语言:javascript
复制
docker run --rm -it  --privileged  debian:10 bash

我用以下方法测试了qemu

代码语言:javascript
复制
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

以下是研究结果:

代码语言:javascript
复制
# 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

你知道为什么系统-n产卵速度慢吗?我该如何改进呢?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-01-28 13:50:25

性能方面的问题是,我认为用--system-call-filter白化syscalls en with将提高性能,但是正如他们在systemd 邮件列表中解释的那样,我应该使用export SYSTEMD_SECCOMP=0,因为nspawn在白名单中仍然会处理syscalls。

SYSTEMD_SECCOMP是在systemd v247中添加的(debian有v241,后端存储库有v247)。

因此,要像裸金属主机一样快速地进行产卵:

代码语言:javascript
复制
export SYSTEMD_SECCOMP=0
systemd-nspawn --capability=all -D ./bbusterboot --boot

这相当于docker/podman中的--system-call-filter,如果我们使用SYSTEMD_SECCOMP,则不需要使用D7

当然,这对安全性不好,所以只在安全的环境中运行受信任的代码。

如果您想要最大的性能,这将增加性能的裸金属,nspawn,码头,podman或任何您正在使用,然后禁用所有幽灵/熔毁缓解,正如我在上面的问题(但这也不利于安全,如果你运行不受信任的代码,例如,广告的浏览器)。

有关更多详细信息,请阅读以下内容:https://github.com/systemd/systemd/issues/18370

票数 6
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/630859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档