En informatique, un cache est une une mémoire qui enregistre temporairement des copies de données afin de diminuer le temps d'un accès ultérieur. La mise en cache permet de réutiliser efficacement des données précédemment récupérées ou traitées. Sous Linux, on utilise principalement le système de mise en cache appelé « page cache » ou cache de pages en français, mais il est également possible d’utiliser les transferts E/S directs.Dans la pratique, les données mises en cache sont généralement stockées sur du matériel à accès rapide, comme la mémoire vive, et peuvent également être utilisées en corrélation avec un composant logiciel. L'objectif principal d'un cache est d'augmenter les performances de récupération des données en réduisant le besoin d'accès à la couche de stockage sous-jacente plus lente. En laissant la capacité au profit de la vitesse, un cache stocke généralement un sous-ensemble de données transitoires, contrairement aux bases de données où celles-ci sont généralement complètes et durables.
Dans la plupart des cas, le noyau Linux fait référence au « page cache » lors de la lecture ou de l'écriture sur le disque. De nouvelles pages sont ajoutées pour répondre aux demandes de lecture des processus en mode utilisateur. Si la page ne se trouve pas déjà dans le cache, une nouvelle entrée est ajoutée au cache et remplie avec les données lues sur le disque. Si la mémoire disponible est suffisante, la page est conservée dans le cache pendant une durée indéterminée et peut ensuite être réutilisée par d'autres processus sans accéder au disque.
Les concepteurs du noyau Linux ont implémenté le « page cache » pour répondre à deux exigences principales. Premièrement, cela va permettre au système de localiser rapidement une page spécifique contenant des données relatives à un propriétaire donné. Pour tirer le meilleur parti du cache de Linux, la recherche doit être une opération très rapide. Ensuite, le noyau doit être en mesure de sélectionner l'opération appropriée en fonction du propriétaire de la page. L'unité d'information conservée dans le cache de pages est, bien sûr, une page entière de données. Une page ne contient pas nécessairement des blocs de disque physiquement adjacents, elle ne peut donc pas être identifiée par un numéro de périphérique et un numéro de bloc.
Au lieu de cela, une page du cache de pages est identifiée par un propriétaire et par un index dans les données du propriétaire, généralement un inode et un décalage dans le fichier correspondant. Cependant, dans certains cas, comme celui des bases de données, où le volume de données à mettre en cache est trop important, les développeurs préfèrent utiliser une solution de contournement. Plusieurs applications de base de données utilisent les transferts E/S directs pour pouvoir utiliser leur propre algorithme de mise en cache de disque. La plupart d’entre eux implémentent leurs propres mécanismes de mise en cache qui exploitent la nature particulière des requêtes adressées à la base de données.
En effet, les développeurs estiment que pour ces types de programmes, le cache de pages du noyau n’aide pas. Au contraire, il est préjudiciable pour de nombreuses raisons. D’abord, expliquent-ils, beaucoup de caches de pages sont gaspillés pour dupliquer des données de disque déjà dans la RAM (dans le cache de disque de niveau utilisateur). Deuxièmement, les appels read() et write() seraient ralentis par les instructions redondantes qui gèrent le cache de page et la lecture anticipée. Idem pour les opérations de pagination liées aux mappages de mémoire de fichiers. Ces derniers citent également une troisième raison liée au fait que le cache de pages serait préjudiciable pour les serveurs de bases de données.
D'après eux, plutôt que de transférer les données directement entre le disque et la mémoire utilisateur, les appels read() et write() effectuent deux transferts : entre le disque et une mémoire tampon du noyau et entre la mémoire tampon du noyau et la mémoire utilisateur. Pour ces raisons, Linux offre un moyen simple de contourner le cache pages : les transferts E/S directs. Dans un transfert direct d'E/S, le noyau...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.

Que pensez-vous des arguments avancés par Linus Torvalds et Dave Chinner ?