sched_setaffinity – 将线程&进程运行在期望的CPU核心上
CPU亲和性
是指进程或线程在运行时倾向于在某个或某些CPU核心上执行,而不是随机或频繁地在不同的核心之间切换。
CPU亲和性利用CPU缓存的局部性,减少缓存失效和进程或线程迁移的开销,避免频繁地在不同的核心之间切换,提高性能
CPU亲和性分为软亲和性
和硬亲和性
:
软亲和性
是Linux内核进程调度器的默认特性,它会尽量让进程在上次运行的CPU核心上继续运行,但不保证一定如此,因为还要考虑各个核心的负载均衡。
硬亲和性
是Linux内核提供给用户的API,它可以让用户显式地指定进程或线程可以运行在哪些CPU核心上,或者绑定到某个特定的核心上。
使用方式
man sched_setaffinity
#查找man手册
/*
sched_setaffinity():设置进程或线程的CPU亲和性掩码,表示它可以运行在哪些核心上。
sched_getaffinity():获取进程或线程的CPU亲和性掩码,表示它当前可以运行在哪些核心上。
CPU_ZERO():操作CPU亲和性掩码的宏,用于清空某个核心是否在掩码中。
CPU_SET():操作CPU亲和性掩码的宏,用于设置某个核心是否在掩码中。
CPU_CLR():操作CPU亲和性掩码的宏,用于清除某个核心是否在掩码中。
CPU_ISSET():操作CPU亲和性掩码的宏,用于检查某个核心是否在掩码中。
*/
#