2 votes

ZFS slow scrub sur deux disques durs

Le pool est composé de deux disques durs (WD Red 3 TB, 5200 RPM ?, taux de transfert max. 147 MB/s & Verbatim (Toshiba) 3 TB, 7200 RPM) dans le système de gestion des données. raidz1-0 configuration. Il contient 2,25 To de données, dupliquées sur deux disques, soit un total de 4,5 To. Lorsque j'ai créé le pool, je n'ai pas spécifié de nom de domaine. ashift valeur.

zpool status montre que "scan : scrub repaired 0 in 32h43m with 0 errors on Sun Jan 3 13:58:54 2021". Cela signifie que la vitesse d'analyse était seulement 4.5e6 / (32.717 * 60 * 60) = 38.2 MB / s . Je m'attendrais à au moins 2 x 100 ou jusqu'à 2 x 200 Mo/s, bien que le disque WD soit un peu plus lent que l'autre.

Les données SMART des disques montrent que tout est sain. Ils ont 6,5 à 7 ans de durée de fonctionnement, mais le nombre de démarrages et d'arrêts n'est que de 200 environ.

Donc la question principale : Qu'est-ce qui pourrait expliquer les mauvaises performances de lecture ?

Curieusement zdb a montré que le pool utilise le chemin /dev/disk/by-id/ata-WDC_WD30EFRX-xyz-part1 plutôt que /dev/disk/by-id/ata-WDC_WD30EFRX-xyz . fdisk -l /dev/disk/by-id/ata-WDC_WD30EFRX-xyz mentionne que "la partition 1 ne démarre pas sur la limite du secteur physique", mais j'ai lu que cela ne devrait affecter que les performances d'écriture. Je pourrais essayer de résoudre ce problème en supprimant le périphérique et en le remettant en place avec le chemin d'accès au disque complet approprié, puisque les données sont dupliquées (et sauvegardées).

Le pool contient 7,1 millions de fichiers. J'ai testé l'exécution de sha1sum sur un fichier de 14276 MB après avoir vidé les caches via /proc/sys/vm/drop_caches il a fallu 2 min 41 s, ce qui donne une vitesse de lecture de 88,5 Mo/s.

dd bs=1M count=4096 if=/dev/disk/by-id/ata-WDC_WD30EFRX-xyz of=/dev/null a indiqué une vitesse de 144 MB/s, en l'utilisant sur ata-WDC_WD30EFRX-xyz-part1 a rapporté 134 MB/s et ata-TOSHIBA_DT01ACA300_xyz a rapporté 195 MB/s.

Mon NAS fonctionne avec des versions logicielles assez anciennes :

$ modinfo zfs
filename:       /lib/modules/3.11.0-26-generic/updates/dkms/zfs.ko
version:        0.6.5.4-1~precise
license:        CDDL
author:         OpenZFS on Linux
description:    ZFS
srcversion:     5FC0B558D497732F17F4202
depends:        spl,znvpair,zcommon,zunicode,zavl
vermagic:       3.11.0-26-generic SMP mod_unload modversions 

Il dispose de 24 Go de RAM, dont 8 Go sont réservés à une JVM, le reste étant libre d'être utilisé. Bien que le reste ne semble pas être libre :

$ free -m
             total       used       free     shared    buffers     cached
Mem:         23799      21817       1982          0        273       1159
-/+ buffers/cache:      20384       3415
Swap:         7874         57       7817

Edit 1 :

J'ai fait quelques tests avec bonnie++ En utilisant un seul fichier de 4 Go sur le RAIDZ : écriture 75,9 Mo/s, réécriture 42,2 Mo/s et lecture 199,0 Mo/s. Je suppose que j'ai fait la conversion correctement à partir des "kilo-caractères / seconde".

Ah, je viens de réaliser que le scrub parallèle prend autant de temps que le disque 5400 RPM le plus lent, peu importe que le 7200 RMP ait été (éventuellement) scrubé plus rapidement.

Edit 2 :

J'ai réduit le nombre de fichiers dans le pool de 7,1 millions à 4,5 millions (-36,6%) et le temps de scrub est passé de 32,72 heures à 16,40 heures (-49,9%). La quantité de données est la même puisque j'ai simplement placé ces petits fichiers dans un ZIP à faible compression.

J'ai aussi augmenté le recordsize de 128k à 512k, je ne sais pas si cela a fait une différence dans ce cas. Les autres données préexistantes n'ont pas été touchées, elles conservent donc l'aspect original. recordsize . Oh et /sys/module/zfs/parameters/zfs_scan_idle a été fixé à 2 .

3voto

shodanshok Points 42743

Quelle version de ZFS utilisez-vous ?

Les versions antérieures à la version 0.8.x effectuent un nettoyage en parcourant toutes les métadonnées et les données, telles qu'elles sont disposées sur les disques. Cela entraîne de nombreuses recherches qui nuisent aux performances des disques mécaniques. S'il est utilisé avec des disques 5K RPM de faible performance remplis de millions de petits fichiers, cela signifie des temps de scrub/resilver très longs. Avec ces anciennes versions de ZFS, vous pouvez régler certains paramètres ZFS ; par exemple :

echo 0 > /sys/module/zfs/parameters/zfs_resilver_delay
echo 0 > /sys/module/zfs/parameters/zfs_scan_idle

Sachez que l'augmentation de la priorité du scrub entraînera un ralentissement des performances de l'application.

La version 0.8.x utilise une approche de scrub par lots, où les métadonnées sont collectées par lots plus importants et seulement ensuite les données pertinentes sont analysées. Cela permet d'obtenir des analyses beaucoup plus rapides (c'est-à-dire deux fois moins longues), sans qu'il soit nécessaire de régler quoi que ce soit (les boutons ci-dessus ne sont même plus présents).

Donc la méthode la plus efficace pour augmenter la vitesse de scrub/resilver est probablement de mettre à jour votre version de ZFS.

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