NUMA Architecture and MySQL
NUMA เป็นสถาปัตยกรรมแบบใหม่สำหรับ multiple processor โดยแต่ละ processor (physical) จะมี memory ของตัวเอง ชุดหนึ่ง ซึ่งจะทำให้ processor สามารถเข้าถึง memory ได้รวดเร็วมากกว่าสถปัตยกรรมเก่า
ระบบปฏิบัติการ Linux มีวิธีการจัดการกับ NUMA system อย่างไร
- จะมอง hardware ในระดับ physical layer
- เรียก processor ว่า node หรือก็คือ 1 node คือ 1 physical processor
- แบ่งแต่ละ memory module ให้กับ processor
- ข้อมูล cost ในการสื่อสารระหว่าง node
คำสั่งสำหรับการตรวจสอบว่า Linux ใช้งาน memory ในแต่ละ processor เท่าไหร่
# numactl --hardware
available: 2 nodes (0-1)
node 0 size: 32276 MB
node 0 free: 26856 MB
node 1 size: 32320 MB
node 1 free: 26897 MB
node distances:
node 0 1
0: 10 21
1: 21 10
จากผลลัพธ์ข้างบน จะแบ่งออกได้เป็น 3 ส่วนคือ
- จำนวน node ที่มีอยู่ในระบบ
- ขนาด memory ที่กำหนดให้ในแต่ละ node และ ขนาดของ memory ที่ยังว่างในแต่ละ node
- Distance คือ cost ของการ access memory ในแต่ละ node
Numa setting for MySQL
สำหรับการนำ Numa มาใช้งานร่วมกับ MySQL เพื่อช่วยเสริมประสิทธิภาพการทำงานของ MySQL ให้มีประสิทธิภาพมากขึ้น และป้องกันการ assign memory ในแต่ละ cpu ไม่เท่ากัน ซึ่งอาจจะสังเกตุได้จาก memory เหลือ แต่ระบบใช้ SWAP เพิ่มขึ้นเรื่อยๆ
การ config ให้ MySQL ใช้ NUMA policy ควบคุมการใช้งาน memory สามารถใช้คำสั่ง numactl เข้ามาควบคุมการเข้าใช้งานได้โดย ให้แก้ไขไฟล์ mysqld_safe ตรงด้านล่างของ
cmd="`mysqld_ld_preload_text`$NOHUP_NICENESS"
โดยให้ใส่ค่าด้านล่างต่อท้ายด้านบน
cmd="/usr/bin/numactl --interleave all $cmd"