Значение 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 */

Что означает, когда у процесса установлены оба флага (девятый параметр в /proc/[pid]/statis 0x30или decimal 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реализация заменит их правильной реализацией.

Эти хуки жестко запрограммированы, поэтому они всегда будут включены.

Источник: [PATCH 4/4] sched: добавить хуки для workqueue

решение2

ThePF_VCPUфлаг установлен вguest_enterкоторый называетсяkvm_guest_enterкоторый называется вkvm_arch_vcpu_ioctl_run. Насколько я понимаю, это аннотация к процессу, который запущен внутри виртуальной машины KVM; что касается планировщика хоста, процесс активен под видом своей виртуальной машины. Это быловведендля правильного отслеживания времени, затраченного на процесс, запущенный внутри виртуальной машины, по сравнению со временем, затраченным самой виртуальной машиной.

Связанный контент