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 */

プロセスに両方のフラグが設定されている場合(9番目のパラメータは/proc/[pid]/statis0x30または10進数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実装では、適切な実装に置き換えられます。

これらのフックは常に有効になるため、ハードコードされています。

ソース: [PATCH 4/4] sched: ワークキューのフックを追加

答え2

PF_VCPUフラグが設定されているguest_enterこれはkvm_guest_enterこれはkvm_arch_vcpu_ioctl_run私の理解する限り、これはKVM仮想マシン内で実行されているプロセスの注釈であり、ホストスケジューラに関する限り、プロセスは仮想マシンの形でアクティブです。紹介されたVM 内で実行されているプロセスに費やされた時間と VM 自体に費やされた時間を適切に追跡します。

関連情報