Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_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.54 の一部 である。プロジェクトの説明とバグ報告
       に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。