GNU/Linux >> LINUX-Kenntnisse >  >> Linux

wie erkennt man ob isolcpus aktiviert ist?

Was Sie suchen, sollte in dieser virtuellen Datei zu finden sein:

/sys/devices/system/cpu/isolated

und umgekehrt in

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

Ab drivers/base/cpu.c Wir sehen, dass die angezeigte Quelle die Kernelvariable cpu_isolated_map ist :

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);

und cpu_isolated_map ist genau das, was durch kernel/sched/core.c gesetzt wird beim Booten:

/* 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;
}

Aber wie Sie beobachtet haben, könnte jemand die Affinität von Prozessen geändert haben, einschließlich der von Dämonen erzeugten, cron , systemd usw. Wenn das passiert, werden neue Prozesse erzeugt, die die modifizierte Affinitätsmaske erben, nicht die von isolcpus festgelegte .

Das Obige ergibt also isolcpus wie Sie es angefordert haben, aber das ist möglicherweise immer noch nicht hilfreich.

Angenommen, Sie finden heraus, dass isolcpus ausgegeben wurde, aber nicht "genommen" wurde, könnte dieses unerwünschte Verhalten auftreten von einem Prozess abgeleitet werden, der erkennt, dass er nur an CPU=0 gebunden ist , glauben, dass es sich versehentlich im Monoprozessormodus befindet, und versuchen hilfreich, "die Dinge in Ordnung zu bringen", indem Sie die Affinitätsmaske zurücksetzen. In diesem Fall könnten Sie versuchen, die CPUs 0-5 anstelle von 1-6 zu isolieren und sehen, ob dies funktioniert.


Eine der einfacheren Möglichkeiten, um zu erkennen, ob isolcpus konsultiert proc um zu sehen, welche Parameter zur Laufzeit an den Kernel übergeben wurden.

Dafür würden Sie verwenden:

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

Wie Sie sehen können, in diesem speziellen Beispiel isolcpus=2,3 wurde als Argument an den laufenden Kernel übergeben.

Sie können auch taskset verwenden zeigte auf PID 1. Da PID 1 die Standard-PID für die erste vom Kernel gestartete Aufgabe ist, können wir als ziemlich guten Hinweis darauf werten, dass sie widerspiegelt, ob wir isolcpus haben Arbeiten. Wie in:

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

Im Vergleich zum lscpu Befehl auf demselben Server:

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

Wie man sieht, lscpu zeigt 4 CPU/Kerne, während taskset zeigt nur 0,1, also zeigt dies isolcpus arbeitet hier.

Sehen Sie sich an:Wie kann die exklusive CPU-Verfügbarkeit für einen laufenden Prozess sichergestellt werden?


Sie können Cpus_allowed überprüfen und Cpus_allowed_list für den aktuellen Shell-Prozess, um zu sehen, welche CPUs reserviert wurden

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

für zB

Cpus_allowed_list:      0-1, 3-5

bedeutet, dass CPU=2 von isolcpus reserviert wurde auf einem 6-CPU-Server


Linux
  1. Wie erkennt man Virtualisierung mit Sys::Detect::Virtualization Perl-Skript?

  2. Wie erkennt man, ob die Shell von ssh aus gesteuert wird?

  3. Wie erkennt man Bash>=4.0?

  4. Wie erkennt man ein Speicherleck?

  5. Wie erkennt man die Änderung der IP-Adresse programmgesteuert in Linux?

So sehen Sie Android-Benachrichtigungen auf Ubuntu Desktop

Huawei E173 auf Ubuntu 12.04?

So sehen Sie angemeldete Benutzer in Linux

So erkennen und verwalten Sie Geräte unter Linux

So zeigen Sie cPanel-Statistiken an

Wie sehe ich das Python-Dokument unter Linux?