如何在Go语言中设置CPU亲和性

mspsb9vt  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(402)

我使用isolcpus将CPU内核总数的一部分分配给内核任务。这意味着我可以将提醒用于其他任务。我注意到当我从go运行测试/基准测试工具时,所有内核处理器都被使用了(使用htop)。但是,当我使用taskset -c 3-10 go test -bench .时,只有一个CPU内核显示正在运行该命令。我希望将工作负载分配到内核3-10。是否可以实现这一点?

更新:感谢@JimB的建议:我正在为使用taskset的内核保留的cpu内核上运行下面的golang代码,运行得很好,但是当在这些内核之外调度时,只使用了一个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)
    }
}
ut6juiuv

ut6juiuv1#

isolcpus不能很好地与tasksetgo配合使用。要利用所有分配的cpu内核,您需要使用chrt
例如:
taskset -c 3-10 chrt 1 ./my_go_workload_binary
假设isolcpus集合中的cpu核心3-10。

相关问题