EN JA
KVM_GETPCPU(3)
KVM_GETPCPU(3) FreeBSD Library Functions Manual KVM_GETPCPU(3)

名称

kvm_dpcpu_setcpu kvm_getmaxcpu, kvm_getpcpuCPU データ毎にアクセスする

ライブラリ

Kernel Data Access Library (libkvm, -lkvm)

書式

#include < sys/param.h>
#include < sys/pcpu.h>
#include < sys/sysctl.h>
#include < kvm.h>

int
kvm_dpcpu_setcpu( kvm_t *kd, u_int cpu);

int
kvm_getmaxcpu( kvm_t *kd);

void *
kvm_getpcpu( kvm_t *kd, int cpu);

ssize_t
kvm_read_zpcpu( kvm_t *kd, void *buf, u_long base, size_t size, int cpu);

uint64_t
kvm_counter_u64_fetch( kvm_t *kd, u_long base);

解説

kvm_dpcpu_setcpu(), kvm_getmaxcpu() と kvm_getpcpu() 関数は、 kd によって示されたカーネルのアクティブなプロセッサの CPU データ毎にアクセスするために使用されます。 CPU 毎の記憶域には、2 つの特色があります: 各 CPU に関連している struct pcpu の直接格納されたデータ、と単一のカーネルシンボルがアクセスされるどのような CPU に依存している異なったデータを参照する CPU 毎のダイナミックな記憶域 (DPCPU) です。

kvm_getmaxcpu() 関数は、カーネルによってサポートされた CPU の最大数を返します。

kvm_getpcpu() 関数は、単一の CPU のための CPU データ毎に保持されるバッファを返します。このバッファは、 struct pcpu タイプによって記述されます。呼び出し側は、それがもう必要でないときに、 free(3) を呼び出すことによってバッファを解放する責任があります。 cpu がアクティブでないなら、代わりに NULL が返されます。

kvm_read_zpcpu() 関数は、 UMA_ZONE_PCPU zone(9) から CPU ごとのプライベートなコピーを獲得するために使用されます。それは、 cpu にプライベートである割り付けの部分から bufsize バイトの割り付けとコピーのベースアドレスとして base 引数を取ります。

kvm_counter_u64_fetch() 関数は、 base アドレスによって指されている counter(9) の値を取って来ます。

ダイナミックな CPU 毎のデータのシンボルは、他のシンボルのように kvm_nlist(3) を通してアクセスされます。 libkvm は、デフォルトを 0 とする、 kvm_dpcpu_setcpu によって設定される "現在の CPU"の概念を維持します。いったん別の CPU が選択されると、 kvm_nlist(3) は、適切な CPU のそのデータへのポインタを返します。

キャッシング

kvm_getmaxcpu() と kvm_getpcpu() は、連続した呼び出しで再利用される、様々なカーネル変数のための nlist 値をキャッシュします。このキャッシュをクリアするためには、 NULL に設定された kd でいずれかの関数を呼び出します。

戻り値

成功すれば、 kvm_getmaxcpu() 関数は、カーネルによってサポートされた CPU の最大数を返します。エラーが発生するなら、代わりに -1 を返します。

成功すれば、 kvm_getpcpu() は、割り付けられたバッファ、または NULL へのポインタを返します。エラーが発生するなら、代わりに -1 を返します。

成功すれば、 kvm_dpcpu_setcpu() 呼び出しは、0 を返します。エラーが発生するなら、代わりに -1 を返します。

成功すれば、 kvm_read_zpcpu() 関数は、コピーされたバイト数を返します。エラーが生じるなら、代わりに、-1 を返します。

すべての関数がエラーに遭遇するなら、エラーメッセージは、 kvm_geterr(3) を通して検索されます。

関連項目

free(3), kvm(3), counter(9), zone(9)
April 11, 2013 FreeBSD