名 前
getcpu − 呼 び 出 し 元 ス レ ッ ド が 動 作 し て い る CPU と NUMA ノ ー ド を 判 定 す る
書 式
#include <linux/getcpu.h>
int getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *tcache); 注 : こ の シ ス テ ム コ ー ル に は glibc の ラ ッ パ ー 関 数 は 存 在 し な い 。 「 注 意 」 の 節 を 参 照 。
説 明
getcpu() シ ス テ ム コ ー ル は 、 呼 び 出 し 元 の ス レ ッ ド や プ ロ セ ス が 現 在 動 作 し て い る プ ロ セ ッ サ や ノ ー ド の 情 報 を 特 定 し 、 そ れ ぞ れ 引 き 数 cpu と node が 指 す 整 数 に 書 き 込 む 。 プ ロ セ ッ サ 情 報 は CPU を 識 別 す る た め の 一 意 な 小 さ な 整 数 で あ る 。 ノ ー ド 情 報 は NUMAノ ー ド を 識 別 す る た め の 一 意 な 小 さ な 整 数 で あ る 。 cpu か node の い ず れ か が NULL で あ れ ば 、 そ の 引 き 数 に 対 応 す る 情 報 の 書 き 込 み は 行 わ れ な い 。 こ の シ ス テ ム コ ー ル の 3 番 目 の 引 き 数 は 現 在 は 使 わ れ て お ら ず 、 Linux 2.6.23 以 前 へ の 移 植 性 が 必 要 な 場 合 以 外 は NULL を 渡 す べ き で あ る (「 注 意 」 を 参 照 )。
cpu に 格 納 さ れ た 情 報 が 最 新 だ と 保 証 で き る の は 、 シ ス テ ム コ ー ル が 呼 ば れ た 時 点 だ け で あ る 。 sched_setaffinity(2) を 使 っ て CPU affinity が 固 定 さ れ て い な い 限 り 、 カ ー ネ ル は い つ で も CPU を 変 更 し て も よ い (ス ケ ジ ュ ー ラ は キ ャ ッ シ ュ が 有 効 に 働 く よ う に CPU の 移 動 を 最 小 限 に し よ う と す る の で 、 通 常 は CPU が 変 更 さ れ る こ と は な い が 、 起 き る 可 能 性 は あ る )。 cpu や node で 返 さ れ た 情 報 が 呼 び 出 し が 返 っ た 時 点 で す で に 最 新 の 状 況 と 異 な る 可 能 性 が あ り 、 呼 び 出 し 元 は こ の 可 能 性 を 考 慮 し て お か な け れ ば な ら な い 。
返 り 値
成 功 す る と 、 0 を 返 す 。 エ ラ ー の 場 合 、 −1 を 返 し 、 errno に エ ラ ー を 示 す 値 を 設 定 す る 。
エ ラ ー
EFAULT 引 き 数 が 呼 び 出 し た プ ロ セ ス の ア ド レ ス 空 間 外 を 指 し て い る 。 |
バ ー ジ ョ ン
getcpu() は カ ー ネ ル 2.6.19 で x86_64 と i386 向 け に 追 加 さ れ た .
準 拠
getcpu() は Linux 固 有 で あ る 。
注 意
Linux は こ の シ ス テ ム コ ー ル を 可 能 な 限 り 早 く 実 行 し よ う と す る 。 getcpu() は 、 CPU 毎 の デ ー タ に 対 す る 最 適 化 や NUMA 環 境 で の 最 適 化 を プ ロ グ ラ ム が 行 え る よ う に す る こ と を 目 的 と し て 実 装 さ れ て い る か ら で あ る 。
glibc は こ の シ ス テ ム コ ー ル に 対 す る ラ ッ パ ー 関 数 を 提 供 し て い な い 。 syscall(2) を 使 っ て 呼 び 出 す か 、 代 わ り に sched_getcpu(3) を 使 用 す る こ と 。
tcache 引 き 数 は Linux 2.6.24 以 降 で は 使 用 さ れ な い 。 以 前 の バ ー ジ ョ ン の カ ー ネ ル で は 、 こ の 引 き 数 が NULL 以 外 の 場 合 、 こ の 引 き 数 に は 、 呼 び 出 し 元 が 割 り 当 て た ス レ ッ ド 専 用 の 記 憶 領 域 (thread−local storage) 内 の バ ッ フ ァ ー を 指 す ポ イ ン タ ー が 指 定 さ れ 、 こ の バ ッ フ ァ ー は getcpu() 用 の キ ャ ッ シ ュ 機 構 を 提 供 す る た め に 利 用 さ れ て い た 。 非 常 に 低 い 確 率 だ が 古 い 情 報 を 返 し て し ま う デ メ リ ッ ト は あ る も の の 、 こ の キ ャ ッ シ ュ を 使 う こ と で getcpu() シ ス テ ム コ ー ル を 高 速 化 で き た 。 こ の キ ャ ッ シ ュ 機 構 は CPU 間 で の ス レ ッ ド の 移 動 時 に 問 題 に な る と 考 え ら れ 、 こ の 引 き 数 は 今 で は 無 視 さ れ る よ う に な っ て い る 。
関 連 項 目
mbind(2), sched_setaffinity(2), set_mempolicy(2), sched_getcpu(3), cpuset(7)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。