Jak wykryć, czy isolcpus jest aktywowany i na którym cpus, gdy na przykład łączysz się po raz pierwszy na serwerze. Warunki:
nie spawnuje żadnego procesu, aby zobaczyć, gdzie będzie migrowany.
Sprawa użycie jest to, że isolcpus=1-7
na 6 rdzeni I7 zdaje się nie aktywować isolcpus w bagażniku, i chciałbym wiedzieć, jeśli jego możliwości z /proc/
, /sys
lub jakieś wewnętrzne jądro, które mogą być odczytywane w przestrzeni użytkownika, aby zapewnić wyraźny status aktywacji isolcpus i których procesorów dotyczy. Lub nawet przeczytaj aktywne ustawienie harmonogramu, który jest pierwszym, którego dotyczy isolcpus.
Weź pod uwagę, że czas działania jest tak duży, że dmesg
nie trzeba już wyświetlać dziennika rozruchu w celu wykrycia błędu podczas uruchamiania. Podstawowe odpowiedzi, takie jak „ spójrz na linię cmd jądra ” nie będą akceptowane :)
pidstat -C isolcpus
. pidstat jest zsysstat
paczki.pidstat
iisolcpus
. Czy możesz rozwinąć nieco więcej?isolcpus
jest, alepidstat
mogę powiedzieć, na jakim procesorze działa proces, jeśli przekażesz-C process_name
flagę. Na przykładpidstat -C top
produkuje następujące.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
jest parametrem jądra, który zmusza program planujący do samodzielnej migracji żadnego procesu, jeśli są one izolowane. Na przykład na serwerach o 8 procesorach,isolcpus=1-7
w linii poleceń jądra, zmusi cały spawnowany proces do rozwidlenia przez init i wszelkie polecenia w powłoce, aby działały tylko na CPU0. Aby uruchomić zadanie na izolowanym procesorze, musisz na przykład uruchomić jetaskset
za pomocą . Jeśli chodzi o to, o co pytam, wydaje się, że twoja odpowiedź jest nie na temat. W każdym razie dziękuję za próbę udzielenia odpowiedziOdpowiedzi:
To, czego szukasz, powinno znaleźć się w tym pliku wirtualnym:
i odwrotnie
Od
drivers/base/cpu.c
widzimy, że źródło wyświetlane jest zmienna jądracpu_isolated_map
:i
cpu_isolated_map
jest dokładnie tym, co ustawia siękernel/sched/core.c
podczas uruchamiania:Ale jak zauważył ktoś mógł modyfikować powinowactwa procesów, w tym demona-te, zrodził
cron
,systemd
i tak dalej. Jeśli tak się stanie, pojawią się nowe procesy dziedziczące zmodyfikowaną maskę powinowactwa, a nie tę ustawioną przezisolcpus
.Więc powyższe da ci
isolcpus
zgodnie z twoją prośbą, ale to może nie być pomocne.Załóżmy, że dowiadujesz się, że
isolcpus
zostało wydane, ale nie zostało „odebrane”, to niechciane zachowanie może zostać wyprowadzone przez pewien proces, który zdaje sobie sprawę, że jest do tego zobowiązanyCPU=0
, wierząc, że jest w trybie monoprocesorowym przez pomyłkę, i pomocnie próbuje „ustawić rzeczy” w prawo ”poprzez zresetowanie maski koligacji. W takim przypadku możesz spróbować izolować CPUS 0-5 zamiast 1-6 i sprawdzić, czy tak się dzieje.źródło
/sys/devices/system/cpu/possible
nie wydaje się być „odwrotnością” w zależności od tego, jak interpretujesz „odwrócenie”. Np. Jeśli.../cpu/isolated
powróci,2,4
ponieważ zostały odizolowane,.../cpu/possible
wróci0-191
./sys/devices/system/cpu/present
wiedzieć, które procesory istnieją, a/sys/devices/system/cpu/possible
które pokazują, które procesory mogłyby istnieć (ale obecnie mogą nie istnieć). W niektórych systemach są takie same, ale nawet na dość prostym pulpicie, które sprawdziłem, nie są.Jednym z łatwiejszych sposobów sprawdzenia, czy
isolcpus
jestproc
sprawdzenie, które parametry zostały przekazane do jądra w czasie wykonywania.W tym celu użyłbyś:
Jak widać, w tym konkretnym przykładzie
isolcpus=2,3
został przekazany jako argument do działającego jądra.Możesz także użyć
taskset
wskazywanego na PID 1. Ponieważ PID 1 jest standardowym PID dla pierwszego zadania uruchamianego przez jądro, możemy uznać za całkiem dobrą wskazówkę, że będzie on odzwierciedlał, czy działamyisolcpus
. Jak w:Porównywanie z
lscpu
poleceniem na tym samym serwerze:Jak widać,
lscpu
pokazuje 4 procesory / rdzenie, podczas gdytaskset
pokazuje tylko 0,1, więc ten programisolcpus
działa tutaj.Spójrz na: Jak zapewnić wyłączną dostępność procesora dla uruchomionego procesu?
źródło
/proc/cmdline
która jest dokładną kopią zawartościgrub.conf
pliku. Nie o to prosiłem! Mimo wszystko dziekuję !Możesz sprawdzić Cpus_allowed i Cpus_allowed_list dla bieżącego procesu powłoki, aby zobaczyć, które cpus były zarezerwowane
na przykład
oznacza, że procesor = 2 został zarezerwowany przez
isolcpus
na serwerze 6 procesorówźródło
ssh
i ktoś ręcznie ograniczył powinowactwo rodzicasshd
do CPU 1, zobaczyłbyś zawsze CPU 1, niezależnieisolcpus
od tego, czy „wziął”, czy nie.$$
Oddział daje procesie odziedziczone wartości, a nie oryginalne systemowych.