Rechercher

Chapitre 5. Changements importants dans les paramètres externes du noyau

download PDF

Ce chapitre fournit aux administrateurs système un résumé des changements significatifs apportés au noyau distribué avec Red Hat Enterprise Linux 9.1. Ces changements peuvent inclure, par exemple, des entrées proc ajoutées ou mises à jour, des valeurs par défaut sysctl et sysfs, des paramètres de démarrage, des options de configuration du noyau ou tout autre changement de comportement notable.

Nouveaux paramètres du noyau

allow_mismatched_32bit_el0 = [ARM64]

Ce paramètre permet aux systèmes dont la prise en charge 32 bits au niveau EL0 n'est pas adaptée d'exécuter des applications 32 bits. L'ensemble des unités centrales prenant en charge le 32 bits au niveau EL0 est indiqué dans le fichier /sys/devices/system/cpu/aarch32_el0. Vous pouvez également limiter les opérations de débranchement à chaud.

Pour plus d'informations, voir Documentation/arm64/asymmetric-32bit.rst.

arm64.nomte = [ARM64]
Ce paramètre permet de désactiver inconditionnellement la prise en charge de l'extension de marquage de la mémoire (MTE).
i8042.probe_defer = [HW]
Ce paramètre permet d'autoriser le report du palpage en cas d'erreurs de palpage sur i8042.
idxd.tc_override = [HW]

Avec ce paramètre au format <bool>, vous pouvez autoriser l'annulation de la configuration par défaut des classes de trafic pour l'appareil.

La valeur par défaut est false (0).

kvm.eager_page_split = [KVM,X86]

Ce paramètre permet de contrôler si un KVM divise ou non de manière proactive toutes les pages volumineuses lors de la journalisation des données sales. Le fractionnement des pages réduit les interruptions de l'exécution du vCPU en éliminant les défauts de protection en écriture et les conflits de verrouillage de l'unité de gestion de la mémoire (MMU), qui sont autrement nécessaires pour fractionner les pages volumineuses de manière paresseuse.

Les charges de travail des machines virtuelles qui effectuent rarement des écritures ou qui n'écrivent que dans une petite région de la mémoire de la machine virtuelle peuvent bénéficier de la désactivation du fractionnement rapide des pages pour permettre aux pages volumineuses d'être encore utilisées pour les lectures.

Le comportement du fractionnement rapide des pages dépend de l'activation ou de la désactivation de l'option KVM_DIRTY_LOG_INITIALLY_SET.

  • Si cette option est désactivée, toutes les pages volumineuses d'un site memslot sont scindées avec empressement lorsque la journalisation sale est activée sur ce site memslot.
  • Si cette option est activée, le fractionnement des pages est effectué lors de l'appel système KVM_CLEAR_DIRTY ioctl() , et uniquement pour les pages en cours d'effacement.

    Actuellement, le fractionnement de pages ne permet de fractionner que les grandes pages mappées par le MMU de pagination bidimensionnelle (TDP).

    La valeur par défaut est Y (on).

kvm.nx_huge_pages_recovery_period_ms = [KVM]

Ce paramètre permet de contrôler le délai pendant lequel KVM ramène les pages de 4 KiB à des pages de grande taille.

  • Si la valeur est différente de zéro ( N), KVM zappe une partie des pages toutes les N millisecondes.
  • Si la valeur est 0, KVM choisit une période basée sur le ratio, de sorte qu'une page est supprimée après 1 heure en moyenne.

    La valeur par défaut est fixée à 0.

l1d_flush = [X86,INTEL]

Ce paramètre permet de contrôler l'atténuation de la vulnérabilité du snooping basé sur L1D.

Certains processeurs sont vulnérables à un exploit contre les tampons internes du processeur qui peuvent, sous certaines conditions, transmettre des informations à un gadget de divulgation. Dans les processeurs vulnérables, les données transmises de manière spéculative peuvent être utilisées dans une attaque par canal latéral du cache, pour accéder à des données auxquelles l'attaquant n'a pas un accès direct.

L'option disponible est on, ce qui signifie enable the interface for the mitigation.

mmio_stale_data = [X86,INTEL]

Ce paramètre permet de contrôler l'atténuation des vulnérabilités liées aux données périmées de l'entrée/sortie en mémoire du processeur (MMIO).

Processor MMIO Stale Data est une classe de vulnérabilités qui peut exposer des données après une opération MMIO. Les données exposées peuvent provenir ou se terminer dans les mêmes tampons du processeur que ceux affectés par le serveur de métadonnées (MDS) et l'interruption asynchrone transactionnelle (TAA). Par conséquent, comme pour MDS et TAA, la solution consiste à effacer les tampons du processeur concernés.

Les options disponibles sont les suivantes :

  • fullles mesures d'atténuation sont activées sur les processeurs vulnérables
  • full,nosmtles mesures d'atténuation sont activées et la technologie SMT est désactivée sur les processeurs vulnérables.
  • off: désactivation inconditionnelle de l'atténuation

    Sur les machines affectées par MDS ou TAA, mmio_stale_data=off peut être empêché par une atténuation active de MDS ou TAA car ces vulnérabilités sont atténuées par le même mécanisme. Ainsi, pour désactiver cette atténuation, vous devez également spécifier mds=off et tsx_async_abort=off.

    Ne pas spécifier cette option équivaut à mmio_stale_data=full.

    Pour plus d'informations, voir Documentation/admin-guide/hw-vuln/processor_mmio_stale_data.rst.

random.trust_bootloader={on,off} = [KNL]
Ce paramètre permet d'activer ou de désactiver l'utilisation d'une graine transmise par le chargeur d'amorçage (si elle est disponible) pour ensemencer complètement le CRNG du noyau. Le comportement par défaut est contrôlé par l'option CONFIG_RANDOM_TRUST_BOOTLOADER.
rcupdate.rcu_task_collapse_lim = [KNL]
Ce paramètre permet de définir le nombre maximal de rappels présents au début d'une période de grâce qui permet aux saveurs de tâches de l'URC de revenir à l'utilisation d'une seule file d'attente de rappels. Cette commutation ne se produit que lorsque l'option rcupdate.rcu_task_enqueue_lim est définie sur la valeur par défaut de -1.
rcupdate.rcu_task_contend_lim = [KNL]
Ce paramètre permet de définir le nombre minimum d'événements de rétention de verrou par jiffy requis pour que les saveurs de tâches RCU passent à la mise en file d'attente de rappel par unité centrale. Cette commutation ne se produit que lorsque l'option rcupdate.rcu_task_enqueue_lim est définie sur la valeur par défaut -1.
rcupdate.rcu_task_enqueue_lim = [KNL]

Ce paramètre permet de définir le nombre de files d'attente de rappel à utiliser pour la famille de saveurs RCU Tasks. Vous pouvez ajuster le nombre de files d'attente de rappel automatiquement et dynamiquement avec la valeur par défaut de -1.

Ce paramètre est destiné à être utilisé dans le cadre de tests.

retbleed = [X86]

Ce paramètre permet de contrôler l'atténuation de la vulnérabilité "Arbitrary Speculative Code Execution with Return Instructions" (RETBleed). Les options disponibles sont les suivantes :

  • off: pas de mesures d'atténuation
  • auto: sélection automatique d'une mesure d'atténuation
  • auto,nosmt: sélectionne automatiquement une mesure d'atténuation, en désactivant SMT si nécessaire pour une atténuation complète (uniquement sur Zen1 et les versions antérieures sans STIBP).
  • ibpbles données relatives à l'impact sur les performances : atténuent également les courtes fenêtres de spéculation sur les limites des blocs de base. Sûr, impact le plus élevé sur les performances.
  • unret: force l'activation des thunks de retour non formés, efficace uniquement sur les systèmes basés sur AMD f15h-f17h.
  • unret,nosmt: comme l'option unret, désactive SMT lorsque STIBP n'est pas disponible.

    L'option auto permet de choisir une méthode d'atténuation au moment de l'exécution en fonction de l'unité centrale.

    Ne pas spécifier cette option équivaut à retbleed=auto.

sev=option[,option...] = [X86-64]
Pour plus d'informations, voir Documentation/x86/x86_64/boot-options.rst.

Mise à jour des paramètres du noyau

acpi_sleep = [HW,ACPI]

Format : { s3_bios, s3_mode, s3_beep, s4_hwsig, s4_nohwsig, old_ordering, nonvs, sci_force_enable, nobl }

  • Pour plus d'informations sur s3_bios et s3_mode, voir Documentation/power/video.rst.
  • s3_beep est destiné au débogage ; il déclenche le bip du haut-parleur du PC dès que le point d'entrée en mode réel du noyau est appelé.
  • s4_hwsig permet au noyau de vérifier la signature matérielle ACPI lors de la sortie d'hibernation, et de refuser de reprendre si elle a changé. Le comportement par défaut est d'autoriser la reprise et d'avertir simplement lorsque la signature change, à moins que l'option s4_hwsig ne soit activée.
  • s4_nohwsig empêche la signature matérielle ACPI d'être utilisée, ou même d'être prévenue, pendant la reprise. old_ordering fait en sorte que l'ordre ACPI 1.0 de la méthode de contrôle _PTS, en ce qui concerne le placement des périphériques dans des états de faible consommation, soit appliqué. L'ordre ACPI 2.0 de _PTS est utilisé par défaut.
  • nonvs empêche le noyau de sauvegarder et de restaurer la mémoire ACPI NVS pendant la suspension, l'hibernation et la reprise.
  • sci_force_enable fait en sorte que le noyau règle SCI_EN directement à la reprise de S1/S3. Bien que ce comportement soit contraire aux spécifications de l'ACPI, certains systèmes corrompus ne fonctionnent pas sans lui.
  • nobl permet d'ignorer la liste interne des systèmes connus pour leur comportement incorrect en ce qui concerne la suspension et la reprise du système. Utilisez cette option à bon escient.

    Pour plus d'informations, voir Documentation/power/video.rst.

crashkernel=size[KMG],high = [KNL, X86-64, ARM64]

Ce paramètre permet d'allouer une région de mémoire physique en commençant par le haut, comme suit :

  • Si le système dispose de plus de 4 Go de RAM, une région de mémoire physique peut dépasser 4 Go.
  • Si le système dispose de moins de 4 Go de RAM, une région de mémoire physique sera allouée en dessous de 4 Go, si elle est disponible.

    Ce paramètre est ignoré si le paramètre crashkernel=X est spécifié.

crashkernel=size[KMG],low = [KNL, X86-64]

Lorsque vous passez crashkernel=X,high, le noyau peut allouer une région de mémoire physique supérieure à 4 Go. Cela provoque le deuxième plantage du noyau sur les systèmes qui nécessitent une certaine quantité de mémoire basse (par exemple, swiotlb nécessite au moins 64M 32K de mémoire basse) et suffisamment de mémoire basse supplémentaire pour s'assurer que les tampons DMA pour les périphériques 32 bits ne sont pas épuisés. Le noyau essaie d'allouer automatiquement au moins 256 M en dessous de 4 Go. Ce paramètre vous permet de spécifier la plage de mémoire inférieure à 4 Go pour le second noyau.

  • 0: désactive l'allocation basse. Elle sera ignorée si crashkernel=X,high n'est pas utilisé ou si la mémoire réservée est inférieure à 4 Go.
crashkernel=size[KMG],low = [KNL, ARM64]
Ce paramètre permet de spécifier une plage basse dans la zone DMA pour le noyau de crash dump. Il sera ignoré si crashkernel=X,high n'est pas utilisé ou si la mémoire réservée est située dans les zones DMA.
kvm.nx_huge_pages_recovery_ratio = [KVM]

Ce paramètre permet de contrôler le nombre de pages de 4 KiB qui sont périodiquement ramenées à des pages de grande taille :

  • 0 désactive la récupération
  • N KVM va zapper 1/Nth des pages de 4 KiB à chaque période.

    La valeur par défaut est 60.

kvm-arm.mode = [KVM,ARM]

Ce paramètre permet de sélectionner l'un des modes de fonctionnement du KVM :

  • nonekVM : désactivation forcée de KVM.
  • nvhemode standard basé sur nVHE, sans prise en charge des invités protégés.
  • protectedmode basé sur nVHE avec prise en charge des invités dont l'état est gardé privé par rapport à l'hôte. Non valide si le noyau fonctionne au niveau EL2.

    La valeur par défaut est fixée à VHE/nVHE en fonction de la prise en charge matérielle.

mitigations = [X86,PPC,S390,ARM64]

Ce paramètre permet de contrôler les mesures d'atténuation optionnelles pour les vulnérabilités du processeur. Il s'agit d'un ensemble d'options curées, indépendantes de l'architecture, chacune d'entre elles étant une agrégation d'options existantes spécifiques à l'architecture :

  • offdésactivation de toutes les mesures d'atténuation facultatives pour le processeur. Cela améliore les performances du système, mais peut également exposer les utilisateurs à plusieurs vulnérabilités du processeur.

    • Équivalent à : nopti [X86,PPC], kpti=0 [ARM64], nospectre_v1 [X86,PPC], nobp=0 [S390], nospectre_v2 [X86,PPC,S390,ARM64], spectre_v2_user=off [X86], spec_store_bypass_disable=off [X86,PPC], ssbd=force-off [ARM64], l1tf=off [X86], mds=off [X86], tsx_async_abort=off [X86], kvm.nx_huge_pages=off [X86], no_entry_flush [PPC], no_uaccess_flush [PPC], mmio_stale_data=off [X86].
    • Exceptions : Cela n'a aucun effet sur kvm.nx_huge_pages lorsque l'option kvm.nx_huge_pages=force est spécifiée.
  • auto (par défaut) : atténue toutes les vulnérabilités du CPU, mais laisse SMT activé, même s'il est vulnérable.

    • Équivalent à : (comportement par défaut)
  • auto,nosmtles vulnérabilités des CPU sont atténuées, en désactivant le SMT si nécessaire.

    • Équivalent à : l1tf=flush,nosmt [X86], mds=full,nosmt [X86], tsx_async_abort=full,nosmt [X86], mmio_stale_data=full,nosmt [X86]
rcu_nocbs[=cpu-list] = [KNL]

L'argument facultatif est une liste de CPU.

Dans les noyaux construits avec CONFIG_RCU_NOCB_CPU=y, vous pouvez activer le mode CPU no-callback, qui empêche les callbacks de ces CPU d'être invoqués dans le contexte softirq. L'invocation des callbacks RCU de ces CPU sera à la place déchargée sur rcuox/N kthreads créé à cet effet, où x est p pour RCU-preempt, s pour RCU-sched, et g pour le kthreads qui gère les périodes de grâce ; et N est le numéro du CPU. Cela réduit la gigue du système d'exploitation sur les unités centrales déchargées, ce qui peut être utile pour les charges de travail HPC et en temps réel. Il peut également améliorer l'efficacité énergétique des multiprocesseurs asymétriques.

  • Si un cpulist est fourni comme argument, la liste spécifiée de CPU est mise en mode no-callback à partir du démarrage.
  • Si le signe = et les arguments cpulist sont omis, aucune unité centrale ne sera mise en mode "no-callback" au démarrage, mais vous pouvez basculer le mode au moment de l'exécution à l'aide de cpusets.
rcutree.kthread_prio = [KNL,BOOT]

Ce paramètre permet de définir la priorité SCHED_FIFO de l'unité RCU par CPU kthreads (rcuc/N). Cette valeur est également utilisée pour la priorité des threads boost de l'URC (rcub/N) et pour la période de grâce de l'URC kthreads (rcu_bh, rcu_preempt, et rcu_sched).

  • Si RCU_BOOST est défini, les valeurs valables sont de 1 à 99 et la valeur par défaut est 1, la priorité la moins favorisée.
  • Si RCU_BOOST n'est pas défini, les valeurs valides sont 0-99 et la valeur par défaut est 0, fonctionnement en temps réel.

    Lorsque RCU_NOCB_CPU est activé, vous devez ajuster la priorité du rappel NOCB kthreads .

rcuture.fwd_progress = [KNL]

Ce paramètre permet de spécifier le nombre de kthreads à utiliser pour les tests de progression de la période de grâce de l'UCR pour les types d'UCR supportant cette notion.

La valeur par défaut est 1 kthread . Les valeurs inférieures à zéro ou supérieures au nombre de CPU entraînent l'utilisation du nombre de CPU.

spectre_v2 = [X86]

Ce paramètre permet de contrôler l'atténuation de la variante 2 de Spectre (spéculation indirecte sur les branches). Le fonctionnement par défaut protège le noyau des attaques de l'espace utilisateur.

  • on: activation inconditionnelle, implique spectre_v2_user=on
  • off: désactivation inconditionnelle, implique spectre_v2_user=off
  • autole noyau détecte si le modèle de votre processeur est vulnérable
  • La sélection de on entraîne, et auto peut entraîner, le choix d'une méthode d'atténuation au moment de l'exécution en fonction du processeur, du microcode disponible, du réglage de l'option de configuration CONFIG_RETPOLINE et du compilateur avec lequel le noyau a été construit.
  • La sélection de on permettra également de limiter les attaques de l'espace utilisateur contre les tâches de l'espace utilisateur.
  • La sélection de off désactive les protections du noyau et de l'espace utilisateur.
  • Des mesures d'atténuation spécifiques peuvent également être sélectionnées manuellement :

    • retpolineles branches indirectes sont remplacées par des branches indirectes
    • retpoline,generic: Retpolines
    • retpoline,lfence: LFENCE ; branche indirecte
    • retpoline,amd: alias de retpoline,lfence
    • eibrs: IBRS amélioré
    • eibrs,retpolineles Retpolines de l'IBRS améliorées
    • eibrs,lfence: amélioré IBRS LFENCE
    • ibrsles entreprises de l'Union européenne : utiliser l'IBRS pour protéger le noyau

      Ne pas spécifier cette option équivaut à spectre_v2=auto.

Nouveaux paramètres sysctl

max_rcu_stall_to_panic
Lorsque vous définissez panic_on_rcu_stall à 1, vous déterminez le nombre de fois que l'URC peut se bloquer avant que panic() ne soit appelé. Lorsque vous définissez panic_on_rcu_stall à 0, cette valeur n'a aucun effet.
perf_user_access = [ARM64]

Ce paramètre permet de contrôler l'accès à l'espace utilisateur pour la lecture des compteurs d'événements de perf.

  • Lorsqu'il est défini sur 1, l'espace utilisateur peut lire directement les registres des compteurs du moniteur de performance.
  • La valeur par défaut est 0, ce qui signifie access disabled.

    Pour plus d'informations, voir Documentation/arm64/perf.rst.

gro_normal_batch
Avec ce paramètre, vous pouvez définir le nombre maximum de segments à mettre en lot à la sortie du GRO. Lorsqu'un paquet sort du GRO, que ce soit sous la forme d'une supertrame coalisée ou d'un paquet original que le GRO a décidé de ne pas coaliser, il est placé sur une liste par NAPI. Cette liste est ensuite transmise à la pile lorsque le nombre de segments atteint la limite de gro_normal_batch.
high_order_alloc_disable

Ce paramètre vous permet de choisir l'allocation de l'ordre 0. Par défaut, l'allocateur de fragments de pages tente d'utiliser des pages d'ordre élevé, c'est-à-dire d'ordre 3 sur les systèmes X86. Bien que le comportement par défaut donne de bons résultats, dans certaines situations, une contention dans l'allocation et la libération des pages se produit. Cela était particulièrement vrai avec les anciens noyaux (version 5.14 et plus) lorsque les pages d'ordre élevé n'étaient pas stockées dans des listes par unité centrale. Ce paramètre n'a plus qu'une importance historique.

La valeur par défaut est 0.

page_lock_unfairness

En spécifiant la valeur de ce paramètre, vous pouvez déterminer le nombre de fois que le verrou de page peut être volé sous un serveur. Une fois que le verrou a été volé le nombre de fois spécifié dans ce fichier, la sémantique fair lock handoff s'applique et le serveur n'est réveillé que si le verrou peut être pris.

La valeur par défaut est 5.

Modification des paramètres sysctl

urandom_min_reseed_secs
Vous pouvez utiliser ce paramètre pour déterminer le nombre minimum de secondes entre le réensemencement du pool urandom. Ce fichier est accessible en écriture pour des raisons de compatibilité, mais son écriture n'a aucun effet sur le comportement du RNG.
seuil d'écriture du réveil
Lorsque le compte d'entropie passe sous ce seuil en un certain nombre de bits, vous pouvez réveiller les processus qui attendent d'écrire dans le fichier /dev/random. Ce fichier est accessible en écriture à des fins de compatibilité, mais son écriture n'a aucun effet sur le comportement du RNG.
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.