
ที่มาภาพ: XDA Developers
Proxmox + ZFS : ปรับค่า ARC เพื่อหลีกเลี่ยงการขาดหน่วยความจำในห้องแลบ
⚡ สรุป 30 วิ
ZFS ใช้ RAM เป็นแคช (ARC) ตามค่าตั้งต้นประมาณ 50‑60 % ของหน่วยความจำ หากไม่ได้ปรับค่า zfs_arc_max VM ใน Proxmox อาจประสบกับ memory starvation ทำให้ระบบทำงานช้า…
การติดตั้งระบบไฟล์ ZFS บนแพลตฟอร์มเวอร์ชวลไฮเปอร์ไวเซอร์ Proxmox ทำให้ผู้ใช้ต้องกำหนดค่าต่าง ๆ มากกว่าการเลือกใช้ไฟล์ซิสเต็มอื่น ๆ แต่มีหนึ่งตัวแปรที่หลายคนมองข้าม — จำนวน RAM ที่ระบบ ZFS จะสงวนไว้เป็นแคชโดยอัตโนมัติ ซึ่งตามการตั้งค่าเริ่มต้นของ Proxmox นั้นสามารถกินส่วนสำคัญของหน่วยความจำและทำให้เครื่องเวอร์ชวลในห้องแลบบ้านทำงานได้อย่างช้า ลง
Overview
Proxmox VE (Virtual Environment) เป็นซอฟต์แวร์โอเพ่นซอร์สที่ผสมผสานการจัดการคอนเทนเนอร์และ VM ไว้ในระบบเดียวกัน ทำให้เป็นตัวเลือกยอดนิยมสำหรับผู้ใช้ระดับมืออาชีพและผู้สนใจทำห้องแลบส่วนบุคคล การเพิ่ม ZFS เป็นไฟล์ซิสเต็มหลักช่วยเสริมคุณสมบัติด้านความทนทานต่อข้อผิดพลาดและการสำรองข้อมูลแบบ snapshots อย่างไรก็ตามขั้นตอนตั้งค่าระหว่างการติดตั้งจะถามเกี่ยวกับดิสก์, ระดับ RAID, การบีบอัด และชื่อพูล ซึ่งเป็นสิ่งที่ผู้ใช้ต้องตอบโดยตรง
แม้ว่าการกำหนดค่าเหล่านี้จะค่อนข้างชัดเจน แต่ส่วนสำคัญของ ZFS ที่ทำงานเบื้องหลัง — แคชระดับระบบ (ARC) — ไม่ได้ปรากฏในขั้นตอนสอบถามใด ๆ ผู้ใช้จึงอาจไม่ตระหนักว่า ZFS จะอ้างสิทธิ์หน่วยความจำเป็นจำนวนที่ขึ้นกับการตั้งค่าเริ่มต้นของโมดูลเคอร์เนล
How ZFS Integrates with Proxmox
เมื่อผู้ใช้เลือก ZFS ในขั้นตอนติดตั้ง Proxmox ระบบจะสร้างพูลใหม่โดยอัตโนมัติและโหลดโมดูล `zfs.ko` เข้าไปในเคอร์เนล การทำงานของ ZFS จะเริ่มต้นด้วยการจัดสรรแคช (ARC) เพื่อเก็บข้อมูลที่เข้าถึงบ่อย ๆ ไว้ใน RAM แทนที่จะอ่านจากดิสก์ทุกครั้ง ซึ่งเป็นแนวคิดหลักที่ทำให้ ZFS มีประสิทธิภาพสูง
อย่างไรก็ตาม Proxmox ไม่ได้เปิดเผยการตั้งค่า `zfs_arc_max` หรือ `zfs_arc_min` ในหน้าต่างการกำหนดค่าผู้ใช้ ปกติแล้วไฟล์คอนฟิกจะอยู่ใน `/etc/modprobe.d/zfs.conf` โดยมีบรรทัดเดียวที่ระบุขนาดแคชสูงสุดตามสูตรของ ZFS เอง การไม่ปรับแต่งบรรทัดนี้ทำให้ระบบอาจใช้ RAM มากเกินกว่าที่ VM ต้องการ
The Hidden ARC Setting
เอกสารอย่างเป็นทางการของ ZFS ระบุว่า ARC จะกำหนดขนาดโดยอัตโนมัติตามจำนวน RAM ที่ตรวจพบ โดยค่าเริ่มต้นอาจถึงประมาณ 50‑60 % ของหน่วยความจำทั้งหมดบนเครื่องที่ไม่มีการปรับแต่ง อย่างไรก็ตามใน Proxmox บรรทัดตั้งค่านี้มักถูกสร้างขึ้นโดยสคริปต์ติดตั้งและไม่ได้แสดงให้ผู้ใช้เห็น
- ไฟล์: `/etc/modprobe.d/zfs.conf`
- ตัวอย่างบรรทัด (ตามเอกสาร): `options zfs zfs_arc_max=...`
- ค่าเริ่มต้นอาจคำนวณจากสูตร `min(ARC_MAX, RAM * 0.5)`
หากผู้ใช้มี RAM เพียง 8 GB และไม่ได้ปรับค่า `zfs_arc_max` ระบบ ZFS อาจจองแคชใกล้เคียงกับ 4 GB ทำให้ VM ที่ต้องการหน่วยความจำหลาย GB มีพื้นที่ใช้งานเหลือน้อยลงอย่างมาก
Performance Impact
ผลของการจัดสรร RAM ให้ ARC อย่างไม่มีการปรับแต่งที่เหมาะสม สามารถแสดงออกได้สองด้าน ด้านแรกคือประสิทธิภาพ I/O ของ ZFS จะเพิ่มขึ้นเนื่องจากข้อมูลส่วนใหญ่ถูกเก็บในแคช ทำให้อ่าน/เขียนเร็วกว่าเดิม ด้านหลังคือ VM ที่ทำงานบน Proxmox อาจเผชิญกับการขาดหน่วยความจำ (memory starvation) ส่งผลให้ต้องใช้สวัป (swap) หรือประสบอาการ latency สูง
หลายกรณีที่ผู้ใช้งานห้องแลบส่วนบุคคลได้รายงานว่า VM ที่รันแอปพลิเคชันฐานข้อมูลหรือเว็บเซิร์ฟเวอร์เริ่มทำงานช้าลงหลังจากเปิดใช้ ZFS ทั้งที่ฮาร์ดแวร์ไม่มีการเปลี่ยนแปลง สาเหตุหลักมักจะสืบเนื่องจาก ARC ใช้ RAM ที่ VM คาดหวังว่าจะมีให้ใช้งานเต็มที่
Recommendations
เพื่อหลีกเลี่ยงปัญหาเหล่านี้ ผู้ดูแลระบบ Proxmox ควรตรวจสอบและปรับค่า `zfs_arc_max` ให้สอดคล้องกับความต้องการของแอปพลิเคชันบน VM ขั้นตอนพื้นฐานคือ:
- เปิดไฟล์คอนฟิก `/etc/modprobe.d/zfs.conf`
- เพิ่มหรือแก้ไขบรรทัด `options zfs zfs_arc_max=XXXXX` โดยกำหนดค่าเป็นจำนวนไบต์ที่ต้องการ (เช่น 2 GB = `2147483648`)
- รีโหลดโมดูล ZFS หรือรีสตาร์ทโฮสต์เพื่อให้ค่ามีผล
นอกจากนี้ การตรวจสอบการใช้ RAM ของระบบด้วยคำสั่ง `free -h` หรือเครื่องมือมอนิเตอร์เช่น Grafana + Prometheus จะช่วยให้ผู้ดูแลเห็นภาพรวมของการใช้แคชและหน่วยความจำของ VM อย่างชัดเจน
Impact on Home Labs
ห้องแลบบ้านส่วนใหญ่มักมี RAM จำกัดอยู่ระหว่าง 8‑16 GB การตั้งค่า ZFS โดยไม่ปรับ ARC จึงอาจทำให้เครื่องเวอร์ชวลหลายเครื่องต้องแข่งขันกันใช้หน่วยความจำเดียวกัน ส่งผลให้ประสบการณ์การทดสอบหรือพัฒนาซอฟต์แวร์ลดลง ผู้ที่ต้องการใช้ Proxmox พร้อม ZFS ควรคำนึงถึงการจัดสรร RAM ตั้งแต่ขั้นตอนออกแบบระบบ เพื่อให้ได้สมดุลระหว่างประสิทธิภาพของไฟล์ซิสเต็มและความเสถียรของ VM
Summary
Proxmete มีการตั้งค่า ZFS ARC ที่มักถูกละเลย ซึ่งอาจทำให้เครื่องเวอร์ชวลในห้องแลบบ้านใช้ RAM ไม่พอ การตรวจสอบและปรับ `zfs_arc_max` อย่างเหมาะสมเป็นวิธีแก้ไขที่ตรงจุดเพื่อรักษาประสิทธิภาพของทั้ง ZFS และ VM.
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- Proxmox has a ZFS setting nobody touches, and it could be starving your home lab of performance
- ผู้เขียน
- Ty Sherback
- แหล่ง
- XDA Developers
- วันที่เผยแพร่
- 22 สิงหาคม 2569 เวลา 20:00



