EN JA
CPUSET_GETAFFINITY(2)
CPUSET_GETAFFINITY(2) FreeBSD System Calls Manual CPUSET_GETAFFINITY(2)

名称

cpuset_getaffinity, cpuset_setaffinityCPU の類似性を管理する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/param.h>
#include < sys/cpuset.h>

int
cpuset_getaffinity( cpulevel_t level, cpuwhich_t which, id_t id, size_t setsize, cpuset_t *mask);

int
cpuset_setaffinity( cpulevel_t level, cpuwhich_t which, id_t id, size_t setsize, const cpuset_t *mask);

解説

cpuset_getaffinity() と cpuset_setaffinity() によって、プロセス、スレッド、割り込み、jail と他のリソースに利用可能な CPU のセットの操作ができます。これらの関数は、単一のオブジェクトだけに影響する多くのプロセスまたはオブジェクト毎の匿名のマスクを含む CPU のセットを操作します。

levelwhich 引数のための有効な値は、 cpuset(2) に文書化されています。これらの引数は、我々が参照するオブジェクトとオブジェクトのセットを指定します。すべての可能な組み合わせが有効であるというわけではありません。例えば、プロセスだけが、 CPU_LEVEL_CPUSETlevel 引数によってアクセスされた番号付けされたセットに属します。しかしながら、すべてのリソースには、 CPU_LEVEL_WHICH とともに操作されるマスクがあります。

タイプ cpuset_t のマスクは、 CPU_SET マクロを使用して組み立てられます。セットに指定されたすべての CPU が存在している限り、カーネルは、大きいセットを許します。たとえ、結果のセットがユーザによって供給されたセットに適合しても、カーネルの用途が cpuset_getaffinity() への呼び出しでエラーを生成するより小さくセットします。 cpuset_setaffinity() への呼び出しは、制限なしで小さいセットを許します。

供給されたマスクには、 setsize バイトのサイズがあるはずです。このサイズは、最終的に < sys/cpuset.h> で定義されるように CPU_SETSIZE の値によって決定される、 sizeof(mask) を呼び出すことによって通常、提供されます。

cpuset_getaffinity() は、 level, whichid によって指定されたオブジェクトからマスクを検索して、 mask によって提供された空間ににそれを格納します。

cpuset_setaffinity() は、 level, whichid によって指定されたオブジェクトのためのマスクを mask 中の値に設定することを試みます。

戻り値

Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

次のエラーコードが、 errno に設定されます:
[ EINVAL]
level または which 引数が有効な値ではありませんでした。
[ EINVAL]
cpuset_setaffinity() を呼び出すとき、指定された mask 引数が有効な値ではありませんでした。
[ EDEADLK]
cpuset_setaffinity() 呼び出しは、セットがスレッドの匿名のマスクに重ならないので、実行している有効な CPU なしでスレッドを残しています。
[ EFAULT]
渡されたマスクポインタが、無効でした。
[ ESRCH]
idwhich 引数によって指定されたオブジェクトを、見つけることができませんでした。
[ ERANGE]
cpusetsize が、カーネル設定サイズよりとんでもなく大きいか、または小さかったです。
[ EPERM]
呼び出しプロセスで、操作を完了するために要求された資格証明がありませんでした。

歴史

cpuset_getaffinity システムコールファミリは、 FreeBSD 7.1 ではじめて登場しました。

作者

Jeffrey Roberson <jeff@FreeBSD.org>
September 10, 2010 FreeBSD