상수가 무엇을 의미하는지 아시나요 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번째 인수는 0x30
또는 10진수 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 가상 머신 내에서 실행되는 프로세스에 대한 설명이며 해당 프로세스는 가상 머신으로 활성화됩니다. 그것은소개하다가상 머신 내에서 실행되는 프로세스에 소요되는 시간과 가상 머신 자체에 소요되는 시간을 올바르게 추적합니다.