我正在使用isolcpus
仅为内核任务分配总 CPU 内核的子集。这意味着我可以将提醒用于其他任务。我注意到当我从 go 运行测试/基准测试工具时,所有内核处理器都被使用(使用 htop)。但是,当我使用 时taskset -c 3-10 go test -bench .
,只有一个 CPU 内核显示正在运行该命令。我期望将工作负载分配到核心 3-10。有可能实现这一目标吗?
更新:感谢@JimB 的建议:我正在为内核内核保留的 cpus 内核上运行以下 golang 代码,taskset
并且工作正常。但是当在这些核心之外进行调度时,只使用一个 cpu 核心,而不是taskset
.
package main
import (
"fmt"
"golang.org/x/sys/unix"
"testing"
"time"
)
func TestSchedSetaffinity(t *testing.T) {
var newMask unix.CPUSet
newMask.Set(0)
err := unix.SchedSetaffinity(0, &newMask)
if err != nil {
fmt.Printf("SchedSetaffinity: %v", err)
}
for i := 0; i < 50; i++ {
fmt.Println("Hello world")
time.Sleep(2 * time.Second)
}
}