我isolcpus只为内核任务分配总 CPU 核心的子集。这意味着我可以将提醒用于其他任务。我注意到当我从 go 运行测试/基准测试工具时,所有内核处理器都被使用(使用 htop)。但是,当我使用 时taskset -c 3-10 go test -bench .,只有一个 CPU 核心显示正在运行该命令。我预计工作负载会分配到核心 3-10。有可能实现这一目标吗?
更新:感谢 @JimB 的建议:我正在为内核核心保留的 cpu 核心上运行以下 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)
} …Run Code Online (Sandbox Code Playgroud) I am looking into to moving my multi-threaded python script to locust.
A simple explanation of what my script does is:
When i started looking into locust, I have noticed that the only way to perform each task at its own specific interval, I would need to create a taskset per task.
This brought …
我知道在 python 中获取核心数的标准方法是使用multiprocess.cpu_count
import multiprocessing
print(multiprocessing.cpu_count())
Run Code Online (Sandbox Code Playgroud)
此外,在创建任务时,我们可以使用taskset指定进程可以访问的一些核心。
显然cpu_count,总是获取机器的可用核心数量,无论该进程是否被限制为仅使用其中一些核心。
python nproc.py
taskset 7 python nproc.py
taskset 1 python nproc.py
Run Code Online (Sandbox Code Playgroud)
另一方面,nproc给出了该进程可用的核心数量。
taskset 7 nproc # gives at most 3
taskset 1 nproc # gives 1
Run Code Online (Sandbox Code Playgroud)
我知道我可以调用nproc或taskset -p {os.getpid()}来获取正确的核心数量。有没有另一种方法可以做到这一点,而不依赖其他程序(阅读
/proc/{os.pid()}/*可能是一个解决方案)。
谢谢
我使用任务集将进程固定到特定核心,但还有其他进程共享该核心。是否可以知道哪些进程明确共享哪些核心?例如,获取诸如“核心 0 上运行着进程 1、202、4043 等”之类的信息。