From 8cca034cb1fbd63b98e9c699c0eae44dc732b8f3 Mon Sep 17 00:00:00 2001 From: aeltheos Date: Sat, 3 Jun 2023 13:59:53 +0200 Subject: [PATCH] adding documentation on block size/ashift for zfs --- tools/zfs.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tools/zfs.md b/tools/zfs.md index ef1e79a..9d93137 100644 --- a/tools/zfs.md +++ b/tools/zfs.md @@ -142,3 +142,30 @@ Pour remonter le dataset il faut alors recharger la clé : ```bash sudo zfs load-key pool/dataset && sudo zfs mount pool/dataset ``` + +## Ashift ou comment casser la prod a retardement. + +Un bloc est la plus petite taille sur laquelle une opération de lecture ou écriture peux être effectuer. Il y a une taille logique et une taille physique. + +Théoriquement, la taille du bloc du disque est un compromis entre les performance séquentielles (sur de gros volumes de données contenus) et aléatoires (des petits volumes de données non continus). + +En pratique, les vieux disques ont un taille de 512B, alors que les ssd et les disques récents sont en 4096B. + +On peux lire la taille des bloc via: + +```bash +cat /sys/block/sdx/queue/logical_block_size +> 512 +cat /sys/block/sdx/queue/physical_block_size +> 4096 +``` + +Avec zfs, la taille logique est controllé via le parametre ashift. +```python +block_size=2**ashift +``` + +Le coup d'émuler une taille logique supérieure à la taille physique est minime, voir peut améliorer les performance dans certains cas. Au contraire, émuler une taille logique plus petite que la taille physique est couteux et dégrade les performances significativement. + +Il est impossible de modifier le ashift d'une pool sans la recréer. Les pools du crans ont le parametre ashift=9 donc il faut une taille de bloc de 512B pour les disques. +