• [^] # Re: Patch PREEMPT_RT

    Posté par (Mastodon) . En réponse au lien Linux is not a RTOS but can easily fake being one. Évalué à 9 (+7/-0).

    Je ne connais pas ton cas d'usage, ni vraiment ce que tu entends par débit.

    Par contre, pour faire « correctement » du RT, il faut des paramétrages plus compliqués.
    Sans plus d'explication que ça, on obtient les meilleurs résultats RT avec des trucs comme ça :
    - Couper l'hyperthreading dans le BIOS ;
    - Isoler certains cœurs, pour qu'ils ne servent jamais pour aucune tâche, sauf si demandé explicitement ;
    - Ajouter idle=poll en option du noyau, ça laisse tourner les cœurs quand ils ne font rien, autant dire que côté consommation, c'est assez mauvais ;
    - D'autres options à l'utilité obscure, mais dont on trouve la recommandation dans des papiers de recherche de chez Intel à ce sujet, comme audit=0, nmi_watchdog=0, acpi_irq_nobalance, processor.max_cstate=0, mce=ignore_ce, rcu_nocb_poll.

    J'ai compris l'utilité de ces options au moment de chercher, et en lisant les docs qui expliquaient pourquoi, mais c'est rapidement ressorti.

    Et comme ça, tu peux avoir du Realtime avec une bonne latence (<50μs, et en pratique on peut descendre sous les 20μs, et on gagne environ 30-35% sur la même machine avec une VM qui ignore les mitigations des failles de sécurité des XEONs), même en machine virtuelle (KVM, core-pinning avec SCHED_FIFO pour les cœurs de ta VM, sur des cœurs isolés).
    Sur un Xeon on obtient de bien meilleurs résultats (plus stable, meilleure latence moyenne, latence maximale plus basse) que sur un Intel classique (i3/5/7...), et je n'ai pas de comparaison avec des processeurs AMD, ou avec des ARMs.
    Donc l'architecture du CPU joue aussi.

    De loin, je dirais que si tu gères bien tes cœurs, et que tu n'utilises jamais les cœurs hyperthreadés d'un cœur utilisé pour le RT, ça devrait ne pas avoir d'impact, mais c'est purement subjectif au nez mouillé, comme appréciation.
    Par exemple, tu as 8 cœurs (0-7 + 8-15 avec l'hyperthreading), tu en réserves 4 au RT, donc tu isoles 4-7 et 12-15, tu as 4 cœurs et 4 autres hyperthreadés sur 0-3 et 8-11 pour ton système, les tâches non-RT, etc. Et tu as 4 cœurs RT (4-7), et tu n'utilises jamais les « versions hyperthreadées » de ces cœurs (12-15).

    Mais bon, tout va toujours dépendre de tes besoins réels.
    Si realtime pour toi c'est <1000μs, tu peux être plus lâches dans les options, et avoir un système global mieux géré, plus réactif, tout en ayant des tâches RT « suffisantes ».
    S'il te faut vraiment une très faible latence, alors c'est difficile d'avoir une machine multi-utilité qui va en plus réussir à tenir le temps réel dont tu as besoin.
    Et si en plus tu cherches une isolation forte avec des VMs, tu contrains encore plus.

    • Yth.