Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

สิ่งที่คุณต้องรู้เกี่ยวกับ Swap Partition ใน Linux

เมื่อคุณติดตั้ง Linux กระบวนการ setup จะเพิ่ม swap partition ไปที่ฮาร์ดดิสก์พร้อมกับ partitions สำหรับ Linux เอง แต่ swap partition นี้ใช้ทำอะไร และมันจำเป็นจริงไหม?

Swap คืออะไร?

เมื่อระบบปฏิบัติการ multitasking kehabisan physical memory มันไม่สามารถเริ่ม process ใหม่หรือจัดสรร memory เพิ่มให้ processes ที่มีอยู่ได้ เพื่อแก้ปัญหานี้ บล็อกพื้นที่พิเศษบน local storage (มักเป็นฮาร์ดดิสก์) จะถูกแยกไว้เพื่อทำหน้าที่เป็นพื้นที่เก็บชั่วคราวสำหรับ processes ที่ไม่ได้รันอยู่ OS "swaps" inactive process ออกจาก memory และไปที่ฮาร์ดดิสก์ นี่ปลดปล่อย memory สำหรับงานใหม่ เมื่อ inactive process กลายเป็น active อีกครั้ง มันจะถูก swapped กลับจาก local storage ไปยัง memory กระบวนการนี้เรียกว่า swapping

พื้นที่ Swap จำเป็นจริงไหม?

Swap space จำเป็นทางเทคนิคไหม? ไม่ Linux ทำงานได้โดยไม่มีมัน และในบางสถานการณ์ เช่น embedded solutions Linux สามารถรันได้โดยไม่มี swap หาก OS เข้าสู่สถานการณ์ที่ไม่มี memory พอ มันจะ panic และหยุด หากมี physical RAM พอ เครื่องจะรันโดยไม่มีปัญหา

Swap space จำเป็นทางปฏิบัติไหม? ใช่ แม้ swapping จะทำให้คอมพิวเตอร์ช้าลง (เพราะอ่านและเขียนฮาร์ดดิสก์ช้ากว่าการเข้าถึง RAM มาก) และการมี physical memory มากที่สุดบนบอร์ดเป็นโซลูชันที่ดีที่สุดเพื่อหลีกเลี่ยง swapping มีสถานการณ์จริงที่ swapping เป็นที่พึงประสงค์ ตัวอย่างเช่น ระหว่าง system boot อาจมี processes ที่รัน (และ consume system memory) แต่หลังจากนั้น sleep อย่างมีประสิทธิภาพเป็นเวลานาน หรือ memory ที่ allocated, เขียนไป และไม่ได้ใช้ซ้ำ ในสถานการณ์เหล่านี้ swapping algorithm จะเริ่มย้าย memory นี้ไปฮาร์ดดิสก์ และปลดปล่อย system memory ที่มีค่า นี่จริงๆ แล้ว ensure ว่าจำนวน RAM สูงสุดพร้อมใช้งานตลอดเวลา และเพิ่มประสิทธิภาพ

บนเครื่องที่ไม่มี physical RAM พอสำหรับทุกอย่างอยู่ใน memory การใช้ swap space จำเป็น!

เพื่อความสมบูรณ์ คุ้มค่าที่จะกล่าวว่า Linux ยังมี subsystem ที่เรียกว่า Out-Of-Memory Killer (OOM) ซึ่งแทนที่จะหยุด kernel เมื่อ kehabisan memory จะเริ่ม kill processes เพื่อปลดปล่อยทรัพยากร การกระทำของมัน configurable

ควรจัดสรร swap space เท่าไหร่?

ไม่มีกฎที่แน่นอน และเนื่องจากพื้นที่ฮาร์ดดิสก์ถูก (ดอลลาร์ต่อ Gigabyte) ดีกว่าที่จะจัดสรรมากเกินไปกว่าน้อยเกินไป โดยทั่วไป คุณควรมี swap space สองหรือสามเท่าของ physical memory

เพิ่ม swap โดยไม่ขยาย swap partition

มีสองวิธีเพิ่ม swap space ให้ระบบโดยไม่เปลี่ยน swap partition ที่มีอยู่ วิธีหนึ่งคือใช้ swap partition บน drive อีกตัว อีกวิธีคือใช้ swap file

เพื่อใช้ฮาร์ดดิสก์อีกตัว สร้าง partition ประเภท "Linux swap" (code 82) แล้วรันคำสั่ง "mkswap" เพื่อเตรียม swap space:

mkswap /dev/sdb2

ที่ /dev/sdb2 คือชื่อของ partition ที่คุณสร้าง เพื่อใช้ swap space ทันที ใช้คำสั่ง "swapon":

swapon /dev/sdb2

ใช้ "swapon -s" เพื่อได้รายการ swap spaces ที่ใช้อยู่ ปัจจุบัน เพื่อเพิ่ม swap space อย่างถาวรให้ระบบ คุณจะต้องแก้ไขไฟล์ /etc/fstab และเพิ่มบรรทัดคล้ายกับนี้:

/dev/sdb2 none swap sw 0 0

หากระบบของคุณใช้ unique identifiers เพื่อตั้งชื่อดิสก์ ใช้คำสั่ง blkid เพื่อได้รายการ ids สำหรับ devices บรรทัดในการ mount swap space ใน /etc/fstab จะดูเหมือนนี้:

UUID=036da155-1ea1-4392-b8d4-700f65aa1ead none swap sw 0 0

เพื่อใช้ไฟล์สำหรับ swap สร้างไฟล์ว่างขนาดใหญ่ (ใช้ dd) บน filesystem ที่คุณต้องการใช้สำหรับ swapping ตัวอย่างเช่น เพื่อสร้างไฟล์ 1GB ให้พิมพ์:

dd if=/dev/zero of=/store/swapfile bs=1024 count=1048576

ที่ /store/swapfile คือ path ไปยัง swap file บน filesystem ที่ต้องการ

เหมือนกับ additional swap partition ไฟล์ตอนนี้ต้องเตรียมด้วย mkswap และใช้กับ swapon มันยังต้องเพิ่มเข้าไปในไฟล์ /etc/fstab กระบวนการเหมือนกันทุกประการ แตคุณต้องใช้ /store/swapfile แทน /dev/sdb2 เป็นพารามิเตอร์ swap space

Swappiness

Linux kernel สามารถปรับได้เพื่อกำหนดว่ามันควรพยายาม swap processes ออกจาก memory อย่างกระฉับกระเฉงแค่ไหน ความ傾向นี้ถูกควบคุมโดย kernel variable ที่เรียกว่า swappiness swappiness ของ 0 หมายถึง kernel จะหลีกเลี่ยง swapping มากที่สุดเท่าที่จะเป็นไปได้ ในขณะที่ 100 หมายถึง kernel จะ aggressive ในการใช้ swap space ค่าเริ่มต้นสำหรับหลาย Linux distributions คือ 60 สามารถเปลี่ยนหมายเลขได้แบบ dynamic ด้วยคำสั่งนี้:

sudo sysctl vm.swappiness=10

เพื่อตั้งค่าอย่างถาวร คุณต้องเปลี่ยน (หรือเพิ่ม หากไม่มี) ตัวแปร vm.swappiness ในไฟล์ /etc/sysctl.conf

บอกเราได้หากคุณมีคำถามเกี่ยวกับ swap ใน Linux

บทความนี้เผยแพร่ครั้งแรกใน Dec 2013 และอัปเดตใน Aug 2020