定数の意味が何で定義されているか知っていますかlinux/sched.h
:
#define PF_VCPU 0x00000010 /* I'm a virtual CPU */
#define PF_WQ_WORKER 0x00000020 /* I'm a workqueue worker */
プロセスに両方のフラグが設定されている場合(9番目のパラメータは/proc/[pid]/stat
is0x30
または10進数48
)はどういう意味ですか?
定義の後の短いコメントしか見つけられませんでしたが、意味がわかりません。
答え1
このビットでは の目的について説明しますPF_WQ_WORKER
。
抜粋
同時実行管理されたワークキューは、ワーカーがいつスリープ状態になり、いつ起動するかを認識し、ワーカーがスリープ状態になったときに別のワーカーを起動して適切な同時実行性を維持できる必要があります。このパッチは、
PF_WQ_WORKER
ワークキュー ワーカーを識別する方法を導入し、次の 2 つのフックを追加します。
wq_worker_waking_up()
: ワーカーが起動されたときに呼び出されます。
wq_worker_sleeping()
: ワーカーがスリープ状態になるときに呼び出され、起動する必要があるローカル タスクへのポインターを返す場合があります。返されたタスクは、以下で呼び出されるtry_to_wake_up_local()
簡略化されたを使用して起動され、ローカル タスクのみを起動できます。ttwu
rq lock
両方のフックは現在 として定義されています
noop
。kernel/workqueue_sched.h
今後のcmwq
実装では、適切な実装に置き換えられます。これらのフックは常に有効になるため、ハードコードされています。
答え2
のPF_VCPU
フラグが設定されているguest_enter
これはkvm_guest_enter
これはkvm_arch_vcpu_ioctl_run
私の理解する限り、これはKVM仮想マシン内で実行されているプロセスの注釈であり、ホストスケジューラに関する限り、プロセスは仮想マシンの形でアクティブです。紹介されたVM 内で実行されているプロセスに費やされた時間と VM 自体に費やされた時間を適切に追跡します。