GNU/Linux >> Tutoriels Linux >  >> Linux

comment détecter si isolcpus est activé ?

Ce que vous recherchez doit se trouver dans ce fichier virtuel :

/sys/devices/system/cpu/isolated

et l'inverse dans

/sys/devices/system/cpu/present    // Thanks to John Zwinck

A partir du drivers/base/cpu.c on voit que la source affichée est la variable noyau cpu_isolated_map :

static ssize_t print_cpus_isolated(struct device *dev,
    n = scnprintf(buf, len, "%*pbl\n", cpumask_pr_args(cpu_isolated_map));
...
static DEVICE_ATTR(isolated, 0444, print_cpus_isolated, NULL);

et cpu_isolated_map est exactement ce qui est défini par kernel/sched/core.c au démarrage :

/* Setup the mask of cpus configured for isolated domains */
static int __init isolated_cpu_setup(char *str)
{
    int ret;

    alloc_bootmem_cpumask_var(&cpu_isolated_map);
    ret = cpulist_parse(str, cpu_isolated_map);
    if (ret) {
            pr_err("sched: Error, all isolcpus= values must be between 0 and %d\n", nr_cpu_ids);
            return 0;
    }
    return 1;
}

Mais comme vous l'avez observé, quelqu'un aurait pu modifier l'affinité des processus, y compris ceux générés par des démons, cron , systemd etc. Si cela se produit, de nouveaux processus seront générés en héritant du masque d'affinité modifié, et non de celui défini par isolcpus .

Donc, ce qui précède vous donnera isolcpus comme vous l'avez demandé, mais cela pourrait toujours ne pas être utile.

Supposons que vous découvriez que 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 , pensant qu'il est en mode monoprocesseur par erreur, et essayant utilement de « réparer les choses » en réinitialisant le masque d'affinité. Si tel était le cas, vous pourriez essayer d'isoler les CPU 0-5 au lieu de 1-6, et voir si cela fonctionne.


L'un des moyens les plus simples de détecter si isolcpus consulte proc pour voir quels paramètres ont été transmis au noyau lors de l'exécution.

Pour cela, vous utiliserez :

$cat /proc/cmdline 
BOOT_IMAGE=/boot/vmlinuz-4.8.0-1-amd64 root=/dev/sda1 ro isolcpus=2,3 quiet

Comme vous pouvez le voir, dans cet exemple particulier isolcpus=2,3 a été passé en argument au noyau en cours d'exécution.

Vous pouvez également utiliser taskset pointé vers PID 1. Comme PID 1 est le PID standard pour la première tâche lancée par le noyau, nous pouvons considérer comme une assez bonne indication qu'il reflétera si nous avons isolcpus travail. Comme dans :

$taskset -cp 1
pid 1's current affinity list: 0,1

En comparaison avec le lscpu commande dans le même serveur :

$lscpu | grep CPU.s
CPU(s):                4
On-line CPU(s) list:   0-3
NUMA node0 CPU(s):     0-3

Comme on peut le voir, lscpu affiche 4 CPU/cœurs, tandis que taskset ne montre que 0,1, donc cela montre isolcpus travaille ici.

Consultez :Comment garantir la disponibilité exclusive du processeur pour un processus en cours d'exécution ?


Vous pouvez vérifier Cpus_allowed et Cpus_allowed_list pour le processus shell actuel pour voir quels processeurs ont été réservés

cat /proc/$$/status|tail -6

par exemple

Cpus_allowed_list:      0-1, 3-5

signifie que le cpu=2 a été réservé par isolcpus sur un serveur 6 processeurs


Linux
  1. Comment détecter et découvrir qu'un programme est dans l'impasse ?

  2. Comment voir les tailles de paquet pip installées ?

  3. Comment détecter la disponibilité de l'interface graphique dans Bash/Shell ?

  4. Comment puis-je voir la sortie dmesg à mesure qu'elle change?

  5. Comment puis-je voir du en Go au lieu de Mo sous Linux ?

Comment voir les notifications Android sur le bureau Ubuntu

Huawei E173 sur Ubuntu 12.04 ?

Comment voir les utilisateurs connectés sous Linux

Comment détecter et gérer les appareils sous Linux

Comment afficher les statistiques de cPanel

Comment puis-je voir la documentation Python sur Linux ?