Как определить, активирован ли isolcpus и на каком процессоре, например, когда вы впервые подключаетесь к серверу. условия:
не порождает процесс, чтобы увидеть, куда он будет перенесен.
Прецедент является то , что isolcpus=1-7
на а 6 ядер i7, кажется, не активировать isolcpus при загрузке, и я хотел бы знать , если его можно из /proc/
, /sys
или любого ядра Внутренности , которые могут быть прочитаны в пользовательском пространстве, чтобы обеспечить четкий статус активации isolcpus и какой процессор касается. Или даже прочитайте активную настройку планировщика, который первым относится к isolcpus.
Учтите, что время работы настолько велико, что dmesg
больше не отображается журнал загрузки, чтобы обнаружить любую ошибку при запуске. Базовый ответ типа " посмотрите на строку cmd ядра " не будет принят :)
pidstat -C isolcpus
. пидстат изsysstat
пакета.pidstat
иisolcpus
. Можете ли вы уточнить немного больше?isolcpus
, ноpidstat
могу сказать вам, на каком процессоре запущен процесс, если вы передадите-C process_name
флаг. Напримерpidstat -C top
выдает следующее.10:56:52 AM PID %usr %system %guest %CPU CPU Command 10:56:52 AM 3457 0.00 0.00 0.00 0.00 6 top
isolcpus
является параметром ядра, который заставляет планировщик не мигрировать сам процесс, если они изолированы. Например, на 8-процессорных серверахisolcpus=1-7
в командной строке ядра принудительно запускается весь порожденный процесс, инициированный init и любой командой в оболочке, только на CPU0. Чтобы запустить задачу на изолированном процессоре, вам нужно запустить егоtaskset
для примера. Так что в отношении того, что я спрашиваю, кажется, ваш ответ не по теме. В любом случае спасибо за попытку ответить мнеОтветы:
То, что вы ищете, должно быть найдено внутри этого виртуального файла:
и наоборот в
Из
drivers/base/cpu.c
того, что мы видим, отображаемым источником является переменная ядраcpu_isolated_map
:и
cpu_isolated_map
это именно то, что устанавливаетсяkernel/sched/core.c
при загрузке:Но, как вы заметили, кто-то мог изменить сходство процессов, в том числе порожденных демонами
cron
,systemd
и так далее. Если это произойдет, новые процессы будут порождены, наследуя измененную маску сходства, а не ту, которая установленаisolcpus
.Таким образом, вышеперечисленное даст вам,
isolcpus
как вы просили, но это может быть бесполезноПредположим, что вы обнаружите, что
isolcpus
было выпущено, но не «взято», это нежелательное поведение может быть получено каким-то процессом, понимающим, что он связан только с нимCPU=0
, полагая, что он находится в режиме монопроцессора по ошибке, и старательно пытающимся «установить вещи» вправо "путем сброса маски сходства. Если бы это было так, вы можете попробовать изолировать CPUS 0-5 вместо 1-6 и посмотреть, работает ли это.источник
/sys/devices/system/cpu/possible
не кажется «обратным» в зависимости от того, как вы интерпретируете «обратный». Например, если.../cpu/isolated
вернется,2,4
потому что они были изолированы,.../cpu/possible
вернется0-191
./sys/devices/system/cpu/present
узнать, какие процессоры существуют, а не/sys/devices/system/cpu/possible
какие процессоры могут существовать (но могут и не существовать). На некоторых системах они одинаковы, но даже на довольно простом рабочем столе, который я проверял, это не так.Одним из самых простых способов определить,
isolcpus
является ли консультирование,proc
чтобы увидеть, какие параметры были переданы ядру во время выполнения.Для этого вы бы использовали:
Как видите, в этом конкретном примере
isolcpus=2,3
в качестве аргумента было передано работающее ядро.Вы также можете использовать
taskset
указатель на PID 1. Поскольку PID 1 является стандартным PID для первой задачи, запущенной ядром, мы можем довольно неплохо понять, что она будет отражать, работаем ли мыisolcpus
. Как в:Сравнение с
lscpu
командой на том же сервере:Как видно,
lscpu
показывает 4 процессора / ядра, в то времяtaskset
как показывает только 0,1, так что это шоуisolcpus
работает здесь.Посмотрите на: Как обеспечить исключительную доступность процессора для запущенного процесса?
источник
/proc/cmdline
какая точная копия содержимогоgrub.conf
файла. Это не то, что я спросил! Все равно спасибо !Вы можете проверить Cpus_allowed и Cpus_allowed_list для текущего процесса оболочки, чтобы увидеть, какие процессоры были зарезервированы.
например
означает, что процессор = 2 был зарезервирован
isolcpus
на сервере 6 процессоровисточник
ssh
и кто-то вручную ограничил сродство родителяsshd
к ЦП 1, вы бы всегда видели ЦП 1, независимо отisolcpus
того, «взяли» или нет.$$
Отрасль дает вам процесс унаследовал ценности, а не оригинальный системные.