แนวทางการ tuning ZFS Proxmox

จากบทความที่แล้ว ได้พูดถึงการปรับ limit ZFS ARC ส่วนบทความนี้จะเป็นการ tuning performance หลังจากใช้งาน ZFS Storage แล้วเจอปัญหาหลักๆคือ เรื่องใช้งาน IO สูงผิดปกติ จนตัว Proxmox ค้างบ่อยครั้ง

ถ้าติดตั้ง Proxmox ด้วยระบบ ZFS จะมี pool เริ่มต้นมาให้คือ rpool ซึ่งเราจะสามารถใช้งานได้ทั้ง local และ local-zfs สำหรับเป็น storage vm, container
zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 27.8G 29.4G 96K /rpool
rpool/ROOT 11.5G 29.4G 96K /rpool/ROOT
rpool/ROOT/pve-1 11.5G 29.4G 11.5G /
rpool/data 16.2G 29.4G 112K /rpool/data
Tuning Performance ZFS
- compression = lz4
- atime = off
- xattr = sa
- recordsize = 16K - 64K
- volblocksize = 16k - 64k
compression แนะนำเป็น lz4 จะใช้งาน cpu นิดนึง
zfs set compression=lz4 rpool
zfs get compression rpool
atime แนะนำเป็น off ระบบไม่ update time ทุกครั้งที่มีการอ่านไฟล์
zfs set atime=off rpool
zfs get atime rpool
xattr แนะนำเป็น sa (System Attributes) โดย attributes จะถูกเก็บไว้ใน inodes
zfs set xattr=sa rpool
zfs get xattr rpool
recordsize ค่าเริ่มต้นของ proxmox คือ 128K แนะนำปรับอยู่ในช่วง 16K - 64K ซึ่งจะมีผลดีต่อความเร็ว IOPs ของการ random reads และ writes
zfs set recordsize=64K rpool
zfs get recordsize rpool
สุดท้ายคือ volblocksize เข้าไปที่ Proxmox UI (Datacenter -> Storage -> local-zfs -> Edit) โดยค่าเริ่มต้นอยู่ที่ 8k แนะนำปรับอยู่ในช่วง 16k - 64k และติ๊ก Thin provision

สำหรับ vm ที่เคยติดตั้งไปแล้ว จะโดนใช้ค่า volblocksize=8k (default) ต้องทำการติดตั้ง vm ใหม่ หรือใช้วิธี backup vm แล้วค่อย restore กลับมาก็ได้เหมือนกัน
zfs get volblocksize
NAME PROPERTY VALUE SOURCE
rpool volblocksize - -
rpool/ROOT volblocksize - -
rpool/ROOT/pve-1 volblocksize - -
rpool/data volblocksize - -
rpool/data/vm-101-disk-0 volblocksize 64K -
rpool/data/vm-101-disk-1 volblocksize 64K -
หลังจากปรับจูน ZFS ตอนนี้ไม่เจอปัญหา IO สูง จนทำให้ Proxmox ค้างอีกเลย ข้อมูลทั้งหมดจากประสบการณ์ล้วนๆ อาจจะไม่ถูกต้อง 100% สามารถอ่านเพิ่มเติมได้จากข้างล่าง