Révision Glossaire EN

Taille

Yeux

Termine une partie dans un dojo pour débloquer les yeux suivants.

Glossaire

/proc
Un pseudo-système de fichiers : proc(5) le décrit comme « an interface to kernel data structures ». Ses fichiers ne sont stockés sur aucun disque. Le noyau écrit le texte d’un fichier au moment où tu le lis.
Lire /proc
/proc/<pid>
Un répertoire par processus, nommé par son PID, avec des fichiers comme stat, status, cmdline, environ, limits et le répertoire fd/ (chapitre 05). /proc/self pointe vers le répertoire du lecteur lui-même.
Lire /proc
%util
La part de l’intervalle pendant laquelle le périphérique avait au moins une requête d’I/O en cours. iostat la calcule à partir du compteur io_ticks du noyau.
Les I/O disque et iostat
%wait
Une colonne de pidstat : la part de temps CPU qu’une tâche a passée « waiting to run ». Elle compte le temps dans la file d’exécution. L’attente du disque apparaît ailleurs, dans wa chez vmstat.
Un serveur lent en 60 secondes
`/etc/sysctl.d`
Un dossier de fichiers .conf avec des lignes comme net.core.somaxconn = 4096. Au démarrage, systemd-sysctl.service les applique avec ceux de /run/sysctl.d, /usr/local/lib/sysctl.d et /usr/lib/sysctl.d.
Les paramètres du noyau
`/proc/<pid>/ns`
Un dossier avec un lien symbolique par namespace d’un processus, comme net -> net:[4026531833]. Deux processus sont dans le même namespace quand les numéros sont égaux.
Les namespaces
`cgroup.subtree_control`
Le fichier où un cgroup active des contrôleurs pour ses enfants : echo "+cpu +memory" > cgroup.subtree_control. Ça crée les fichiers cpu.* et memory.* dans chaque enfant.
Les cgroups v2
`cpu.stat`
Le fichier du cgroup qui porte les compteurs. nr_periods compte les périodes où le groupe avait du travail, nr_throttled celles où il a été throttlé, et throttled_usec le temps total passé à attendre.
Limites CPU et throttling
`errnoRet`
Le numéro d’erreur qu’une règle renvoie à la place de l’appel. Le profil de Docker le règle à ENOSYS (38, « Function not implemented ») pour clone3.
seccomp
128 + N
La règle de bash, runc et tini pour faire tenir une mort par le signal N dans un seul code : SIGKILL (9) donne 137, SIGTERM (15) donne 143.
Les codes de sortie
Action par défaut
Ce que fait le profil d’un appel système qu’aucune règle ne nomme. Dans le profil par défaut de Docker, c’est SCMP_ACT_ERRNO avec EPERM : l’appel échoue avec « Operation not permitted » sans s’exécuter.
seccomp
Allocation différée
write(2) ne fait que réserver de la place, et ext4 choisit les blocs du disque juste avant d’y écrire les données. C’est l’option de montage delalloc, active par défaut.
Systèmes de fichiers et journalisation
Appel système
Une demande d’un processus au noyau, comme openat pour ouvrir un fichier ou connect pour ouvrir une socket. Chacun renvoie une valeur, et -1 avec un code errno en cas d’échec.
Observer les appels système avec strace
apt
L’outil qui lit les listes de paquets des sources de /etc/apt/sources.list.d/, calcule quoi installer, mettre à jour ou retirer, télécharge les paquets et appelle dpkg.
Les paquets
aqu-sz
Le nombre moyen de requêtes en cours pendant l’intervalle, c’est-à-dire la profondeur de file que voit le périphérique. Les anciennes versions d’iostat l’appelaient avgqu-sz.
Les I/O disque et iostat
Arène
Une réserve de mémoire dans laquelle malloc de la glibc puise, avec son propre verrou. L’arène principale agrandit le [heap] avec brk ; les autres vivent dans des régions mmap de 64 Mio au plus.
Trouver une fuite mémoire
await
Le temps moyen en millisecondes entre la création d’une requête dans la couche bloc et sa fin : attente en file plus temps passé sur le périphérique. r_await vaut pour les lectures, w_await pour les écritures.
Les I/O disque et iostat
Badness
Le score que oom_badness() donne à chaque processus : pages résidentes, pages dans le swap, pages de tables de pages, plus la part liée à oom_score_adj. Le score le plus haut est tué.
L’OOM killer
Bit set-group-ID
Le bit de mode 02000, affiché s à la place de l’exécution du groupe. Sur un programme, il fixe le GID effectif ; sur un répertoire, les nouveaux fichiers y prennent le groupe du répertoire.
Les permissions au-delà de rwx
Bit set-user-ID
Le bit de mode 04000, affiché s à la place de l’exécution du propriétaire. Quand on exécute un programme qui l’a, execve donne au processus l’UID effectif du propriétaire du fichier.
Les permissions au-delà de rwx
Blocs réservés
Une part d’un système de fichiers ext4 que seul root (ou l’utilisateur et le groupe fixés par tune2fs -u et -g) peut allouer. mke2fs la fixe à 5 % par défaut.
Un disque plein qui a encore de la place
Buffer pool
Un cache de pages de fichiers qu’une base de données garde dans sa propre mémoire, en lisant et écrivant avec pread et pwrite. C’est ce que mmap remplace.
mmap
Cache de pages
Des pages de RAM qui contiennent le contenu de fichiers, remplies quand un processus lit ou écrit un fichier. /proc/meminfo le montre sous Cached, avec tmpfs et la mémoire partagée.
Le cache de pages
Capability
Une part des pouvoirs de root, nommée CAP_ suivi d’un mot : CAP_CHOWN change le propriétaire d’un fichier, CAP_NET_BIND_SERVICE ouvre un port sous 1024. Chaque thread a ses propres ensembles de capabilities.
Les capabilities
Capability de fichier
Des capabilities posées sur un exécutable dans l’attribut étendu security.capability, avec setcap. Un processus non root qui lance ce fichier peut ainsi gagner une capability.
Les capabilities
cgroup
Un dossier sous /sys/fs/cgroup qui contient un groupe de processus, listés dans son fichier cgroup.procs. cgroup v2 n’a qu’un seul arbre, et chaque processus est dans exactement un cgroup de cet arbre.
Les cgroups v2
Charge moyenne (load average)
Trois nombres dans /proc/loadavg, aussi affichés par uptime et top : une moyenne amortie des tâches exécutables ou en sommeil non interruptible, avec des constantes de 1, 5 et 15 minutes.
La charge moyenne et l’ordonnanceur
Chargeur de démarrage
Le programme que lance le firmware, comme GRUB ou systemd-boot. Il charge le noyau et l’initramfs en mémoire et transmet la ligne de commande du noyau.
Le démarrage de Linux
Code de sortie
Le nombre qu’un processus passe à exit() en se terminant. Seuls les 8 bits de poids faible arrivent au parent : il vaut donc entre 0 et 255. 0 veut dire succès.
Les codes de sortie
Compteur de liens
Le nombre d’entrées de répertoire (de noms) qui pointent vers un inode. rm le baisse de un. Le noyau libère l’inode et ses blocs quand le compteur vaut 0 et qu’aucun processus n’a le fichier ouvert.
Un disque plein qui a encore de la place
Contrôleur
La partie du noyau qui limite une ressource pour un cgroup : cpu, memory, io, pids et d’autres. Ses réglages sont des fichiers à son préfixe, comme cpu.max ou memory.max.
Les cgroups v2
Copy-up
L’étape où overlayfs copie un fichier d’un répertoire inférieur vers le répertoire supérieur, avant la première écriture ou avant un changement de propriétaire ou de droits.
Les couches d’image et overlayfs
data=ordered
Le mode par défaut d’ext4 : seules les métadonnées passent par le journal, et les blocs de données d’une transaction sont écrits avant le commit de ses métadonnées.
Systèmes de fichiers et journalisation
Délai de grâce
Les secondes que docker stop attend entre le signal d’arrêt et SIGKILL. 10 par défaut, réglable avec --stop-timeout ou docker stop -t.
Les signaux
Dépendance d’ordre
After= et Before=. After=b.service dans a.service veut dire : si les deux démarrent, a attend que b ait fini de démarrer. Elle ne lance rien à elle seule.
Les unités systemd
Dépendance de besoin
Wants= et Requires=. Démarrer l’unité démarre aussi les unités listées. Avec Requires=, arrêter ou redémarrer explicitement une unité listée arrête ou redémarre aussi celle-ci.
Les unités systemd
Descripteur de fichier
Un petit entier qui sert d’index dans la table des fichiers, sockets et pipes ouverts du processus. read(), write() et close() le prennent en premier argument.
Les descripteurs de fichiers
Disposition
Ce que fait un processus quand un signal donné arrive : l’action par défaut (souvent terminer), l’ignorer, ou lancer un handler.
Les signaux
dpkg
L’outil de bas niveau qui dépaquette et configure les fichiers .deb et note l’état de chaque paquet dans /var/lib/dpkg/status. Il installe ce que tu lui donnes et ne télécharge aucune dépendance.
Les paquets
Durable
Toujours là après un plantage ou une coupure de courant. Une donnée est durable dès qu’un fsync sur elle a renvoyé 0.
fsync et durabilité
EMFILE
L’erreur 24, « Too many open files » : l’appel avait besoin d’un nouveau descripteur, et le processus utilise déjà tous les numéros sous sa limite souple.
Les descripteurs de fichiers
ENOSPC
Le code d’erreur qu’un appel système renvoie quand le périphérique n’a plus de place. Son message est No space left on device. write le renvoie quand il manque des blocs, open quand il ne peut pas créer un nouveau fichier.
Un disque plein qui a encore de la place
Ensemble effectif
Les capabilities que le noyau vérifie quand le thread demande une action privilégiée. La ligne CapEff de /proc/<pid>/status l’affiche en masque hexadécimal.
Les capabilities
Ensemble limite
Le plafond des capabilities qu’un thread peut gagner en lançant un nouveau programme avec execve(2). La ligne CapBnd de /proc/<pid>/status l’affiche. En anglais : bounding set.
Les capabilities
Entrée de répertoire
Une ligne d’un répertoire qui associe un nom à un numéro d’inode. ls -i affiche ce numéro à côté du nom.
Inodes et liens
errno
Le code d’erreur que laisse un appel système raté, comme ENOENT (fichier absent) ou EACCES (permission refusée). strace l’affiche après = -1.
Observer les appels système avec strace
Exécutable (R)
Une tâche qui tourne sur un CPU ou qui attend son tour dans la file d’un CPU. ps l’affiche R.
La charge moyenne et l’ordonnanceur
execve()
L’appel système qui remplace le programme du processus appelant par un autre. Le PID ne change pas.
Comment démarre un processus
Fichier d’unité
Un fichier au format ini, comme /etc/systemd/system/app.service, avec une section [Unit], une [Service] et une [Install]. systemd le lit au démarrage de la machine et à chaque systemctl daemon-reload.
Les unités systemd
Filtre seccomp
Un petit programme BPF attaché à un processus. Le noyau l’exécute à chaque appel système, avec le numéro de l’appel et ses arguments, avant que l’appel ne tourne. Seccomp: 2 dans /proc/<pid>/status indique un filtre actif.
seccomp
fork()
L’appel système qui copie le processus appelant. Il renvoie 0 dans le nouvel enfant et le PID de l’enfant dans le parent.
Comment démarre un processus
fsync
L’appel système qui écrit les pages sales et les métadonnées d’un fichier du cache de pages vers le périphérique, et ne rend la main que quand le périphérique annonce le transfert terminé.
fsync et durabilité
Grande page
Une page projetée depuis un niveau plus haut de la table des pages. Sur x86, cela donne des pages de 2 MB ou 1 GB à côté des pages normales de 4 KB.
Les grandes pages
Groupe de volumes (VG)
lvm(8) : « a collection of one or more physical devices, each called a Physical Volume (PV) ». Sa place sert de réserve pour les volumes logiques.
Disques, partitions et LVM
Handler
Une fonction que le programme enregistre avec sigaction(). Le noyau l’appelle à l’arrivée du signal. SIGKILL et SIGSTOP ne peuvent pas en avoir.
Les signaux
Hold
Un état de sélection de dpkg : le paquet reste à sa version, avec « no automatic new installs, upgrades or removals » (rien d’installé, mis à jour ou retiré automatiquement). apt-mark hold nginx le pose, et dpkg -l affiche alors hi.
Les paquets
Horloge monotone
CLOCK_MONOTONIC : sous Linux, le temps écoulé depuis le démarrage, moins le temps passé en veille. Personne ne peut la régler, et deux lectures successives ne reculent jamais.
Les horloges et NTP
Horloge murale
CLOCK_REALTIME : la date et l’heure, en secondes depuis le 1970-01-01 00:00 UTC, sans les secondes intercalaires. Root, date -s et les démons NTP peuvent la régler, en avant comme en arrière.
Les horloges et NTP
I/O directe
Des lectures et écritures ouvertes avec O_DIRECT, qui passent entre le buffer du programme et le disque sans le cache de pages. dd iflag=direct l’utilise, donc chaque lecture atteint le périphérique.
Les I/O disque et iostat
initramfs
Une archive cpio compressée que le noyau décompresse en mémoire au démarrage. Son /init tourne en premier, trouve le vrai système de fichiers racine et le monte.
Le démarrage de Linux
Inode
La fiche qu’un système de fichiers garde pour un fichier : type et mode, propriétaire, taille, dates, nombre de liens et emplacement des blocs de données. Elle porte un numéro, et son nom est rangé ailleurs, dans le répertoire.
Inodes et liens
Inode
L’enregistrement qui porte les métadonnées d’un fichier : son propriétaire, son mode, son compteur de liens. ext4 en crée un nombre fixe au moment du mke2fs, donc un disque peut manquer d’inodes avec des gigaoctets encore libres.
Un disque plein qui a encore de la place
Journal
Une zone réservée du système de fichiers, en général l’inode 8 sur ext4, où jbd2 écrit chaque changement de métadonnées avant de l’écrire à sa place définitive.
Systèmes de fichiers et journalisation
Journal
Les fichiers de logs structurés et indexés que systemd-journald écrit dans /var/log/journal/ (gardés d’un boot à l’autre) ou /run/log/journal/ (perdus au reboot). Chaque entrée est un ensemble de champs comme MESSAGE=, PRIORITY= et _SYSTEMD_UNIT=.
Le journal
Kept back
Un paquet installé dont une version plus récente existe, mais que la commande de mise à jour choisie n’installera pas : il faudrait un nouveau paquet, un retrait, ou le paquet est en hold.
Les paquets
khugepaged
Le thread du noyau qui parcourt la mémoire et regroupe après coup des suites de 512 petites pages en une page de 2 MB.
Les grandes pages
Lien physique
Une deuxième entrée de répertoire avec le même numéro d’inode que la première. Le nombre de liens de l’inode augmente de un.
Inodes et liens
Lien symbolique
Un fichier à part, avec son propre inode, dont le contenu est un chemin. Le noyau suit ce chemin quand tu ouvres le lien.
Inodes et liens
Limite de débit
Au-delà de RateLimitBurst= messages d’un même service pendant RateLimitIntervalSec=, les messages sont jetés jusqu’à la fin de l’intervalle. journald note ensuite combien il en a jeté.
Le journal
Limite de démarrage
StartLimitBurst= démarrages autorisés par StartLimitIntervalSec=. Une unité qui la dépasse est refusée avec Start request repeated too quickly., et Restart= arrête d’essayer.
Les unités systemd
Limite souple et limite dure
Le noyau applique la limite souple. Un processus sans privilège peut monter sa limite souple jusqu’à la limite dure, que seul un processus avec CAP_SYS_RESOURCE peut relever.
Les descripteurs de fichiers
Listen backlog
La longueur de la file des connexions que le noyau a acceptées pour une socket en écoute et que le programme n’a pas encore prises avec accept(). Le programme la demande dans listen(fd, backlog).
Les paramètres du noyau
Map
Un stockage clé-valeur dans le noyau, partagé entre les programmes eBPF et le processus qui les a chargés. Dans bpftrace, un nom qui commence par @ est une map.
eBPF en pratique
MAP_PRIVATE
Le drapeau d’une projection en copie à l’écriture. La première écriture sur une page donne au processus sa propre copie, et le fichier ne voit jamais le changement.
mmap
MAP_SHARED
Le drapeau de projection avec lequel les écritures vont dans les pages du fichier en cache. Les autres processus qui projettent le même fichier les voient, et le noyau les écrit dans le fichier.
mmap
MemAvailable
L’estimation du noyau « of how much memory is available for starting new applications, without swapping » : les pages libres, plus le cache de pages et la mémoire slab qu’il peut récupérer. free l’affiche dans available.
Le cache de pages
MemFree
La RAM qui ne contient rien du tout. free l’affiche dans la colonne free.
Le cache de pages
Mémoire anonyme
Des pages qui n’appartiennent à aucun fichier : le tas, les piles, un mmap avec MAP_ANONYMOUS, et les copies privées des pages de fichier que le processus a modifiées.
Trouver une fuite mémoire
memory.current
Ce que le cgroup utilise en ce moment : mémoire anonyme, cache de pages y compris tmpfs, et mémoire noyau comme les dentries, les inodes et les buffers de sockets.
Les limites mémoire des conteneurs
memory.events
Les compteurs du cgroup : high et max comptent les passages sur chaque limite, oom les allocations sur le point d’échouer, oom_kill les processus tués.
Les limites mémoire des conteneurs
memory.high
La limite de freinage du cgroup v2. Au-dessus, les processus du cgroup sont ralentis et doivent récupérer de la mémoire, mais l’OOM killer ne se déclenche jamais à cause d’elle.
Les limites mémoire des conteneurs
memory.max
La limite dure du cgroup v2, en octets. Quand l’usage du cgroup l’atteint et que la récupération ne le fait pas baisser, le noyau lance l’OOM killer dans ce cgroup.
Les limites mémoire des conteneurs
memory.swap.max
Le fichier cgroup v2 qui plafonne le swap d’un cgroup. À 0, les pages anonymes du cgroup ne partent jamais dans le swap.
Le swap
Métadonnées
Les fiches du système de fichiers lui-même : inodes, entrées de répertoire, bitmaps de blocs et d’inodes. Les octets à l’intérieur d’un fichier sont ses données.
Systèmes de fichiers et journalisation
Méthode USE
La liste de Gregg : pour chaque ressource (CPU, mémoire, disques, réseau), vérifier l’utilisation, la saturation et les erreurs. Chaque ressource écartée réduit la recherche.
Un serveur lent en 60 secondes
Montage
Le rattachement d’un système de fichiers à un répertoire, le point de montage. Après mount /dev/sdb1 /data, les chemins sous /data mènent dans ce système de fichiers. findmnt liste chaque montage avec ses options.
Les montages et leurs options
Montage bind
Un second montage d’un répertoire déjà monté, créé avec mount --bind olddir newdir. Les deux chemins montrent les mêmes fichiers.
Les montages et leurs options
Namespace
Un objet du noyau qui donne aux processus qu’il contient leur propre copie d’une ressource globale : numéros de processus, montages, pile réseau, nom d’hôte, UID, IPC, racine des cgroups ou horloges. namespaces(7) en liste 8 types.
Les namespaces
Namespace PID
Une numérotation séparée des processus. Le premier processus créé dedans reçoit le PID 1, et les processus de l’intérieur ne voient pas ceux du namespace parent.
Le PID 1 dans un conteneur
nsenter
La commande de util-linux qui lance un programme dans les namespaces d’un autre processus, -t <pid>, en appelant setns(2) sur ses fichiers /proc/<pid>/ns/*.
Les namespaces
OnCalendar=
Un horaire d’horloge murale écrit comme un événement de calendrier, par exemple Mon..Fri *-*-* 02:30:00. systemd-analyze calendar affiche les prochaines dates qui correspondent.
Les timers à la place de cron
OOM killer
Le code du noyau dans mm/oom_kill.c qui choisit un processus et lui envoie SIGKILL quand une allocation échoue et que la récupération de mémoire n’a rien libéré.
L’OOM killer
oom_score
Le fichier en lecture seule /proc/<pid>/oom_score : le badness remis à l’échelle pour l’affichage. 0 veut dire que le processus est exempté.
L’OOM killer
oom_score_adj
Une valeur par processus, de -1000 à 1000, dans /proc/<pid>/oom_score_adj. Chaque unité ajoute un millième de la mémoire autorisée au badness. -1000 veut dire : ne jamais choisir ce processus.
L’OOM killer
Option de montage
Un drapeau posé sur un montage, comme ro, noexec, nosuid ou nodev. Le noyau le vérifie à chaque accès par ce montage. Deux montages du même système de fichiers peuvent avoir des options différentes.
Les montages et leurs options
Overcommit
Le fait de laisser les processus mapper plus de mémoire que RAM plus swap, en pariant qu’ils n’y toucheront pas en entier. vm.overcommit_memory choisit la politique.
La mémoire virtuelle
Page
L’unité dans laquelle le noyau découpe la mémoire : 4096 octets ici (getconf PAGESIZE). Une page d’un processus a une page de RAM derrière elle, ou pas encore.
La mémoire virtuelle
Page anonyme
Une page de mémoire sans fichier derrière elle : le tas, la pile, ou un mmap avec MAP_ANONYMOUS. Le noyau ne peut la libérer qu’en l’écrivant dans le swap.
Le swap
Page sale
Une page du cache modifiée par un write et pas encore écrite sur le disque. Le noyau doit l’écrire avant de pouvoir réutiliser la page.
Le cache de pages
Paramètre du noyau
Un réglage que le noyau en marche expose sous forme de fichier dans /proc/sys, par exemple /proc/sys/net/core/somaxconn. Son nom sysctl prend des points : net.core.somaxconn.
Les paramètres du noyau
Partition
Une plage de secteurs d’un disque, inscrite dans la table de partitions. Le noyau montre chacune comme un périphérique bloc à part, comme nvme0n1p2.
Disques, partitions et LVM
Persistent=
Avec true, systemd garde sur le disque l’heure du dernier déclenchement. Si un passage était prévu pendant que le timer était inactif, machine éteinte par exemple, le service démarre dès que le timer est de nouveau actif.
Les timers à la place de cron
PID
Process ID : le numéro que le noyau donne à chaque processus. Le PPID est le PID de son parent, le processus qui l’a créé.
Comment démarre un processus
PID 1
Le premier processus de l’espace utilisateur, lancé par le noyau. Sur le portable de test, c’est systemd, qui démarre ensuite chaque service.
Le démarrage de Linux
Priorité
Le niveau syslog d’une entrée, de 0 (emerg) à 7 (debug), avec 3 pour err et 6 pour info. journalctl -p err montre le niveau 3 et tous les numéros plus petits.
Le journal
Private_Dirty
Les pages que ce processus est seul à mapper et qu’il a écrites depuis leur chargement. Le noyau ne peut pas les jeter, seulement les envoyer en swap.
Trouver une fuite mémoire
Processus init
Le PID 1 d’un namespace PID. Il adopte les processus orphelins, et quand il sort, le noyau tue tous les processus du namespace avec SIGKILL.
Le PID 1 dans un conteneur
Programme eBPF
Du bytecode chargé dans le noyau par l’appel système bpf(2) et attaché à un événement, comme un tracepoint ou l’arrivée d’un paquet réseau. Il s’exécute à chaque déclenchement de l’événement.
eBPF en pratique
Projection de fichier
Une plage d’adresses virtuelles d’un processus que mmap(2) relie à un fichier. Lire une adresse de cette plage lit l’octet du fichier au décalage correspondant.
mmap
Propagation
Le fait qu’un montage ou un démontage sous un point de montage soit répété dans d’autres espaces de noms de montage. Les types sont shared, slave, private et unbindable.
Les montages et leurs options
ptrace
L’interface du noyau qu’utilise strace : un processus traceur peut arrêter un autre processus, le tracé, et lire ses registres et sa mémoire pendant l’arrêt.
Observer les appels système avec strace
Quota et période
Les deux nombres de cpu.max. Dans chaque période (en microsecondes), le groupe peut consommer jusqu’à quota microsecondes de CPU, additionnées sur tous ses threads et tous les CPU. Une limite Kubernetes de 1 CPU donne 100000 100000.
Limites CPU et throttling
RandomizedDelaySec=
Un délai aléatoire entre 0 et la durée donnée, tiré avant chaque passage et ajouté à l’heure prévue. Il étale des timers qui expireraient tous au même instant.
Les timers à la place de cron
Reaping
Appeler wait() ou waitpid() sur un zombie : le parent lit le code de sortie et le noyau libère le PID.
Le PID 1 dans un conteneur
Règle sudoers
Une ligne qui où = (en_tant_que) tags: commandes, comme %sudo ALL=(ALL:ALL) ALL. % désigne un groupe, et la partie (user:group) dit sous quelle identité la commande peut tourner.
Utilisateurs, groupes et sudo
Répertoire inférieur
Une arborescence en lecture seule dans un montage overlay. Chaque couche d’image en est une, et l’option lowerdir= les liste, la couche du haut en premier, séparées par :. En anglais : lower directory.
Les couches d’image et overlayfs
Répertoire supérieur
L’arborescence modifiable posée au-dessus, donnée par upperdir=. Toutes les modifications du conteneur y atterrissent. Docker l’appelle la couche du conteneur.
Les couches d’image et overlayfs
RLIMIT_NOFILE
La limite de ressources du processus sur les descripteurs : « one greater than the maximum file descriptor number that can be opened ». ulimit -n la lit et la règle dans un shell.
Les descripteurs de fichiers
RSS
Resident set size : la mémoire d’un processus présente en RAM à cet instant, en kB sur la ligne VmRSS de status. Le chapitre 09 la compare à la taille virtuelle.
Lire /proc
RSS
Resident set size : la partie des mappings d’un processus présente en RAM à cet instant, la ligne Rss: de smaps et VmRSS dans status.
Trouver une fuite mémoire
RuntimeDefault
Le nom Kubernetes du profil par défaut du runtime de conteneurs, à mettre dans securityContext.seccompProfile.type.
seccomp
Saturation
Du travail qu’une ressource ne peut pas encore prendre, et qui attend. Le billet : elle se voit « either as the length of a request queue, or time spent waiting ». Pour les CPU, la file est celle des tâches exécutables.
Un serveur lent en 60 secondes
Signal
Un avis numéroté que le noyau remet à un processus, envoyé par un autre processus avec kill() ou par le noyau lui-même. SIGTERM porte le numéro 15, SIGKILL le 9 sur x86.
Les signaux
Slew
Corriger l’horloge murale en la faisant tourner un peu plus vite ou un peu plus lentement jusqu’à effacer l’écart. chronyd fait ça par défaut, à 83333 ppm au plus (un douzième).
Les horloges et NTP
Slice
La part de quota qu’un CPU prend dans la réserve du groupe à chaque fois, 5 ms par défaut (/proc/sys/kernel/sched_cfs_bandwidth_slice_us). Chaque CPU qui exécute des threads du groupe consomme sa propre slice.
Limites CPU et throttling
Slice et scope
Les noms que systemd donne aux cgroups qu’il crée : une slice regroupe d’autres unités (system.slice, user.slice), et un scope contient des processus lancés hors de systemd, comme un conteneur Docker.
Les cgroups v2
Sommeil non interruptible (D)
Une tâche bloquée dans le noyau qu’aucun signal ne peut réveiller, le plus souvent en attente d’une I/O disque. ps l’affiche D, « uninterruptible sleep (usually I/O) ».
La charge moyenne et l’ordonnanceur
Sonde
L’événement auquel un programme bpftrace s’attache. tracepoint:syscalls:sys_enter_openat est un tracepoint, un point fixe du noyau. kprobe:vfs_read est une kprobe, posée sur n’importe quelle fonction du noyau. En anglais : probe.
eBPF en pratique
Statut de wait
L’entier que le noyau remet au parent par wait(). Il dit soit « sorti avec le code n », soit « tué par le signal N », et se lit avec WIFEXITED, WEXITSTATUS, WIFSIGNALED et WTERMSIG.
Les codes de sortie
Step
Poser d’un coup une nouvelle valeur sur l’horloge murale, qui saute en avant ou en arrière. chronyd ne le fait que si makestep l’autorise, et le noyau recule d’une seconde pour une seconde intercalaire ajoutée.
Les horloges et NTP
Sticky bit
Le bit de mode 01000, affiché t à la place de l’exécution des autres. Dans un répertoire, seuls le propriétaire du fichier, celui du répertoire ou un processus privilégié peuvent supprimer ou renommer ce fichier.
Les permissions au-delà de rwx
Swap
Une partition ou un fichier où le noyau écrit des pages anonymes pour libérer de la RAM. swapon --show les liste, et /proc/meminfo affiche SwapTotal et SwapFree.
Le swap
sysctl
La commande de procps-ng qui lit et écrit les paramètres du noyau : sysctl net.core.somaxconn lit, sysctl -w net.core.somaxconn=4096 écrit, sysctl --system charge tous les fichiers de configuration.
Les paramètres du noyau
SystemMaxUse=
L’espace disque maximal que peuvent prendre les fichiers du journal dans /var/log/journal/. Par défaut 10 % du système de fichiers, plafonné à 4G.
Le journal
Table des pages
La table propre à chaque processus que le CPU lit pour traduire une adresse virtuelle en adresse de RAM. La ligne VmPTE de status donne sa taille.
La mémoire virtuelle
Tâche exécutable
Une tâche qui tourne sur un CPU ou qui en attend un. vmstat les compte dans la colonne r, à partir de procs_running dans /proc/stat. En anglais : runnable task.
Un serveur lent en 60 secondes
Target
Une unité systemd qui regroupe d’autres unités et marque une étape du démarrage, comme multi-user.target ou network-online.target. systemd démarre jusqu’à default.target.
Le démarrage de Linux
THP
Transparent Huge Pages : le noyau sert la mémoire anonyme avec des pages de 2 MB de lui-même, sans que le programme le demande. Se règle dans /sys/kernel/mm/transparent_hugepage/enabled à always, madvise ou never.
Les grandes pages
Throttling
Ce que fait l’ordonnanceur quand le quota du groupe pour la période est épuisé : ses threads quittent le CPU et "will not be able to run again until the next period when the quota is replenished", ils attendent la recharge suivante.
Limites CPU et throttling
TLB
Le Translation Lookaside Buffer, le cache du CPU pour les traductions récentes d’adresses virtuelles en adresses physiques. La doc du noyau le dit "pretty scarce resource".
Les grandes pages
UID
Le numéro que le noyau utilise pour un utilisateur ; les noms sont dans /etc/passwd. Un processus d’UID effectif 0, appelé root, passe outre toutes les vérifications de droits du noyau.
Utilisateurs, groupes et sudo
umask
Un masque de bits de permission propre à chaque processus, que open et mkdir retirent de chaque nouveau fichier. La valeur habituelle est 022.
Les permissions au-delà de rwx
Unité timer
Un fichier .timer avec une section [Timer]. Quand il expire, il démarre le service du même nom : backup.timer démarre backup.service.
Les timers à la place de cron
unshare
L’appel système unshare(2) fait entrer l’appelant dans de nouveaux namespaces, choisis par des drapeaux CLONE_NEW*. La commande unshare de util-linux lance un programme de cette façon.
Les namespaces
Utilisateur système
Un compte pour un démon, créé par useradd --system avec un UID dans la plage SYS_UID_MIN à SYS_UID_MAX, sous le premier UID normal de 1000 par défaut, en général avec /usr/sbin/nologin comme shell. www-data a l’UID 33.
Utilisateurs, groupes et sudo
Vérificateur
La partie du noyau qui contrôle un programme eBPF au chargement et le refuse s’il pourrait lire un registre jamais écrit, un pointeur non vérifié ou de la mémoire hors limites. En anglais : verifier.
eBPF en pratique
visudo
L’enveloppe d’édition des fichiers sudoers. Elle verrouille le fichier, analyse ta modification et refuse de l’installer tant qu’il reste une erreur de syntaxe.
Utilisateurs, groupes et sudo
vm.swappiness
Un sysctl de 0 à 200, 60 par défaut, qui indique à la récupération de mémoire le coût des E/S de swap par rapport à la relecture des pages de fichiers.
Le swap
Volume logique (LV)
Un périphérique bloc découpé dans un groupe de volumes, comme /dev/mapper/data-root. Device Mapper, dans le noyau, place chacun de ses blocs sur un PV. Un système de fichiers s’y installe comme sur une partition.
Disques, partitions et LVM
Volume physique (PV)
Un disque ou une partition géré par LVM, préparé avec pvcreate. lsblk affiche son type comme LVM2_member.
Disques, partitions et LVM
VSZ et RSS
VSZ (VmSize) est la taille de toutes les plages d’adresses que le processus a mappées. RSS (VmRSS) est la part qui est en RAM maintenant. ps affiche les deux, en KiB.
La mémoire virtuelle
wait
La famille d’appels (wait, waitpid, wait4) avec laquelle un parent attend la fin d’un enfant et lit son code de sortie.
Comment démarre un processus
Whiteout
Une entrée du répertoire supérieur qui cache un nom aux répertoires inférieurs. Sur le disque, c’est un périphérique caractère de numéro 0/0 ; dans le tar d’une couche d’image, un fichier vide nommé .wh.<name>.
Les couches d’image et overlayfs
Writeback
L’écriture par le noyau, en arrière-plan, des pages sales du cache vers le disque, un moment après que write(2) a déjà rendu la main.
fsync et durabilité
Zombie
Un processus terminé dont aucun parent n’a encore lu le code de sortie. Il garde son PID et une place dans la table des processus du noyau.
Le PID 1 dans un conteneur