EN JA
GETCPU(2)
GETCPU(2) Linux Programmer's Manual GETCPU(2)

名前

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

書式


#include <linux/getcpu.h>
 

int getcpu(unsigned * cpu , unsigned * node , struct getcpu_cache * tcache );
 
: このシステムコールには glibc のラッパー関数は存在しない。「注意」の節を参照。

説明

getcpu() システムコールは、呼び出し元のスレッドやプロセスが現在動作しているプロセッサやノードの情報を特定し、それぞれ引き数 cpunode が指す整数に書き込む。プロセッサ情報は CPU を識別するための一意な小さな整数である。ノード情報は NUMAノードを識別するための一意な小さな整数である。 cpunode のいずれかが NULL であれば、その引き数に対応する情報の書き込みは行われない。
 
The third argument to this system call is nowadays unused, and should be specified as NULL unless portability to Linux 2.6.23 or earlier is required (see NOTES).
 
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.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2013-04-03 Linux