J'ai décidé de vérifier le nombre de processeurs, mais j'ai décidé de le vérifier dans un environnement où la commande sar
que j'utilise habituellement ne peut pas être utilisée, donc je l'ai googlé, donc je vais le résumer.
De plus, le résultat de l'exécution de sar dans l'environnement où sysstat est installé et les paramètres sar sont terminés est le suivant.
Dans cet article, nous allons couvrir ce qui suit (4 CPU) comment vérifier sans utiliser la commande sar
.
[root@$hostname ~]# sar
Linux (Abréviation) (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. Environnement de vérification / informations sur la version --3 [Méthode 1] Vérifiez le nombre de processeurs à l'aide de la commande lscpu ―― 4. [Méthode 2] Vérifiez le nombre de processeurs en reproduisant ce que fait Sar ―― 5. Comment sar compte-t-il le CPU [0-9] +? ―― 6. Quelle est la CPU qui peut être confirmée avec sar? ―― 7. Relation entre le processeur logique et le nombre de cœurs physiques, de sockets et de threads --8 [A part] Comparaison de la commande sar -r et de la commande libre ―― 9. Référence
/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
Cette méthode est la plus simple.
[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 ~]#
Source: procédure d'installation et de configuration du sar
La raison sera traitée dans le chapitre suivant, mais il s'avère que sar compte le nombre de CPU dans / sys / devices / system / cpu / cpu [0-9] +
.
[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 ~]#
Maintenant, comment sar compte-t-il CPU [0-9] +? Ici, j'ai étudié le code source de sar. Le code source est disponible sur github. Comme indiqué ci-dessous, la partie où «cpu [0-9] + est compté» et la partie où le chemin cible comptant «cpu [0-9] + est défini» sont extraites.
--cpu [0-9] + est compté
/*
***************************************************************************
* 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);
}
Source: [https://github.com/sysstat/sysstat/blob/master/count.c] (https://github.com/sysstat/sysstat/blob/master/count.c)
Le code C lui-même n'est pas très détaillé, donc il est peut-être faux, mais je pense qu'il compte probablement cpu [0-9] +
sous SYSFS_DEVCPU
.
--cpu [0-9] + Le chemin à compter
| /* Files */ |
|:--|:--|:--|:--|
| #define STAT | | | PRE "/proc/stat" |
(Abréviation)
| #define SYSFS_DEVCPU | | PRE "/sys/devices/system/cpu" |
(Abréviation)
| #define SLASH_DEV | | PRE "/dev/" |
出所:github.com/sysstat/sysstat/blob/master/common.h
Tant que vous vous référez à la documentation du noyau, vous pouvez penser au processeur qui peut être confirmé par sar comme un processeur logique.
What: /sys/devices/system/cpu/ (Omis) 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#/
Source: [documentation du noyau sysfs-devices-system-cpu] (https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu)
À ce stade, j'ai exécuté lscpu et j'étais curieux de connaître la relation entre le processeur logique affiché et le nombre de cœurs physiques, de sockets et de threads, alors je l'ai étudié.
Le blog suivant présente la relation entre le processeur logique et le nombre de cœurs physiques, de sockets et de threads en prenant le résultat de l'exécution de la commande lscpu comme exemple.
Processeur logique = nombre de sockets cpu x nombre de cœurs physiques / socket x nombre de threads / nombre de cœurs physiques
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
Source: [Combien de cœurs de processeur physiques et logiques dans votre ordinateur | Wei Bai White 巍](https://baiweiblog.wordpress.com/2017/10/27/how-many-physical-and-logical-cpu-cores- dans-votre-ordinateur /)
[root@$hostname ~]# lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 4 #Processeur logique
Thread(s) per core: 1 #Le nombre de fils/Nombre de cœurs physiques
Core(s) per socket: 4 #Nombre de cœurs physiques/prise
Socket(s): 1 #Nombre de prises cpu
[root@$hostname ~]#
Au fait, dans [Essayez de comprendre] Comment fonctionne Linux ~ Connaissance de base du système d'exploitation et du matériel acquise grâce à des expériences et des illustrations, j'ai lu l'autre jour. L'explication de la différence entre la commande sar -r et la commande libre `était facile à comprendre, alors laissez-moi vous la présenter.
champ de commande libre | sar -champ de commande r | Contenu |
---|---|---|
total | N'est pas applicable | La quantité totale de mémoire installée dans le système. |
free | kbmemfree | Mémoire libre apparente. |
buff/cache | kbbuffers + kbcached | Mémoire utilisée par le cache de tampon et le cache de page. Lorsque le système manque de mémoire libre, il sera libéré par le noyau. |
available | N'est pas applicable | Mémoire pratiquement libre. La valeur du champ plus la taille de la zone de mémoire dans le noyau qui peut être libérée lorsqu'il n'y a pas assez de mémoire libre. La mémoire qui peut être libérée comprend la majeure partie du cache tampon et du cache de page, ainsi qu'une partie de la mémoire du noyau. |
Référence: [Essayer et comprendre] Fonctionnement de Linux ~ Connaissance de base du système d'exploitation et du matériel acquise grâce à des expériences et des illustrations (partiellement modifié par l'auteur)
** Résultat d'exécution de commande gratuit **
[root@$hostname ~]# free
total used free shared buff/cache available
Mem: 16256588 239692 14588360 24948 1428536 15692440
Swap: 0 0 0
** résultat de l'exécution de la commande sar -r **
[root@$hostname ~]# sar -r | head
Linux (Abréviation) (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 ~]#
Sur fukabori.fm, il y avait un sujet lié à cpuinfo qui a été traité dans cet article, donc je l'ai un peu transcrit.
Je ne peux pas suivre la frappe et c'est cassé.
Linux peut être traité comme un répertoire ou un fichier qui stocke des informations matérielles telles que / dev. En parlant de Linux, cpuinfo etc. Vous pouvez traiter diverses informations comme un fichier qui n'est pas un fichier. Et il peut être lancé aux programmes suivants, que ce soit un fichier ou quelque chose de non-fichier, en utilisant un mécanisme appelé pipes. Traitez tout comme un fichier et connectez l'entrée et la sortie de données avec les entrées et sorties standard. Laissons les choses difficiles au traitement ultérieur. La philosophie du design est liée à diverses choses. Le fait que cela puisse être traité de la même manière est une forte restriction. Démontre une réutilisabilité élevée.
Source: 28. Oeil esthétique de la sélection de la technologie (1) w / twada
Recommended Posts