Pourquoi zfs ne cache-t-il pas cette charge de travail lorsque les filesystems "normaux" le cache complètement?

Mise à jour: car l'logging des valeurs par défaut est de 128k, la quantité de données lues par le programme de test est beaucoup plus grande que l'ARC sur un système de 8 Go et encore légèrement supérieure à celle de l'ARC sur un système de 16 Go. Réduire l'logging permet de lire less de données et donc il correspond à l'ARC. Je sous-estimais la taille des données lues, l'effet de l'logging sur ce sujet et, par conséquent, de mauvaises conclusions. Jusqu'à présent, la désactivation du préfetch ne semble pas faire beaucoup de différence dans ce cas, même si je vais essayer toutes les options d'logging avec et sans préautorisation activé.

Cette charge est similaire à un scénario IMAP / Maildir avec de nombreux directorys, de nombreux files et potentiellement seulement de petites quantités de données lues dans chaque file.

J'ai testé avec FreeBSD 10 et Fedora 19 avec zfsonlinux. J'ai testé plusieurs filesystems indigènes linux, comme extX / xfs / jfs et même btrfs. Sur FreeBSD, j'ai également testé l'utilisation du système de files native ufs. Ma charge de travail consiste simplement à numériser une large collection de musique en utilisant amarok / winamp / etc. Mon programme de test est amarok_collectionscanner car il peut être exécuté à partir de la command line facilement. Le motif est toujours le même. Un cycle initial du scanner de collecte prend environ 10 minutes selon le système de files, mais ZFS fonctionne de manière similaire aux filesystems non-ZFS

Les exécutions ultérieures d'une parsing sont incroyablement rapides en utilisant un système de files non-zfs, habituellement environ 30 secondes. ZFS ne fait que des améliorations marginales avec les courses ultérieures. Il est également évident de regarder iostat qu'après une première exécution sur un système de files non ZFS, le operating system ne touche pas le disque. Tout est dans le cache du système de files.

L'utilisation d'un cache SSD pour ZFS améliore le time, mais il ne se rapproche jamais que de 30 secondes.

Pourquoi ZFS ne cache-t-il pas cette charge? Une possibilité que j'ai explorée était que la taille de l'ARC était limitée à less qu'un système de files non-ZFS était autorisé à utiliser pour la caching. J'ai testé à nouveau sur une machine avec plus de memory disponible pour l'ARC que toute la memory disponible sur le premier système de test et les nombres restnt les mêmes.

J'espère find / créer une recette fil qui duplique ce type de charge. Fondamentalement, il faudrait créer des milliers de files de petite taille, parsingr tous les directorys à la search des files, ouvrir chaque file et lire une petite quantité de données de chacun. C'est comme la pire database du monde! Je vais probablement tester OpenIndiana prochain, mais je m'attends à ce que les résultats soient les mêmes.

L'set de données est de 353 Go et 49 000 files. Les systèmes de test possédaient 8 Go de 16 Go de RAM. La configuration zpool a fait très peu de différence, mais les tests auxquels je me souciais étaient toujours un seul disque. J'ai utilisé ST3500630AS et WDC WD20EZRX-00D8PB0 parmi d'autres lecteurs. Les lecteurs n'ont presque pas changé. La quantité de RAM ou la vitesse des CPU ne faisaient que peu ou pas de différence. Seul le système de files utilisé a modifié les résultats de manière appréciable et ces différences étaient assez importantes comme je l'ai noté ci-dessus. J'ai effectivement des montagnes de points de données concernant les différents parameters du système de files que j'ai essayé et ce sont quelques-unes des variables que j'ai vérifiées: les configurations mdadm raid (0 et 1) les configurations zpool, le miroir et la bande zfs enregistrent le bloc de taille du bloc de taille mDEm taille

Sur un seul lecteur ST3500630AS, j'ai obtenu ces numéros pour les options du système de files par défaut pour les filesystems suivants. Il s'agissait de Fedora 19, 8 Go de RAM, kernel 3.11.10-200, ZFS 0.6.2-1. Les valeurs sont en secondes. Des parsings subséquentes ont été exécutées sans aucune tentative d'effacement du cache.

ZFS: 900, 804, 748, 745, 743, 752, 741 btrfs: 545, 33, 31, 30, 31, 31 ext2: 1091, 30, 30, 30, 30, 30... ext3: 1014, 30, 30, 30, 30, 30... ext4: 554, 31, 31, 32, 32, 31, 31... jfs: 454, 31, 31,31,31... xfs: 480, 32, 32, 32, 32 ,31 ,32, etc. 

Sur FreeBSD 10, lecteur unique WD20EZRX-00D8PB0, machine plus rapide, 16 Go de memory, ARC autorisé à atteindre 12 Go:

 ufs: 500, 18, 18... zfs: 733, 659, 673, 786, 805, 657 

Bien que les variables ci-dessus aient parfois un effet sur l'parsing initiale du cache en froid des données, ce sont les exécutions suivantes qui semblent identiques. Les filesystems standard le cachent tous et, par conséquent, tant que rien d'autre ne détruit le cache, effectuez une foudre rapidement. ZFS ne présente pas ce comportement.

2 Solutions collect form web for “Pourquoi zfs ne cache-t-il pas cette charge de travail lorsque les filesystems "normaux" le cache complètement?”

Commencez par désactiver l' atime si ce n'est déjà fait.

Vous pouvez également étudier la définition de primarycache=metadata impact sur les primarycache=metadata .

Sur FreeBSD, installez sysutils / zfs-stats

L'outil «zfs-mon» qui fait partie de ce package vous donnera des détails sur les rapports de perquisition / manque de cache pour chacun des différents types de cache dans ZFS (ARC, ARC Metadata, ZFETCH, Prefetch, etc.).

En outre, 'zpool iostat 1', alors que la numérisation pourrait aider

Par défaut, le cache 'metadata' est limité à 1/4 de l'ARC, vous pouvez ajuster cette valeur avec vfs.zfs.arc_meta_limit loader.conf accordable

Dans FreeBSD 10, les statistics ARC sont incluses dans «top», en regardant comment ces valeurs changent pendant que vous numérisez peut fournir un aperçu

  • Comment éviter une longue list de points de assembly pour ZFS exportés sur NFS pour plusieurs users?
  • Les actions ZFS ne sont pas exscopes jusqu'à ce que la propriété de partage soit reconfigurée sur Ubuntu 16.04
  • Envoi instantané ZFS incrémental
  • Comment fonctionne l'utilisation des quotas pour ZFS sur Linux?
  • Comment importer un enfant d'un miroir zpool cassé sur un hôte différent?
  • ZFS: bonne lecture mais mauvaise vitesse d'écriture
  • Impossible de créer un pool ZFS créé dans OSX pour importer sur un système Linux
  • Effacer une erreur ZFS permanente dans un pool sain
  • Docker Community Edition pour l'environnement de production?
  • Comment append plus de disques physiques à un miroir vdev (pour augmenter la redondance)?
  • Comment puis-je get Ubuntu pour oublier un pool zfs détruit?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.