อ่าน 5 นาที
zswap
zswap เป็น คุณสมบัติ ของเคอร์เนล Linux ที่ให้ แคชแบบ เขียนกลับ ที่บีบอัด สำหรับหน้าหน่วย ความจำ ที่สลับออก ซึ่งเป็นรูปแบบหนึ่งของ การบีบอัดหน่วยความจำเสมือน แทนที่จะย้าย...
zswap
| zswap | |
|---|---|
ภาพหน้าจอแสดงการทำงานของ zswap บนopenSUSE Tumbleweed | |
| นักพัฒนา | เซธ เจนนิงส์ และคนอื่นๆ |
| ปล่อย | 2 กันยายน 2556 (Linux 3.11) |
| เขียนเป็น | ซี |
| ระบบปฏิบัติการ | ลินุกซ์ |
| พิมพ์ | คุณสมบัติของเคอร์เนลลินุกซ์ |
| ใบอนุญาต | จีเอ็นยู จีพีแอล |
| เว็บไซต์ | เคอร์เนล.org |
zswapเป็น คุณสมบัติ ของเคอร์เนล Linuxที่ให้แคชแบบเขียนกลับ ที่บีบอัด สำหรับหน้าหน่วย ความจำ ที่สลับออก ซึ่งเป็นรูปแบบหนึ่งของ การบีบอัดหน่วยความจำเสมือนแทนที่จะย้ายหน้าหน่วยความจำไปยังอุปกรณ์สลับเมื่อต้องสลับออก zswap จะบีบอัดหน้าเหล่านั้นแล้วจัดเก็บไว้ในพูลหน่วยความจำ ที่จัดสรรแบบไดนามิกใน RAMของระบบ ด้วยวิธีนี้ การเขียนกลับไปยังอุปกรณ์สลับจริงจะถูกเลื่อนออกไปหรือหลีกเลี่ยงได้อย่างสมบูรณ์ ส่งผลให้ภาระ I/Oลดลงอย่างมากสำหรับระบบที่ต้องการการสลับ ข้อเสียคือต้องใช้ รอบการทำงาน ของ CPU เพิ่มเติม เพื่อทำการบีบอัด[ 1 ] [ 2 ] [ 3 ]
เนื่องจากการลด I/O ทำให้ zswap มีข้อดีสำหรับอุปกรณ์ต่างๆ ที่ใช้หน่วยความจำแฟลชรวมถึงอุปกรณ์ฝังตัว เน็ตบุ๊กและอุปกรณ์ฮาร์ดแวร์ระดับล่างที่คล้ายกัน ตลอดจนอุปกรณ์อื่นๆ ที่ใช้ไดรฟ์โซลิดสเตต (SSD) สำหรับจัดเก็บข้อมูล หน่วย ความจำแฟลชมีอายุการใช้งานจำกัดเนื่องจากคุณสมบัติของมันดังนั้นการหลีกเลี่ยงการใช้เป็นพื้นที่สวอปจะช่วยยืดอายุการใช้งาน[ 4 ]
ภายใน
zswap ถูกรวมเข้ากับระบบ หน่วยความจำเสมือนของเคอร์เนล Linux โดยใช้APIที่frontswap จัดให้ ซึ่งเป็นกลไกของเคอร์เนลที่สร้างนามธรรมของพื้นที่จัดเก็บข้อมูลประเภทต่างๆ ที่สามารถใช้เป็นพื้นที่สลับได้[ 5 ]ด้วยเหตุนี้ zswap จึงทำงานเป็นไดรเวอร์แบ็กเอนด์สำหรับ frontswap โดยจัดหาอุปกรณ์ pseudo-RAM ที่เปิดเผยภายใน กล่าวอีกนัยหนึ่ง API ของ frontswap อนุญาตให้ zswap ดักจับหน้าหน่วยความจำในขณะที่กำลังสลับออก และดักจับข้อผิดพลาดของหน้าสำหรับหน้าที่สลับไปแล้ว การเข้าถึงสองเส้นทางนี้ทำให้ zswap สามารถทำหน้าที่เป็นแคชแบบเขียนกลับที่บีบอัดสำหรับหน้าที่สลับแล้ว[ 1 ] [ 6 ]
ภายใน zswap ใช้โมดูล การบีบอัดที่จัดเตรียมโดย API การเข้ารหัสของเคอร์เนล Linux ซึ่งทำให้สามารถถ่ายโอนงานการบีบอัดจาก CPU หลักไปยังตัวเร่ง การบีบอัดฮาร์ดแวร์ใด ๆ ที่เคอร์เนล Linux รองรับได้ การเลือกโมดูลการบีบอัดที่ต้องการสามารถทำได้แบบไดนามิกในระหว่างการบูตผ่านพารามิเตอร์การบูตเคอร์เนลzswap.compressorหากไม่ได้ระบุไว้ จะเลือก การบีบอัด Lempel–Ziv–Oberhumer (LZO) ตั้งแต่เวอร์ชัน 3.13 ของเคอร์เนล Linux เป็นต้นไป zswap จำเป็นต้องเปิดใช้งานอย่างชัดเจนโดยการตั้งค่าพารามิเตอร์การบูตเคอร์เนลzswap.enabled [ 1 ] [ 2 ] [ 4 ] อย่างไรก็ตามสามารถเปิดใช้งานโดยค่าเริ่มต้นเมื่อกำหนดค่าเคอร์เนลด้วยCONFIG_ZSWAP_DEFAULT_ON=yหรือสามารถเปิดใช้งานได้ทุกเมื่อผ่าน อินเทอร์เฟ ซ sysfs : [ 7 ]
echo 1 > /sys/module/zswap/parameters/enabled
ขนาดสูงสุดของพูลหน่วยความจำที่ใช้โดย zswap สามารถกำหนดค่าได้ผ่านพารามิเตอร์sysfs max_pool_percentซึ่งระบุเปอร์เซ็นต์สูงสุดของ RAM ระบบทั้งหมดที่พูลสามารถครอบครองได้ พูลหน่วยความจำไม่ได้ถูกจัดสรรไว้ล่วงหน้าตามขนาดสูงสุดที่กำหนดค่าไว้ แต่จะขยายและหดตัวตามความจำเป็น เมื่อถึงขนาดพูลสูงสุดที่กำหนดค่าไว้ หรือเมื่อการขยายพูลเป็นไปไม่ได้เนื่องจาก สภาวะ หน่วยความจำไม่ เพียงพอ หน้าที่ถูกสลับจะถูกนำออกจากพูลหน่วยความจำไปยังอุปกรณ์สลับตาม หลักการ ใช้งานล่าสุดน้อยที่สุด (LRU) วิธีนี้ทำให้ zswap เป็นแคชสลับที่แท้จริง เนื่องจากหน้าแคชที่เก่าที่สุดจะถูกนำออกไปยังอุปกรณ์สลับเมื่อแคชเต็ม ทำให้มีพื้นที่ว่างสำหรับหน้าสลับใหม่กว่าที่จะถูกบีบอัดและแคช[ 1 ] [ 4 ] [ 8 ]
zbud เป็น ตัวจัดสรรหน่วยความจำเฉพาะทางที่ใช้ภายในโดย zswap สำหรับจัดเก็บหน้าหน่วยความจำที่ถูกบีบอัด โดยเขียนขึ้นใหม่จากตัวจัดสรร zbud ที่ใช้โดยzcache ของOracle [ 9 ]ซึ่งเป็นการใช้งานการบีบอัดหน่วยความจำเสมือนอีกรูปแบบหนึ่งสำหรับเคอร์เนล Linux ภายใน zbud ทำงานโดยการจัดเก็บหน้าหน่วยความจำที่ถูกบีบอัดได้สูงสุดสองหน้า (" buddies " ซึ่งเป็นที่มาของชื่อตัวจัดสรร) ต่อหน้าหน่วยความจำทางกายภาพ ซึ่งมีข้อดีเนื่องจากการรวมและการใช้พื้นที่ว่างซ้ำได้ง่าย และมีข้อเสียเนื่องจากอาจมีการใช้หน่วยความจำน้อยลง อย่างไรก็ตาม ด้วยการออกแบบของมัน zbud ไม่สามารถจัดสรรพื้นที่หน่วยความจำได้มากกว่าที่จะถูกครอบครองโดยหน้าหน่วยความจำที่ไม่ได้บีบอัดในตอนแรก[ 3 ] [ 10 ]
zsmallocเป็นตัวจัดสรรหน่วยความจำอีกตัวหนึ่งที่ใช้โดย zswap ซึ่งออกแบบมาเพื่อความหนาแน่นของหน่วยความจำที่สูงกว่า zbud [ 11 ] zsmalloc ได้เข้ามาแทนที่ zbud โดยตรงในฐานะตัวจัดสรรหน่วยความจำตั้งแต่เวอร์ชัน 6.18 ของเคอร์เนล Linux ซึ่งวางจำหน่ายเมื่อวันที่ 1 ธันวาคม พ.ศ. 2568 [ 12 ] [ 13 ]
ประวัติศาสตร์
ทั้ง zswap และ zbud ถูกสร้างขึ้นโดย Seth Jennings การประกาศต่อสาธารณะครั้งแรกเกิดขึ้นในเดือนธันวาคม 2012 และการพัฒนายังคงดำเนินต่อไปจนถึงเดือนพฤษภาคม 2013 ซึ่งในขณะนั้นโค้ดเบสมีความสมบูรณ์แล้ว แม้ว่าจะยังคงมีสถานะเป็นฟีเจอร์เคอร์เนลแบบทดลองอยู่ก็ตาม[ 14 ] [ 15 ]
zswap (พร้อมกับ zbud) ถูกรวมเข้ากับเคอร์เนล Linux หลักในเคอร์เนลเวอร์ชัน 3.11 ซึ่งเผยแพร่เมื่อวันที่ 2 กันยายน 2013 [ 4 ] [ 16 ]
ตั้งแต่เวอร์ชัน 3.15 ของเคอร์เนล Linux ซึ่งเผยแพร่เมื่อวันที่ 8 มิถุนายน 2014 zswap รองรับอุปกรณ์สวอปหลายตัวอย่างถูกต้อง[ 17 ] [ 18 ]
ตั้งแต่เวอร์ชัน 6.8 ของเคอร์เนล Linux ซึ่งเผยแพร่เมื่อวันที่ 11 มีนาคม 2024 zswap รองรับการปิดใช้งานการเขียนกลับสำหรับ cgroup เฉพาะ[ 19 ]
ตั้งแต่เวอร์ชัน 6.18 ของเคอร์เนล Linux ซึ่งเผยแพร่เมื่อวันที่ 1 ธันวาคม พ.ศ. 2568 zswap ใช้ zsmalloc โดยตรงและปิดใช้งานการกำหนดค่า sysfs การบีบอัด zpool [ 12 ]
ทางเลือกอื่นๆ
หนึ่งในทางเลือกอื่นนอกเหนือจาก zswap คือzramซึ่งมีกลไก "สลับหน้าหน่วยความจำที่บีบอัดไปยัง RAM" ที่คล้ายคลึงกันแต่ก็แตกต่างจากเคอร์เนลของลินุกซ์
ความแตกต่างหลักคือ zram ให้บริการอุปกรณ์บล็อก แบบบีบอัด โดยใช้ RAM สำหรับจัดเก็บข้อมูล ซึ่งทำหน้าที่เป็นอุปกรณ์สวอปแบบปกติและแยกต่างหาก
เมื่อเปรียบเทียบกันแล้ว zswap ทำหน้าที่เป็นแคชแบบ RAM สำหรับอุปกรณ์สวอป ซึ่งทำให้ zswap มี กลไก การขับไล่สำหรับหน้าสวอปที่ใช้งานน้อยกว่า ซึ่ง zram ขาดไปจนกระทั่งมีการแนะนำCONFIG_ZRAM_WRITEBACKในเคอร์เนลเวอร์ชัน 4.14 อย่างไรก็ตาม เนื่องจากการออกแบบของมัน จำเป็นต้องมีอุปกรณ์สวอปที่มีอยู่แล้วอย่างน้อยหนึ่งตัวเพื่อให้สามารถใช้ zswap ได้[ 20 ]
ดูเพิ่มเติม
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ zswap
zswap เป็น คุณสมบัติ ของเคอร์เนล Linux ที่ให้ แคชแบบ เขียนกลับ ที่บีบอัด สำหรับหน้าหน่วย ความจำ ที่สลับออก ซึ่งเป็นรูปแบบหนึ่งของ การบีบอัดหน่วยความจำเสมือน แทนที่จะย้าย...
ภายใน
zswap ถูกรวมเข้ากับระบบ หน่วยความจำเสมือน ของเคอร์เนล Linux โดยใช้ API ที่ frontswap จัดให้ ซึ่งเป็นกลไกของเคอร์เนลที่สร้างนามธรรมของพื้นที่จัดเก็บข้อมูลประเภทต่างๆ ที่สามารถใช้เป็นพื้นที่สลับได้ [ 5 ] ด้วยเหตุนี้ zswap จึงทำงานเป็นไดรเวอร์แบ็กเอนด์สำหรับ...
ประวัติศาสตร์
ทั้ง zswap และ zbud ถูกสร้างขึ้นโดย Seth Jennings การประกาศต่อสาธารณะครั้งแรกเกิดขึ้นในเดือนธันวาคม 2012 และการพัฒนายังคงดำเนินต่อไปจนถึงเดือนพฤษภาคม 2013 ซึ่งในขณะนั้น โค้ดเบส มีความสมบูรณ์แล้ว แม้ว่าจะยังคงมีสถานะเป็นฟีเจอร์เคอร์เนลแบบทดลองอยู่ก็ตาม [ 14 ]...
ทางเลือกอื่นๆ
หนึ่งในทางเลือกอื่นนอกเหนือจาก zswap คือ zram ซึ่งมีกลไก "สลับหน้าหน่วยความจำที่บีบอัดไปยัง RAM" ที่คล้ายคลึงกันแต่ก็แตกต่างจากเคอร์เนลของลินุกซ์