เมื่อคุณติดตั้ง Linux ขั้นตอนการตั้งค่าจะเพิ่มพาร์ติชั่นสว็อปลงในฮาร์ดดิสก์พร้อมกับพาร์ติชั่นสำหรับลินุกซ์เอง แต่พาร์ติชั่นสว็อปนี้ใช้ทำอะไรและจำเป็นจริง ๆ เหรอ?
สวอปคืออะไร
เมื่อระบบปฏิบัติการมัลติทาสกิ้งมีหน่วยความจำกายภาพไม่เพียงพอ จะไม่สามารถเริ่มกระบวนการใหม่หรือจัดสรรหน่วยความจำเพิ่มเติมให้กับกระบวนการที่มีอยู่ได้ ในการแก้ปัญหานี้ บล็อกพื้นที่พิเศษบนที่จัดเก็บในตัวเครื่อง (ซึ่งมักจะเป็นฮาร์ดไดรฟ์) ถูกกันไว้เพื่อทำหน้าที่เป็นพื้นที่พักชั่วคราวสำหรับกระบวนการที่ไม่ได้ทำงานอยู่ในปัจจุบัน ระบบปฏิบัติการ "สลับ" กระบวนการที่ไม่ได้ใช้งานออกจากหน่วยความจำและบนฮาร์ดดิสก์ ทำให้หน่วยความจำว่างสำหรับงานใหม่ เมื่อกระบวนการที่ไม่ใช้งานกลับมาใช้งานได้อีกครั้ง กระบวนการนั้นจะถูกเปลี่ยนกลับจากที่จัดเก็บในตัวเครื่องเป็นหน่วยความจำ ขั้นตอนนี้เรียกว่าการแลกเปลี่ยน
พื้นที่สว็อปจำเป็นจริงหรือ
พื้นที่สว็อปมีความจำเป็นทางเทคนิคหรือไม่? ไม่ Linux สามารถทำงานได้โดยปราศจากมัน และในบางสถานการณ์ เช่น โซลูชันแบบฝัง Linux สามารถทำงานได้โดยไม่ต้องสลับ หากระบบปฏิบัติการอยู่ในสถานการณ์ที่มีหน่วยความจำไม่เพียงพอ ระบบปฏิบัติการจะตื่นตระหนกและหยุดทำงาน หากมี RAM เพียงพอ เครื่องจะทำงานโดยไม่มีปัญหา
พื้นที่สว็อปจำเป็นหรือไม่? ใช่. แม้ว่าการสลับคอมพิวเตอร์จะทำให้คอมพิวเตอร์ช้าลง (เนื่องจากการอ่านและเขียนไปยังฮาร์ดดิสก์จะช้ากว่าการเข้าถึง RAM มาก) และการมีหน่วยความจำกายภาพบนบอร์ดเป็นทางออกที่ดีที่สุดเพื่อหลีกเลี่ยงการสลับกัน แต่ก็มีบางสถานการณ์ที่เหมาะสมที่แนะนำให้ทำการสลับ ตัวอย่างเช่น ระหว่างการบู๊ตระบบ อาจมีกระบวนการที่ทำงานอยู่ (และใช้หน่วยความจำของระบบด้วย) แต่จากนั้นก็เข้าสู่โหมดสลีปอย่างมีประสิทธิภาพเป็นระยะเวลานาน หรือหน่วยความจำที่จัดสรรให้เขียนไปแล้วไม่เคยใช้อีกเลย ในสถานการณ์เหล่านี้ อัลกอริธึมการสลับจะเริ่มย้ายหน่วยความจำนี้ไปยังฮาร์ดดิสก์ และทำให้หน่วยความจำระบบมีค่าว่างมากขึ้น สิ่งนี้ทำให้แน่ใจได้ว่าจำนวน RAM สูงสุดจะพร้อมใช้งานตลอดเวลาและเพิ่มประสิทธิภาพการทำงาน
สำหรับเครื่องที่มี RAM จริงไม่เพียงพอสำหรับทุกสิ่งที่จะอยู่ในหน่วยความจำ การใช้พื้นที่สว็อปเป็นสิ่งสำคัญ!
เพื่อความสมบูรณ์ ควรกล่าวไว้ว่า Linux ยังมีระบบย่อยที่เรียกว่า Out-Of-Memory Killer (OOM) ซึ่งแทนที่จะหยุดเคอร์เนลเมื่อหน่วยความจำหมด จะเป็นการเริ่มฆ่ากระบวนการต่างๆ เพื่อให้ทรัพยากรว่าง สามารถกำหนดค่าการกระทำได้
ฉันควรจัดสรรพื้นที่สว็อปเท่าไหร่
ไม่มีกฎตายตัว และเนื่องจากพื้นที่ว่างในฮาร์ดดิสก์มีราคาถูก (ดอลลาร์ต่อกิกะไบต์) การจัดสรรพื้นที่มากเกินไปจึงดีกว่าพื้นที่น้อยเกินไป ตามหลักการทั่วไป คุณควรมีพื้นที่สว็อปเป็นหน่วยความจำกายภาพสองหรือสามเท่า
การเพิ่มการสลับโดยไม่ขยายพาร์ติชั่นการสลับ
มีสองวิธีในการเพิ่มพื้นที่สว็อปให้กับระบบโดยไม่ต้องเปลี่ยนพาร์ติชั่นสว็อปที่มีอยู่ วิธีหนึ่งคือการใช้พาร์ติชั่นสว็อปบนไดรฟ์อื่น อีกวิธีหนึ่งคือการใช้ไฟล์สว็อป
หากต้องการใช้ฮาร์ดไดรฟ์อื่น ให้สร้างพาร์ติชั่นประเภท “Linux swap” (รหัส 82) จากนั้นเรียกใช้ “mkswap
” เพื่อเตรียมพื้นที่สว็อป:
mkswap /dev/sdb2
โดยที่ /dev/sdb2
คือชื่อพาร์ติชั่นที่คุณสร้าง หากต้องการใช้พื้นที่สว็อปทันที ให้ใช้ “swapon
” คำสั่ง:
swapon /dev/sdb2
ใช้ “swapon -s
” เพื่อรับรายการสวอปสเปซที่ใช้อยู่ในปัจจุบัน หากต้องการเพิ่มพื้นที่สว็อปในระบบอย่างถาวร คุณจะต้องแก้ไข /etc/fstab
ไฟล์และเพิ่มบรรทัดที่คล้ายกันนี้:
/dev/sdb2 none swap sw 0 0
หากระบบของคุณใช้ตัวระบุเฉพาะในการตั้งชื่อดิสก์ ให้ใช้ blkid
คำสั่งรับรายการไอดีของอุปกรณ์ บรรทัดสำหรับติดตั้งพื้นที่สว็อปใน /etc/fstab
ก็จะมีลักษณะดังนี้:
UUID=036da155-1ea1-4392-b8d4-700f65aa1ead none swap sw 0 0
หากต้องการใช้ไฟล์เพื่อสลับ ให้สร้างไฟล์เปล่าขนาดใหญ่ (โดยใช้ dd
) บนระบบไฟล์ที่คุณต้องการใช้สำหรับสลับ ตัวอย่างเช่น หากต้องการสร้างไฟล์ขนาด 1GB ให้พิมพ์:
dd if=/dev/zero of=/store/swapfile bs=1024 count=1048576
โดยที่ /store/swapfile
คือพาธไปยังไฟล์สลับบนระบบไฟล์ที่ต้องการ
เช่นเดียวกับพาร์ติชั่นสว็อปเพิ่มเติม ตอนนี้ไฟล์จะต้องเตรียมด้วย mkswap
แล้วใช้กับ swapon
. ต้องเพิ่มลงใน /etc/fstab
. ด้วย ไฟล์. ขั้นตอนเหมือนกันทุกประการกับด้านบน แต่คุณต้องใช้ /store/swapfile
แทนที่จะเป็น /dev/sdb2
เป็นพารามิเตอร์สว็อปสเปซ
การแลกเปลี่ยน
เคอร์เนลลินุกซ์สามารถปรับเปลี่ยนได้เพื่อกำหนดว่าควรพยายามสลับกระบวนการออกจากหน่วยความจำมากน้อยเพียงใด แนวโน้มนี้ถูกควบคุมโดยตัวแปรเคอร์เนลที่เรียกว่า swappiness
. swappiness
ของ 0 หมายความว่าเคอร์เนลจะหลีกเลี่ยงการสลับให้มากที่สุด ในขณะที่ 100 หมายความว่าเคอร์เนลจะก้าวร้าวในการใช้พื้นที่สว็อป ค่าติดตั้งเริ่มต้นสำหรับลีนุกซ์รุ่นต่างๆ คือ 60 คุณสามารถเปลี่ยนตัวเลขแบบไดนามิกได้โดยใช้คำสั่งนี้:
sudo sysctl vm.swappiness=10
หากต้องการตั้งค่าอย่างถาวร คุณต้องเปลี่ยน (หรือเพิ่มหากไม่มีอยู่) vm.swappiness
ตัวแปรใน /etc/sysctl.conf
ไฟล์.
แจ้งให้เราทราบหากคุณมีคำถามเกี่ยวกับการแลกเปลี่ยนใน Linux
บทความนี้เผยแพร่ครั้งแรกในเดือนธันวาคม 2013 และได้รับการอัปเดตในเดือนสิงหาคม 2020