告訴 Linux 核心不使用某些 CPU
我正在嘗試在多核機器上執行一些基準測試,並且我想告訴 Linux 核心簡單地避免使用某些核心*,除非*明確告知要使用它們。
這個想法是我可以留出少數核心(機器有 6 個物理核心)用於基準測試,並使用 cpu 遮罩只允許對給定核心進行基準測試。
這可行嗎?
isolcpus
您可以使用參數將一些 cpu 核心與核心調度隔離開來。將此參數添加到您的 grub.conf 並重新啟動以生效。
您需要一些處理器親和性(或CPU 親和性)。
相關的系統呼叫是sched_setaffinity(2) ,但如果你想為此編寫基準程式碼,你應該通過pthread_set_affinity_np(3)使用它。
相關的命令是taskset(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
…)。可能有一些方法可以配置(可能在核心編譯時,或者通過 Grub 載入程序將特定參數傳遞給核心)您的 Linux 核心以限制可用核心的數量。
當然,在對某些程序進行基準測試時(例如在桌面 Linux PC 上),最好注意避免有許多外部執行程序(使用
ps auxw
,pstree -p
,top
來查找這些程序)。至少,關閉並退出大多數互動式應用程序(firefox 等瀏覽器、電子郵件、編輯器、Eclipse 等 IDE)並只保留少數終端進行基準測試。您甚至可以在未登錄的情況下以批處理模式進行基準測試(使用batch
或at
執行基準測試)(因此沒有任何 GUI 會話 à la Gnome或KDE或Xfce等…執行)。