ฉันใช้พูล 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 :)