你知道常量的意思是什麼嗎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
當一個進程設定了兩個標誌(第九個參數是0x30
或十進位48
)時,這意味著什麼
我只發現定義之後的簡短評論,但我無法想像有什麼意義。
答案1
這一點解釋了 的目的PF_WQ_WORKER
。
摘抄
並發管理的工作佇列需要知道工作人員何時將要睡眠和醒來,並且當工作人員進入睡眠狀態時,能夠喚醒另一個工作人員以保持足夠的並發性。該補丁引入了
PF_WQ_WORKER
識別工作佇列工作者並添加了以下兩個鉤子。
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 虛擬機器內運行的進程的註釋;就主機調度程序而言,該進程以其虛擬機器的形式處於活動狀態。它是介紹正確追蹤虛擬機器內運作的進程所花費的時間與虛擬機器本身所花費的時間。