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

名前

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

書式

       #include <linux/getcpu.h>

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

説明

       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()   was  added  in  kernel  2.6.19  for  x86-64 and i386.  Library support was added in glibc 2.29
       (Earlier glibc versions did not provide a  wrapper  for  this  system  call,  necessitating  the  use  of
       syscall(2).)

準拠

       getcpu() は Linux 固有である。

注意

       Linux  makes  a  best effort to make this call as fast as possible.  (On some architectures, this is done
       via an implementation in the vdso(7).)   The  intention  of  getcpu()   is  to  allow  programs  to  make
       optimizations with per-CPU data or for NUMA optimization.

       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), vdso(7)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10  の一部である。プロジェクトの説明とバグ報告
       に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。