cpu affinity,只允许进程在特定的cpu上运行

时间:2015-06-07 08:34:51

标签: linux bash affinity

我想通过

将进程绑定到特定的核心#0(cpu affinity)
taskset -c 0 ./run_prog

当它自己的程序在核心#0上运行时,操作系统可能决定将其他后台和活动进程运行到核心#0。换句话说,该命令严格限制run_prog到核心#0,但不阻止其他进程在核心#0上运行,这很糟糕!

有没有办法编写一个bash脚本来首先阻止在核心#0上运行的活动进程然后运行该任务集命令?

1 个答案:

答案 0 :(得分:1)

我在对原始问题的一系列评论中对此进行了讨论,但我认为这是“根本问题的答案”而不是具体问题的具体答案,所以我们走了:

  

我已经听过几次这个问题了,而且一直存在   问出了对同时多处理的误解   作品。首先:为什么你需要在核心#0上使用你的进程?你呢   有原因吗?

     通常,Linux内核在调度任务时非常有效   处理器以最小化负面影响的方式   流程迁移或单核瓶颈会带来。事实上,   很难看到有人通过手动获得性能   设置亲和力,这通常只发生在用户地区   进程与内核模块紧密通信,对于某些人而言   硬件或实现原因本质上是单线程的   不能轻易迁移。

     

你的问题本身就表现出一种轻微的误解:亲和力意味着   内核知道它应该安排该进程   给定核心。因此,其他进程将自动迁移出去   从那个核心开始,如果你想要的任务离开,那么只能在那里运行   很多核心未使用。要更改您的流程所具有的“优先级”   CPU分配,只需更改其良好的值。

     
    

原因是通过隔离正在运行的过程进行性能测量。关于第二条评论,这意味着我们必须依赖操作系统     调度程序,因为它不会在核心上运行后台进程     当空闲核心时,目前100%使用。

  
     

您所测量的不是该过程的表现   孤立地,但过程,绑定到一个CPU!为一个   单线程进程没问题,但想象一下你的进程可能会   有多个线程 - 这些线程通常都运行在不同的线程上   核心和整体性能会更高。一般来说,试试   只需最小化机器上的非流程工作负载(即无需运行)   一个窗口管理器/会话管理器运行,停止所有非必要的   服务)并使用一个非常小的好价值 - 测量可能是   比较精确。

     

此外,time命令可让您知道进程的时间   完全花费(包括等待),占用CPU作为用户空间进程,   并在系统调用中占用CPU - 我认为这可能符合您的需求   够了:))