Chapitre 7. Systèmes de fichiers
7.1. Considérations pour optimiser des systèmes de fichiers
7.1.1. Options de formatage
La taille de bloc peut être sélectionnée au moment de mkfs
. La gamme de tailles valides dépend du système : la limite supérieure est la taille de page maximum du système hôte, tandis que la taille inférieure dépend du système de fichiers. La taille de bloc par défaut est appropriée dans la plupart des cas.
Si votre système utilise un stockage par bandes tel que RAID5, vous pouvez améliorer la performance en alignant les données et les métadonnées sur la géométrie sous-jacente du stockage lors de mkfs
. Pour RAID logiciel (LVM ou MD) et le stockage de matériel d'entreprise, cette information est recherchée et définie automatiquement, mais dans de nombreux cas l'administrateur doit spécifier cette géométrie manuellement avec mkfs
sur la ligne de commande.
Les charges de travail intensives de métadonnées signifient que la section « log » (journal) d'un système de fichiers de journalisation (tel que ext4 et XFS) est extrêmement fréquemment mise à jour. Pour minimiser le temps de recherche du système de fichiers au journal, vous pouvez placer le journal sur le stockage dédié. Remarquez cependant que placer le journal sur un stockage externe plus lent que le système de fichiers principal peut annuler tout avantage potentiellement associé à l'utilisation d'un stockage externe.
Avertissement
mkfs
et les périphériques journaux sont spécifiés lors du montage. Reportez-vous aux pages man mke2fs(8)
, mkfs.xfs(8)
et mount(8)
pour obtenir davantage d'informations.
7.1.2. Options de montage
Une barrière d'écriture est un mécanisme du noyau utilisé pour s'assurer que les métadonnées du système de fichiers soient écrites et ordonnées correctement sur un stockage persistant, même lorsque les périphériques de stockage avec des caches d'écriture volatiles subissent une perte de puissance. Les systèmes de fichiers avec des barrières d'écriture activées assurent aussi que toutes données transmises via fsync()
persistent lors de pannes de courant. Red Hat Enterprise Linux active les barrières par défaut sur tout le matériel qui les prend en charge.
fsync()
, ou qui créent et suppriment de nombreux fichiers de petite taille. Pour les stockages sans cache d'écriture volatile, ou dans le rare cas où les inconsistances et pertes de données d'un système de fichiers après une panne de courant sont acceptables, les barrières peuvent être désactivées en utilisant l'option de montage nobarrier
. Pour obtenir davantage d'informations, veuillez vous reporter au Guide d'administration du stockage.
Historiquement, lorsqu'un fichier est lu, le temps d'accès (atime
) de ce fichier doit être mis à jour dans les métadonnées de l'inode, ce qui implique des écritures d'E/S supplémentaires. Si des métadonnées atime
précises ne sont pas requises, montez le système de fichiers avec l'option noatime
afin d'éliminer ces mises à jour de métadonnées. Cependant, dans la plupart des cas, atime
n'est pas une grosse surcharge résultant du comportement « atime » relatif par défaut (ou relatime
) dans le noyau Red Hat Enterprise Linux 6. Le comportement relatime
met uniquement à jour atime
si le atime
précédent est plus ancuen que le temps de modification (mtime
) ou le temps de modification de statut (ctime
).
Note
noatime
active aussi le comportement nodiratime
; il n'est pas nécessaire de paramétrer noatime
ainsi que nodiratime
en même temps.
La lecture à l'avance accélère l'accès aux fichiers en récupérant les données à l'avance et en les chargeant dans le cache de la page de manière à ce qu'elles soient disponibles plus tôt dans la mémoire au lieu de depuis le disque. Certaines charges de travail, comme celles impliquant une diffusion importante d'entrées et sorties séquentielles, bénéficient de hautes valeurs de lecture à l'avance.
blockdev
pour afficher et modifier la valeur de lecture à l'avance. Pour afficher la valeur de la lecture à l'avance actuelle pour un périphérique bloc particulier, vuillez exécuter :
# blockdev -getra périphérique
# blockdev -setra N périphérique
blockdev
ne persistera pas lors de redémarrages. Nous recommandons de créer un script init.d
de niveau d'exécution pour définir cette valeur pendant le démarrage.
7.1.3. Maintenance de systèmes de fichiers
Les opérations d'abandon en ligne et d'abandon du lot sont des fonctionnalités des systèmes de fichiers montés qui abandonnent les blocs qui ne sont pas utilisés par le système de fichiers. Les opérations sont utiles pour les disques SSD et les allocations fines et dynamiques de stockage.
fstrim
. Cette commande abandonne tous les blocs inutilisés dans un système de fichiers qui correspondent aux critères de l'utilisateur. Les deux types d'opérations sont pris en charge avec les systèmes de fichiers XFS et ext4 dans Red Hat Enterprise Linux 6.2 et ses versions supérieures tant que le périphérique bloc sous-jacent au système de fichiers prend en charge les opérations d'abandon physique. Les opérations d'abandon physique sont prises en charge si la valeur de /sys/block/périphérique/queue/discard_max_bytes
n'est pas zéro.
-o discard
(soit dans /etc/fstab
ou en faisant partie de la commande mount
) et exécutées en temps réeal sans intervention de la part de l'utilisateur. Les opérations d'abandon en ligne abandonnent uniquement les blocs passant de « Utilisé » à « Libre ». Les opérations d'abandon en ligne sont prises en charge sur les systèmes de fichiers ext4 dans Red Hat Enterprise Linux 6.2 et ses versions supérieures, ainsi que sur les systèmes de fichiers XFS dans Red Hat Enterprise Linux 6.4 et ses versions supérieures.
7.1.4. Considérations pour l'application
Les systèmes de fichiers ext4, XFS et GFS2 prennent en charge la pré-allocation d'espace efficace via l'appel glibc fallocate(2)
. Dans les cas où les fichiers pouvaient être mal fragmentés à cause des schémas d'écriture, conduisant ainsi à de pauvres performances de lecture, la pré-allocation d'espace peut être une technique utile. La pré-allocation marque l'espace disque comme s'il a été alloué à un fichier, sans écrire de données dans cet espace. Jusqu'à ce que de véritables données soient écrites sur un bloc pré-alloué, les opérations de lecture retourneront des zéros.