Swappiness บน Linux คืออะไร? (และวิธีการเปลี่ยนแปลง)

เผยแพร่แล้ว: 2022-01-29
หน่วยความจำเข้าถึงโดยสุ่ม (RAM) สำหรับคอมพิวเตอร์
subin-ch/Shutterstock.com

ค่า swappiness ของ Linux ไม่เกี่ยวข้องกับจำนวน RAM ที่ใช้ก่อนที่จะเริ่มการสลับ นั่นเป็นข้อผิดพลาดที่มีการรายงานอย่างกว้างขวางและเชื่อกันอย่างกว้างขวาง เราอธิบายว่ามันคืออะไร

ความเชื่อผิดๆ เกี่ยวกับ Swapiness

การสลับเป็นเทคนิคที่ข้อมูลในหน่วยความจำเข้าถึงโดยสุ่ม (RAM) ถูกเขียนไปยังตำแหน่งพิเศษบนฮาร์ดดิสก์ของคุณ ไม่ว่าจะเป็นพาร์ติชั่นสว็อปหรือไฟล์สว็อป เพื่อเพิ่มแรม

Linux มีการตั้งค่าที่เรียกว่าค่า swappiness มีความสับสนมากมายเกี่ยวกับสิ่งที่ควบคุมการตั้งค่านี้ คำอธิบายที่ไม่ถูกต้องที่พบบ่อยที่สุดของความสลับซับซ้อนคือการตั้งค่าเกณฑ์สำหรับการใช้งาน RAM และเมื่อปริมาณ RAM ที่ใช้ถึงเกณฑ์นั้น การสลับจะเริ่มต้นขึ้น

นี้เป็นความเข้าใจผิดที่ซ้ำซากบ่อยจนบัดนี้ได้รับปัญญาแล้ว ถ้า (เกือบ) คนอื่นๆ บอกคุณว่าความว่องไวทำงานอย่างไร ทำไมคุณถึงต้องเชื่อเราเมื่อเราบอกว่าไม่เป็นเช่นนั้น

เรียบง่าย. เราจะไปพิสูจน์มัน

RAM ของคุณถูกแบ่งออกเป็นโซนต่างๆ

Linux ไม่ได้คิดว่า RAM ของคุณเป็นหน่วยความจำขนาดใหญ่กลุ่มเดียว โดยจะถือว่าแบ่งออกเป็นหลายภาคส่วนที่เรียกว่าโซน โซนใดที่มีอยู่ในคอมพิวเตอร์ของคุณขึ้นอยู่กับว่าเป็น 32 บิตหรือ 64 บิต ต่อไปนี้คือคำอธิบายแบบง่ายของโซนที่เป็นไปได้บนคอมพิวเตอร์สถาปัตยกรรม x86

  • Direct Memory Access (DMA) : นี่คือหน่วยความจำ 16 MB ที่ต่ำ โซนนี้ได้ชื่อมาจากเมื่อนานมาแล้ว มีคอมพิวเตอร์ที่สามารถเข้าถึงหน่วยความจำโดยตรงได้เฉพาะในพื้นที่ของหน่วยความจำกายภาพเท่านั้น
  • Direct Memory Access 32 : แม้จะมีชื่อตรงว่า Direct Memory Access 32 (DMA32) เป็นโซนที่พบใน Linux 64 บิตเท่านั้น หน่วยความจำเหลือเพียง 4 GB Linux ที่ทำงานบนคอมพิวเตอร์ 32 บิตสามารถทำ DMA ได้กับ RAM จำนวนนี้เท่านั้น (เว้นแต่จะใช้เคอร์เนลส่วนขยายที่อยู่จริง (PAE)) ซึ่งเป็นที่มาของชื่อโซน แม้ว่าในคอมพิวเตอร์ 32 บิตจะเรียกว่า HighMem
  • ปกติ : ในคอมพิวเตอร์ 64 บิต หน่วยความจำปกติคือ RAM ทั้งหมดที่เกิน 4GB (โดยประมาณ) สำหรับเครื่อง 32 บิต จะมี RAM อยู่ระหว่าง 16 MB ถึง 896 MB
  • HighMem : มีเฉพาะในคอมพิวเตอร์ Linux 32 บิตเท่านั้น มันคือ RAM ทั้งหมดที่สูงกว่า 896 MB รวมถึง RAM ที่สูงกว่า 4 GB ในเครื่องที่มีขนาดใหญ่เพียงพอ

ค่า PAGESIZE

RAM ถูกจัดสรรในหน้าซึ่งมีขนาดคงที่ ขนาดนั้นถูกกำหนดโดยเคอร์เนลในขณะบู๊ตโดยการตรวจจับสถาปัตยกรรมของคอมพิวเตอร์ โดยปกติขนาดหน้าบนคอมพิวเตอร์ Linux คือ 4 Kbytes

โฆษณา

คุณสามารถดูขนาดหน้าของคุณได้โดยใช้คำสั่ง getconf :

 getconf PAGESIZE 

getconf PAGESIZE

โซนติดอยู่กับโหนด

โซนถูกแนบกับโหนด โหนดเชื่อมโยงกับหน่วยประมวลผลกลาง (CPU) เคอร์เนลจะพยายามจัดสรรหน่วยความจำสำหรับกระบวนการที่ทำงานบน CPU จากโหนดที่เกี่ยวข้องกับ CPU นั้น

แนวคิดของโหนดที่เชื่อมโยงกับ CPU ช่วยให้สามารถติดตั้งหน่วยความจำแบบผสมในคอมพิวเตอร์แบบหลาย CPU เฉพาะทางได้ โดยใช้สถาปัตยกรรมการเข้าถึงหน่วยความจำแบบ Non-Uniform

นั่นคือทั้งหมดที่สูงมาก คอมพิวเตอร์ลินุกซ์โดยเฉลี่ยจะมีโหนดเดียวเรียกว่าโหนดศูนย์ โซนทั้งหมดจะเป็นของโหนดนั้น หากต้องการดูโหนดและโซนในคอมพิวเตอร์ของคุณ ให้ดูภายในไฟล์ /proc/buddyinfo เราจะใช้ less :

 น้อย /proc/buddyinfo 

นี่คือผลลัพธ์จากคอมพิวเตอร์ 64 บิตที่ค้นคว้าเกี่ยวกับบทความนี้:

 โหนด 0, โซน DMA 1 1 1 0 2 1 1 0 1 1 3
โหนด 0, โซน DMA32 2 67 58 19 8 3 3 1 1 1 17
โฆษณา

มีโหนดเดียว โหนดเป็นศูนย์ คอมพิวเตอร์เครื่องนี้มี RAM เพียง 2 GB ดังนั้นจึงไม่มีโซน "ปกติ" มีเพียงสองโซนคือ DMA และ DMA32

แต่ละคอลัมน์แสดงถึงจำนวนหน้าที่ใช้ได้ของขนาดที่แน่นอน ตัวอย่างเช่น สำหรับโซน DMA32 ให้อ่านจากด้านซ้าย:

  • 2 : มีหน่วยความจำ 2 ชิ้นจาก 2^( 0 *PAGESIZE)
  • 67 : มีหน่วยความจำ 67 ชิ้นจาก 2^( 1 *PAGE_SIZE)
  • 58 : มีหน่วยความจำ 58 ชิ้นจาก 2^( 2 *PAGESIZE)
  • และอื่นๆ จนถึง...
  • 17 : มี 17 ชิ้นจาก 2^( 512 *PAGESIZE) ชิ้น

แต่จริงๆ แล้ว เหตุผลเดียวที่เรากำลังดูข้อมูลนี้คือเพื่อดูความสัมพันธ์ระหว่างโหนดและโซน

หน้าไฟล์และหน้านิรนาม

การแมปหน่วยความจำใช้ชุดของรายการตารางเพจเพื่อบันทึกหน้าหน่วยความจำที่ใช้ และเพื่ออะไร

การแมปหน่วยความจำสามารถ:

  • ไฟล์สำรอง : การแมปไฟล์สำรองประกอบด้วยข้อมูลที่อ่านจากไฟล์ มันสามารถเป็นไฟล์ประเภทใดก็ได้ สิ่งสำคัญที่ควรทราบคือหากระบบปล่อยหน่วยความจำนี้และจำเป็นต้องได้รับข้อมูลนั้นอีกครั้ง ก็สามารถอ่านจากไฟล์ได้อีกครั้ง แต่ถ้าข้อมูลมีการเปลี่ยนแปลงในหน่วยความจำ การเปลี่ยนแปลงเหล่านั้นจะต้องถูกเขียนลงในไฟล์บนฮาร์ดไดรฟ์ก่อนที่จะมีหน่วยความจำว่าง หากไม่เกิดขึ้น การเปลี่ยนแปลงจะสูญหายไป
  • ไม่ระบุชื่อ : หน่วยความจำที่ไม่ระบุชื่อเป็นการแมปหน่วยความจำที่ไม่มีไฟล์หรืออุปกรณ์สำรอง หน้าเหล่านี้อาจมีหน่วยความจำที่โปรแกรมร้องขอแบบทันทีเพื่อเก็บข้อมูล หรือสำหรับสิ่งต่างๆ เช่น สแต็กและฮีป เนื่องจากไม่มีไฟล์อยู่เบื้องหลังข้อมูลประเภทนี้จึงต้องมีที่พิเศษไว้สำหรับจัดเก็บข้อมูลที่ไม่ระบุตัวตน ที่นั้นคือพาร์ติชั่นสว็อปหรือไฟล์สว็อป ข้อมูลที่ไม่ระบุชื่อถูกเขียนขึ้นเพื่อสลับก่อนที่หน้าที่ไม่ระบุตัวตนจะเป็นอิสระ
  • อุปกรณ์สำรอง : อุปกรณ์ได้รับการแก้ไขผ่านไฟล์อุปกรณ์ที่ถูกบล็อกซึ่งสามารถปฏิบัติได้เหมือนกับเป็นไฟล์ ข้อมูลสามารถอ่านจากพวกเขาและเขียนถึงพวกเขา การแมปหน่วยความจำสำรองของอุปกรณ์มีข้อมูลจากอุปกรณ์ที่จัดเก็บไว้ในนั้น
  • แชร์ : รายการตารางหน้าหลายรายการสามารถแมปกับ RAM หน้าเดียวกันได้ การเข้าถึงตำแหน่งหน่วยความจำผ่านการแมปจะแสดงข้อมูลเดียวกัน กระบวนการต่างๆ สามารถสื่อสารระหว่างกันได้อย่างมีประสิทธิภาพโดยการเปลี่ยนข้อมูลในตำแหน่งหน่วยความจำที่รับชมร่วมกันเหล่านี้ การแมปที่เขียนได้ที่ใช้ร่วมกันเป็นวิธีทั่วไปในการบรรลุการสื่อสารระหว่างกระบวนการที่มีประสิทธิภาพสูง
  • Copy on write : คัดลอกเมื่อเขียนเป็นเทคนิคการจัดสรรแบบขี้เกียจ หากมีการขอสำเนาของทรัพยากรที่อยู่ในหน่วยความจำแล้ว คำขอจะสำเร็จโดยการส่งคืนการแมปไปยังทรัพยากรเดิม หากกระบวนการใดกระบวนการหนึ่ง “แชร์” ทรัพยากรที่พยายามเขียน ทรัพยากรนั้นจะต้องถูกจำลองแบบอย่างแท้จริงในหน่วยความจำเพื่อให้สามารถทำการเปลี่ยนแปลงกับสำเนาใหม่ได้ ดังนั้นการจัดสรรหน่วยความจำจะเกิดขึ้นในคำสั่งเขียนแรกเท่านั้น

เพื่อความรวดเร็ว เราต้องกังวลเกี่ยวกับสองรายการแรกเท่านั้น: หน้าไฟล์และหน้าที่ไม่ระบุชื่อ

การแลกเปลี่ยน

นี่คือคำอธิบายของ swappiness จากเอกสาร Linux บน GitHub:

โฆษณา

"This control is used to define how aggressive (sic) the kernel will swap memory pages. Higher values will increase aggressiveness, lower values decrease the amount of swap. A value of 0 instructs the kernel not to initiate swap until the amount of free and file-backed pages is less than the high water mark in a zone.

The default value is 60."

ฟังดูเหมือนความกระฉับกระเฉงจะเปลี่ยนขึ้นหรือลงในความเข้มข้น ที่น่าสนใจคือการตั้งค่าความว่องไวเป็นศูนย์จะไม่ปิดการสลับ มันสั่งเคอร์เนลไม่ให้สลับจนกว่าจะตรงตามเงื่อนไขบางอย่าง แต่การแลกเปลี่ยนยังสามารถเกิดขึ้นได้

มาเจาะลึกกัน นี่คือคำจำกัดความและค่าเริ่มต้นของ vm_swappiness ในไฟล์ซอร์สโค้ดเคอร์เนล vmscan.c:

/*
* From 0 .. 100. Higher means more swappy.
*/
int vm_swappiness = 60;

ค่า swappiness สามารถอยู่ในช่วงตั้งแต่ 0 ถึง 100 อีกครั้ง ความคิดเห็นที่ดูเหมือนว่าค่า swappiness มีผลกับจำนวนการแลกเปลี่ยนที่เกิดขึ้น โดยตัวเลขที่สูงขึ้นนำไปสู่การแลกเปลี่ยนที่มากขึ้น

นอกจากนี้ในไฟล์ซอร์สโค้ด เราจะเห็นว่าตัวแปรใหม่ที่เรียกว่า swappiness ได้รับการกำหนดค่าที่ส่งคืนโดยฟังก์ชัน mem_cgroup_swappiness() การติดตามเพิ่มเติมผ่านซอร์สโค้ดจะแสดงให้เห็นว่าค่าที่ส่งคืนโดยฟังก์ชันนี้คือ vm_swappiness ดังนั้นตอนนี้ ตัวแปร swappiness ถูกตั้งค่าให้เท่ากับค่า vm_swappiness ที่ตั้งค่าไว้

int swappiness = mem_cgroup_swappiness(memcg);

โฆษณา

และอีกเล็กน้อยในไฟล์ซอร์สโค้ดเดียวกัน เราเห็นสิ่งนี้:

/*
* With swappiness at 100, anonymous and file have the same priority.
* This scanning priority is essentially the inverse of IO cost.
*/
anon_prio = swappiness;
file_prio = 200 - anon_prio;

นั่นดูน่าสนใจ. ค่าที่แตกต่างกันสองค่าได้มาจากค่า swappiness ตัวแปร anon_prio และ file_prio มีค่าเหล่านี้ เมื่อตัวหนึ่งเพิ่มขึ้น อีกตัวหนึ่งลดลง และ ในทางกลับกัน

ค่า swappiness ของ Linux จะกำหนด อัตราส่วน ระหว่าง สอง ค่าจริง ๆ

อัตราส่วนทองคำ

หน้าไฟล์เก็บข้อมูลที่สามารถเรียกค้นได้ง่ายหากหน่วยความจำนั้นว่าง Linux สามารถอ่านไฟล์ได้อีกครั้ง ดังที่เราได้เห็น หากข้อมูลไฟล์มีการเปลี่ยนแปลงใน RAM การเปลี่ยนแปลงเหล่านั้นจะต้องเขียนลงในไฟล์ก่อนจึงจะสามารถเปิดหน้าไฟล์ได้ แต่ไม่ว่าจะด้วยวิธีใด หน้าไฟล์ใน RAM สามารถสร้างขึ้นใหม่ได้โดยการอ่านข้อมูลจากไฟล์ เหตุใดจึงต้องเพิ่มหน้าเหล่านี้ในพาร์ติชั่นสว็อปหรือไฟล์สว็อป หากคุณต้องการข้อมูลนั้นอีกครั้ง คุณก็อาจจะอ่านมันกลับมาจากไฟล์ต้นฉบับแทนการคัดลอกซ้ำซ้อนในพื้นที่สว็อป ดังนั้นหน้าไฟล์จะไม่ถูกจัดเก็บในการแลกเปลี่ยน พวกเขากำลัง "จัดเก็บ" ไว้ในไฟล์ต้นฉบับ

สำหรับเพจที่ไม่ระบุชื่อ จะไม่มีไฟล์อ้างอิงที่เกี่ยวข้องกับค่าในหน่วยความจำ ค่าในหน้าเหล่านั้นมาถึงแบบไดนามิกแล้ว คุณไม่สามารถอ่านกลับจากไฟล์ได้ง่ายๆ วิธีเดียวที่จะกู้คืนค่าหน่วยความจำเพจที่ไม่ระบุตัวตนได้คือการเก็บข้อมูลไว้ที่ใดที่หนึ่งก่อนที่จะทำให้หน่วยความจำว่าง และนั่นคือสิ่งที่แลกเปลี่ยนถือ หน้าที่ไม่ระบุชื่อซึ่งคุณจะต้องอ้างอิงอีกครั้ง

โฆษณา

แต่โปรดทราบว่าสำหรับทั้งหน้าไฟล์และหน้าที่ไม่ระบุตัวตน การเพิ่มหน่วยความจำให้ว่างอาจต้องใช้ฮาร์ดไดรฟ์ในการเขียน หากข้อมูลหน้าไฟล์หรือข้อมูลหน้าที่ไม่ระบุชื่อมีการเปลี่ยนแปลงตั้งแต่มีการเขียนลงในไฟล์ครั้งล่าสุดหรือเพื่อสลับ จำเป็นต้องมีการเขียนระบบไฟล์ ในการดึงข้อมูลจะต้องอ่านระบบไฟล์ การเรียกคืนหน้าทั้งสองประเภทมีค่าใช้จ่ายสูง การพยายามลดอินพุตและเอาต์พุตของฮาร์ดไดรฟ์โดยการย่อขนาดการสลับหน้าที่ไม่ระบุตัวตน จะเพิ่มปริมาณอินพุตและเอาต์พุตของฮาร์ดไดรฟ์ที่จำเป็นต่อการจัดการหน้าไฟล์ที่เขียนไปและอ่านจากไฟล์

ดังที่คุณเห็นจากข้อมูลโค้ดล่าสุด มีสองตัวแปร ไฟล์หนึ่งเรียกว่า file_prio สำหรับ "ลำดับความสำคัญของไฟล์" และอีกไฟล์หนึ่งเรียกว่า anon_prio สำหรับ "ลำดับความสำคัญที่ไม่ระบุชื่อ"

  • ตัวแปร anon_prio ถูกตั้งค่าเป็นค่าความสลับของ Linux
  • ค่า file_prio ถูกตั้งค่าเป็น 200 ลบด้วยค่า anon_prio

ตัวแปรเหล่านี้มีค่าที่ทำงานควบคู่กัน หากทั้งคู่ตั้งค่าเป็น 100 ทั้งคู่จะเท่ากัน สำหรับค่าอื่นใด anon_prio จะลดลงจาก 100 เป็น 0 และ file_prio จะเพิ่มขึ้นจาก 100 เป็น 200 ค่าทั้งสองจะป้อนเข้าสู่อัลกอริธึมที่ซับซ้อนซึ่งกำหนดว่าเคอร์เนล Linux ทำงานโดยต้องการเรียกคืน (ทำให้ว่าง) หน้าไฟล์หรือไม่ระบุชื่อ หน้า.

คุณสามารถคิดว่า file_prio เป็นความเต็มใจของระบบในการเพิ่มหน้าไฟล์ และ anon_prio คือความเต็มใจของระบบที่จะให้หน้าเว็บที่ไม่ระบุตัวตนฟรี สิ่งที่ค่าเหล่านี้ไม่ทำคือตั้งค่าทริกเกอร์หรือเกณฑ์ใดๆ สำหรับ เวลา ที่จะมีการสลับใช้ ที่ตัดสินใจที่อื่น

แต่เมื่อหน่วยความจำจำเป็นต้องว่าง ตัวแปรทั้งสองนี้—และอัตราส่วนระหว่างกัน—ถูกนำมาพิจารณาโดยอัลกอริธึมการเรียกคืนและสลับเพื่อกำหนดประเภทหน้าที่ได้รับการพิจารณาเป็นพิเศษสำหรับการเพิ่มพื้นที่ว่าง และนั่นกำหนดว่ากิจกรรมของฮาร์ดไดรฟ์ที่เกี่ยวข้องจะประมวลผลไฟล์สำหรับหน้าไฟล์หรือพื้นที่สว็อปสำหรับหน้าที่ไม่ระบุชื่อ

เมื่อใดที่ Swap ตัดเข้าจริง?

เราได้กำหนดว่าค่าความสลับซับซ้อนของ Linux ตั้งค่ากำหนดสำหรับประเภทของหน้าหน่วยความจำที่จะถูกสแกนหาการเรียกคืนที่อาจเกิดขึ้น ไม่เป็นไร แต่ มีบางอย่าง ต้องตัดสินใจ เมื่อ การแลกเปลี่ยนจะตัดเข้า

โฆษณา

แต่ละโซนหน่วยความจำมีเครื่องหมายน้ำสูงและเครื่องหมายน้ำต่ำ ค่าเหล่านี้เป็นค่าที่ได้รับจากระบบ เป็นเปอร์เซ็นต์ของ RAM ในแต่ละโซน เป็นค่าเหล่านี้ที่ใช้เป็นเกณฑ์ทริกเกอร์การสลับ

ในการตรวจสอบว่าเครื่องหมายน้ำสูงและต่ำของคุณคืออะไร ให้ดูภายในไฟล์ /proc/zoneinfo ด้วยคำสั่งนี้:

 น้อย /proc/zoneinfo 

แต่ละโซนจะมีชุดค่าหน่วยความจำที่วัดเป็นหน้า นี่คือค่าสำหรับโซน DMA32 บนเครื่องทดสอบ ระดับน้ำต่ำคือ 13966 หน้า และระดับน้ำสูงคือ 16759 หน้า:

  • ในสภาวะการทำงานปกติ เมื่อหน่วยความจำว่างในโซนลดลงต่ำกว่าระดับน้ำต่ำของโซน อัลกอริธึมการสลับจะเริ่มสแกนหน้าหน่วยความจำเพื่อค้นหาหน่วยความจำที่สามารถเรียกคืนได้ โดยคำนึงถึงค่าสัมพัทธ์ของ anon_prio และ file_prio
  • หากค่าความสลับซับซ้อนของ Linux ถูกตั้งค่าเป็นศูนย์ การสลับจะเกิดขึ้นเมื่อค่ารวมของหน้าไฟล์และหน้าที่ว่างมีค่าน้อยกว่าเครื่องหมายน้ำสูง

ดังนั้นคุณจะเห็นว่าคุณไม่สามารถใช้ค่าความว่องไวของ Linux เพื่อส่งผลต่อพฤติกรรมของ swap ที่เกี่ยวกับการใช้ RAM มันใช้งานไม่ได้อย่างนั้น

Swapiness ควรตั้งค่าเป็นเท่าใด

ขึ้นอยู่กับฮาร์ดแวร์ ปริมาณงาน ประเภทฮาร์ดไดรฟ์ และคอมพิวเตอร์ของคุณเป็นเดสก์ท็อปหรือเซิร์ฟเวอร์ เห็นได้ชัดว่านี่ไม่ใช่ขนาดเดียวที่เหมาะกับการตั้งค่าทุกประเภท

และคุณต้องจำไว้เสมอว่าการสลับไม่ได้เป็นเพียงกลไกในการเพิ่มแรมเมื่อคุณมีพื้นที่หน่วยความจำเหลือไม่เพียงพอ Swap เป็นส่วนสำคัญของระบบที่ทำงานได้ดี และหากไม่มีมัน การจัดการหน่วยความจำอย่างมีสติจะกลายเป็นเรื่องยากมากสำหรับ Linux

โฆษณา

การเปลี่ยนค่า swappiness ของ Linux จะมีผลทันที คุณไม่จำเป็นต้องรีบูต ดังนั้นคุณจึงสามารถปรับเปลี่ยนเล็กน้อยและตรวจสอบเอฟเฟกต์ได้ ตามหลักการแล้ว คุณจะต้องทำเช่นนี้ในช่วงเวลาหลายวันโดยใช้กิจกรรมประเภทต่างๆ บนคอมพิวเตอร์ของคุณ เพื่อค้นหาสถานที่ใกล้เคียงที่สุดกับสถานที่ที่เหมาะสมที่สุดที่คุณจะทำได้

นี่คือบางประเด็นที่ควรพิจารณา:

  • การพยายาม "ปิดใช้งานการสลับ" โดยการตั้งค่าความสลับไปมาของ Linux เป็นศูนย์ เพียงแค่เปลี่ยนกิจกรรมฮาร์ดไดรฟ์ที่เกี่ยวข้องกับการสลับเป็นกิจกรรมฮาร์ดไดรฟ์ที่เกี่ยวข้องกับไฟล์
  • หากคุณมีฮาร์ดไดรฟ์แบบกลไกที่มีอายุมาก คุณอาจลองลดค่า swappiness ของ Linux ให้พ้นจากการเรียกคืนเพจที่ไม่ระบุตัวตน และลดการแบ่งพาร์ติชั่นสว็อป แน่นอน เมื่อคุณปฏิเสธการตั้งค่าหนึ่ง การตั้งค่าอื่นจะเพิ่มขึ้น การลดการเปลี่ยนการปั่นมีแนวโน้มที่จะเพิ่มการปั่นระบบไฟล์ แต่คอมพิวเตอร์ของคุณอาจมีความสุขมากกว่าที่จะใช้วิธีใดวิธีหนึ่งมากกว่าอีกวิธีหนึ่ง จริงๆ วิธีเดียวที่จะรู้ได้อย่างแน่นอนคือลองดู
  • สำหรับเซิร์ฟเวอร์วัตถุประสงค์เดียว เช่น เซิร์ฟเวอร์ฐานข้อมูล คุณอาจได้รับคำแนะนำจากซัพพลายเออร์ของซอฟต์แวร์ฐานข้อมูล บ่อยครั้ง แอปพลิเคชันเหล่านี้มีแคชไฟล์ที่ออกแบบมาโดยเฉพาะและรูทีนการจัดการหน่วยความจำซึ่งคุณควรวางใจ ผู้ให้บริการซอฟต์แวร์อาจแนะนำค่า swappiness ของ Linux ตามข้อกำหนดของเครื่องและปริมาณงาน
  • สำหรับผู้ใช้เดสก์ท็อปทั่วไปที่มีฮาร์ดแวร์ใหม่พอสมควร? ปล่อยให้มันเป็นอย่างนั้น

วิธีตั้งค่าลินุกซ์ Swappiness Value

ก่อนที่คุณจะเปลี่ยนค่า swappiness ของคุณ คุณจำเป็นต้องรู้ว่ามูลค่าปัจจุบันของมันคืออะไร ถ้าจะลดให้น้อยลงคำถามคือน้อยกว่าอะไร? คุณสามารถค้นหาด้วยคำสั่งนี้:

 cat /proc/sys/vm/swappiness 

cat /proc/sys/vm/swappiness

ในการกำหนดค่าค่า swappiness ให้ใช้คำสั่ง sysctl :

 sudo sysctl vm.swappiness=45 

ค่าใหม่จะถูกใช้ทันที ไม่จำเป็นต้องรีบูต

ที่จริงแล้ว หากคุณรีบูต ค่าความว่องไวจะกลับไปเป็นค่าเริ่มต้น 60 เมื่อคุณทำการทดลองเสร็จแล้วและตัดสินใจเลือกค่าใหม่ที่คุณต้องการใช้ คุณสามารถทำให้มันคงอยู่ตลอดการรีบูตโดยเพิ่มลงใน /etc/sysctl.conf ไฟล์ คุณสามารถใช้ตัวแก้ไขใดก็ได้ที่คุณต้องการ ใช้คำสั่งต่อไปนี้เพื่อแก้ไขไฟล์ด้วยตัวแก้ไข nano :

 sudo nano /etc/sysctl.conf 

เมื่อ nano เปิดขึ้น ให้เลื่อนไปที่ด้านล่างของไฟล์และเพิ่มบรรทัดนี้ เราใช้ 35 เป็นค่า swappiness ถาวร คุณควรแทนที่ค่าที่คุณต้องการใช้

 vm.swappiness=35 

หากต้องการบันทึกการเปลี่ยนแปลงและออกจาก nano ให้กด "Ctrl+O" กด "Enter" แล้วกด "Ctrl+Z"

การจัดการหน่วยความจำนั้นซับซ้อน

การจัดการหน่วยความจำมีความซับซ้อน นั่นคือเหตุผลที่ สำหรับผู้ใช้ทั่วไป มักจะดีกว่าที่จะปล่อยให้มันอยู่ในเคอร์เนล

โฆษณา

ง่ายที่จะคิดว่าคุณใช้ RAM มากกว่าที่เป็นอยู่ ยูทิลิตี้อย่าง top และ free สามารถสร้างความประทับใจที่ผิดได้ Linux จะใช้ RAM ฟรีเพื่อวัตถุประสงค์ต่างๆ เช่น การแคชดิสก์ สิ่งนี้เป็นการยกระดับหน่วยความจำที่ "ใช้แล้ว" และลดจำนวนหน่วยความจำที่ "ว่าง" ในความเป็นจริง RAM ที่ใช้เป็นดิสก์แคชถูกตั้งค่าสถานะเป็นทั้ง "ใช้แล้ว" และ "พร้อมใช้งาน" เพราะสามารถเรียกคืนได้ตลอดเวลาอย่างรวดเร็ว

สำหรับผู้ที่ไม่ได้ฝึกหัดที่อาจดูเหมือนการสลับไม่ทำงานหรือจำเป็นต้องเปลี่ยนค่าความว่องไว

เช่นเคยมารอยู่ในรายละเอียด หรือในกรณีนี้คือภูต เคอร์เนล swap daemon

ที่เกี่ยวข้อง: แล็ปท็อป Linux ที่ดีที่สุดสำหรับนักพัฒนาและผู้ที่ชื่นชอบ