UAE – ENSAH
05 Novembre 2021
4- Entrées/sorties et gestion de la mémoire avec temps réel
Plan
2 Hiérarchies de mémoires
Sources de variabilités
Sources de variabilités
Tiré de Jim Huang, Making Linux do Hard Real-Time, 2016, CC BY-SA 3.0, http ://www.slideshare.net/jserv/making-linux-do-hard-realtime.
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.1- Variabilité du temps d’exécution
Tiré de Jim Huang, Making Linux do Hard Real-Time, 2016, CC BY-SA 3.0,
http ://www.slideshare.net/jserv/making-linux-do-hard-realtime.
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.1- Variabilité du temps d’exécution
Tiré de Jim Huang, Making Linux do Hard Real-Time, 2016, CC BY-SA 3.0,
http ://www.slideshare.net/jserv/making-linux-do-hard-realtime.
Appels système
Dans Linux, processus utilisateurs peuvent être préemptés à tout moment ?
. Oui, sauf lors d’appels système
. Appels système effectués en mode privilégié
? Signifie qu’appel système doit se terminer avant que l’on puisse préempter processus
actuel
Tiré de Jim Huang, Making Linux do Hard Real-Time, 2016, CC BY-SA 3.0,
http ://www.slideshare.net/jserv/making-linux-do-hard-realtime.
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.1- Variabilité du temps d’exécution
PREEMPT_RT
Patch PREEMPT_RT de Linux
. Modifications au noyau permettent la préemption des appels système
. Changements pour versions spécifiques du noyau
? Noyau de votre RPi0 inclus la patch
. Vise à minimiser quantité de code du noyau qui n’est pas préemptible
? Force interruptions a être traitées par threads du noyau (kthreads)
? Modifications à deux modèles de synchronisation (RCU et sleeping spinlocks)
? Utilisation du noyau de primitives de synchronisation temps réel (mutex, sleeping spin-
locks, reader-writer locks)
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.1- Variabilité du temps d’exécution
PREEMPT_RT
Patch PREEMPT_RT de Linux
. Modifications au noyau permettent la préemption des appels système
. Changements pour versions spécifiques du noyau
? Noyau de votre RPi0 inclus la patch
. Vise à minimiser quantité de code du noyau qui n’est pas préemptible
? Force interruptions a être traitées par threads du noyau (kthreads)
? Modifications à deux modèles de synchronisation (RCU et sleeping spinlocks)
? Utilisation du noyau de primitives de synchronisation temps réel (mutex, sleeping spin-
locks, reader-writer locks)
Ces modifications rendent Linux plus approprié pour temps réel
. Modifications engendrent aussi quelques inefficacités relativement à la version de base
du noyau
. Même avec PREEMPT_RT, latences de Linux tout de même élevées relativement
d’autres SE temps réel
? Linux n’est pas conçu et pas nécessairement approprié pour temps réel dur
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.1- Variabilité du temps d’exécution
Tiré de Jim Huang, Making Linux do Hard Real-Time, 2016, CC BY-SA 3.0, http ://www.slideshare.net/jserv/making-linux-do-hard-realtime.
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.2- Hiérarchies de mémoires
Hiérarchies de mémoires
Différents types de mémoires
. DRAM (dynamic RAM) : utilisée pour la mémoire vive
? Doit être rafraîhie régulièrement et après chaque lecture : temps de cycle significatif
? Emphase sur le rapport capacité/coût
. SRAM (static RAM) : utilisée pour les caches
? N’a pas besoin d’être rafraîchie après lecture (temps de cycle faible)
? Emphase sur le vitesse
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.2- Hiérarchies de mémoires
Hiérarchies de mémoires
Différents types de mémoires
. DRAM (dynamic RAM) : utilisée pour la mémoire vive
? Doit être rafraîhie régulièrement et après chaque lecture : temps de cycle significatif
? Emphase sur le rapport capacité/coût
. SRAM (static RAM) : utilisée pour les caches
? N’a pas besoin d’être rafraîchie après lecture (temps de cycle faible)
? Emphase sur le vitesse
On veut une mémoire rapide et de grande taille
. Solution : hiérarchies de mémoires
. Tirer avantage des technologies de mémoires (différents compromis coût-performance)
Hiérarchies de mémoires
Différents types de mémoires
. DRAM (dynamic RAM) : utilisée pour la mémoire vive
? Doit être rafraîhie régulièrement et après chaque lecture : temps de cycle significatif
? Emphase sur le rapport capacité/coût
. SRAM (static RAM) : utilisée pour les caches
? N’a pas besoin d’être rafraîchie après lecture (temps de cycle faible)
? Emphase sur le vitesse
On veut une mémoire rapide et de grande taille
. Solution : hiérarchies de mémoires
. Tirer avantage des technologies de mémoires (différents compromis coût-performance)
Hiérarchies de mémoires
Mémoire virtuelle
Mémoire virtuelle
Tiré de J.L. Hennessy et D.A. Patterson, Computer Architecture : A Quantitative Approach, 6e édition, Elsevier, 2017
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.2- Hiérarchies de mémoires
Traduction d’adresses
Traduction d’adresses
Tiré de Jim Huang, Making Linux do Hard Real-Time, 2016, CC BY-SA 3.0, http ://www.slideshare.net/jserv/making-linux-do-hard-realtime.
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.3- Allocation de la mémoire des processus dans Linux
Tiré de Jim Huang, Making Linux do Hard Real-Time, 2016, CC BY-SA 3.0, http ://www.slideshare.net/jserv/making-linux-do-hard-realtime.
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.3- Allocation de la mémoire des processus dans Linux
Tiré de Jim Huang, Making Linux do Hard Real-Time, 2016, CC BY-SA 3.0, http ://www.slideshare.net/jserv/making-linux-do-hard-realtime.
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.3- Allocation de la mémoire des processus dans Linux
mlock
mlock
Limitations de mlock
État de blocage n’est pas hérité par les processus enfants (ex. créés par un fork())
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.3- Allocation de la mémoire des processus dans Linux
Limitations de mlock
État de blocage n’est pas hérité par les processus enfants (ex. créés par un fork())
Par défaut, quantité de mémoire pouvant être bloqué est limité (typiquement 64
ko)
. Connaître la limite : commande ulimit -l
. Modifier cette limite avec fonction setrlimit
? Requiert des privilèges administrateurs ou modifications aux permissions
? Solution pour cas simples, sans restriction de sécurité : exécuter programme avec sudo
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.3- Allocation de la mémoire des processus dans Linux
Limitations de mlock
État de blocage n’est pas hérité par les processus enfants (ex. créés par un fork())
Par défaut, quantité de mémoire pouvant être bloqué est limité (typiquement 64
ko)
. Connaître la limite : commande ulimit -l
. Modifier cette limite avec fonction setrlimit
? Requiert des privilèges administrateurs ou modifications aux permissions
? Solution pour cas simples, sans restriction de sécurité : exécuter programme avec sudo
Appel à mlock/mlockall bloque tant que toutes les pages spécifiées ne sont pas
chargées en mémoire
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.4- Problème d’inversion de priorité
Avec mutex POSIX (pthread) sous Linux, propriétés temps réel possibles
. Propriété modifiée via fonction pthread_mutexattr_setprotocol
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.4- Problème d’inversion de priorité
Avec mutex POSIX (pthread) sous Linux, propriétés temps réel possibles
. Propriété modifiée via fonction pthread_mutexattr_setprotocol
Avec mutex POSIX (pthread) sous Linux, propriétés temps réel possibles
. Propriété modifiée via fonction pthread_mutexattr_setprotocol
. addr : indication où l’image doit être créée (NULL si on laisse le noyau choisir)
. length : taille de l’image
. prot : protection mémoire désirée (PROT_EXEC, PROT_READ, PROT_WRITE, PROT_NONE)
. flags : propriétés de l’image
? MAP_SHARED : image partagée avec écriture au fichier
? MAP_PRIVATE : image copie locale qui n’affecte pas fichier
? MAP_ANONYMOUS : image anonyme en mémoire, sans lien avec fichier
? MAP_POPULATE : forcer à remplir image avec données du fichier
. fd : descripteur du fichier lié à l’image (-1 si image anonyme)
. offset : déplacement dans fichier correspondant au début de l’image
. Retourne l’adresse effective utilisée pour l’image
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.5- Communication entre processus temps réel
. Processus parent et enfant partage espace mémoire de taille length à l’adresse addr
. On peut définir mutex temps réel (supportant héritage de priorité) dans cet espace
mémoire pour contrôler accès
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.5- Communication entre processus temps réel
. name : nom du fichier, doit commencer par un /, sans en contenir ailleurs dans le nom
(ex. /nomdupartagememoire)
. oflags : masque déterminant l’ouverture du fichier, doit obligatoirement contenir
O_RDONLY ou O_RDWR
? O_RDONLY : partage ouvert en lecture seulement
? O_RDWR : partage ouvert en lecture/écriture
? O_CREAT : créer le partage s’il n’existe pas
? O_EXCL : retourne une erreur si partage existe déjà
? O_TRUNC : si partage existe déjà, redimensionner à une taille nulle
. mode : mode d’ouverture (permissions), typiquement utiliser 0666
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.5- Communication entre processus temps réel
. Permet échange par mémoire partagée entre deux processus non relatés
. Fonction ftruncate permet de préciser la taille exacte de l’espace mémoire partagé
donné par shm
. Tous processus ouvrant un partage au nom donné pourront partager l’espace mémoire
et ainsi communiquer
4- Entrées/sorties et gestion de la mémoire avec temps réel
4.5- Communication entre processus temps réel
Fin de Séance
Vos Questions ?