我正在尝试在多核机器上运行一些基准测试,我想告诉 Linux 内核简单地避免某些核心除非明确告知要使用它们。
我的想法是,我可以留出一些核心(机器有 6 个物理核心)用于基准测试,并使用 cpu 掩码仅允许对给定核心进行基准测试进程。
这可行吗?
答案1
您可以使用isolcpus
参数将某些 cpu 核心与内核调度隔离。将此参数添加到 grub.conf 中并重新启动即可生效。
答案2
你想要一些吗处理器亲和力(或者CPU 亲和性)。
相关的系统调用是sched_setaffinity(2),但你应该通过使用它pthread_set_affinity_np(3)如果你想为此编写你的基准。
相关命令是任务集(1)您可以在要进行基准测试的命令(或您的 shell 上)上使用它。
如果可能,请注意机器不会因与基准测试无关的其他任务而承受大量负载。
或者,使用一些管理程序喜欢Xen,并将 Linux 作为该虚拟机管理程序的来宾操作系统启动。然后配置xen
为仅使用一些受限制的CPU核心集(我不知道确切的细节,你需要找出来)。在 Debian(及相关)发行版上,您可能会安装诸如xen-linux-system-amd64
、xen-hypervisor-amd64
等软件包xen-utils
(我在 Debian/Sid xen-hypervisor-4.5-amd64
、xen-linux-system-4.0.0-1-amd64
等上使用xen-utils-4.5
)。
也许有某种方法可以配置您的 Linux 内核(可能在内核编译时,或者通过 Grub 加载程序将特定参数传递给内核)来限制可用内核的数量。
当然,在对某些程序(例如在桌面 Linux PC 上)进行基准测试时,最好注意避免有许多外部正在运行的进程(使用ps auxw
、pstree -p
、top
来查找这些进程)。至少,关闭并退出大多数交互式应用程序(Firefox 等浏览器、电子邮件、编辑器、Eclipse 等 IDE)并仅保留少量终端进行基准测试。您甚至可以在未登录的情况下以批处理模式进行基准测试(使用batch
或运行基准测试)(因此没有任何 GUI 会话)at
侏儒或者凯德或者Xfce等...运行)。