9x7 sürücülü raidz2'de (ZFS ZoL 0.8.1) düşük sıralı hızlar


9

Ben 256K + istek boyutu sıralı okumalar ve Ubuntu 18.04 üzerinde iSCSI (yedekler için) ile yazmak için inşa edilmiş büyük bir ZFS havuzu çalıştırıyorum. Yüksek verim ve alan verimliliği ihtiyacı ve rastgele küçük blok performansına daha az ihtiyaç duyulduğunda, çizgili aynalar üzerinde çizgili raidz2 ile gittim.

Bununla birlikte, 256K sıralı okuma performansı beklediğimden çok daha düşük (100 - 200MBps, 600MBps'ye kadar zirveler). Zvoller iostat'ta ~% 99 iowait'e çarptığında, destek aygıtları tipik olarak% 10 ila 40 iowait arasında çalışır, bu da bana darboğazın yapılandırmada eksik olduğum bir şey olduğunu gösterir, çünkü arka panel veya CPU'lar olmamalıdır bu sistem ve sıralı iş yükleri ARC'yi çok fazla çalıştırmamalıdır.

Modül parametreleriyle (aşağıda geçerli yapılandırma) biraz oynadım, yüzlerce makaleyi okudum, OpenZFS github ile ilgili sorunlar vb. Ayarlama önceden getirme ve toplama beni bu performans seviyesine getirdi - varsayılan olarak yaklaşık ~ 50MBps'de çalışıyordum ZFS, disklere TINY istekleri gönderiyorken (~ 16K) sıralı olarak okunur. Toplama ve önceden getirme OK ile (sanırım), disk okumaları çok daha yüksek, iostat ortalama ~ 64 K civarında.

NIC'ler, cxgbit boşaltma özelliğine sahip LIO iscsi hedefidir + Windows Chelsio iscsi başlatıcısı, ZFS zvollerinin dışında iyi çalışır ve bir optan doğrudan NIC'lerde neredeyse tam satır hızı döndürür (~ 3.5GBps okuma ve yazma).

Çok mu bekliyorum? ZFS'nin performansa göre güvenliği önceliklendirdiğini biliyorum, ancak 7x9 raidz2'nin tek bir 9 sürücülü mdadm baskınından daha iyi sıralı okumalar sağlamasını beklerdim6.

Sistem özellikleri ve günlükleri / yapılandırma dosyaları:

Chassis: Supermicro 6047R-E1R72L
HBAs: 3x 2308 IT mode (24x 6Gbps SAS channels to backplanes)
CPU: 2x E5-2667v2 (8 cores @ 3.3Ghz base each)
RAM: 128GB, 104GB dedicated to ARC
HDDs: 65x HGST 10TB HC510 SAS (9x 7-wide raidz2 + 2 spares)
SSDs: 2x Intel Optane 900P (partitioned for mirrored special and log vdevs)
NIC: Chelsio 40GBps (same as on initiator, both using hw offloaded iSCSI)
OS: Ubuntu 18.04 LTS (using latest non-HWE kernel that allows ZFS SIMD)
ZFS: 0.8.1 via PPA
Initiator: Chelsio iSCSI initiator on Windows Server 2019

Havuz yapılandırması:

ashift=12
recordsize=128K (blocks on zvols are 64K, below)
compression=lz4
xattr=sa
redundant_metadata=most
atime=off
primarycache=all

ZVol yapılandırması:

sparse
volblocksize=64K (matches OS allocation unit on top of iSCSI)

Havuz düzeni:

7x 9-wide raidz2
mirrored 200GB optane special vdev (SPA metadata allocation classes)
mirrored 50GB optane log vdev

/etc/modprobe.d/zfs.conf:

# 52 - 104GB ARC, this system does nothing else
options zfs zfs_arc_min=55834574848
options zfs zfs_arc_max=111669149696

# allow for more dirty async data
options zfs zfs_dirty_data_max_percent=25
options zfs zfs_dirty_data_max=34359738368

# txg timeout given we have plenty of Optane ZIL
options zfs zfs_txg_timeout=5

# tune prefetch (have played with this 1000x different ways, no major improvement except max_streams to 2048, which helped, I think)
options zfs zfs_prefetch_disable=0
options zfs zfetch_max_distance=134217728
options zfs zfetch_max_streams=2048
options zfs zfetch_min_sec_reap=3
options zfs zfs_arc_min_prefetch_ms=250
options zfs zfs_arc_min_prescient_prefetch_ms=250
options zfs zfetch_array_rd_sz=16777216

# tune coalescing (same-ish, increasing the read gap limit helped throughput in conjunction with low async read max_active, as it caused much bigger reads to be sent to the backing devices)
options zfs zfs_vdev_aggregation_limit=16777216
options zfs zfs_vdev_read_gap_limit=1048576
options zfs zfs_vdev_write_gap_limit=262144

# ZIO scheduler in priority order 
options zfs zfs_vdev_sync_read_min_active=1
options zfs zfs_vdev_sync_read_max_active=10
options zfs zfs_vdev_sync_write_min_active=1
options zfs zfs_vdev_sync_write_max_active=10
options zfs zfs_vdev_async_read_min_active=1
options zfs zfs_vdev_async_read_max_active=2
options zfs zfs_vdev_async_write_min_active=1
options zfs zfs_vdev_async_write_max_active=4

# zvol threads
options zfs zvol_threads=32

Bu konuda saçlarımı yırtıyorum. Kullanıcılardan Depolama Alanları ile tüm Windows'a gitme baskısı var, ancak eşlik depolama alanlarını (aynalar üstte olan Depolama Alanları Doğrudan ile bile) kullandım ve bu da hoş değil. İSCSI altında düz mdadm raid60 gitmek için cazip, ama birisi boneheaded bir şey işaret olabilir eğer ben ZFS bitrot koruması ile performans kilidini olacak eksik :)

Yanıtlar:


7

İyi soru.

  • Bence seyrek zvol blok büyüklüğünüz 128k olmalıdır.
  • ZIO zamanlayıcı ayarlarınızın tümü, minimum 10 ve maksimum 64 gibi daha yüksek olmalıdır.
  • zfs_txg_timeout çok daha uzun olmalıdır. Sistemlerimde 15 veya 30'lar yapıyorum.
  • Bence çoklu RAIDZ3'ler (ya da bir yazım hatası) aşırıya kaçmış ve performansta büyük rol oynuyor. RAIDZ2 ile kıyaslama yapabilir misiniz?

Düzenle: Netdata'yı sisteme yükleyin ve kullanım ve ZFS istatistiklerini izleyin.

Edit2: Bu bir Veeam deposu içindir. Veeam, Linux'u hedef olarak destekliyor ve ZFS ile harika çalışıyor. Bunu verilerinizle karşılaştırmayı düşünür müsünüz? zvols, NIC'in yükü çözümün kritik bir parçası değilse, yaptığınız iş için ideal bir kullanım durumu değildir.


Teşekkürler! Gerçekten bir yazım hatası olan Z3 hariç, takip yorumlarında noktadan noktaya :). Volblock boyutunda, hem 128k hem de 64k ile test ettim ve sıralı okumalar için performans fazla değişmedi. 128k büyük olasılıkla biraz daha az yer kaplar, ancak 64k başlatıcı istemci işletim sistemi ayırma birimi boyutuyla eşleşir ve sıralı i / o senaryolarında çok önemli olmasa da rastgele i / o senaryolarında (nadiren) önemli ölçüde daha iyi performans gösterir. .
obrienmd

Ben daha yüksek txg_timeout ile test edeceğim - en azından sıralı okumalar için önemli olur mu? Destek disklerindeki düşük iowait göz önüne alındığında, yazma yıkımlarının ortalama okuma hızlarına çok fazla yaklaştığı / etkilediği görülmüyordu.
obrienmd

1
En ilginç geribildirim sizin için (sanırım) ZIO zamanlayıcı içindir. İğneyi asenkron dakikalarda ve maksimumlarda hareket ettirdiğimde, io agregasyonunu yok eder ve net sonuç oldukça kötüdür. Yazılar harika olduğu için burada gerçekten önemsediğim okumalar için, 10/64'e gitmek iostatta ~ 16KB disklere ortalama G / Ç yapar ve bu diskler göz önüne alındığında ortalama okuma hızını% 75 (~ 30 - 60MBps) azaltır 'IOPS. Ben de senk okuma #s tweaked ve çok etkisi görmedim, ama ne olursa olsun başka bir atış vereceğim :)
obrienmd

zfs zfs_dirty_data_max_percent = 25 - Genellikle orada% 40 veya daha büyüğüm.
ewwhite

Okumalar sorun mu? Bu ne tür veriler? Havuz ne kadar dolu?
ewwhite

0

veeam ve ReFS + sentetik Klonlar hakkında güzel bilgiler. Debian 10 openzfs ile bir ev sistemi kuruyorum ve NFS ile yavaş bir okuma alıyorum. Benim izlenimim openzfs'in üretim ortamları için olmadığıdır. Belki şu anki durumunuzu bildirebilirsiniz. Zaten oluşturduğunuz setun ile centos kullanmanızı tavsiye ederim. ReFS kullanma isteğinizi takip ediyorum. İyi şanslar!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.