SunFire X4150
Note
Edit 2019 : Cette partie est mise à jour. La X4150 est une vieille (fin 2007 !) machine, mais reste une merveille pour les petits serveurs de fichiers.
Précédent : ZFS on Linux - 3 | Suivant : ZFS on Linux - 5
4.1 - Description du matériel : SunFire X4150
- 2x "Quad core Intel Xeon E5440" @ 2,83 GHz (8 processeurs)
- 16 Go RAM (ou 24 Go)
- 8x 146 Go SAS 10kt/m (sur LSI Logic SAS1068E)
- ou 2x 146 Go SAS + 6x 1To SATA (sur LSI Logic SAS1068E)
- 4x Intel (80003ES2LAN/82571EB) Gigabit Ethernet Controller
Mise en service 2007. Debian 7 Squeeze jusqu'à Debian 9 Stretch.
4.2 - Configuration de ZFS
Pour installer ZFS, nous sommes passé d'une compilation des versions Release Candidate, à l'installation des paquets du dépot de zfsonlinux.org, puis aux paquets intégrés dans Debian Stable.
1 | apt install zfs-dkms zfs-zed zfsutils-linux
|
- vdev_id.conf (anciennement zdev.conf, léger changement de format) :
1 2 3 4 5 6 7 8 | # sda et sdb, raid1 mdadm, pour l'OS
# disks 'by-path'
alias SAS2 pci-0000:07:00.0-sas-0x1221000002000000-lun-0 #sdc
alias SAS3 pci-0000:07:00.0-sas-0x1221000003000000-lun-0 #sdd
alias SAS4 pci-0000:07:00.0-sas-0x1221000004000000-lun-0 #sde
alias SAS5 pci-0000:07:00.0-sas-0x1221000005000000-lun-0 #sdf
alias SAS6 pci-0000:07:00.0-sas-0x1221000006000000-lun-0 #sdg
alias SAS7 pci-0000:07:00.0-sas-0x1221000007000000-lun-0 #sdh
|
- Création du pool :
1 | zpool create -f data raidz2 SAS2 SAS3 SAS4 SAS5 SAS6 SAS7
|
- Options par défaut :
Sur un serveur de fichiers (type NFS), les options suivantes peuvent être configurés par défaut sur le volume principal. Les systèmes de fichiers enfants en hériteront.
1 2 3 | for i in atime=off relatime=off compression=on xattr=sa snapdir=hidden snapdev=hidden ; do
zfs set $i data
done
|
À partir de maintenant, on peut créer des volumes, modifier leurs options (quota, refquota, mountpoint, ...) et jouer avec.
4.3 - Tuning spécifique
Note
Edit 2019 : Cette partie a été mise à jour.
- Installez irqbalance plutôt que s'emmerder avec smp_affinity,
- Quelques réglages utiles dans /etc/rc.local,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | for device in /dev/sd? ; do
disk=$(basename $device)
# Désactiver le cache en écriture
# /usr/bin/sdparm -q --clear=WCE $device
# activer le cache en écriture
/usr/bin/sdparm -q --save --set=WCE $device
# Set read-ahead to 8 MiB (secteurs de 512o)
blockdev --setra 16384 $device
# https://www.kernel.org/doc/Documentation/block/queue-sysfs.txt
echo 1 > /sys/block/$disk/queue/rotational
echo 2 > /sys/block/$disk/queue/rq_affinity # 1 or 2
echo cfq > /sys/block/$disk/queue/scheduler # noop, deadline, cfq
echo 1024 > /sys/block/$disk/queue/read_ahead_kb # from 128 to 8192
echo 256 > /sys/block/$disk/queue/nr_requests # from 128 to 8192
# Disable NCQ on disks
# echo 1 > /sys/block/$disk/device/queue_depth
done
# Tuning mdadm
for mdevice in /dev/md? ; do
mdisk=$(basename $mdevice)
# Set read-ahead to 32 MiB
blockdev --setra 65536 $mdevice
# Set stripe-cache_size for RAID>1 to 16MiB
echo 16384 > /sys/block/$mdisk/md/stripe_cache_size
echo 8192 > /sys/block/$mdisk/md/stripe_cache_active
done
|
- Quelques réglages utiles via sysctl (/etc/sysctl.d/psmn.conf),
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # speed limits for mdadm raid
dev.raid.speed_limit_min = 50000
dev.raid.speed_limit_max = 500000
## force the Linux VM to keep a minimum number of kilobytes free
vm.min_free_kbytes = 1048576
vm.min_slab_ratio = 5
# https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/
# https://community.hortonworks.com/articles/33522/swappiness-setting-recommendation.html
# vm.swappiness, from 60
vm.swappiness = 20
# https://major.io/2008/08/07/reduce-disk-io-for-small-reads-using-memory/
# vm.dirty_ratio, from 40
vm.dirty_ratio = 70
# vm.dirty_bytes, from 0 ?
#vm.dirty_bytes = 15000000
# vm.dirty_background_ratio, from 10
vm.dirty_background_ratio = 5
# vm.dirty_background_bytes, from 0
vm.dirty_background_bytes = 15000000
# vm.dirty_expire_centisecs, from 3000
vm.dirty_expire_centisecs = 6000
# http://www.backwardcompatible.net/139-Reducing-dentry-slab-usage-on-machines-with-a-lot-of-RAM
# http://serverfault.com/questions/362589/effects-of-configuring-vm-overcommit-memory
# vm.overcommit=2
# vm.overcommit_ratio=80 ?
vm.vfs_cache_pressure = 10
|
- Quelques réglages utiles via modprobe (/etc/modprobe.d/zfs.conf),
1 2 3 4 5 | options spl spl_kmem_cache_slab_limit=16384
## standard 8G (miniserv) zfs >0.6.3
# http://www.linux-mag.com/id/7572/ : deadline n'est plus une si bonne idée que ça.
options zfs zfs_vdev_scheduler=cfq zfs_arc_max=8589934592
|
- Rappel des liens (explications) qui nous ont menés vers ces choix :
- https://www.kernel.org/doc/Documentation/block/queue-sysfs.txt
- https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/
- https://community.hortonworks.com/articles/33522/swappiness-setting-recommendation.html
- https://major.io/2008/08/07/reduce-disk-io-for-small-reads-using-memory/
- http://www.backwardcompatible.net/139-Reducing-dentry-slab-usage-on-machines-with-a-lot-of-RAM
- http://serverfault.com/questions/362589/effects-of-configuring-vm-overcommit-memory
- http://www.linux-mag.com/id/7572/
Avec six disques 2,5" SAS ou SATA 7.2kt/m de 1 To, en raidz2, on dispose d'à peu prés 4 To pour faire joujou. Ce modèle de machine est trés bien équilibré. En 2019, il y en a encore une petite dizaine en production (12 ans !) entre le CBP et le PSMN.
Précédent : ZFS on Linux - 3 | Suivant : ZFS on Linux - 5
ZFS on Linux - Footnotes
date: | 2019-03-25 |
---|---|
category: | HPC |
tags: | ZFS |
(notes de bas de page des articles ZFS on Linux, pasque DRY)
CBP : Centre Blaise Pascal
CDDL : Common Development and Distribution License
CLI : Command Line Interface (interface en ligne de commande)
COW : Copy On Write (copie sur écriture)
CPU : Central Processing Unit (Processeur Central)
DAS : Direct_Attached_Storage
DIY : Do It Yourself : *Fais-le toi-même.*
DRY : Don't Repeat Yourself : *Ne te repête pas.*
GUID : Global Unique Identifier
HBA : Host Bus Adapter
HT : HyperThreading
JBOD : Just a Bunch Of Disks
LLNL : Laurence Livermore National Laboratory
LVM : Logical Volume Manager ou Gestion par Volumes Logiques
NFS : Network File System
OS : Operating System, ou Système d'Exploitation
PSMN : Pôle Scientifique de Modélisation Numérique (là où je passe l'essentiel de mes journées)
RAID : Redundant Array of Inexpensive Disks
RAM : Random Access Memory, ou Mémoire Vive
SAS : Serial Attached SCSI
SATA : Serial Advanced Technology Attachment
SPL : Solaris Porting Layer, see github
SSD : Solid State Drive
ZFS :
SPDX-License-Identifier : CC-BY-4.0