Rechercher une page de manuel
sched_setaffinity
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 ¤Ë¤ª¤±¤ë¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¤Î³µÎ¬¤¬µ½Ò¤µ¤ì¤Æ¤¤¤ë¡£
Contenus ©2006-2023 Benjamin Poulain
Design ©2006-2023 Maxime Vantorre