Ich habe beschlossen, die Anzahl der CPUs zu überprüfen, aber ich habe beschlossen, sie in einer Umgebung zu überprüfen, in der der normalerweise verwendete Befehl "sar" nicht verwendet werden kann. Deshalb habe ich ihn gegoogelt und werde ihn zusammenfassen.
Darüber hinaus ist das Ergebnis der Ausführung von sar in der Umgebung, in der sysstat installiert ist und die sar-Einstellungen abgeschlossen sind, wie folgt.
In diesem Artikel werden wir die folgenden (4 CPU) behandeln, wie man ohne Verwendung des Befehls sar prüft
.
[root@$hostname ~]# sar
Linux (Abkürzung) (4 CPU)
11:03:41 LINUX RESTART (4 CPU)
11:10:01 AM CPU %user %nice %system %iowait %steal %idle
11:20:01 AM all 0.00 0.00 0.01 0.00 0.00 99.99
Average: all 0.00 0.00 0.01 0.00 0.00 99.99
[root@$hostname ~]#
―― 2. Informationen zur Überprüfungsumgebung / -version --3 [Methode 1] Überprüfen Sie die Anzahl der CPUs mit dem Befehl lscpu ―― 4. [Methode 2] Überprüfen Sie die Anzahl der CPUs, indem Sie reproduzieren, was sar tut ―― 5. Wie zählt sar CPU [0-9] +? ―― 6. Welche CPU kann mit sar bestätigt werden? ―― 7. Beziehung zwischen dem logischen Prozessor und der Anzahl der physischen Kerne, Sockets und Threads --8 [beiseite] Vergleich von sar -r Befehl und freiem Befehl ―― 9. Referenz
/etc/cron.d/sysstat
# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# 0 * * * * root /usr/lib64/sa/sa1 600 6 &
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A
Diese Methode ist die einfachste.
[root@$hostname ~]# lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 4
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
[root@$hostname ~]#
Quelle: sar Installations- und Konfigurationsverfahren
Der Grund wird im nächsten Kapitel behandelt, aber es stellt sich heraus, dass sar die Anzahl der CPUs in / sys / Geräte / System / CPU / CPU [0-9] +
zählt.
[root@$hostname ~]# ls /sys/devices/system/cpu/ | grep -E "cpu[0-9]+"
cpu0
cpu1
cpu2
cpu3
[root@$hostname ~]# ls /sys/devices/system/cpu/ | grep -E "cpu[0-9]+" | wc -l
4
[root@$hostname ~]#
Wie zählt sar nun CPU [0-9] +? Hier habe ich den Quellcode von sar untersucht. Der Quellcode ist auf github verfügbar. Wie unten gezeigt, werden der Teil, in dem "CPU [0-9] + gezählt wird", und der Teil, in dem die Zielpfadzählung "CPU [0-9] +" definiert ist, extrahiert.
--cpu [0-9] + wird gezählt
/*
***************************************************************************
* Count number of processors in /sys.
*
* IN:
* @highest If set to TRUE, then look for the highest processor number.
* This is used when eg. the machine has 4 CPU numbered 0, 1, 4
* and 5. In this case, this procedure will return 6.
*
* RETURNS:
* Number of processors (online and offline).
* A value of 0 means that /sys was not mounted.
* A value of N (!=0) means N processor(s) (cpu0 .. cpu(N-1)).
***************************************************************************
*/
int get_sys_cpu_nr(int highest)
{
DIR *dir;
struct dirent *drd;
struct stat buf;
char line[MAX_PF_NAME];
int num_proc, proc_nr = -1;
/* Open relevant /sys directory */
if ((dir = opendir(SYSFS_DEVCPU)) == NULL)
return 0;
/* Get current file entry */
while ((drd = readdir(dir)) != NULL) {
if (!strncmp(drd->d_name, "cpu", 3) && isdigit(drd->d_name[3])) {
snprintf(line, MAX_PF_NAME, "%s/%s", SYSFS_DEVCPU, drd->d_name);
line[MAX_PF_NAME - 1] = '\0';
if (stat(line, &buf) < 0)
continue;
if (S_ISDIR(buf.st_mode)) {
if (highest) {
sscanf(drd->d_name + 3, "%d", &num_proc);
if (num_proc > proc_nr) {
proc_nr = num_proc;
}
}
else {
proc_nr++;
}
}
}
}
/* Close directory */
closedir(dir);
return (proc_nr + 1);
}
Quelle: [https://github.com/sysstat/sysstat/blob/master/count.c] (https://github.com/sysstat/sysstat/blob/master/count.c)
Der C-Code selbst ist nicht sehr detailliert, daher kann er falsch sein, aber ich denke, er zählt wahrscheinlich "CPU [0-9] +" unter "SYSFS_DEVCPU".
| /* Files */ |
|:--|:--|:--|:--|
| #define STAT | | | PRE "/proc/stat" |
(Abkürzung)
| #define SYSFS_DEVCPU | | PRE "/sys/devices/system/cpu" |
(Abkürzung)
| #define SLASH_DEV | | PRE "/dev/" |
出所:github.com/sysstat/sysstat/blob/master/common.h
Solange Sie sich auf die Kerneldokumentation beziehen, können Sie sich die CPU vorstellen, die von sar als logischer Prozessor bestätigt werden kann.
What: /sys/devices/system/cpu/ (Weggelassen) Description: A collection of both global and individual CPU attributes Individual CPU attributes are contained in subdirectories named by the kernel's
logical CPU number
, e.g.:/sys/devices/system/cpu/cpu#/
Quelle: [Kerneldokumentation sysfs-Geräte-System-CPU] (https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu)
Zu diesem Zeitpunkt habe ich lscpu ausgeführt und war neugierig auf die Beziehung zwischen dem angezeigten logischen Prozessor und der Anzahl der physischen Kerne, Sockets und Threads. Deshalb habe ich sie untersucht.
Im folgenden Blog wird die Beziehung zwischen dem logischen Prozessor und der Anzahl der physischen Kerne, Sockets und Threads anhand des Ausführungsergebnisses des Befehls lscpu vorgestellt.
Logischer Prozessor = Anzahl der CPU-Sockel x Anzahl der physischen Kerne / Socket x Anzahl der Threads / Anzahl der physischen Kerne
The total number of logical cores = CPU sockets × physical cores per socket × threads per physical core. Therefore, the computer has 2 × 8 × 2 = 32 logical cores in total. CPU(s): 32
Quelle: [Wie viele physische und logische CPU-Kerne in Ihrem Computer | Wei Bai White 巍](https://baiweiblog.wordpress.com/2017/10/27/how-many-physical-and-logical-cpu-cores- in deinem Computer /)
[root@$hostname ~]# lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 4 #Logischer Prozessor
Thread(s) per core: 1 #Anzahl der Themen/Anzahl der physischen Kerne
Core(s) per socket: 4 #Anzahl der physischen Kerne/Steckdose
Socket(s): 1 #Anzahl der CPU-Buchsen
[root@$hostname ~]#
Übrigens habe ich neulich in [Versuchen und Verstehen], wie Linux funktioniert ~ Grundkenntnisse über Betriebssystem und Hardware, die durch Experimente und Illustrationen erlernt wurden gelesen. Die Erklärung des Unterschieds zwischen dem Befehl sar -r und dem Befehl free war leicht zu verstehen, also lassen Sie mich sie vorstellen.
Feld des freien Befehls | sar -r Befehlsfeld | Inhalt |
---|---|---|
total | Unzutreffend | Die Gesamtmenge des im System installierten Speichers. |
free | kbmemfree | Scheinbarer freier Speicher. |
buff/cache | kbbuffers + kbcached | Speicher, der vom Puffercache und Seitencache verwendet wird. Wenn dem System der freie Speicherplatz ausgeht, wird er vom Kernel freigegeben. |
available | Unzutreffend | Praktisch freier Speicher. Der Wert des Felds plus die Größe des Speicherbereichs im Kernel, der freigegeben werden kann, wenn nicht genügend freier Speicher vorhanden ist. Der Speicher, der freigegeben werden kann, umfasst den größten Teil des Puffer- und Seitencaches sowie einen Teil des anderen Kernelspeichers. |
Referenz: [Versuchen und verstehen] Funktionsweise von Linux ~ Grundkenntnisse über Betriebssystem und Hardware, die durch Experimente und Illustrationen erlernt wurden (Teilweise vom Autor geändert)
** Ergebnis der freien Befehlsausführung **
[root@$hostname ~]# free
total used free shared buff/cache available
Mem: 16256588 239692 14588360 24948 1428536 15692440
Swap: 0 0 0
** Ergebnis der Ausführung des Befehls sar -r **
[root@$hostname ~]# sar -r | head
Linux (Abkürzung) (4 CPU)
11:03:41 LINUX RESTART (4 CPU)
11:10:01 AM kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
11:20:01 AM 14581020 15690700 1675568 10.31 2716 1333316 311968 1.92 399160 993580 0
11:30:01 AM 14580936 15690652 1675652 10.31 2716 1333324 296508 1.82 399204 993332 0
11:40:01 AM 14580064 15689796 1676524 10.31 2716 1333328 315288 1.94 400016 993336 0
11:50:01 AM 14581008 15690804 1675580 10.31 2716 1333336 315288 1.94 399880 992556 20
12:00:01 PM 14580612 15690412 1675976 10.31 2716 1333344 323312 1.99 401148 991320 0
[root@$hostname ~]#
Auf fukabori.fm gab es ein Thema im Zusammenhang mit cpuinfo, das in diesem Artikel behandelt wurde, also habe ich es ein wenig transkribiert.
Ich kann mit dem Tippen nicht Schritt halten und es ist kaputt.
Linux kann wie ein Verzeichnis oder eine Datei behandelt werden, in der Hardwareinformationen wie / dev gespeichert sind. Apropos Linux, CPU usw. Sie können verschiedene Informationen wie eine Datei behandeln, die keine Datei ist. Und es kann mithilfe eines Mechanismus namens Pipes in nachfolgende Programme übertragen werden, egal ob es sich um eine Datei oder etwas anderes als eine Datei handelt. Behandeln Sie alles wie eine Datei und verbinden Sie den Datenein- und -ausgang mit Standardeingängen und -ausgängen. Überlassen wir die schwierigen Dinge der nachfolgenden Verarbeitung. Die Designphilosophie ist mit verschiedenen Dingen verbunden. Es ist eine starke Einschränkung, dass dies auf die gleiche Weise behandelt werden kann. Zeigt eine hohe Wiederverwendbarkeit.
Quelle: 28. Ästhetisches Auge der Technologieauswahl (1) w / twada
Recommended Posts