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

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

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

แนวทางการ limit ZFS ARC
กรณีเราติดตั้ง proxmox ด้วยระบบ ZFS ค่าทำงานเริ่มต้นของระบบคือ ใช้งาน memory 50% ของทั้งระบบ เพราะว่า ARC (Adaptive Replacement Cache) จำเป็นต้องนำไปใช้งาน เพื่อประสิทธิภาพของ IO เราก็จะเห็น memory usage วิ่งอยู่ 80% - 90% ตลอดเวลา แนวทางแก้ไขคือ ต้องกำหนด

ถ้าติดตั้ง Proxmox ด้วยระบบ ZFS จะมี pool เริ่มต้นมาให้คือ rpool ซึ่งเราจะสามารถใช้งานได้ทั้ง local และ local-zfs สำหรับเป็น storage vm, container

zfs list
เรียกดู 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
result zfs list

Tuning Performance ZFS

  1. compression = lz4
  2. atime = off
  3. xattr = sa
  4. recordsize = 16K - 64K
  5. volblocksize = 16k - 64k

compression แนะนำเป็น lz4 จะใช้งาน cpu นิดนึง

zfs set compression=lz4 rpool
zfs get compression rpool
คำสั่งเรียกดู compression

atime แนะนำเป็น off ระบบไม่ update time ทุกครั้งที่มีการอ่านไฟล์

zfs set atime=off rpool
zfs get atime rpool
คำสั่งเรียกดู get atime

xattr แนะนำเป็น sa (System Attributes) โดย attributes จะถูกเก็บไว้ใน inodes

zfs set xattr=sa rpool
zfs get xattr rpool
คำสั่งเรียกดู get xattr

recordsize ค่าเริ่มต้นของ proxmox คือ 128K แนะนำปรับอยู่ในช่วง 16K - 64K ซึ่งจะมีผลดีต่อความเร็ว IOPs ของการ random reads และ writes

zfs set recordsize=64K rpool
zfs get recordsize rpool
คำสั่งเรียกดู recordsize

สุดท้ายคือ volblocksize เข้าไปที่ Proxmox UI (Datacenter -> Storage -> local-zfs -> Edit) โดยค่าเริ่มต้นอยู่ที่ 8k แนะนำปรับอยู่ในช่วง 16k - 64k และติ๊ก Thin provision

สำหรับ vm ที่เคยติดตั้งไปแล้ว จะโดนใช้ค่า volblocksize=8k (default) ต้องทำการติดตั้ง vm ใหม่ หรือใช้วิธี backup vm แล้วค่อย restore กลับมาก็ได้เหมือนกัน

zfs get volblocksize
คำสั่งเรียกดู 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       -
result volblocksize

หลังจากปรับจูน ZFS ตอนนี้ไม่เจอปัญหา IO สูง จนทำให้ Proxmox ค้างอีกเลย ข้อมูลทั้งหมดจากประสบการณ์ล้วนๆ อาจจะไม่ถูกต้อง 100% สามารถอ่านเพิ่มเติมได้จากข้างล่าง

See Also