定数が何を意味するのかご存知ですかlinux/sched.h
?
#define PF_VCPU 0x00000010 /* I'm a virtual CPU */
#define PF_WQ_WORKER 0x00000020 /* I'm a workqueue worker */
/proc/[pid]/stat
プロセスに両方のフラグが設定されている場合(9番目の引数は0x30
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仮想マシン内で実行されるプロセスの説明であり、そのプロセスは仮想マシンとして有効になります。それ紹介する仮想マシン内で実行されているプロセスに費やされた時間と、仮想マシン自体に費やされた時間を正しく追跡します。