ตกลงมันต้องตั้งค่า Swappiness เท่าไรกันแน่(วะ)?


เคยเขียนเรื่องการปรับแต่ง Swappiness ลง blog นี้ไปเมื่อเดือนที่แล้ว ผมเองก็ลองปรับตามค่าที่ Community document ของ Ubuntu แนะนำ คือ 10

หลังจากการทดลองใช้ไปได้เกือบเดือน ก็รู้สึกแปลกใจ คือ เวลาเปิดโปรแกรมเยอะๆ จนถึงมีการ Swap ย้ายหน่วยข้อมูลบางส่วนจาก ram ไปที่ swap partition บน hard disk (ถึงตั้งค่า swappiness = 0 ก็จะยังมีการ swap อยู่ดี) ทิ้งไปสักพัก swap กลับมากขึ้นเรื่อยๆ มากกว่าตอนที่ยังไม่ได้ปรับแต่งด้วยซ้ำ อารมณ์ประมาณว่ามัน”รั่ว”ไปที่ swap partition หมดเลย และบางทีระบบก็จะช้าจนกระตุกไปเลย

เลยลองตั้งค่าใหม่ดู คราวนี้ปรับให้มันน้อยกว่าเดิมอีก คือ 5 อาการที่ว่าก็ไม่หาย แถมแรงกว่าเดิมด้วย สุดท้ายมาลองที่ swappiness = 0 แทนที่อาการจะดีขึ้น กลับพบว่าหนักสุด ไม่ใช่แค่กระตุก แต่เกือบค้างกันเลยทีเดียว ต้อง Alt + PrtScr + R,E,I,S,U,B รีบูตไปเลย

ลองหา Google ก็ไม่พบคำตอบที่น่าพอใจ เลยกลับมาทบทวน ลองตั้งค่า swappiness เพิ่มไปเป็น 25 ดู แปลกจากที่คาดไว้เลย คือกลายเป็นว่าอาการดีขึ้น มีการเขียน swap บ้าง แต่ไม่มีอาการ “swap รั่ว” และกระตุกแล้ว

สำหรับตอนนี้ผมนึกคำอธิบายได้ประมาณว่า (คำอธิบายของผมยังเป็นแค่สมมติฐานนะครับ อาจมีผิดพลาดได้ เพราะผมเองก็ไม่ได้เรียนสายคอมพิวเตอร์โดยตรง) :

เนื่องจากเวลาเราเรียกโปรแกรมอะไรก็ตามขึ้นมา โปรแกรมนั้นมันก็จะสุ่มไปจองพื้นที่ว่างที่ติดต่อกันเอาไว้ พอเราเรียกโปรแกรมเยอะเข้า มันก็จะสุ่มไปจองพื้นที่ของมันเองเอาไว้ พื้นที่ที่ต่อเนื่องของแรมก็จะลดน้อยลง คือ ขนาดพื้นที่ว่างอาจจะมีเหลือเยอะแยะ แต่มันกระจายสะเปะสะปะ ไม่ต่อเนื่องกัน ยิ่งเรากำหนด swappiness ไว้ต่ำมากๆ หน่วยข้อมูลนี้ก็จะยิ่งเกาะอยู่ที่แรม ไม่ยอมย้ายไปที่ swap

พอเราเรียกโปรแกรมใหม่ขึ้นมาอีก มันก็หาพื้นที่ต่อเนื่องว่างๆขนาดใหญ่ๆไม่ได้ คราวนี้ระบบก็ “จำใจ” ต้อง swap ข้อมูลไปที่ hard disk และเนื่องจากข้อมูลในแรมตอนแรกมีขนาดใหญ่และสะเปะสะปะมาก การ swap จึงต้องใช้การประมวลผลสูง เลยทำให้เกิดการกระตุก

ดังนั้น ค่า swappiness ที่เหมาะสมจึงเป็นควรจะเป็นค่าที่ทำให้เกิดการสมดุล หากเราตั้งค่า swappiness มากเกินไป ระบบก็จะเขียนข้อมูลลง hard disk อยู่เรื่อย ซึ่งทำให้ระบบโดยรวมช้าลง (เพราะยังไง hard disk ก็ช้ากว่า ram) แต่หากตั้งไว้ต่ำเกินไป ก็จะเกิดอาการ swap รั่วแบบที่บอก

ผมจึงขอเดาว่าสำหรับเครื่องผม ค่า swappiness ที่เหมาะสมน่าจะเป็นระหว่าง 20-50

Spec เครื่องผมเป็นดังนี้

Toshiba Notebook M70

CPU: Pentium M 1.73 GHz

Ram: DDR2 1 GB (512 x 2)

Intergrated Intel Graphics 915M

HDD: 80GB 5400rpm

OS: Ubuntu 9.04 Kernel 2.6.30rc7

คนที่ลองปรับค่า swappiness ไปแล้ว ลองเช็คดูด้วยนะครับ ว่าค่าที่ตั้งไว้เหมาะสมดีหรือเปล่า ให้ลองปรับไปทีละค่าระหว่าง 10-50 ก็ได้ (ผมไม่แนะนำ 0 กับ 100 นะ เพราะลองแล้วไม่ได้เรื่องทั้งคู่)

ในนี้ https://help.ubuntu.com/community/SwapFaq มีวิธีปรับแบบไม่ต้องรีบูต คำสั่งคือ

sudo sysctl vm.swappiness=xx

แทน xx ด้วยตัวเลขที่ต้องการ

ลองค่อยๆทำดูจนพอใจ แล้วค่อยเลือกค่าถาวรก็ได้

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: