PF_VCPUとPF_WQ_WORKERの意味

PF_VCPUとPF_WQ_WORKERの意味

定数が何を意味するのかご存知ですか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番目の引数は0x3010進数48)、どういう意味ですか?

定義後に簡単なコメントだけを見つけましたが、ポイントが何なのか推測できません。

答え1

これは目的を説明しますPF_WQ_WORKER

抜粋

同時に管理されている作業キューは、作業者がいつ眠って起きるのかを知る必要があり、作業者が眠りに落ちたときに他の作業者を目覚めさせることで十分な並行性を維持できなければなりません。このパッチは、PF_WQ_WORKERジョブキューワーカー識別機能を導入し、次の2つのフックを追加します。

  • wq_worker_waking_up():ワーカーが起きたときに呼び出されます。

  • wq_worker_sleeping():ワーカーが眠りに落ちたときに呼び出され、起きる必要があるローカルタスクへのポインタを返すことができます。返されたアクションは、try_to_wake_up_local()以下に呼び出された単純化されたメソッドを使用して目覚めます。このメソッドはローカル操作だけを起こすことができます。ttwurq lock

両方のフックは現在定義されていますnoopkernel/workqueue_sched.h以降のcmwq実装では、これを適切な実装に置き換えます。

これらのフックは常にアクティブであるという点でハードコードされています。

源泉: [パッチ 4/4] sched: ジョブキューのフックを追加

答え2

これPF_VCPUフラグは次の位置に設定されています。guest_enterこれは次のために発生します。kvm_guest_enterこれは…kvm_arch_vcpu_ioctl_run。私が理解したのは、ホストスケジューラに関する限り、KVM仮想マシン内で実行されるプロセスの説明であり、そのプロセスは仮想マシンとして有効になります。それ紹介する仮想マシン内で実行されているプロセスに費やされた時間と、仮想マシン自体に費やされた時間を正しく追跡します。

関連情報