web-dev-qa-db-fra.com

Options d'amélioration de la performance sur de très gros systèmes de fichiers et de High Iowait

J'ai un serveur de sauvegarde Ubuntu 16.04 avec un disque dur 8x10TB via un fond de panier SATA 3.0. Les 8 hard-disques sont assemblés à un RAID6, un système de fichiers EXT4 est utilisé. Ce système de fichiers stocke une énorme quantité de petits fichiers avec de très nombreuses opérations de recherche mais faible IO _ débit. En fait, il existe de nombreux petits fichiers de différents serveurs qui obtiennent des snappshottées via rsnapshot tous les jours (multiples inodes directs aux mêmes fichiers. J'ai une très mauvaise performance depuis le système de fichiers (60TB Net) dépassant une utilisation de 50%. Pour le moment, la L'utilisation est à 75% et a

du -sch /backup-root/

prend plusieurs jours (!). La machine a 8 cœurs et 16 g de RAM. Le RAM est totalement utilisé par le cache de système de fichiers OS, 7 de 8 noyaux toujours inactifs à cause de l'iowait.

Filesystem volume name:   <none>
Last mounted on:          /
Filesystem UUID:          5af205b0-d622-41dd-990e-b4d660c12bd9
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              912203776
Block count:              14595257856
Reserved block count:     0
Free blocks:              4916228709
Free inodes:              793935052
First block:              0
Block size:               4096
Fragment size:            4096
Group descriptor size:    64
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         2048
Inode blocks per group:   128
RAID stride:              128
RAID stripe width:        768
Flex block group size:    16
Filesystem created:       Wed May 31 21:47:22 2017
Last mount time:          Sat Apr 14 18:48:25 2018
Last write time:          Sat Apr 14 18:48:18 2018
Mount count:              9
Maximum mount count:      -1
Last checked:             Wed May 31 21:47:22 2017
Check interval:           0 (<none>)
Lifetime writes:          152 TB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
First Orphan inode:       513933330
Default directory hash:   half_md4
Directory Hash Seed:      5e822939-cb86-40b2-85bf-bf5844f82922
Journal backup:           inode blocks
Journal features:         journal_incompat_revoke journal_64bit
Journal size:             128M
Journal length:           32768
Journal sequence:         0x00c0b9d5
Journal start:            30179

Je manque d'expérience avec ce type d'utilisation du système de fichiers. Quelles options dois-je accorder cela? Quel système de fichiers fonctionnerait mieux avec ce scénario? Existe-t-il des options pour impliquer RAM pour d'autres options de mise en cache que la construction d'OS-Build-in?

Comment gérez-vous de très grandes quantités de petits fichiers sur de grandes assemblées RAID?

Merci, Sebastian

10
t2m

Merci à tous ceux qui ont donné une réponse à ma question.

C'est ce que j'ai résolu ce que j'ai résolu:

Tout d'abord, j'ai ajouté la quantité maximale de RAM au tableau. Malheureusement, la Commission ne prend en charge que 64 Go de RAM. J'ai observé le comportement après l'expansion, et c'était décevant. Toutes les disponibilités disponibles RAM ont été utilisées pour IO cache, la performance de la sauvegarde RSNApshot n'a pas amélioré de manière mesurable.

Je devais donc tirer la grande masse. J'ai ajouté deux disques NVME de 1 To et les assemblés à un RAID 1. Le RAID 6 composé de 8 heures de disque dur de 10 To est démonté sur un RAID 1 (composé de disque dur 2x 10TB, EXT4) et un RAID 5 (composé de 6x10TB HDD). Le RAID 1 contient maintenant le système d'exploitation et la copie de travail des serveurs (qui obtiennent rsynd 4 fois par jour à ce lecteur).

Le RAID5 est maintenant un dispositif de sauvegarde BCache, soutenu par le NVME-RAID 1 et formaté avec EXT4. Ce lecteur contient les copies rsnapshot. Chaque nuit, les fichiers sont rsyncés du RAID1 au RAID5, qui met en évidence l'Io-débit du RAID5 par rapport à l'ancien RAID6, qui contenait les copies de travail et les instantanés de sauvegarde. Grâce au BCACHACH, pas littéralement chaque fichier est écrit aux disques, mais tous les changements sur un bloc sont écrits une fois, même s'il contient plusieurs changements de fichier Singlederths. Cela a encore diminué IOPS sur le disque dur.

Enfin, j'ai changé ma configuration rsnapshot. Autrefois, il y avait 31 instantanés quotidiens et 18 instantanés mensuels, ce qui a entraîné 49 générations de sauvegarde. Maintenant, j'ai la conception classique de 7D/4W/12m/1Y, qui réduit la quantité de générations de sauvegarde jusqu'à 24.

Après ces modifications (et avec le 64GB RAM mentionné ci-dessus), la durée d'un instantané est descendue de ~ 20 heures à 1,5 heure. Les appareils BCACHE ont un taux de hauteur de cache de 82% ( après 6 semaines d'exploitation régulière).

Mission accomplie. Merci à vous tous pour vos pensées et vos commentaires.

0
t2m

J'ai une configuration similaire (bien que petite), avec des disques 12x 2TB dans un tableau RAID6, utilisé à la même manière (rsnapshot Sauvegarde Server).

Tout d'abord, il est parfaitement normal pour du -hs Pour prendre autant de temps sur un système de fichiers aussi vaste et utilisé. De plus, du comptes pour les hardlinks, qui causent une charge de processeur considérable et enthousiaste en plus de l'évidence IO Charge.

Votre lenteur est due aux métadonnées du système de fichiers situées dans des blocs très lointains (en termes de LBA), causant de nombreuses recherches. En tant que disque RPM de 7,2k normal fournit environ 100 iops, vous pouvez voir comment des heures, sinon jours, sont nécessaires pour charger toutes les métadonnées.

Quelque chose que vous pouvez essayer de (non-destructivement) améliorent la situation:

  • assurez-vous de non avoir mlocate/slocate indexer votre /backup-root/ (vous pouvez utiliser l'installation Facilitive Prunefs pour éviter que cela) ou une corbeille de cache de métadonnées altérera sévèrement votre temps de sauvegarde;
  • pour la même raison, évitez de courir du sur /backup-root/. Si nécessaire, courez du uniquement sur le sous-dossier spécifique intéressé;
  • inférieur vfs_cache_pressure de la valeur par défaut (100) à un (10 ou 20) plus conservateur (10 ou 20). Cela indiquera au noyau de préférer la mise en cache des métadonnées, plutôt que la mise en cache de données; Cela devrait à son tour accélérer le rsnapshot/rsync phase de découverte;
  • vous pouvez essayer d'ajouter un périphérique de mise en cache de métadonnées Writethrough, par exemple via LVMCache ou BCache . Ce dispositif de métadonnées devrait évidemment être un SSD;
  • augmentez votre RAM disponible.
  • comme vous utilisez EXT4, soyez conscient des problèmes d'allocation d'inode (lecture ici pour un exemple). Ceci n'est pas directement corrélé à la performance, mais il s'agit d'un facteur important lorsqu'il a tant de fichiers sur un système de fichiers basé sur EXT.

D'autres choses que vous pouvez essayer - mais ce sont des opérations destructrices:

  • utilisez XFS avec les deux -ftype et -finobt ensemble option;
  • utilisez des ZFS sur Linux (zol) avec arc comprimé et primarycache=metadata Réglage (et peut-être, un L2ARC pour le cache en lecture seule).
11
shodanshok

Ce système de fichiers stocke une énorme quantité de petits fichiers avec de très nombreuses opérations de recherche mais faible IO Début.

????

C'est une chose qui attrape beaucoup de gens de nos jours. Hélas, les FSE conventionnels n'échelent pas bien ici. Je peux vous donner probablement quelques conseils en matière de configuration que vous avez déjà: EXT4 sur RAID-6 sur HDDS:

  1. Inférieur vm.vfs_cache_pressure Down, disons à 1. Il s'agirait Changer de biais de cache vers la préservation de plus de métadonnées (Inode, DENTAY) au lieu de données elles-mêmes et il devrait avoir un effet positif dans la réduction du nombre de recherches.
  2. Ajouter plus RAM. Bien que cela puisse sembler étrange pour un serveur qui n'exécute aucune application piggy, rappelez-vous: le seul moyen de réduire les soldes est de garder plus de métadonnées dans un stockage plus rapide, étant donné que vous avez 16 gb, il semble que cela semble être relativement facile à Augmentez le RAM Montant
  3. Comme je l'ai dit EXT4 n'est pas bon choix pour le cas d'utilisation que vous avez, mais vous pouvez toujours utiliser certaines des caractéristiques qu'il pose pour apaiser la douleur: [.____]
    • Journal externe est pris en charge afin que vous puissiez essayer d'ajouter SSD (mieux miroir) et placez le journal là-bas. Découvrez " ext4: Cavités de journal externes "
    • Essayez de commuter Mode de journal sur "Toutes les données en cours de journalisation" avec data=journal
  4. Essayez Déplacer des fichiers en dehors de célibataires FS Scope. Pour par exemple, si vous avez LVM-2 ici, vous pouvez créer des volumes de taille inférieure et les utiliser pendant un temps étant , alors quand il est plein, créez-en un autre et ainsi de suite.
    • Si vous n'avez pas de LVM-2, vous pouvez essayer de le faire avec/dev/boucle, mais ce n'est pas si pratique et probablement moins performant

upd. : puisqu'il est passé à être Linux logiciel RAID (LSR) RAID-6, voici un élément supplémentaire:

  1. LSR a ses propres options de réglage que de nombreuses personnes semblent négliger
    • Cache à rayures , qui peut être réglée ainsi au maximum: echo 32768 | Sudo tee /sys/devices/virtual/block/md*/md/stripe_cache_size - Mais faites-le avec précaution (utilisez une valeur moindre si nécessaire) car la taille est multiple de la taille de la morceau et en fonction de la taille du morceau que vous avez choisi, cela prendrait une quantité différente de RAM
    • Journal externe qui peut également être sur ces SSD en miroir ( mais actuellement MD Device Created W/O Journal ne peut pas être converti en utilisant un ).

- C'est probablement la majeure partie de ce qui peut être amélioré avec la ré-conception de zéro.

J'ai une très mauvaise performance depuis que le système de fichiers (60TB Net) a dépassé une utilisation de 50%. Pour le moment, l'utilisation est à 75%

C'est un problème très grave parce que le niveau d'occupation de l'espace disque élevé ne s'aggrave que la fragmentation. Et plus de fragmentation signifie plus cherche. L'émerveillement n'est plus pourquoi il a donné des performances plus ou moins acceptables avant d'atteindre 50%. Beaucoup de manuels ont des recommandations claires pour ne pas permettre que les BAS se développent derrière 75-80%.

6
poige

RAID6 ne vous aide pas beaucoup dans ce cas, comme ZFS pourrait permettre d'activer beaucoup plus de métadonnées et d'accès aux annuaires plus rapides tout en maintenant les vitesses de la même manière.

0
John Keates

RAID-6 Stripes Drive, donc tous IO va à tous les lecteurs. C'est assez inefficace avec de nombreux petits fichiers. Cependant ce n'est probablement pas votre problème principal qui est probablement ...

EXT4 n'est pas bien adapté aux gros systèmes de fichiers avec des millions de fichiers. Utilisez [~ # ~] XFS [~ # ~ ~]. J'ai des systèmes de fichiers XFS fonctionnant aussi gros que 1,2 pb et avec jusqu'à 1 milliard de fichiers, aucun problème. tilisez simplement XFS.

0
wazoox