CPU亲和力
1、taskset:retrieve or set a processes's CPU affinity
1)CPU親和力是一種調(diào)度特性,它將一個(gè)進(jìn)程“綁定”到某個(gè)CPU集合上。當(dāng)然,調(diào)度程序也支持天然的CPU親和力,這意味著進(jìn)程通常不會(huì)在CPU之間頻繁遷移。
CPU親和力可用位掩碼表示,如0x3表示CPU 0和CPU 1。缺省時(shí)進(jìn)程的掩碼位全為1。
fork出來的子進(jìn)程繼承父進(jìn)程的CPU親和力掩碼,調(diào)用execve之后進(jìn)程保留原本的掩碼。
2)選項(xiàng):-p:指定PID;-c:指定CPU集合,如0,5,7,9-11。
3)示例:
設(shè)置PID為14035的進(jìn)程的親和力掩碼:taskset -p 03 14035
查看PID為14035的進(jìn)程的CPU親和力掩碼:taskset -p 14035
以指定親和力掩碼啟動(dòng)sshd命令:taskset 03 sshd -b 1024
查看某個(gè)watchdog進(jìn)程運(yùn)行在哪個(gè)CPU上:
$ ps aux|grep watchdog | grep -v grep root 6 0.0 0.0 0 0 ? S Jul03 0:01 [watchdog/0] ... ... root 50 0.0 0.0 0 0 ? S Jul03 0:00 [watchdog/11] root 54 0.0 0.0 0 0 ? S Jul03 0:00 [watchdog/12] root 58 0.0 0.0 0 0 ? S Jul03 0:00 [watchdog/13] root 62 0.0 0.0 0 0 ? S Jul03 0:00 [watchdog/14] root 66 0.0 0.0 0 0 ? S Jul03 0:01 [watchdog/15] $ taskset -c -p 50 pid 50's current affinity list: 114)使用CPU親和力的幾個(gè)原因:綁定到一個(gè)特定CPU有利于提高CPU緩存的命中率;可根據(jù)需要給進(jìn)程專門指定一個(gè)或多個(gè)CPU;改變進(jìn)程的親和力掩碼,測(cè)試復(fù)雜應(yīng)用程序在不同硬件條件下的表現(xiàn)等。
?
2、sched_setaffinity和sched_getaffinity
// 設(shè)置和獲取進(jìn)/線程的CPU親和力掩碼。這兩個(gè)系統(tǒng)調(diào)用是Linux特有的 int sched_setaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask); int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);// 如果使用的是POSIX線程的API,則用以下兩個(gè)函數(shù) int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize, const cpu_set_t *cpuset); int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize, cpu_set_t *cpuset);四個(gè)操作親和力掩碼(cpu_set_t,CPU集合)的宏:CPU_ZERO:清空集合;CPU_CLR:把一個(gè)CPU從集合中移除;CPU_SET:把一個(gè)CPU加入到集合;CPU_ISSET:測(cè)試一個(gè)CPU是否在集合中。
常量CPU_SETSIZE指出CPU集合中最多能存放的最大CPU數(shù)加1。
獲取CPU個(gè)數(shù):int num = sysconf(_SC_NPROCESSORS_CONF);
?
?
不斷學(xué)習(xí)中。。。
轉(zhuǎn)載于:https://www.cnblogs.com/hanerfan/p/3585632.html
總結(jié)
- 上一篇: 维基百科上—数据仓库、数据挖掘、OLAP
- 下一篇: 全局阈值算法分析