{"id":83582,"date":"2020-06-01T19:42:21","date_gmt":"2020-06-01T17:42:21","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost"},"modified":"2020-06-01T19:42:21","modified_gmt":"2020-06-01T17:42:21","slug":"osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","title":{"rendered":"Les Fondamentaux de ZFS : stockage et performance","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/70d75786f36a92a0407107fb79bee721.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCe printemps, nous avons d\u00e9j\u00e0 discut\u00e9 de certains sujets introductifs, tels que <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/gadgets\/2020\/02\/how-fast-are-your-disks-find-out-the-open-source-way-with-fio\/\">comment v\u00e9rifier la vitesse de vos disques<\/a><\/noindex> et <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/04\/understanding-raid-how-performance-scales-from-one-disk-to-eight\/\">ce qu'est le RAID<\/a><\/noindex>. Dans le deuxi\u00e8me, nous avons m\u00eame promis de continuer \u00e0 explorer les performances des diff\u00e9rentes topologies multi-disques dans ZFS. C'est un syst\u00e8me de fichiers de prochaine g\u00e9n\u00e9ration qui est actuellement d\u00e9ploy\u00e9 partout : depuis <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/gadgets\/2016\/06\/a-zfs-developers-analysis-of-the-good-and-bad-in-apples-new-apfs-file-system\/\">Apple<\/a><\/noindex> \u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/05\/ubuntu-20-04-welcome-to-the-future-linux-lts-disciples\/\">Ubuntu<\/a><\/noindex>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nEh bien, aujourd'hui est le jour parfait pour d\u00e9couvrir ZFS, chers lecteurs curieux. Sachez simplement, qu' selon l'estimation modeste du d\u00e9veloppeur OpenZFS Matt Arons, \u00ab c'est vraiment compliqu\u00e9 \u00bb.<\/p>\n<p>Mais avant d'arriver aux chiffres - et ils viendront, je te le promets - sur toutes les options de la configuration \u00e0 huit disques ZFS, il faut parler de comment <i>comment<\/i> ZFS stocke r\u00e9ellement les donn\u00e9es sur le disque.<\/p>\n<h1>Zpool, vdev et device<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/d881cb44e935480a6f2c30795d6afaf1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Ce diagramme de pool complet comprend trois vdev auxiliaires, un de chaque type, et quatre pour RAIDz2.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/fa52fcf700cc72105a90e4ddc4724d9a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Il n'y a g\u00e9n\u00e9ralement pas de raison de cr\u00e9er un pool \u00e0 partir de types et tailles vdev incompatibles - mais si vous le souhaitez, rien ne vous en emp\u00eache.<\/i><\/p>\n<p>Pour vraiment comprendre le syst\u00e8me de fichiers ZFS, il faut examiner attentivement sa structure r\u00e9elle. Tout d'abord, ZFS combine les niveaux de gestion des volumes traditionnels et du syst\u00e8me de fichiers. Deuxi\u00e8mement, il utilise un m\u00e9canisme transactionnel de copie \u00e0 l'\u00e9criture. Ces caract\u00e9ristiques signifient que le syst\u00e8me est structurellement tr\u00e8s diff\u00e9rent des syst\u00e8mes de fichiers et des ensembles RAID ordinaires. Le premier ensemble de blocs de construction essentiels \u00e0 comprendre est : le pool de stockage (zpool), le dispositif virtuel (vdev) et le dispositif r\u00e9el (device).<\/p>\n<h3>zpool<\/h3>\n<p>\nLe pool de stockage zpool est la structure sup\u00e9rieure de ZFS. Chaque pool contient un ou plusieurs dispositifs virtuels. \u00c0 son tour, chacun d'eux contient un ou plusieurs dispositifs r\u00e9els (device). Les pools virtuels sont des blocs autonomes. Un ordinateur physique peut contenir deux ou plusieurs pools distincts, mais chaque pool est enti\u00e8rement ind\u00e9pendant des autres. Les pools ne peuvent pas partager des dispositifs virtuels.<\/p>\n<p>La redondance de ZFS se trouve au niveau des dispositifs virtuels, et non au niveau des pools. Au niveau des pools, il n'y a absolument aucune redondance - si un dispositif vdev ou un vdev sp\u00e9cial est perdu, alors tout le pool est \u00e9galement perdu.<\/p>\n<p>Les pools de stockage modernes peuvent survivre \u00e0 la perte de cache ou de journal d'un dispositif virtuel, bien qu'ils puissent perdre une petite quantit\u00e9 de donn\u00e9es en attente si le journal vdev est perdu pendant une coupure de courant ou un \u00e9chec syst\u00e8me.<\/p>\n<p>Il existe une id\u00e9e re\u00e7ue selon laquelle les \u00ab bandes de donn\u00e9es \u00bb (stripes) ZFS sont \u00e9crites sur l'ensemble du pool. C'est faux. Zpool n'est pas du tout un RAID0, c'est plut\u00f4t un <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Non-RAID_drive_architectures#JBOD\">JBOD<\/a><\/noindex> avec un m\u00e9canisme de r\u00e9partition complexe et variable.<\/p>\n<p>En grande partie, les \u00e9critures sont r\u00e9parties entre les dispositifs virtuels disponibles en fonction de l'espace libre disponible, de sorte qu'en th\u00e9orie, tous seront remplis en m\u00eame temps. Dans les versions ult\u00e9rieures de ZFS, l'utilisation actuelle du vdev est prise en compte ; si un dispositif virtuel est nettement plus charg\u00e9 qu'un autre (par exemple, \u00e0 cause d'une forte charge de lecture), il sera temporairement omis pour l'\u00e9criture, malgr\u00e9 un taux d'espace libre \u00e9lev\u00e9.<\/p>\n<p>Le m\u00e9canisme de d\u00e9termination de l'utilisation, int\u00e9gr\u00e9 dans les m\u00e9thodes modernes de r\u00e9partition des \u00e9critures ZFS, peut r\u00e9duire la latence et augmenter le d\u00e9bit pendant les p\u00e9riodes de charge exceptionnellement \u00e9lev\u00e9e, mais cela ne fait pas <i>carte blanche<\/i> pour le m\u00e9lange involontaire de disques durs lents et de SSD rapides dans un m\u00eame pool. Un tel pool in\u00e9gal fonctionnera quand m\u00eame \u00e0 la vitesse du p\u00e9riph\u00e9rique le plus lent, c'est-\u00e0-dire comme s'il \u00e9tait enti\u00e8rement constitu\u00e9 de ces dispositifs.<\/p>\n<h3>vdev<\/h3>\n<p>\nChaque pool de stockage se compose d'un ou plusieurs dispositifs virtuels (device virtuel, vdev). \u00c0 son tour, chaque vdev comprend un ou plusieurs dispositifs physiques. La plupart des dispositifs virtuels sont utilis\u00e9s pour le simple stockage de donn\u00e9es, mais il existe plusieurs classes auxiliaires de vdev, y compris CACHE, LOG et SPECIAL. Chacun de ces types de vdev peut avoir l'une des cinq topologies : dispositif unique (single-device), RAIDz1, RAIDz2, RAIDz3 ou miroir (mirror).<\/p>\n<p>RAIDz1, RAIDz2 et RAIDz3 sont des variantes sp\u00e9ciales de ce que les anciens appelleraient RAID \u00e0 double parit\u00e9 (diagonale). Les chiffres 1, 2 et 3 se r\u00e9f\u00e8rent au nombre de blocs de parit\u00e9 allou\u00e9s \u00e0 chaque stripe de donn\u00e9es. Au lieu de disques distincts pour assurer la parit\u00e9, les dispositifs RAIDz r\u00e9partissent cette parit\u00e9 de mani\u00e8re semi-\u00e9galitaire sur les disques. Un ensemble RAIDz peut perdre autant de disques qu'il a de blocs de parit\u00e9 ; s'il en perd un de plus, il tombe en panne et emporte avec lui le pool de stockage.<\/p>\n<p>Dans les dispositifs virtuels miroir (mirror vdev), chaque bloc est stock\u00e9 sur chaque dispositif dans le vdev. Bien que les miroirs doubles (two-wide) soient les plus courants, un miroir peut avoir n'importe quel nombre d'appareils \u2014 dans de grandes installations, pour am\u00e9liorer les performances de lecture et la tol\u00e9rance aux pannes, des miroirs triples sont souvent utilis\u00e9s. Un miroir vdev peut survivre \u00e0 toute panne tant qu'au moins un appareil dans le vdev continue de fonctionner.<\/p>\n<p>Les vdev simples sont par nature dangereux. Un tel dispositif virtuel ne survivra \u00e0 aucune panne \u2014 et s'il est utilis\u00e9 comme stockage ou vdev sp\u00e9cial, sa panne entra\u00eenera la destruction de l'ensemble du pool. Soyez ici tr\u00e8s, tr\u00e8s prudent.<\/p>\n<p>Les dispositifs virtuels CACHE, LOG et SPECIAL peuvent \u00eatre cr\u00e9\u00e9s selon n'importe laquelle des topologies mentionn\u00e9es ci-dessus \u2014 mais rappelez-vous que la perte d'un dispositif virtuel SPECIAL signifie la perte du pool, il est donc fortement recommand\u00e9 d'adopter une topologie redondante.<\/p>\n<h3>dispositif<\/h3>\n<p>\nC'est probablement le terme le plus facile \u00e0 comprendre dans ZFS \u2014 c'est litt\u00e9ralement un dispositif de bloc \u00e0 acc\u00e8s al\u00e9atoire. N'oubliez pas que les dispositifs virtuels se composent d'appareils distincts, et que le pool est constitu\u00e9 de dispositifs virtuels.<\/p>\n<p>Les disques \u2014 magn\u00e9tiques ou \u00e0 \u00e9tat solide \u2014 sont les dispositifs de bloc les plus courants utilis\u00e9s comme \u00e9l\u00e9ments de construction du vdev. Cependant, tout appareil avec un descripteur dans \/dev convient \u2014 de sorte que des ensembles RAID mat\u00e9riels complets peuvent \u00eatre utilis\u00e9s comme dispositifs distincts.<\/p>\n<p>Un simple fichier brut est l'un des dispositifs de bloc alternatifs les plus importants \u00e0 partir desquels un vdev peut \u00eatre construit. Les pools de test \u00e0 partir de <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Sparse_file\">fichiers \u00e9parpill\u00e9s<\/a><\/noindex>\u00a0sont un moyen tr\u00e8s pratique de v\u00e9rifier les commandes du pool et de voir combien d'espace est disponible dans le pool ou le dispositif virtuel de cette topologie.<\/p>\n<p><img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/d9bea0e4a6842742a7dbac2f9b1ba394.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vous pouvez cr\u00e9er un pool de test \u00e0 partir de fichiers dispers\u00e9s en quelques secondes, mais n'oubliez pas de supprimer ensuite l'ensemble du pool et ses composants.<\/i> <\/p>\n<p>Supposons que vous souhaitiez configurer un serveur avec huit disques et que vous pr\u00e9voyez d'utiliser des disques de 10 To (~9300 Go) - mais vous n'\u00eates pas s\u00fbr de la topologie qui correspond le mieux \u00e0 vos besoins. Dans l'exemple ci-dessus, nous construisons un pool de test \u00e0 partir de fichiers dispers\u00e9s en quelques secondes - et nous savons maintenant qu'un vdev RAIDz2 compos\u00e9 de huit disques de 10 To offre 50 To d'espace utile.<\/p>\n<p>Une autre cat\u00e9gorie particuli\u00e8re de dispositifs est l'\u00e9l\u00e9ment SPARE (de secours). Les dispositifs de remplacement \u00e0 chaud, contrairement aux dispositifs normaux, appartiennent \u00e0 l'ensemble du pool et non \u00e0 un seul dispositif virtuel. Si un vdev dans le pool \u00e9choue et qu'un dispositif de secours est connect\u00e9 et disponible, il se joindra automatiquement au vdev d\u00e9faillant.<\/p>\n<p>Apr\u00e8s avoir \u00e9t\u00e9 connect\u00e9 au vdev d\u00e9faillant, le dispositif de secours commence \u00e0 recevoir des copies ou des reconstructions des donn\u00e9es qui devraient se trouver sur le dispositif manquant. Dans un RAID traditionnel, cela s'appelle la reconstruction, alors que dans ZFS, c'est ce qu'on appelle \u00ab la reconstruction de redondance \u00bb.<\/p>\n<p>Il est important de noter que les dispositifs de secours ne remplacent pas d\u00e9finitivement les dispositifs d\u00e9faillants. Ils ne constituent qu'un remplacement temporaire pour r\u00e9duire le temps pendant lequel le vdev est d\u00e9grad\u00e9. Une fois que l'administrateur a remplac\u00e9 le dispositif d\u00e9faillant du vdev, la reconstruction de redondance s'effectue sur ce dispositif permanent, et le SPARE se d\u00e9tache du vdev pour revenir \u00e0 un r\u00f4le de secours pour l'ensemble du pool.<\/p>\n<h1>Jeux de donn\u00e9es, blocs et secteurs<\/h1>\n<p>\nLe prochain ensemble de blocs de construction \u00e0 comprendre dans notre parcours \u00e0 travers ZFS concerne moins le mat\u00e9riel que la mani\u00e8re dont les donn\u00e9es elles-m\u00eames sont organis\u00e9es et stock\u00e9es. Nous allons ici omettre quelques niveaux - comme le metaslab - pour ne pas alourdir les d\u00e9tails tout en pr\u00e9servant la compr\u00e9hension de la structure globale.<\/p>\n<h3>Jeu de donn\u00e9es (dataset)<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/6a4dc218bd1c57989739d5072f13804c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Lorsque nous cr\u00e9ons pour la premi\u00e8re fois un jeu de donn\u00e9es, il affiche tout l'espace disponible dans le pool. Nous d\u00e9finissons ensuite une quota et modifions le point de montage. Magie !<\/i> <\/p>\n<p><img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/aeb6763d6e78e3cc7ee8b1d39ee98b46.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Le Zvol est essentiellement un jeu de donn\u00e9es d\u00e9pourvu de sa couche de syst\u00e8me de fichiers, que nous rempla\u00e7ons ici par un syst\u00e8me de fichiers normal comme ext4.<\/i> <\/p>\n<p>Un jeu de donn\u00e9es ZFS est environ \u00e9quivalent \u00e0 un syst\u00e8me de fichiers mont\u00e9 standard. Comme un syst\u00e8me de fichiers traditionnel, \u00e0 premi\u00e8re vue, il semble \u00eatre \u00ab simplement un autre dossier \u00bb. Mais tout comme les syst\u00e8mes de fichiers mont\u00e9s ordinaires, chaque jeu de donn\u00e9es ZFS a son propre ensemble de propri\u00e9t\u00e9s fondamentales.<\/p>\n<p>Tout d'abord, un jeu de donn\u00e9es peut avoir un quota attribu\u00e9. Si vous configurez <code>zfs set quota=100G nom_du_pool\/nom_du_dataset<\/code>, vous ne pourrez pas \u00e9crire dans le dossier mont\u00e9 <code>\/poolname\/datasetname<\/code> plus de 100 Go.<\/p>\n<p>Avez-vous remarqu\u00e9 la pr\u00e9sence \u2013 et l'absence \u2013 de barres obliques au d\u00e9but de chaque ligne ? Chaque jeu de donn\u00e9es a sa propre place \u00e0 la fois dans la hi\u00e9rarchie ZFS et dans la hi\u00e9rarchie de montage du syst\u00e8me. Dans la hi\u00e9rarchie ZFS, il n'y a pas de barre oblique devant \u2013 vous commencez par le nom du pool, puis le chemin d'un jeu de donn\u00e9es \u00e0 l'autre. Par exemple, <code>pool\/parent\/enfant<\/code> pour un jeu de donn\u00e9es nomm\u00e9 <code>enfant<\/code> sous le jeu de donn\u00e9es parent <code>parent<\/code> dans un pool au nom cr\u00e9atif <code>pool<\/code>.<\/p>\n<p>Par d\u00e9faut, le point de montage d'un jeu de donn\u00e9es sera \u00e9quivalent \u00e0 son nom dans la hi\u00e9rarchie ZFS, avec une barre oblique au d\u00e9but \u2013 le pool nomm\u00e9 <code>pool<\/code> sera mont\u00e9 comme <code>\/pool<\/code>, le jeu de donn\u00e9es <code>parent<\/code> sera mont\u00e9 dans <code>\/pool\/parent<\/code>, et le jeu de donn\u00e9es enfant <code>enfant<\/code> sera mont\u00e9 dans <code>\/pool\/parent\/child<\/code>. Cependant, le point de montage syst\u00e8me d'un jeu de donn\u00e9es peut \u00eatre modifi\u00e9.<\/p>\n<p>Si nous sp\u00e9cifions <code>zfs set mountpoint=\/lol pool\/parent\/enfant<\/code>, alors le jeu de donn\u00e9es <code>pool\/parent\/enfant<\/code> sera mont\u00e9 dans le syst\u00e8me comme <code>\/lol<\/code>.<\/p>\n<p>En plus des jeux de donn\u00e9es, nous devons mentionner les volumes (zvols). Un volume est environ \u00e9quivalent \u00e0 un jeu de donn\u00e9es, sauf qu'il ne contient pas r\u00e9ellement de syst\u00e8me de fichiers - c'est simplement un dispositif bloqu\u00e9. Vous pouvez, par exemple, cr\u00e9er <code>zvol<\/code> avec le nom <code>mypool\/myzvol<\/code>, puis le formater avec un syst\u00e8me de fichiers ext4, et ensuite monter ce syst\u00e8me de fichiers \u2013 maintenant vous avez un syst\u00e8me de fichiers ext4, mais avec le support de toutes les fonctionnalit\u00e9s de s\u00e9curit\u00e9 de ZFS ! Cela peut sembler absurde sur un seul ordinateur, mais cela a beaucoup plus de sens en tant que backend lors de l'exportation d'un dispositif iSCSI.<\/p>\n<h3>Blocs<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/ce96416cd2fa08ff615f13ccec72e838.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Un fichier est repr\u00e9sent\u00e9 par un ou plusieurs blocs. Chaque bloc est stock\u00e9 sur un dispositif virtuel. La taille du bloc est g\u00e9n\u00e9ralement \u00e9gale au param\u00e8tre <b>recordsize<\/b>, mais peut \u00eatre r\u00e9duite \u00e0 <b>2^ashift<\/b>, si elle contient des m\u00e9tadonn\u00e9es ou un petit fichier.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/f31c25e34af12a9a96b60a46c2924053.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Nous ne plaisantons vraiment pas sur l'\u00e9norme perte de performances si vous d\u00e9finissez un ashift trop petit. <b>vraiment<\/b> Nous ne plaisantons pas sur les \u00e9normes pertes de performance si vous d\u00e9finissez un ashift trop petit.<\/i><\/p>\n<p>Dans le pool ZFS, toutes les donn\u00e9es, y compris les m\u00e9tadonn\u00e9es, sont stock\u00e9es dans des blocs. La taille maximale d'un bloc pour chaque ensemble de donn\u00e9es est d\u00e9termin\u00e9e par la propri\u00e9t\u00e9 <code>recordsize<\/code> (taille d\u2019enregistrement). La taille d'enregistrement peut varier, mais cela ne changera pas la taille ou la position de n'importe quel bloc qui a d\u00e9j\u00e0 \u00e9t\u00e9 \u00e9crit dans l\u2019ensemble de donn\u00e9es - elle n'agit que pour les nouveaux blocs au fur et \u00e0 mesure qu'ils sont \u00e9crits.<\/p>\n<p>Si rien d'autre n'est pr\u00e9cis\u00e9, la taille d'enregistrement par d\u00e9faut actuelle est de 128 Ko. C'est une sorte de compromis imparfait, o\u00f9 les performances ne seront pas id\u00e9ales mais pas non plus horribles dans la plupart des cas. <code>Recordsize<\/code> peut \u00eatre fix\u00e9 \u00e0 n'importe quelle valeur entre 4K et 1M (avec des r\u00e9glages suppl\u00e9mentaires <code>recordsize<\/code> peut \u00eatre fix\u00e9 \u00e0 des valeurs encore plus \u00e9lev\u00e9es, mais cela n\u2019est g\u00e9n\u00e9ralement pas une bonne id\u00e9e).<\/p>\n<p>Chaque bloc ne fait r\u00e9f\u00e9rence qu'aux donn\u00e9es d'un seul fichier - vous ne pouvez pas caser deux fichiers diff\u00e9rents dans un m\u00eame bloc. Chaque fichier est constitu\u00e9 d'un ou plusieurs blocs, selon la taille. Si la taille du fichier est inf\u00e9rieure \u00e0 la taille d'enregistrement, il sera enregistr\u00e9 dans un bloc plus petit - par exemple, un bloc avec un fichier de 2 Ko occupera seulement un secteur de 4 Ko sur le disque.<\/p>\n<p>Si un fichier est suffisamment grand et n\u00e9cessite plusieurs blocs, alors toutes les entr\u00e9es avec ce fichier auront une taille <code>recordsize<\/code>\u00a0- y compris la derni\u00e8re entr\u00e9e, dont la majeure partie peut s'av\u00e9rer <noindex><a rel=\"nofollow\" href=\"https:\/\/whatis.techtarget.com\/definition\/slack-space-file-slack-space\">espace inutilis\u00e9<\/a><\/noindex>.<\/p>\n<p>Les volumes zvol n'ont pas de propri\u00e9t\u00e9 <code>recordsize<\/code>\u00a0- \u00e0 la place, ils ont une propri\u00e9t\u00e9 \u00e9quivalente <code>volblocksize<\/code>.<\/p>\n<h3>Secteurs<\/h3>\n<p>\nLe dernier, et le plus fondamental des blocs de construction - le secteur. C'est la plus petite unit\u00e9 physique qui peut \u00eatre \u00e9crite ou lue \u00e0 partir du dispositif de base. Pendant des d\u00e9cennies, la plupart des disques utilisaient des secteurs de 512 octets. R\u00e9cemment, la plupart des disques sont configur\u00e9s avec des secteurs de 4 Ko, et certains - en particulier les SSD - utilisent des secteurs de 8 Ko ou m\u00eame plus.<\/p>\n<p>Dans le syst\u00e8me ZFS, il existe une propri\u00e9t\u00e9 qui permet de d\u00e9finir manuellement la taille du secteur. Cette propri\u00e9t\u00e9 <code>ashift<\/code>. Il est quelque peu d\u00e9routant que ashift soit une puissance de deux. Par exemple, <code>ashift=9<\/code> signifie une taille de secteur de 2^9, soit 512 octets.<\/p>\n<p>ZFS interroge le syst\u00e8me d'exploitation pour obtenir des d\u00e9tails sur chaque p\u00e9riph\u00e9rique de bloc lorsqu'il est ajout\u00e9 \u00e0 un nouveau vdev, et th\u00e9oriquement \u00e9tablit automatiquement ashift de mani\u00e8re appropri\u00e9e en fonction de ces informations. Malheureusement, de nombreux disques mentent sur leur taille de secteur pour maintenir la compatibilit\u00e9 avec Windows XP (qui \u00e9tait incapable de comprendre les disques avec d'autres tailles de secteurs).<\/p>\n<p>Cela signifie qu'il est fortement conseill\u00e9 \u00e0 l'administrateur ZFS de conna\u00eetre la v\u00e9ritable taille de secteur de ses dispositifs et de l'\u00e9tablir manuellement. <code>ashift<\/code>. Si un ashift trop petit est configur\u00e9, le nombre d'op\u00e9rations de lecture\/\u00e9criture augmente de mani\u00e8re astronomique. Par exemple, \u00e9crire des \u00ab secteurs \u00bb de 512 octets dans un v\u00e9ritable secteur de 4 Ko n\u00e9cessite d'\u00e9crire le premier \u00ab secteur \u00bb, puis de lire le secteur de 4 Ko, de le modifier avec le second \u00ab secteur \u00bb de 512 octets, de l'\u00e9crire \u00e0 nouveau dans un nouveau secteur de 4 Ko, et ainsi de suite pour chaque \u00e9criture.<\/p>\n<p>Dans le monde r\u00e9el, cette p\u00e9nalit\u00e9 impacte les disques SSD Samsung EVO, pour lesquels doit \u00eatre appliqu\u00e9 <code>ashift=13<\/code>, mais ces SSD mentent sur leur taille de secteur, c'est pourquoi par d\u00e9faut, il est configur\u00e9 <code>ashift=9<\/code>. Si un administrateur syst\u00e8me exp\u00e9riment\u00e9 ne modifie pas ce param\u00e8tre, alors ce SSD fonctionne <i>plus lentement<\/i> comme un HDD magn\u00e9tique classique.<\/p>\n<p>En revanche, pour une taille trop grande, <code>ashift<\/code> il n'y a pratiquement aucune p\u00e9nalit\u00e9. Il n'y a pas de r\u00e9elle diminution de performance, et l'augmentation de l'espace inutilis\u00e9 est n\u00e9gligeable (ou \u00e9gale \u00e0 z\u00e9ro lorsqu'une compression est activ\u00e9e). Par cons\u00e9quent, nous recommandons vivement m\u00eame aux disques qui utilisent r\u00e9ellement des secteurs de 512 octets de d\u00e9finir <code>ashift=12<\/code> ou m\u00eame <code>ashift=13<\/code>, afin de se projeter sereinement dans l'avenir.<\/p>\n<p>La propri\u00e9t\u00e9 <code>ashift<\/code> est \u00e9tabli pour chaque dispositif virtuel vdev, et <i>non pour le pool<\/i>, comme beaucoup le pensent \u00e0 tort \u2014 et il ne peut pas \u00eatre modifi\u00e9 apr\u00e8s son installation. Si vous le modifiez accidentellement <code>ashift<\/code> lors de l'ajout d'un nouveau vdev au pool, vous avez irr\u00e9m\u00e9diablement contamin\u00e9 ce pool avec un dispositif \u00e0 faible performance et, en g\u00e9n\u00e9ral, il n'y a pas d'autre solution que de d\u00e9truire le pool et de recommencer tout depuis le d\u00e9but. M\u00eame la suppression du vdev ne sauvera pas de la mauvaise configuration. <code>ashift<\/code>!<\/p>\n<h3>Le m\u00e9canisme de copie \u00e0 l'\u00e9criture<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/eb222dbcc3de428ff2b1c2c72b145db0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Si un syst\u00e8me de fichiers classique doit r\u00e9\u00e9crire des donn\u00e9es, il modifie chaque bloc l\u00e0 o\u00f9 il se trouve.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/ba2474808b32667902966e4c9e69081a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Le syst\u00e8me de fichiers avec copie \u00e0 l'\u00e9criture enregistre une nouvelle version du bloc, puis d\u00e9bloque l'ancienne version.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/3b00dad44eb588ed793d2d5df7852892.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>De mani\u00e8re abstraite, si l'on ignore l'emplacement physique r\u00e9el des blocs, notre \u00ab com\u00e8te de donn\u00e9es \u00bb se simplifie en un \u00ab ver de donn\u00e9es \u00bb qui se d\u00e9place de gauche \u00e0 droite sur la carte de l'espace disponible.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/8c2c38dbc8a5e633c466d5c7f230951f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Nous pouvons maintenant avoir une bonne id\u00e9e de la fa\u00e7on dont fonctionnent les instantan\u00e9s de copie \u00e0 l'\u00e9criture \u2014 chaque bloc peut appartenir \u00e0 plusieurs instantan\u00e9s et sera conserv\u00e9 tant que tous les instantan\u00e9s associ\u00e9s ne seront pas d\u00e9truits.<\/i><\/p>\n<p>Le m\u00e9canisme de copie \u00e0 l'\u00e9criture (Copy on Write, CoW) est la base fondamentale de ce qui rend ZFS si incroyable comme syst\u00e8me. Le concept principal est simple : si vous demandez \u00e0 un syst\u00e8me de fichiers traditionnel de modifier un fichier, il fera exactement ce que vous avez demand\u00e9. Si vous demandez \u00e0 un syst\u00e8me de fichiers avec copie \u00e0 l'\u00e9criture de faire la m\u00eame chose, il va dire \u00ab d'accord \u00bb \u2014 mais il mentira.<\/p>\n<p>Au lieu de cela, le syst\u00e8me de fichiers avec copie \u00e0 l'\u00e9criture enregistre une nouvelle version du bloc modifi\u00e9, puis met \u00e0 jour les m\u00e9tadonn\u00e9es du fichier pour rompre le lien avec l'ancien bloc et \u00e9tablir un lien avec le nouveau bloc que vous venez d'enregistrer.<\/p>\n<p>La d\u00e9connexion de l'ancien bloc et la liaison du nouveau se fait en une seule op\u00e9ration, de sorte qu'elle ne peut pas \u00eatre interrompue \u2014 si vous coupez l'alimentation apr\u00e8s que cela se soit produit, vous avez une nouvelle version du fichier, et si vous coupez l'alimentation plus t\u00f4t, vous avez l'ancienne version. Dans tous les cas, il n'y aura pas de conflits dans le syst\u00e8me de fichiers.<\/p>\n<p>La copie \u00e0 l'\u00e9criture dans ZFS se produit non seulement au niveau du syst\u00e8me de fichiers, mais aussi au niveau de la gestion des disques. Cela signifie que ZFS n'est pas sujet \u00e0 l'effet de trou d'\u00e9criture (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.raid-recovery-guide.com\/raid5-write-hole.aspx\">trou dans RAID<\/a><\/noindex>) \u2014 un ph\u00e9nom\u00e8ne o\u00f9 une tranche a seulement \u00e9t\u00e9 partiellement enregistr\u00e9e avant un crash du syst\u00e8me, entra\u00eenant des dommages au tableau apr\u00e8s le red\u00e9marrage. Ici, la tranche s'\u00e9crit de mani\u00e8re atomique, vdev est toujours coh\u00e9rent, et <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Bob%27s_your_uncle\">Bob est ton oncle.<\/a><\/noindex>.<\/p>\n<h3>ZIL : journal des intentions de ZFS.<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/8d08b7bce60a1e3698fd0ec02494e6fe.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Le syst\u00e8me ZFS g\u00e8re les \u00e9critures synchrones de mani\u00e8re particuli\u00e8re \u2014 il les sauvegarde temporairement mais imm\u00e9diatement dans le ZIL, avant de les enregistrer de mani\u00e8re permanente avec les \u00e9critures asynchrones.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/2119ef409a7d8c9599ee63292452d80d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>En g\u00e9n\u00e9ral, les donn\u00e9es enregistr\u00e9es dans le ZIL ne sont jamais lues \u00e0 nouveau. Mais cela est possible apr\u00e8s un crash du syst\u00e8me.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/88a62163b0fb9f14a41102821dfabb5f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>SLOG, ou dispositif LOG secondaire, est simplement un vdev sp\u00e9cial \u2014 et de pr\u00e9f\u00e9rence tr\u00e8s rapide \u2014 o\u00f9 le ZIL peut \u00eatre stock\u00e9 s\u00e9par\u00e9ment du stockage principal.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/819f7c21714adafe226028e95990f1df.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Apr\u00e8s une panne, toutes les donn\u00e9es non enregistr\u00e9es dans le ZIL sont reproduites \u2014 dans ce cas, le ZIL se trouve sur SLOG, donc elles sont reproduites exactement \u00e0 partir de l\u00e0.<\/i><\/p>\n<p>Il existe deux cat\u00e9gories principales d'op\u00e9rations d'\u00e9criture \u2014 synchrones (sync) et asynchrones (async). Pour la plupart des charges de travail, la grande majorit\u00e9 des op\u00e9rations d'\u00e9criture sont asynchrones \u2014 le syst\u00e8me de fichiers permet de les agr\u00e9ger et de les renvoyer par paquets, r\u00e9duisant la fragmentation et augmentant consid\u00e9rablement la bande passante.<\/p>\n<p>Les \u00e9critures synchrones sont tout autre chose. Lorsque l'application demande une \u00e9criture synchrone, elle dit au syst\u00e8me de fichiers : \u00ab Tu dois l'enregistrer dans la m\u00e9moire non volatile. <i>en ce moment<\/i>, et tant que ce n'est pas fait, je ne peux rien faire d'autre. \u00bb Par cons\u00e9quent, les \u00e9critures synchrones doivent \u00eatre imm\u00e9diatement enregistr\u00e9es sur le disque \u2014 et si cela augmente la fragmentation ou r\u00e9duit la bande passante, tant pis.<\/p>\n<p>ZFS g\u00e8re les \u00e9critures synchrones diff\u00e9remment des syst\u00e8mes de fichiers traditionnels \u2014 au lieu de les injecter imm\u00e9diatement dans le stockage standard, ZFS les enregistre dans une zone de stockage sp\u00e9ciale appel\u00e9e journal d'intentions ZFS \u2014 ZFS Intent Log, ou ZIL. L'astuce est que ces \u00e9critures <i>\u00e9galement<\/i> restent en m\u00e9moire, agr\u00e9geant ensemble les requ\u00eates d'\u00e9criture asynchrones normales, pour \u00eatre ensuite vid\u00e9es dans le stockage comme des TXG (groupes de transactions, Transaction Groups) tout \u00e0 fait normaux.<\/p>\n<p>Dans un fonctionnement normal, le ZIL est \u00e9crit et jamais relu. Lorsque, apr\u00e8s quelques instants, les \u00e9critures du ZIL sont enregistr\u00e9es dans le stockage principal sous forme de TXG normales depuis la m\u00e9moire vive, elles sont d\u00e9tach\u00e9es du ZIL. La seule fois o\u00f9 quelque chose est lu dans le ZIL, c'est lors de l'importation du pool.<\/p>\n<p>Si une d\u00e9faillance de ZFS se produit \u2014 d\u00e9faillance du syst\u00e8me d'exploitation ou coupure de courant \u2014 alors que des donn\u00e9es sont pr\u00e9sentes dans le ZIL, ces donn\u00e9es seront lues lors de la prochaine importation du pool (par exemple, lors du red\u00e9marrage d'un syst\u00e8me apr\u00e8s une panne). Tout ce qui se trouve dans le ZIL sera lu, agr\u00e9g\u00e9 en groupes TXG, enregistr\u00e9 dans le stockage principal, puis d\u00e9tach\u00e9 du ZIL au cours du processus d'importation.<\/p>\n<p>L'une des classes auxiliaires de vdev s'appelle LOG ou SLOG, un dispositif secondaire LOG. Son unique t\u00e2che est de fournir au pool un vdev s\u00e9par\u00e9 et, de pr\u00e9f\u00e9rence, beaucoup plus rapide, avec une tr\u00e8s haute r\u00e9sistance \u00e0 l'\u00e9criture, pour stocker le ZIL, au lieu de stocker le ZIL sur le vdev principal. Le ZIL lui-m\u00eame se comporte de la m\u00eame mani\u00e8re, quelle que soit sa localisation de stockage, mais si le vdev avec LOG pr\u00e9sente une tr\u00e8s haute performance d'\u00e9criture, les \u00e9critures synchrones se produiront plus rapidement.<\/p>\n<p>Ajouter un vdev avec LOG au pool ne peut en aucun cas <b>am\u00e9liorer<\/b> la performance des \u00e9critures asynchrones \u2013 m\u00eame si vous forcez toutes les \u00e9critures dans le ZIL avec <code>zfs set sync=always<\/code>, elles resteront toutefois li\u00e9es au stockage principal dans le TXG de la m\u00eame mani\u00e8re et au m\u00eame rythme que sans journal. La seule am\u00e9lioration directe des performances est le d\u00e9lai des \u00e9critures synchrones (puisqu'une vitesse de journal plus \u00e9lev\u00e9e acc\u00e9l\u00e8re l'ex\u00e9cution des op\u00e9rations. <code>sync<\/code>).<\/p>\n<p>Cependant, dans un environnement qui n\u00e9cessite d\u00e9j\u00e0 un grand nombre d'\u00e9critures synchrones, un vdev LOG peut indirectement acc\u00e9l\u00e9rer l'\u00e9criture asynchrone et la lecture sans cache. Le d\u00e9chargement des \u00e9critures ZIL sur un vdev LOG distinct signifie moins de concurrence pour les IOPS dans le stockage primaire, ce qui am\u00e9liore dans une certaine mesure la performance de toutes les op\u00e9rations de lecture et d'\u00e9criture.<\/p>\n<h3>Snapshots<\/h3>\n<p>\nLe m\u00e9canisme de Copy-on-Write est \u00e9galement une base n\u00e9cessaire pour les snapshots atomiques de ZFS et la r\u00e9plication asynchrone incr\u00e9mentielle. Dans un syst\u00e8me de fichiers actif, il existe un arbre de pointeurs marquant toutes les \u00e9critures avec les donn\u00e9es actuelles \u2013 lorsque vous faites un snapshot, vous faites simplement une copie de cet arbre de pointeurs.<\/p>\n<p>Lorsqu'une \u00e9criture est r\u00e9\u00e9crite dans un syst\u00e8me de fichiers actif, ZFS \u00e9crit d'abord une nouvelle version du bloc dans l'espace inutilis\u00e9. Il d\u00e9tache ensuite l'ancienne version du bloc du syst\u00e8me de fichiers actuel. Mais si un snapshot fait r\u00e9f\u00e9rence \u00e0 l'ancien bloc, il reste inchang\u00e9. L'ancien bloc ne sera en fait pas r\u00e9cup\u00e9r\u00e9 comme espace libre tant que tous les snapshots faisant r\u00e9f\u00e9rence \u00e0 ce bloc n'auront pas \u00e9t\u00e9 d\u00e9truits !<\/p>\n<h3>R\u00e9plique<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/647fe6cc348861b653b004640244cf88.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Ma biblioth\u00e8que Steam en 2015 occupait 158 GiB et comprenait 126 927 fichiers. C'est assez proche de la situation optimale pour rsync \u2013 la r\u00e9plication ZFS sur le r\u00e9seau \u00e9tait \u00ab seulement \u00bb 750 % plus rapide.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/2849be8d2dc5c9f30f23c3bbc20e9022.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Dans le m\u00eame r\u00e9seau, la r\u00e9plication d'un fichier image de machine virtuelle Windows 7 de 40 Gio est une toute autre histoire. La r\u00e9plication ZFS est 289 fois plus rapide que rsync, ou \u00ab seulement \u00bb 161 fois plus rapide si vous \u00eates suffisamment comp\u00e9tent pour invoquer rsync avec l'option \u2014inplace.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Les Fondamentaux de ZFS : stockage et performance\" src=\"\/wp-content\/uploads\/2020\/06\/9a57e4faa0eaf0f687ae24b965a1bf81.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Lorsque l'image de la machine virtuelle est mise \u00e0 l'\u00e9chelle, les probl\u00e8mes de rsync se multiplient avec elle. Une taille de 1,9 To n'est pas si grande pour une image de machine virtuelle moderne, mais elle est assez encombrante pour que la r\u00e9plication ZFS soit 1148 fois plus rapide que rsync, m\u00eame avec l'argument rsync \u2014inplace.<\/i><\/p>\n<p>Une fois que vous comprendrez comment fonctionnent les instantan\u00e9s, il ne sera pas difficile de saisir l'essence de la r\u00e9plication. Puisque l'instantan\u00e9 est simplement un arbre de pointeurs sur des enregistrements, il en d\u00e9coule que lorsque nous faisons un <code>zfs send<\/code> d'un instantan\u00e9, nous envoyons \u00e0 la fois cet arbre et tous les enregistrements associ\u00e9s. Lorsque nous transf\u00e9rons ce <code>zfs send<\/code> dans <code>zfs receive<\/code> vers l'objet cible, il enregistre \u00e0 la fois le contenu r\u00e9el des blocs et l'arbre de pointeurs qui pointent vers ces blocs dans le jeu de donn\u00e9es cible.<\/p>\n<p>Les choses deviennent encore plus int\u00e9ressantes avec le deuxi\u00e8me <code>zfs send<\/code>. Maintenant, nous avons deux syst\u00e8mes, chacun contenant <code>poolname\/datasetname@1<\/code>, et vous prenez un nouvel instantan\u00e9 <code>poolname\/datasetname@2<\/code>. Ainsi, dans le pool source, vous avez <code>datasetname@1<\/code> et <code>datasetname@2<\/code>, tandis que dans le pool cible, il y a pour l'instant seulement le premier instantan\u00e9. <code>datasetname@1<\/code>.<\/p>\n<p>Puisque nous avons un instantan\u00e9 commun entre la source et la cible, nous pouvons faire <code>datasetname@1<\/code>incr\u00e9mental <i>par-dessus. Lorsque nous disons au syst\u00e8me<\/i> <code>zfs send<\/code> zfs send -i poolname\/datasetname@1 poolname\/datasetname@2 <code>, il compare les deux arbres de pointeurs. Tous les pointeurs qui existent uniquement dans<\/code>, font \u00e9videmment r\u00e9f\u00e9rence \u00e0 de nouveaux blocs, donc nous aurons besoin du contenu de ces blocs. <code>@2<\/code>Sur le syst\u00e8me distant, le traitement incr\u00e9mental<\/p>\n<p>est tout aussi simple. D'abord, nous \u00e9crivons tous les nouveaux enregistrements inclus dans le flux <code>send<\/code> , puis nous ajoutons les pointeurs vers ces blocs. Voil\u00e0, nous avons <code>send<\/code>dans le nouveau syst\u00e8me! <code>@2<\/code> La r\u00e9plication incr\u00e9mentale asynchrone ZFS est une \u00e9norme am\u00e9lioration par rapport aux m\u00e9thodes ant\u00e9rieures qui ne reposaient pas sur des instantan\u00e9s, comme rsync. Dans les deux cas, seules les donn\u00e9es modifi\u00e9es sont transf\u00e9r\u00e9es, mais rsync doit d'abord<\/p>\n<p>lire toutes les donn\u00e9es des deux c\u00f4t\u00e9s pour v\u00e9rifier la somme et la comparer. \u00c0 l'inverse, la r\u00e9plication ZFS ne lit rien d'autre que les arbres de pointeurs, et tout bloc qui n'est pas pr\u00e9sent\u00e9 dans l'instantan\u00e9 commun. <i>lire<\/i> Depuis le disque, toutes les donn\u00e9es des deux c\u00f4t\u00e9s sont v\u00e9rifi\u00e9es pour comparer les sommes. Contrairement \u00e0 cela, la r\u00e9plication ZFS ne lit rien d'autre que les arbres de pointeurs \u2014 et tous les blocs qui ne sont pas repr\u00e9sent\u00e9s dans le snapshot commun.<\/p>\n<h3>Compression int\u00e9gr\u00e9e<\/h3>\n<p>\nLe m\u00e9canisme de copie \u00e0 l'\u00e9criture simplifie \u00e9galement le syst\u00e8me de compression int\u00e9gr\u00e9e. Dans un syst\u00e8me de fichiers traditionnel, la compression pose des probl\u00e8mes : l'ancienne version et la nouvelle version des donn\u00e9es modifi\u00e9es se trouvent dans le m\u00eame espace.<\/p>\n<p>Si l'on consid\u00e8re un fragment de donn\u00e9es au milieu d'un fichier, qui commence sa vie comme un m\u00e9gaoctet de z\u00e9ros \u00e0 partir de 0x00000000 et ainsi de suite, il est tr\u00e8s facile de le compresser en un seul secteur sur le disque. Mais que se passera-t-il si nous rempla\u00e7ons ce m\u00e9gaoctet de z\u00e9ros par un m\u00e9gaoctet de donn\u00e9es non compressibles, telles que JPEG ou un bruit pseudo-al\u00e9atoire ? \u00c9tonnamment, ce m\u00e9gaoctet de donn\u00e9es n\u00e9cessitera non pas un, mais 256 secteurs de 4 Ko, alors qu'\u00e0 cet endroit, un seul secteur est r\u00e9serv\u00e9 sur le disque.<\/p>\n<p>ZFS n'a pas ce probl\u00e8me, car les enregistrements modifi\u00e9s sont toujours \u00e9crits dans l'espace inutilis\u00e9 : le bloc d'origine occupe seulement un secteur de 4 Ko, et le nouvel enregistrement prendra 256, mais ce n'est pas un probl\u00e8me : le fragment r\u00e9cemment modifi\u00e9 du \"milieu\" du fichier serait \u00e9crit dans l'espace inutilis\u00e9, peu importe s'il a chang\u00e9 de taille ou non, donc pour ZFS, c'est une situation tout \u00e0 fait normale.<\/p>\n<p>La compression int\u00e9gr\u00e9e de ZFS est d\u00e9sactiv\u00e9e par d\u00e9faut, et le syst\u00e8me propose des algorithmes modulaires \u2014 actuellement, parmi eux LZ4, gzip (1-9), LZJB et ZLE.<\/p>\n<ul>\n<li><b>LZ4<\/b> \u2014 c'est un algorithme de compression en flux, offrant une compression et une d\u00e9compression extr\u00eamement rapides et un gain de performance pour la plupart des cas d'utilisation \u2014 m\u00eame sur des CPU assez lents.\n<\/li>\n<li><b>GZIP<\/b> \u2014 un algorithme respect\u00e9, connu et appr\u00e9ci\u00e9 de tous les utilisateurs de syst\u00e8mes Unix. Il peut \u00eatre impl\u00e9ment\u00e9 avec des niveaux de compression de 1 \u00e0 9, avec une augmentation du taux de compression et de l'utilisation du CPU \u00e0 mesure que l'on se rapproche du niveau 9. L'algorithme convient bien \u00e0 tous les cas d'utilisation textuels (ou autres tr\u00e8s compressibles), mais provoque souvent des probl\u00e8mes de CPU \u2014 utilisez-le avec prudence, surtout \u00e0 des niveaux plus \u00e9lev\u00e9s.\n<\/li>\n<li><b>LZJB<\/b> \u2014 l'algorithme original dans ZFS. Il est obsol\u00e8te et ne devrait plus \u00eatre utilis\u00e9, LZ4 le surpasse dans tous les domaines.\n<\/li>\n<li><b>ZLE<\/b> \u2014 encodage de niveau z\u00e9ro, Zero Level Encoding. Il ne modifie pas les donn\u00e9es normales, mais compresse de grandes s\u00e9quences de z\u00e9ros. Utile pour des ensembles de donn\u00e9es compl\u00e8tement non compressibles (par exemple, JPEG, MP4 ou d'autres formats d\u00e9j\u00e0 compress\u00e9s), car il ignore les donn\u00e9es non compressibles, mais compresse l'espace inutilis\u00e9 dans les enregistrements finaux.<\/li>\n<\/ul>\n<p>\nNous recommandons la compression LZ4 pour quasiment tous les cas d'utilisation ; la p\u00e9nalit\u00e9 de performance lors de la rencontre de donn\u00e9es non compressibles est tr\u00e8s faible, et <i>remarquable<\/i> la performance pour des donn\u00e9es typiques est significativement am\u00e9lior\u00e9e. La copie d'une image de machine virtuelle pour une nouvelle installation du syst\u00e8me d'exploitation Windows (OS fra\u00eechement install\u00e9, sans donn\u00e9es \u00e0 l'int\u00e9rieur) avec <code>compression=lz4<\/code> s'est faite 27 % plus rapidement que avec <code>compression=none<\/code>, sur <noindex><a rel=\"nofollow\" href=\"https:\/\/jrs-s.net\/2015\/02\/24\/zfs-compression-yes-you-want-this\/\">ce test de 2015<\/a><\/noindex>.<\/p>\n<h1>ARC \u2014 Adaptive Replacement Cache<\/h1>\n<p>\nZFS est le seul syst\u00e8me de fichiers moderne connu qui utilise son propre m\u00e9canisme de mise en cache de lecture, et ne d\u00e9pend pas du cache de pages de l'OS pour stocker des copies des blocs r\u00e9cemment lus en RAM.<\/p>\n<p>Bien que son cache ne soit pas sans probl\u00e8mes \u2014 ZFS ne peut pas r\u00e9pondre \u00e0 de nouvelles demandes d'allocation de m\u00e9moire aussi rapidement que le noyau, donc un nouvel appel <code>malloc()<\/code> pour l'allocation de m\u00e9moire peut \u00e9chouer s'il n\u00e9cessite de la RAM actuellement occup\u00e9e par l'ARC. Mais il y a de bonnes raisons d'utiliser ce cache, du moins pour le moment.<\/p>\n<p>Tous les syst\u00e8mes d'exploitation modernes connus, y compris MacOS, Windows, Linux et BSD, utilisent un algorithme LRU (Least Recently Used) pour impl\u00e9menter le cache de pages. C'est un algorithme primitif qui \u00ab remonte \u00bb le bloc mis en cache \u00ab dans la file d'attente \u00bb apr\u00e8s chaque lecture et \u00ab pousse \u00bb les blocs \u00ab vers le bas de la file d'attente \u00bb lorsque cela est n\u00e9cessaire pour ajouter de nouveaux manques de cache (blocs qui devaient \u00eatre lus \u00e0 partir du disque et non du cache).<\/p>\n<p>En g\u00e9n\u00e9ral, cet algorithme fonctionne correctement, mais dans les syst\u00e8mes avec de grands ensembles de donn\u00e9es, LRU peut facilement mener \u00e0 du thrashing \u2014 une \u00e9viction de blocs souvent n\u00e9cessaires pour lib\u00e9rer de l'espace pour des blocs qui ne seront plus jamais relus \u00e0 partir du cache.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Adaptive_replacement_cache\">ARC<\/a><\/noindex>\u00a0\u2014 un algorithme beaucoup moins na\u00eff, qui peut \u00eatre consid\u00e9r\u00e9 comme un cache \u00ab pond\u00e9r\u00e9 \u00bb. Apr\u00e8s chaque lecture d'un bloc en cache, il devient un peu \u00ab plus lourd \u00bb et il devient plus difficile de l'\u00e9vincer \u2014 et m\u00eame apr\u00e8s \u00e9viction, le bloc <i>est suivi<\/i> pendant une p\u00e9riode donn\u00e9e. Un bloc qui a \u00e9t\u00e9 \u00e9vinc\u00e9 mais qui doit ensuite \u00eatre relu dans le cache deviendra \u00e9galement \u00ab plus lourd \u00bb.<\/p>\n<p>Le r\u00e9sultat final de tout cela est un cache avec un taux de r\u00e9ussite (hit ratio) beaucoup plus \u00e9lev\u00e9 \u2014 le rapport entre les hits dans le cache (lecture effectu\u00e9e depuis le cache) et les misses (lecture depuis le disque). C'est une statistique extr\u00eamement importante \u2014 non seulement les hits dans le cache sont servis \u00e0 des vitesses bien sup\u00e9rieures, mais les misses dans le cache peuvent \u00e9galement \u00eatre servies plus rapidement, car plus il y a de hits dans le cache, moins il y a de requ\u00eates parall\u00e8les au disque et moins il y a de latence pour les misses restantes qui doivent \u00eatre servies depuis le disque.<\/p>\n<h1>Conclusion<\/h1>\n<p>\nApr\u00e8s avoir \u00e9tudi\u00e9 la s\u00e9mantique de base de ZFS \u2014 comment fonctionne la copie \u00e0 l'\u00e9criture, ainsi que les relations entre les pools de stockage, les dispositifs virtuels, les blocs, les secteurs et les fichiers \u2014 nous sommes pr\u00eats \u00e0 discuter de la performance r\u00e9elle avec des chiffres concrets.<\/p>\n<p>Dans la prochaine partie, nous allons examiner la performance r\u00e9elle des pools avec des vdev en miroir et RAIDz, l'un par rapport \u00e0 l'autre, ainsi qu'en comparaison avec les topologies RAID traditionnelles du noyau Linux que nous avons explor\u00e9es. <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/04\/understanding-raid-how-performance-scales-from-one-disk-to-eight\/\">pr\u00e9c\u00e9demment<\/a><\/noindex>.<\/p>\n<p>Au d\u00e9part, nous voulions ne consid\u00e9rer que les bases \u2014 les propres topologies de ZFS \u2014 mais apr\u00e8s <i>autant<\/i> nous serons pr\u00eats \u00e0 parler d'un param\u00e9trage et d'un r\u00e9glage avanc\u00e9s de ZFS, y compris l'utilisation de types de vdev auxiliaires, tels que L2ARC, SLOG et Special Allocation.<br \/>\n<br \/>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/504692\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0432\u043e\u0434\u043d\u044b\u0435 \u0442\u0435\u043c\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u0430\u0448\u0438\u0445 \u0434\u0438\u0441\u043a\u043e\u0432 \u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 RAID. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043c\u044b \u0434\u0430\u0436\u0435 \u043f\u043e\u043e\u0431\u0435\u0449\u0430\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e\u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0439 \u0432 ZFS. \u042d\u0442\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0441\u044e\u0434\u0443: \u043e\u0442 Apple \u0434\u043e Ubuntu. \u041d\u0443 \u0447\u0442\u043e \u0436, \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u0435\u043d\u044c \u0434\u043b\u044f \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":83583,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-83582","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0441\u043d\u043e\u0432\u044b ZFS: \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-06-01T17:42:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-01T17:42:21+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Les bases de ZFS : stockage et performances | ProHoster","description":"Ce printemps, nous avons d\u00e9j\u00e0 abord\u00e9 certains points.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0441\u043d\u043e\u0432\u044b ZFS: \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c | ProHoster","og:description":"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435.","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-06-01T17:42:21+00:00","article:modified_time":"2020-06-01T17:42:21+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"83582","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:14:37","updated":"2022-09-28 10:00:57","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/83582","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=83582"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/83582\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/83583"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=83582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=83582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=83582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}