你知道常量的含义是什么吗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 虚拟机内运行的进程的注释;就主机调度程序而言,该进程以其虚拟机的形式处于活动状态。它是介绍正确跟踪虚拟机内运行的进程所花费的时间与虚拟机本身所花费的时间。