sched_setaffinity

Autres langues

Langue: ja

Version: 2006-02-03 (openSuse - 09/10/07)

Section: 2 (Appels système)

̾Á°

sched_setaffinity, sched_getaffinity, CPU_CLR, CPU_ISSET, CPU_SET, CPU_ZERO - ¥×¥í¥»¥¹¤Î CPU affinity ¥Þ¥¹¥¯¤òÀßÄꡦ¼èÆÀ¤¹¤ë

½ñ¼°


#include <sched.h>



int sched_setaffinity(pid_t pid, unsigned int cpusetsize,

                      cpu_set_t *mask);



int sched_getaffinity(pid_t pid, unsigned int cpusetsize,

                      cpu_set_t *mask);



void CPU_CLR(int cpu, cpu_set_t *set);


int CPU_ISSET(int cpu, cpu_set_t *set);
void CPU_SET(int cpu, cpu_set_t *set);
void CPU_ZERO(cpu_set_t *set);

ÀâÌÀ

¥×¥í¥»¥¹¤Î CPU affinity (¿ÆÏÂÅÙ) ¥Þ¥¹¥¯¤Ï¡¢¤½¤Î¥×¥í¥»¥¹¤¬ ¼Â¹Ô¤òµö²Ä¤µ¤ì¤Æ¤¤¤ë CPU ¤Î½¸¹ç¤ò·èÄꤹ¤ë¡£ ¥Þ¥ë¥Á¥×¥í¥»¥Ã¥µ¡¦¥·¥¹¥Æ¥à¤Ç¤Ï¡¢CPU affinity ¥Þ¥¹¥¯¤òÀßÄꤹ¤ë¤³¤È¤Ç À­Ç½¾å¤Î¥á¥ê¥Ã¥È¤òÆÀ¤é¤ì¤ë²ÄǽÀ­¤¬¤¢¤ë¡£ Î㤨¤Ð¡¢ÆÃÄê¤Î¥×¥í¥»¥¹¤ò°ì¤Ä¤Î CPU ¤Ë³ç¤êÉÕ¤± (¤¹¤Ê¤ï¤Á¡¢¤½¤Î¥×¥í¥»¥¹¤Î affinity ¥Þ¥¹¥¯¤ò°ì¤Ä¤Î CPU ¤ËÀßÄꤷ)¡¢ ¾¤ÎÁ´¤Æ¤Î¥×¥í¥»¥¹¤Î affinity ¥Þ¥¹¥¯¤«¤é¤½¤Î CPU ¤ò½ü³°¤¹¤ë¤³¤È¤Ç¡¢ ³Î¼Â¤Ë¤½¤Î¥×¥í¥»¥¹¤Î¼Â¹Ô®ÅÙ¤òºÇÂç¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ ¤Þ¤¿¡¢¤¢¤ë¥×¥í¥»¥¹¤Î¼Â¹Ô¤ò°ì¤Ä¤Î CPU ¤Ë¸ÂÄꤹ¤ë¤³¤È¤Ç¡¢ °ì¤Ä¤Î CPU ¤Ç¤Î¼Â¹Ô¤òÄä»ß¤·¤Æ¤«¤éÊ̤ΠCPU ¤Ç¼Â¹Ô¤òºÆ³«¤¹¤ë¤È¤­¤ËȯÀ¸¤¹¤ë ¥­¥ã¥Ã¥·¥å̵¸ú²½ (cache invalidation) ¤Ë¤è¤ëÀ­Ç½Ì̤ÎÎô²½¤òËɤ°¤³¤È¤â¤Ç¤­¤ë¡£

CPU affinity ¥Þ¥¹¥¯¤Ï¡ÖCPU ¤Î½¸¹ç¡×¤òɽ¤¹ cpu_set_t ¹½Â¤ÂΤÇɽ¸½¤µ¤ì¡¢ cpu_set_t ¤Ø¤Î¥Ý¥¤¥ó¥¿ mask ¤Ç»ØÄꤵ¤ì¤ë¡£ CPU ½¸¹ç¤òÁàºî¤¹¤ë¤¿¤á¤Î¥Þ¥¯¥í¤¬ 4 ¼ïÎàÄ󶡤µ¤ì¤Æ¤¤¤ë¡£ CPU_ZERO() ¤Ï½¸¹ç¤ò¥¯¥ê¥¢¤¹¤ë¡£ CPU_SET() ¤È CPU_CLR() ¤Ï¤½¤ì¤¾¤ì»ØÄꤵ¤ì¤¿ CPU ¤Î½¸¹ç¤Ø¤ÎÄɲÃ/ºï½ü¤ò¹Ô¤¦¡£ CPU_ISSET() ¤Ï¤¢¤ë CPU ¤¬½¸¹ç¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¤«¤Î³Îǧ¤ò¹Ô¤¦¡£¤³¤Î¥Þ¥¯¥í¤Ï sched_getaffinity() ¤ò¸Æ¤Ó½Ð¤·¤¿¸å¤Ç»ÈÍѤ¹¤ë¤ÈÊØÍø¤Ç¤¢¤ë¡£ ¥·¥¹¥Æ¥à¾å¤Ë¤¢¤ëºÇ½é¤Î CPU ¤¬ cpu ÃÍ 0 ¤Ë¡¢¼¡¤Î CPU ¤Ï cpu ÃÍ 1 ¤ËÂбþ¤·¡¢°Ê¸åƱÍͤǤ¢¤ë¡£ Äê¿ô CPU_SETSIZE (1024) ¤Ï¡¢CPU ½¸¹ç¤ËÆþ¤ë CPU ÈÖ¹æ¤ÎºÇÂçÃͤè¤ê 1 Â礭¤¤Ãͤò¼¨¤¹¡£

sched_setaffinity() ¤Ï¡¢¥×¥í¥»¥¹ID ¤¬ pid ¤Î¥×¥í¥»¥¹¤Î CPU affinity ¥Þ¥¹¥¯¤ò mask ¤Ç»ØÄꤵ¤ì¤¿ÃͤËÀßÄꤹ¤ë¡£ pid ¤¬ 0 ¤Î¾ì¹ç¡¢¸Æ¤Ó½Ð¤·¸µ¥×¥í¥»¥¹¤¬»È¤ï¤ì¤ë¡£°ú¤­¿ô cpusetsize ¤Ë¤Ï mask ¤¬»Ø¤¹¥Ç¡¼¥¿¤ÎŤµ (¥Ð¥¤¥Èñ°Ì) ¤Ç¤¢¤ë¡£ Ä̾ï¤Ï¡¢¤³¤Î°ú¤­¿ô¤Ë¤Ï sizeof(cpu_set_t) ¤ò»ØÄꤹ¤ì¤Ð¤è¤¤¡£

pid ¤Ç»ØÄꤵ¤ì¤¿¥×¥í¥»¥¹¤¬ mask ¤Ç»ØÄꤵ¤ì¤¿ CPU ¤Î¤¤¤º¤ì¤«¤Ç¸½ºß¼Â¹Ô¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ ¤½¤Î¥×¥í¥»¥¹¤Ï mask ¤Ç»ØÄꤵ¤ì¤¿ CPU ¤Î¤¤¤º¤ì¤«¤Ë°ÜÆ°¤µ¤ì¤ë¡£

sched_getaffinity() ¤Ï¡¢ ¥×¥í¥»¥¹ID ¤¬ pid ¤Î¥×¥í¥»¥¹¤Î affinity ¥Þ¥¹¥¯¤ò mask ¤¬»Ø¤¹ cpu_set_t ¹½Â¤ÂΤ˽ñ¤­¹þ¤à¡£ cpusetsize °ú¤­¿ô¤Ë¤Ï mask ¤Î (¥Ð¥¤¥Èñ°Ì¤Î) Â礭¤µ¤ò»ØÄꤹ¤ë¡£

´Ø¿ô sched_getaffinity() ¤ÏŤµ len ¤Î¥Ý¥¤¥ó¥¿ mask ¤Ë¥×¥í¥»¥¹ pid ¤Î affinity ¥Þ¥¹¥¯¤ò½ñ¤­¹þ¤à¡£ pid ¤¬ 0 ¤Î¾ì¹ç¡¢¸Æ¤Ó½Ð¤·¸µ¤Î¥×¥í¥»¥¹¤Î¥Þ¥¹¥¯¤¬ÊÖ¤µ¤ì¤ë¡£

ÊÖ¤êÃÍ

À®¸ù¤·¤¿¾ì¹ç¡¢ sched_setaffinity() ¤È sched_getaffinity() ¤Ï 0 ¤òÊÖ¤¹¡£ ¥¨¥é¡¼¤Î¾ì¹ç¤Ï -1 ¤òÊÖ¤·¡¢ errno ¤òŬÀÚ¤ËÀßÄꤹ¤ë¡£

¥¨¥é¡¼

EFAULT
»ØÄꤵ¤ì¤¿¥á¥â¥êÈÖÃϤ¬ÉÔÀµ¤Ç¤¢¤ë¡£
EINVAL
affinity ¥Ó¥Ã¥È¥Þ¥¹¥¯ mask ¤Ë¥·¥¹¥Æ¥à¾å¤Ë¼ÂºÝ¤Ë¸ºß¤¹¤ë¥×¥í¥»¥Ã¥µ¤ËÂбþ¤¹¤ë¥Ó¥Ã¥È¤¬¤Ê¤¤¡£ ¤Þ¤¿¤Ï¥Þ¥¹¥¯Ä¹ cpusetsize ¤¬¥«¡¼¥Í¥ë¤Ç»È¤ï¤ì¤Æ¤¤¤ë affinity ¥Þ¥¹¥¯¤è¤êû¤¤¡£
EPERM
¸Æ¤Ó½Ð¤·¸µ¤Î¥×¥í¥»¥¹¤ËŬÀÚ¤ÊÆø¢¤¬¤Ê¤«¤Ã¤¿¡£ sched_setaffinity() ¤ò¸Æ¤Ó½Ð¤¹¥×¥í¥»¥¹¤Ï¡¢¼Â¸ú¥æ¡¼¥¶ ID ¤¬ pid ¤Ç¼±Ê̤µ¤ì¤ë¥×¥í¥»¥¹¤Î¥æ¡¼¥¶ ID ¤Þ¤¿¤Ï¼Â¸ú¥æ¡¼¥¶ ID ¤ÈƱ¤¸¤Ç¤¢¤ë¤«¡¢ CAP_SYS_NICE ¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£ (capability) ¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
ESRCH
¥×¥í¥»¥¹ ID pid ¤Î¥×¥í¥»¥¹¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¡£

¥Ð¡¼¥¸¥ç¥ó

CPU affinity ¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï Linux kernel 2.5.8 ¤ÇƳÆþ¤µ¤ì¤¿¡£ ¥é¥¤¥Ö¥é¥ê¦¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Ï glibc 2.3 ¤ÇƳÆþ¤µ¤ì¤¿¡£ ºÇ½é¤Ï¡¢glibc ¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Ë¤Ï cpusetsize °ú¤­¿ô¤¬Æþ¤Ã¤Æ¤¤¤¿¡£ glibc 2.3.3 ¤Ç¤Ï cpusetsize °ú¤­¿ô¤¬ºï½ü¤µ¤ì¤¿¤¬¡¢glibc 2.3.4 ¤Ç¸µ¤ËÌᤵ¤ì¤¿¡£

½àµò

¤³¤ì¤é¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï Linux ¸ÇÍ­¤Ç¤¢¤ë¡£

Ãí°Õ

¼ÂºÝ¤Ë¤Ï affinity ¥Þ¥¹¥¯¤Ï¥¹¥ì¥Ã¥Éñ°Ì¤Î°À­¤Ç¡¢¥¹¥ì¥Ã¥É¥°¥ë¡¼¥×¤Î ³Æ¥¹¥ì¥Ã¥Éñ°Ì¤ËÆÈΩ¤·¤ÆÄ´À°¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ gettid(2) ¥³¡¼¥ë¤«¤é¤ÎÊÖ¤êÃͤò¤³¤Î¥³¡¼¥ë¤Î pid °ú¤­¿ô¤È¤·¤ÆÅϤ¹¤³¤È¤¬¤Ç¤­¤ë¡£

fork(2) ·Ðͳ¤ÇÀ¸À®¤µ¤ì¤¿»Ò¥×¥í¥»¥¹¤Ï¿Æ¥×¥í¥»¥¹¤Î CPU affinity ¥Þ¥¹¥¯¤ò·Ñ¾µ¤¹¤ë¡£ affinity ¥Þ¥¹¥¯¤Ï execve(2) ¤ÎÁ°¸å¤ÇÊݸ¤µ¤ì¤ë¡£

¤³¤Î¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸¤Ç¤Ï CPU affinity ¥³¡¼¥ë¤Î glibc ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò ÀâÌÀ¤·¤Æ¤¤¤ë¡£¼ÂºÝ¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¡¦¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Ï¾¯¤·°ã¤Ã¤Æ¤ª¤ê¡¢ ¼ÂºÝ¤Î¼ÂÁõ¤Ç¤Ï CPU ½¸¹ç¤Ï´Êñ¤Ê¥Ó¥Ã¥È¥Þ¥¹¥¯¤Ç¤¢¤ë¤È¤¤¤¦¼Â¾õ¤òÈ¿±Ç¤·¡¢ mask ¤Î·¿¤¬ unsigned long * ¤È¤Ê¤Ã¤Æ¤¤¤ë¡£ À®¸ù»þ¤Ë¤Ï¡¢À¸¤Î sched_getaffinity() ¥·¥¹¥Æ¥à¥³¡¼¥ë¼«¿È¤Ï cpumask_t ¥Ç¡¼¥¿·¿¤Î (¥Ð¥¤¥Èñ°Ì¤Î) Â礭¤µ¤òÊÖ¤¹¡£ cpumask_t ¤Ï¥«¡¼¥Í¥ëÆâÉô¤Ç CPU ½¸¹ç¤Î¥Ó¥Ã¥È¥Þ¥¹¥¯¤òɽ¸½¤¹¤ë¤Î¤Ë »È¤ï¤ì¤Æ¤¤¤ë¥Ç¡¼¥¿·¿¤Ç¤¢¤ë¡£

´ØÏ¢¹àÌÜ

clone(2), getpriority(2), gettid(2), nice(2), sched_get_priority_max(2), sched_get_priority_min(2), sched_getscheduler(2), sched_setscheduler(2), setpriority(2), capabilities(7)

sched_setscheduler(2) ¤Ë¤Ï Linux ¤Ë¤ª¤±¤ë¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¤Î³µÎ¬¤¬µ­½Ò¤µ¤ì¤Æ¤¤¤ë¡£