1 votes

mise à jour efficace des fichiers sous Linux

Dans un contexte de haute performance (nombreuses mises à jour simultanées) sous Linux, quelle est la méthode la plus efficace pour mettre à jour un fichier de 30k sur le disque :

1. il suffit de mettre à jour le fichier correspondant
2. supprimez l'ancien fichier et enregistrez le nouveau.

Je suis surtout préoccupé par le temps d'accès au disque, mais la charge du processeur peut aussi être un facteur.

2voto

wazoox Points 6554

Le sous-système de disque et le système de fichiers que vous utilisez ont un impact considérable. En fait, il y a tellement de résultats différents possibles que vous devriez probablement les évaluer. Cependant :

  • Gardez à l'esprit que les IOs synchrones réelles sont limitées à environ 100 IOPS pour un disque SATA, 200 pour un disque SAS, et varient énormément de 10 IOPS à 10000 avec les SSDs. Multipliez le nombre d'IOPS par le nombre de lecteurs de données.
  • Les systèmes de fichiers modernes regroupent les opérations d'écriture. Un bon choix de système de fichiers et un réglage détaillé modifieront les résultats par un facteur de 10 à 100.
  • Les contrôleurs de stockage modernes peuvent mettre en cache les écritures. Des réglages appropriés du cache d'écriture changeront une fois de plus les résultats par un facteur de 10 à 1000.

Ainsi, un matériel approprié (un vrai contrôleur RAID avec cache WB, un SSD), un logiciel approprié (un système de fichiers moderne, ext3 est absolument hors de question ici, j'opterais pour xfs mais ext4 est une option) et un réglage approprié (testez les différents paramètres du kernel IO scheduler, IO size, etc.

2voto

Matthew Ife Points 22370

Si vous le mettez souvent à jour, le fait que le contenu des fichiers soit périmé ne sera probablement pas un problème pour vous. Dans ce cas, mettez-le sur tmpfs, tronquez le fichier lors de la mise à jour et réécrivez-le. C'est la méthode la plus économique car elle n'utilise pas de disque du tout.

La prochaine étape la plus proche est de faire un truncate/write sur un système de fichiers qui a l'extension noatime option de montage activée et journalisation désactivée. Mais encore une fois, c'est risqué si vous tombez en panne car vous pourriez perdre les données.

Après cela, il n'y a plus de temps à perdre et le journal est activé.

N'oubliez pas que Linux met en mémoire tampon les écritures et les synchronise avec le disque à des intervalles déterminés, de sorte que vous ne ressentirez normalement pas l'impact d'une écriture du point de vue des E/S (à moins qu'il ne s'agisse d'une écriture très lourde, mais cela peut être réglé). Vous pouvez également modifier les conditions de synchronisation avec le disque, afin que le tampon d'écriture se remplisse pendant un long moment avant la synchronisation avec le disque.

Si vous voulez faire quelque chose de vraiment intelligent utilisez fallocate pour pré-allouer de l'espace pour le fichier qui serait sa valeur maximale possible. Ensuite, mmap ouvre le fichier pour le lire directement en mémoire. La réécriture sera alors quasi instantanée (mais avec des pertes en cas de coupure de courant). Vous pouvez alors contrôler le moment de la réécriture sur le disque avec l'appel msync.

1voto

jeffreypriebe Points 1070

En supposant qu'il s'agisse d'un fichier plat, et non d'un fichier de base de données, les avantages et les inconvénients des deux méthodes sont réels :

  1. Si vous écrasez simplement le contenu du fichier sur place, vous évitez certainement les étapes de réaffectation. Vous pouvez donc gagner un peu de temps. Cependant, le placement des pièces n'est peut-être pas optimal.

  2. Vous pouvez obtenir un placement plus optimal des données en fonction de la fragmentation du disque. Mais il sera un peu plus lent car l'espace doit être alloué et, si vous travaillez dans un environnement plus sécurisé, il faudra du temps pour remettre à zéro le bloc avant de l'allouer.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X