給進程分配cpu核心


新負責的程序采用生產者和消費者的模式,生產者的速度非常快,數據幾乎都在內存里,處理起來很快。而消費者要頻繁的I/O。所以打算給生產者和消費者分配不一樣的核心。

生產者只需要一個核心就夠了,其余分配給消費者。

查了下這方面的資料,shell端有taskset命令可用。

taskset:

-p 正在運行的進程pid

-c 列表形式顯示指定cpu

-v version

-h help

 

用法:i.e.

# taskset -cp 1,2,3 4321

# taskset -c 1,2,3-5 /usr/bin/XXX

 

linux提供了兩個函數

  • sched_set_affinity() (用來修改位掩碼)
  • sched_get_affinity() (用來查看當前的位掩碼)

cpu_affinity 會被傳遞給子線程,因此應該適當地調用 sched_set_affinity

每個核心對應一位掩碼,相應位設為1

 

為每個線程設置 CPU 親和性(affinity)

  cpu_set_t mask;
   /* CPU_ZERO initializes all the bits in the mask to zero. */
        CPU_ZERO( &mask );
   /* CPU_SET sets only the bit corresponding to cpu. */
        CPU_SET( created_thread, &mask );
   /* sched_setaffinity returns 0 in success */
        if( sched_setaffinity( 0, sizeof(mask), &mask ) == -1 )
   {
      printf("WARNING: Could not set CPU Affinity, continuing...\n");
   }

獲取系統處理器數量

int NUM_PROCS = sysconf(_SC_NPROCESSORS_CONF);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM