Provided by: manpages-ja-dev_0.5.0.0.20210215+dfsg-1_all bug

名前

       getcpu - 呼び出し元スレッドが動作している CPU と NUMA ノードを判定する

書式

       #include <linux/getcpu.h>

       int getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *tcache);

       : このシステムコールには glibc のラッパー関数は存在しない。「注意」の節を参照。

説明

       getcpu()  システムコールは、呼び出し元のスレッドやプロセスが  現在動作しているプロセッサや
       ノードの情報を特定し、 それぞれ引き数 cpunode が指す整数に書き込む。  プロセッサ情報は
       CPU を識別するための一意な小さな整数である。 ノード情報は NUMAノードを識別するための一意な
       小さな整数である。 cpunode のいずれかが NULL であれば、 その引き数に対応する情報の書き
       込みは行われない。

       このシステムコールの  3 番目の引き数は現在は使われておらず、 Linux 2.6.23 以前への移植性が
       必要な場合以外は NULL を渡すべきである (「注意」を参照)。

       cpu    に格納された情報が最新だと保証できるのは、システムコールが呼ばれ     た時点だけであ
       る。sched_setaffinity(2) を使って CPU affinity が固定 されていない限り、カーネルはいつでも
       CPU を変更してもよい (スケジューラ はキャッシュが有効に働くように CPU の移動を最小限にしよ
       うとするので、 通常は CPU が変更されることはないが、起きる可能性はある)。 cpunode で返
       された情報が呼び出しが返った時点ですでに  最新の状況と異なる可能性があり、呼び出し元はこの
       可能性を考慮して おかなければならない。

返り値

       成功すると、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/ に書かれている。