Provided by: manpages-ja-dev_0.5.0.0.20210215+dfsg-1_all
名前
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/ に書かれている。