Comment détecter si isolcpus est activé et sur quels processeurs, par exemple lorsque vous vous connectez pour la première fois sur un serveur. Conditions:
n'engendre aucun processus pour voir où il sera migré.
Le cas d'utilisation est que isolcpus=1-7
sur un i7 à 6 cœurs, semble ne pas activer isolcpus au démarrage, et je voudrais savoir si c'est possible à partir de /proc/
, /sys
ou tout interne du noyau qui peut être lu dans l'espace utilisateur, pour fournir un statut clair d'activation d'isolcpus et quels processeurs sont concernés. Ou même lire le paramètre actif de l'ordonnanceur qui est le premier concerné par isolcpus.
Considérez que le temps de disponibilité est si grand, qu'il dmesg
n'y a plus d'affichage du journal de démarrage pour détecter toute erreur au démarrage. La réponse de base comme " regardez la ligne cmd du noyau " ne sera pas acceptée :)
pidstat -C isolcpus
. pidstat fait partie dusysstat
paquet.pidstat
etisolcpus
. Pouvez-vous élaborer un peu plus?isolcpus
c'est, maispidstat
je peux vous dire sur quel processeur un processus s'exécute si vous passez le-C process_name
drapeau. Par exemple,pidstat -C top
produit ce qui suit.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
est un paramètre du noyau qui oblige le planificateur à ne migrer aucun processus seul s'il est isolé. Par exemple, sur un serveur à 8 processeurs,isolcpus=1-7
dans la ligne de commande du noyau, tous les processus générés par init et tout type de commande en shell seront exécutés uniquement sur CPU0. Pour exécuter une tâche sur un processeur isolé, vous devez le lancer avectaskset
par exemple. Donc, en ce qui concerne ce que je demande, il semble que votre réponse soit hors sujet. Merci quand même d'avoir essayé de me répondreRéponses:
Ce que vous recherchez doit se trouver dans ce fichier virtuel:
et l'inverse
De
drivers/base/cpu.c
nous voyons que la source affichée est la variable du noyaucpu_isolated_map
:et
cpu_isolated_map
c'est exactement ce qui est défini parkernel/sched/core.c
au démarrage:Mais comme vous avez observé, quelqu'un aurait pu modifier l'affinité des processus, y compris les démons donné naissance,
cron
,systemd
et ainsi de suite. Si cela se produit, de nouveaux processus seront générés en héritant du masque d'affinité modifié, et non celui défini parisolcpus
.Donc, ce qui précède vous donnera ce
isolcpus
que vous avez demandé, mais cela pourrait ne pas être utile.En supposant que vous découvriez qui
isolcpus
a été émis, mais n'a pas "pris", ce comportement indésirable pourrait être dérivé par un processus réalisant qu'il n'est lié qu'àCPU=0
, croyant qu'il est en mode monoprocesseur par erreur, et essayant utilement de "régler les choses". à droite "en réinitialisant le masque d'affinité. Si tel était le cas, vous pourriez essayer d'isoler le CPUS 0-5 au lieu de 1-6 et voir si cela se produit.la source
/sys/devices/system/cpu/possible
cela ne semble pas être le «reverse» selon la façon dont vous interprétez le «reverse». Par exemple, si.../cpu/isolated
revient2,4
parce qu'ils avaient été isolés,.../cpu/possible
reviendrait0-191
./sys/devices/system/cpu/present
qui montre quels processeurs existent, plutôt que/sys/devices/system/cpu/possible
quels spectacles quels processeurs pourraient éventuellement exister (mais peuvent ne pas exister actuellement). Sur certains systèmes, ils sont les mêmes, mais même sur un bureau assez basique, j'ai vérifié, ils ne le sont pas.L'un des moyens les plus faciles de détecter si
isolcpus
consulte estproc
de voir quels paramètres ont été transmis au noyau lors de l'exécution.Pour cela, vous utiliseriez:
Comme vous pouvez le voir, dans cet exemple particulier a
isolcpus=2,3
été passé comme argument au noyau en cours d'exécution.Vous pouvez également utiliser
taskset
pointé vers le PID 1. Comme PID 1 est le PID standard pour la première tâche lancée par le noyau, nous pouvons prendre comme une assez bonne indication qu'il reflètera si nous avonsisolcpus
travaillé. Un péché:Comparaison avec la
lscpu
commande sur le même serveur:Comme on peut le voir,
lscpu
affiche 4 CPU / cores, alors qu'iltaskset
ne montre que 0,1, donc cela montre queisolcpus
ça fonctionne ici.Jetez un œil à: Comment garantir la disponibilité exclusive du processeur pour un processus en cours?
la source
/proc/cmdline
est la copie exacte du contenu dugrub.conf
fichier. Ce n'est pas ce que j'ai demandé! Merci quand même !Vous pouvez vérifier Cpus_allowed et Cpus_allowed_list pour le processus shell actuel pour voir quels cpus étaient réservés
par exemple
signifie que le cpu = 2 a été réservé par
isolcpus
sur un serveur 6 cpusla source
ssh
et que l'on avait limité manuellement l'affinité du parentsshd
au CPU 1, vous verriez toujours le CPU 1, qu'ilisolcpus
ait "pris" ou non. La$$
branche vous donne les valeurs héritées du processus, pas celles du système d'origine.