Linux: อย่าสร้าง swap partition?


9

ฉันสงสัยว่าตั้งแต่ฉันได้ยินว่าการสลับใช้เมื่อคุณออกหรือแรมและการสลับมากเกินไปนั้นไม่ดีเนื่องจากฉันมี RAM จำนวนมาก (8GB) ....

ถ้าฉันไม่สร้าง swap partition ขึ้นล่ะ?

ฉันต้องใช้มันเพื่อไฮเบอร์เนตหรือไม่?


คุณต้องสร้าง swap ฉันเคยพยายามที่จะไม่สร้าง swap ไม่สามารถทำการติดตั้งต่อได้
Lynob

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

ฉันไม่เคยลองติดตั้ง Linux ภายใน windows ฉันจะสร้างพาร์ติชันแยกต่างหากเสมอ
Lynob

คำตอบ:


13

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

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

ดังนั้นคุณต้องการสลับไม่ว่าคุณต้องการหรือไม่


8
"คุณต้องการสลับไม่ว่าคุณต้องการหรือไม่" - ดูเหมือนว่าคุณทำกรณีที่เขาต้องการสลับไม่ว่าเขาจะต้องการหรือไม่
ขี้เลื่อย

2
สมมติว่าฉันมี RAM มากมายและสามารถเสีย 2GB ทำไมฉันต้องมีไฟล์ swap?
Tarik

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

ฉันใช้เซิร์ฟเวอร์ CLI โดยไม่มีการสลับและทำงานได้อย่างสมบูรณ์ ใช้เซิร์ฟเวอร์ teamspeak3, apache2, node.js ฉันไม่เคยเห็น RAM มากกว่า 500M ที่ใช้ ดังนั้นจึงไม่ต้องกังวลว่าฉันจะใช้ RAM "ไม่มีประสิทธิภาพ" การปฏิเสธความรับผิด: ฟังก์ชั่นเว็บเซิร์ฟเวอร์ของเซิร์ฟเวอร์นี้มีไว้สำหรับการพัฒนาเท่านั้นดังนั้นการโหลดจึงต่ำอยู่เสมอ และถ้าฉันมีหน่วยความจำรั่วระหว่างการพัฒนาฉันควรจะเป็นนักฆ่า OOM ฆ่ามันทันทีที่ฉันหมด RAM มากกว่าที่จะผลักดันเรื่องไร้สาระทั้งหมดลงดิสก์
Native Coder

12

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

ความแตกต่างที่สำคัญอย่างหนึ่งคือวิธีที่ระบบทำงานเมื่อหน่วยความจำหมด:

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

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

ดังนั้นตั้งแต่ฉันจะสูญเสียข้อมูลของฉันนะเมื่อ Ooms ระบบฉันชอบอดีตตัวเลือกอย่างน้อยมีโอกาส (สูง) ของการกู้คืน


นี่เป็นประสบการณ์ของฉันเช่นกัน ลีนุกซ์ไม่สามารถจัดการกับการสลับสับเปลี่ยนได้ดีพอที่จะทำให้คุณสามารถฆ่าโปรแกรมที่ละเมิดได้ด้วยตนเอง มันมีความน่าเชื่อถือมากกว่าที่จะให้ OOM killer ทำเอง แน่นอนว่านี่คือการออกแบบที่น่ากลัว - สิ่งที่ดีกว่าคือการหยุดกระบวนการที่กระทำผิดแทนที่จะฆ่าและให้ GUI ที่ดีเพื่อให้คุณทำน้ำแข็งให้ละลายหรือฆ่า แต่ ... Linux
Timmmm

3
ในที่สุดคำตอบที่เหมาะสมและตรงกับประสบการณ์ของฉันเอง ฉันไม่สามารถเข้าใจเหตุผลหลัง "คุณต้องมีพาร์ทิชัน swap" ยกเว้นถ้าเราต้องการไฮเบอร์เนตระบบ
Tarik

5

จำเป็นต้องมีการสลับเพื่อไฮเบอร์เนตมิฉะนั้นคุณสามารถทำได้โดยไม่ต้องปรับ


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

@ mdpc ไม่จำเป็นต้อง; มันจะต้องมีขนาดใหญ่พอที่จะเก็บ ram ที่ใช้ซึ่งไม่สามารถละทิ้งได้ (เช่นข้อมูลที่สำรองไว้โดยไฟล์บนดิสก์)
psusi

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

3

เป็นความเข้าใจผิดที่พบโดยทั่วไปว่าการมีพื้นที่สว็อปมีผลกระทบในทางลบต่อประสิทธิภาพการทำงาน สิ่งที่ส่งผลกระทบอย่างรุนแรงต่อประสิทธิภาพการทำงานไม่มี RAM เพียงพอ พื้นที่สวิตต่อไม่มีผลเสียต่อประสิทธิภาพเว้นแต่คุณจะไม่ใส่ใจกับความน่าเชื่อถือ มันอาจส่งผลดีต่อประสิทธิภาพการทำงานแม้ว่าคุณคิดว่าคุณมี RAM เพียงพอ (และไม่มีรายงานการขาดแคลน RAM)

โดยพื้นฐานแล้วมีสามกรณีที่ต้องพิจารณา:

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

  • 2: เหมือนกับข้างต้นยกเว้นว่าคุณมี RAM ไม่เพียงพอสำหรับบัฟเฟอร์แคชที่จะมีประสิทธิภาพอย่างสมบูรณ์

  • 3: RAM ไม่เพียงพอที่จะจัดเก็บแอปพลิเคชันของคุณที่ใช้หน้าเว็บ

ในกรณีที่ 1 ซึ่งควรเป็นบรรทัดฐานสำหรับเครื่องที่ใช้งานจริงมีพื้นที่สว็อปหรือไม่เปลี่ยนแปลงอะไรเลย (อย่างน้อยในระบบปฏิบัติการ Linux ที่ใช้ Linux และระบบปฏิบัติการอื่น ๆ ที่ใช้หน่วยความจำเกินจริง)

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

ในกรณีที่ 3 การมีพื้นที่สว็อปช่วยให้แอปพลิเคชันสามารถทำงานต่อได้โดยมีค่าใช้จ่ายในการลดประสิทธิภาพเนื่องจากการแบ่งหน้า ในทางกลับกันการขาดพื้นที่สว็อป (หรือมีขนาดใหญ่พอ) จะทำให้แอปพลิเคชันหยุดทำงานแบบสุ่ม นอกจากนี้ขึ้นอยู่กับการตั้งค่าระบบปฏิบัติการ OOM killer อาจตัดสินใจฆ่าแอปพลิเคชันที่หิวมากที่สุดของหน่วยความจำหากมีความต้องการ RAM ที่แข็งแกร่งโดยไม่ต้องให้โอกาสในการบันทึกข้อมูลสำคัญ (ของคุณ)

กรณีหลังนี้เป็นสิ่งที่คุณต้องเลือก มีบางกรณีใช้งานที่มีกระบวนการถูกฆ่าตายเป็นตัวเลือกที่ต้องการเช่นระบบที่เวลาตอบสนองเป็นสิ่งสำคัญและการสูญเสียการทำธุรกรรม / กระบวนการไม่เป็นเรื่องใหญ่

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


1

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

บทความต่อไปนี้อธิบายวิธีการทำอย่างละเอียด:


อะไรคือความแตกต่างระหว่างไฟล์ swap และ swap partition? และจะเกิดอะไรขึ้นถ้าฉันไม่มี
Mihai Bratulescu

ความเร็วในการเข้าถึง ....
mdpc

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

2
@mdpc ค่าใช้จ่ายในระบบไฟล์นั้นเล็กน้อยเริ่มต้นจากเคอร์เนล 2.6 เมตาดาต้าแคชและรหัสระบบไฟล์ถูกข้าม บล็อกดิสก์ดิบสามารถเข้าถึงได้โดยตรง
jlliagre

1
@mdpc ไฟล์ swap ไม่ควรมีการแยกส่วนอย่างมีนัยสำคัญถ้าหากคุณไม่ได้สร้างเมื่อเร็ว ๆ นี้ ยิ่งไปกว่านั้นการเข้าถึง swap นั้นไม่ค่อยต่อเนื่อง แต่ส่วนใหญ่จะสุ่มเนื่องจากความต้องการในการสลับหน้าเพื่อให้การกระจายตัวไม่น่าจะเป็นปัญหา
jlliagre

0

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

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

บางโปรแกรมยืนยันในการจัดสรร (แต่ไม่ได้ใช้) พื้นที่สว็อปบางรายการเป็นโปรแกรมฐานข้อมูลถ้าฉันจำได้ อีกครั้งโดยไม่มีพื้นที่สว็อปคุณอาจ จำกัด โปรแกรมที่อาจทำงานอยู่

ในที่สุดดู SWAP คือราคาถูกในความจริงที่ว่าคุณไม่จำเป็นต้องสำรองพื้นที่ (ฉันหวังว่าคุณจะเป็นหนึ่งในผู้ดูแลระบบดีเด่นเหล่านี้ที่สำรองระบบของพวกเขา)

ดังนั้นสร้างมันขึ้นมา

กฎง่ายๆที่ฉันเคยเป็น 2 * ขนาดหน่วยความจำ ..... แต่ตอนนี้บอกว่าฉันโอเคในหลายกรณีที่มีขนาดหน่วยความจำ 1 * แต่โดยทั่วไปใช้ 1.5 * (ขนาดหน่วยความจำ) คุณไม่ต้องสร้างจำนวนมาก แต่ฉันจะ ... โดยเฉพาะอย่างยิ่งหากมีงานประเภทใดที่คุณกำลังทำอยู่

โอ้ใช่และสำหรับการไฮเบอร์เนตการสลับนั้นจำเป็นต้องมีเพื่อเก็บภาพรวมของหน่วยความจำ และขนาดถ้าคุณกำลังพิจารณา h8ibernation ควรเป็นอย่างน้อย (1 * หน่วยความจำขนาด) + 100MB .. 100 MB เป็นค่าใช้จ่ายที่เป็นไปได้ในกระบวนการ


ดังนั้น ... สำหรับบางโปรแกรมที่คุณต้องการพื้นที่สว็อปเพื่อให้ทำงานได้หรือไม่ ฉันไม่กังวลว่า RAM จะใช้หมด 8GB (แม้ว่าจะเป็นไปไม่ได้)
Mihai Bratulescu

กฎขนาดหน่วยความจำ 2x เก่าและล้าสมัยแล้ว แต่การมีการแลกเปลี่ยนบางอย่างไม่ใช่ความคิดที่เลว มันไม่ใช้พื้นที่ดิสก์มากเกินไปดังนั้นคุณจะไม่พลาดพื้นที่ที่ใช้ โดยปกติจะไม่ใช้หากคุณมี RAM เพียงพอและอนุญาตให้คุณถ่ายโอนข้อมูลหลักของการแลกเปลี่ยนของคุณ
Hennes

@Hennes - อ่านบันทึกของฉัน ... "เคยเป็น"
mdpc

0

การสลับ Linux ดูเหมือนจะมีความต้องการค่อนข้างยากทันทีที่มีความกดดันด้านหน่วยความจำ อาการคือถ้าเกือบทุก RAM ถูกใช้โดยกระบวนการที่ใช้งานอยู่ระบบจะหยุดการทำงานอย่างหนักและฮาร์ดดิสกำลังทำงานอย่างหนัก

ทำไม?

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

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับปัญหาละเอียดนี้ดูโพสต์บล็อกนี้

สรุป : มีการแลกเปลี่ยนเสมอ

และสำหรับขนาดที่เป็นแนวทางคร่าวๆให้ใช้บางอย่างระหว่าง 4 ถึง 8 GB แม้สำหรับระบบที่มี RAM จำนวนมากสมมติว่าคุณไม่จำศีล สำหรับรายละเอียดเพิ่มเติมโปรดดูที่เอกสารของ Red Hat เกี่ยวกับพื้นที่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.