상수의 의미가 무엇인지 알고 있습니까 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
is 0x30
또는 소수 의 9번째 매개변수 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 가상 머신 내부에서 실행되는 프로세스에 대한 주석입니다. 호스트 스케줄러에 관한 한 프로세스는 가상 머신으로 가장하여 활성화됩니다. 그것은소개VM 내부에서 실행되는 프로세스에 소요되는 시간과 VM 자체에서 소요되는 시간을 올바르게 추적합니다.