ZFS on Linux - 4


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

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