ความเร็วต่อเนื่องช้าลงในไดร์ฟ 9x7-Raidz2 (ZFS ZoL 0.8.1)


9

ฉันใช้พูล ZFS ขนาดใหญ่ที่สร้างขึ้นสำหรับ 256K + ตามลำดับขนาดการอ่านและการเขียนผ่าน iSCSI (สำหรับการสำรองข้อมูล) บน Ubuntu 18.04 เมื่อพิจารณาถึงความจำเป็นในการรับส่งข้อมูลและประสิทธิภาพพื้นที่ที่สูงและความต้องการบล็อกขนาดเล็กแบบสุ่มน้อยลงฉันจึงไปตรวจค้นลายทาง raidz2 บนกระจกลายทาง

อย่างไรก็ตามประสิทธิภาพการอ่านตามลำดับ 256K นั้นต่ำกว่าที่ฉันคาดไว้มาก (100 - 200MBps สูงสุดถึง 600MBps) เมื่อ zvols กดปุ่ม ~ 99% iowait ใน iostat อุปกรณ์สำรองมักจะทำงานระหว่าง 10 และ 40% iowait ซึ่งแนะนำให้ฉันเห็นคอขวดเป็นสิ่งที่ฉันขาดการตั้งค่าเนื่องจากไม่ควรเป็น backplane หรือซีพียูใน ระบบนี้และปริมาณงานต่อเนื่องไม่ควรทำงานหนักเกินไป

ฉันเล่นค่อนข้างน้อยด้วยพารามิเตอร์โมดูล (การตั้งค่าปัจจุบันด้านล่าง) อ่านบทความหลายร้อยเรื่องเกี่ยวกับ OpenZFS github ฯลฯ การปรับค่า prefetch และการรวมกันทำให้ฉันอยู่ในระดับประสิทธิภาพนี้ - โดยค่าเริ่มต้นฉันทำงานที่ประมาณ 50MBps การอ่านตามลำดับขณะที่ ZFS กำลังส่งคำขอ TINY ไปยังดิสก์ (~ 16K) ด้วยการรวมและการดึงข้อมูลล่วงหน้าทำงานได้ดี (ฉันคิดว่า) การอ่านดิสก์จะสูงกว่ามากโดยเฉลี่ยประมาณ 64K ใน iostat

NIC เป็นเป้าหมาย LIO iscsi โดยมี cxgbit offload + Windows Chelsio iscsi initiator ทำงานได้ดีนอก ZFS zvols โดยมีการแมป optane โดยตรงที่ส่งคืนอัตราบรรทัดเกือบเต็มใน NIC (~ 3.5GBps อ่านและเขียน)

ฉันคาดหวังมากเกินไปหรือไม่ ฉันรู้ว่า ZFS จัดลำดับความสำคัญด้านความปลอดภัยมากกว่าประสิทธิภาพ แต่ฉันคาดหวังว่า 7x9 raidz2 จะให้การอ่านตามลำดับที่ดีกว่า mdadm raid6 9 ไดรฟ์เดียว

รายละเอียดระบบและบันทึก / ไฟล์กำหนดค่า:

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

การกำหนดค่าสระว่ายน้ำ:

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

การกำหนดค่า ZVol:

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

รูปแบบสระว่ายน้ำ:

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

ฉันกำลังจะฉีกผม กดดันจากผู้ใช้ให้ไปใช้ Windows ด้วย Storage Spaces แต่ฉันใช้พื้นที่เก็บข้อมูล parity (แม้ว่าจะมี Storage Spaces Direct พร้อมกระจกเงาอยู่ด้านบน) และมันก็ไม่ได้สวยเหมือนกัน ฉันอยากไป mdadm raid60 โดยตรงภายใต้ iSCSI แต่จะรักถ้ามีคนสามารถชี้ให้เห็นบางสิ่งที่น่ากลัวฉันหายไปที่จะปลดล็อคประสิทธิภาพด้วยการป้องกัน bitrot ของ ZFS :)

คำตอบ:


7

คำถามที่ดี.

  • ฉันคิดว่าขนาดบล็อก zvol ของคุณควรมีขนาด 128k
  • การตั้งค่ากำหนดการของ ZIO ของคุณทั้งหมดควรสูงกว่าเช่นขั้นต่ำ 10 และสูงสุด 64
  • zfs_txg_timeout ควรนานกว่านี้มาก ฉันทำ 15 หรือ 30s บนระบบของฉัน
  • ฉันคิดว่า RAIDZ3 หลายตัว (หรือว่าเป็นตัวพิมพ์ใหญ่) นั้นเกินความจริงและมีบทบาทสำคัญในการแสดง คุณสามารถเปรียบเทียบกับ RAIDZ2 ได้หรือไม่

แก้ไข: ติดตั้งNetdataบนระบบและตรวจสอบการใช้งานและสถิติ ZFS

แก้ไข 2: นี่สำหรับที่เก็บ Veeam Veeam รองรับ Linux เป็นเป้าหมายและทำงานได้อย่างยอดเยี่ยมกับ ZFS คุณจะพิจารณาการเปรียบเทียบด้วยข้อมูลของคุณหรือไม่ zvols ไม่ใช่กรณีการใช้งานที่เหมาะสมที่สุดสำหรับสิ่งที่คุณกำลังทำอยู่เว้นแต่ว่าการถ่ายข้อมูลของ NIC นั้นเป็นส่วนสำคัญของการแก้ปัญหา


ขอบคุณ! จุดต่อความคิดเห็นติดตามยกเว้น Z3 ซึ่งเป็นพิมพ์ผิดแน่นอน :) ใน volblocksize ฉันได้ทดสอบทั้ง 128k และ 64k และประสิทธิภาพไม่ได้เปลี่ยนแปลงมากนักสำหรับการอ่านตามลำดับ 128k น่าจะมีประสิทธิภาพในการใช้พื้นที่เพิ่มขึ้นเล็กน้อย แต่ 64k ตรงกับขนาดหน่วยการจัดสรรระบบปฏิบัติการไคลเอนต์เริ่มต้นและดูเหมือนว่าจะทำได้ดีขึ้นอย่างมากในสถานการณ์จำลอง i / o แบบสุ่ม (ซึ่งหาได้ยาก) ในขณะที่ไม่สำคัญมาก .
obrienmd

ฉันจะทดสอบโดยใช้ txg_timeout สูงกว่า - สิ่งนั้นจะมีความสำคัญน้อยที่สุดสำหรับการอ่านตามลำดับหรือไม่ เมื่อพิจารณาถึง iowait ที่ต่ำในดิสก์สำรองดูเหมือนว่าการเขียนฟลัชจะไม่ส่งผลต่อความเร็วในการอ่านเฉลี่ยมากนัก
obrienmd

1
ข้อเสนอแนะที่น่าสนใจที่สุดที่ฉันมีให้คุณ (ฉันคิดว่า) เป็นตัวกำหนดตารางเวลา ZIO เมื่อฉันย้ายเข็มไปยัง async mins และ maxes มันจะเป็นการรวมกันของ io และผลลัพธ์สุทธิค่อนข้างแย่ สำหรับการอ่านซึ่งเป็นสิ่งที่ฉันสนใจจริงๆที่นี่เนื่องจากการเขียนดีมากไปที่ 10/64 ทำให้ IO เฉลี่ยโดยเฉลี่ยถึงดิสก์ ~ 16KB ใน iostat และลดความเร็วในการอ่านเฉลี่ย 75% (~ 30 - 60MBps) จากดิสก์เหล่านั้น 'IOPS ฉันได้ปรับแต่งการซิงค์ #s อ่านแล้วและไม่เห็นว่ามีผลกระทบมากนัก แต่ฉันจะยิงอีกครั้งโดยไม่คำนึงถึง :)
35785

zfs zfs_dirty_data_max_percent = 25 - ฉันปกติ 40% หรือมากกว่านั้น
ewwhite

โอ้การอ่านเป็นปัญหาหรือไม่? ข้อมูลประเภทนี้คืออะไร? สระว่ายน้ำใหญ่แค่ไหน?
ewwhite
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.