ค่าที่เหมาะสมของ vm.swappiness คืออะไรเมื่อใช้ zram?


13

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

มีใครสับสนรอบตัวด้วยพูดตั้งvm.swappinessเป็น 100 ในขณะที่ใช้ zram? สิ่งนี้จะเป็นที่ต้องการหรือไม่?

sysctl -w vm.swappiness=100

2
นี่เป็นคำถามที่ยอดเยี่ยมและฉันคิดว่าการเปรียบเทียบบางอย่างเพื่อลบความคิดเห็นและรับข้อเท็จจริง ...
Elder Geek

ความคิดที่ดีและ zram อาจได้รับการปรับปรุงตั้งแต่ปี 2012 เมื่อฉันใช้มันครั้งสุดท้าย :-)
Huygens

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

คำตอบ:


2

ฉันจะไม่แนะนำให้เพิ่มความรวดเร็วมากขึ้น กลไกที่พบบ่อยในเคอร์เนลคือมันจะใส่เพจ (หน่วยความจำจำนวนมาก) ในการสลับเพื่อเพิ่มหน่วยความจำบางส่วนสำหรับการทำงานอื่น ๆ

"ปัญหา" ครั้งแรกเมื่อเคอร์เนลต้องการให้มีการปล่อยหน้า n ให้, m (ด้วย m <n, m คือจำนวนหน้าที่บีบอัดที่ต้องการเก็บ n) ถูกสร้างขึ้นใหม่ใน RAM ฉันไม่แน่ใจว่าสามารถรบกวนเคอร์เนลหรือ ไม่.

จากนั้นเมื่อคุณมีหน้าในการสลับเป็นไปได้ว่าคุณสามารถใช้แอปพลิเคชันในภายหลังด้วยบางหน้าในการสลับ สิ่งที่เคอร์เนลทำคือนำหน้าเหล่านั้นกลับสู่หน่วยความจำกายภาพ แต่ไม่ได้ลบออกจากการแลกเปลี่ยน (ซึ่งมีการแลกเปลี่ยนมาตรฐานสามารถเห็นได้ว่าเป็นการแคชดังนั้นเมื่อแอปพลิเคชันกลับมาอยู่ในพื้นหลังเคอร์เนลไม่จำเป็นต้องเขียนหน้าเหล่านั้น ในการสลับช้า) อย่างไรก็ตามด้วย zram มันอาจไม่ใช่กลอุบายเพราะคุณมีหน่วยความจำแล้วหน้า m ใน zram + หน้า n ที่อยู่ในหน่วยความจำ!

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

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


zram ให้อุปกรณ์บล็อก RAM ทุกอย่างที่เขียนไปยังอุปกรณ์บล็อกเหล่านี้จะถูกบีบอัด หากใช้อุปกรณ์บล็อก zram เป็น swap เมื่อระบบพยายามย้ายส่วนต่าง ๆ ของหน่วยความจำเพื่อสลับอุปกรณ์นั้นจะเป็นการย้ายหน่วยความจำอย่างมีประสิทธิภาพจากส่วนหนึ่งของ RAM ไปยังอีกส่วนหนึ่งยกเว้นว่าข้อมูลจะถูกบีบอัดก่อนที่จะถูกคัดลอกไปยังปลายทาง สิ่งนี้ทำงานอย่างมีประสิทธิภาพเป็นกลไกการบีบอัดหน่วยความจำราคาถูกเพื่อปรับปรุงการตอบสนองในระบบที่มีหน่วยความจำ จำกัด ... Zram เริ่มทำงานตั้งแต่ Linux 2.6.33 ใน 3.14 zram ถูกย้ายออกจากการจัดเตรียมไปยังไดรเวอร์ / block / zram
Elder Geek

1
@ElderGeek แน่นอน! และฉันจะยกตัวอย่างเพื่ออธิบายสาเหตุที่ไม่สมบูรณ์ เคอร์เนลจะพยายามลบ RAM ขนาด 64MB โดยใส่ไว้ในการแลกเปลี่ยน zram บีบอัดก้อนขนาด 64MB ตอนนี้ 32MB ผลลัพธ์คือหน่วยความจำลดลง 32MB และไม่ใช่ 64MB ตอนนี้จะเกิดอะไรขึ้นเมื่อแอปพลิเคชันต้องการหน่วยความจำ 64MB กลับมาในสำเนาของเคอร์เนล (และไม่ย้าย) หน่วยความจำกลับในหน่วยความจำ ตอนนี้คุณมี 64MB ใน RAM + 32MB ใน zram ทำไมต้องคัดลอก เพราะเคอร์เนลแคชหน้าตามที่ฉันอธิบายในคำตอบของฉัน พฤติกรรมทั้งสองนั้นไม่เหมาะ และเมื่อหน่วยความจำไม่สามารถบีบอัดได้ดีมันยิ่งแย่ลงไปอีก
Huygens

ยังอยู่ในช่วงการทดสอบ ฉันคิดว่าต้องมีวิธีปรับแต่งอัลกอริทึมการแคชที่ zram ใช้เพื่อเพิ่มหน้าที่บีบอัดเมื่อมันถูกคัดลอกกลับไปยัง RAM ที่ไม่บีบอัด
Elder Geek

ฉันได้ลองหลายครั้งจนถึงปี 2012 ในเวลานั้นคอมพิวเตอร์ของฉันถูก จำกัด ที่ RAM 1GB และในขณะที่ท่องอินเทอร์เน็ตมันก็ช้าอย่างเจ็บปวด (โดยปกติฉันเปิด 10-50 แท็บ) แต่ตั้งแต่นั้นมาฉันก็ไม่เคยใช้มันอีกเลย ฉันมี RAM มากเกินพอที่ฉันจะไม่ใช้ swap อีกต่อไป เมื่อใช้ zram กับ Firefox เมื่อก่อนฉันเริ่ม "สลับ" อย่างรวดเร็วเนื่องจากได้รับ RAM ขนาดเล็กที่ฉันมี และอย่างรวดเร็วฉันมีระบบที่ไม่ตอบสนองด้วยการล่มจำนวนมาก หากปราศจาก Zram มันจะช้าอย่างเจ็บปวด แต่ก็เสถียรอย่างน้อย ปัญหาของฉันคืออาจเป็นไปได้ว่าการบีบอัด / ยกเลิกการบีบอัดหน้าหน่วยความจำอย่างต่อเนื่อง
Huygens

ใช่ผลลัพธ์ของฉันค่อนข้างคล้ายกันในระบบที่มี 8GB ฉันสามารถบังคับ OOM ได้ด้วยการเปิดตัว VM หลายรายการระหว่างการเข้ารหัส คุณมีประสบการณ์กับ zswap ไหม? ดูเหมือนว่าเป็นทางเลือกที่ทำงานได้ตามสิ่งที่ฉันอ่าน
Elder Geek

2

คำตอบสั้น ๆ : vm.swappiness=100เป็นค่าที่เหมาะสมสำหรับ zram (อย่างน้อยใน Debian Stretch กับ Linux 4.9 ฉันเชื่อว่ามันคุ้มค่าที่สุด)

ฉันแล้วทดสอบvm.swappiness=100สำหรับฉัน

ฉันคิดว่าคุณสามารถทำการทดสอบอย่างง่าย ๆเพื่อให้แน่ใจว่าค่าใดดีที่สุดสำหรับคุณ

นอกจากนี้ฉันได้สร้างโปรแกรมง่ายๆเพื่อทดสอบคำถามนี้ x บนเครื่องของฉันมีvm.swappinessค่าต่ำมาก(เช่นvm.swappiness=1) จะทำให้เกิดปัญหาการตอบสนองที่ชัดเจน

เกี่ยวกับSwapCachedใน/proc/meminfo:

ก่อนอื่นให้ลองใช้vm.page-cluster=0วิธีนี้อาจลดความไร้ประโยชน์SwapCachedจากการสลับหน้า

SwapCached สามารถเพิ่มความเร็วของ zram ได้เช่นเดียวกับอุปกรณ์ที่ไม่ใช้ zram

SwapCached สามารถนำมาใช้ซ้ำได้ (ฟรี) เมื่อจำเป็น:

./linux-4.9/mm$ grep -rn delete_from_swap_cache
memory-failure.c:715:   delete_from_swap_cache(p);
shmem.c:1115:       delete_from_swap_cache(*pagep);
shmem.c:1645:            * unaccounting, now delete_from_swap_cache() will do
shmem.c:1652:               delete_from_swap_cache(page);
shmem.c:1668:       delete_from_swap_cache(page);
vmscan.c:673:       __delete_from_swap_cache(page);
swap_state.c:137:void __delete_from_swap_cache(struct page *page)
swap_state.c:218:void delete_from_swap_cache(struct page *page)
swap_state.c:227:   __delete_from_swap_cache(page);
swapfile.c:947:         delete_from_swap_cache(page);
swapfile.c:987: delete_from_swap_cache(page);
swapfile.c:1023:            delete_from_swap_cache(page);
swapfile.c:1571:            delete_from_swap_cache(page);
./linux-4.9/mm$ 

0

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


ฉันพบว่า swap ที่ zram ที่สำรองไว้นั้นมีประโยชน์มากเมื่อระบบมีหน่วยความจำไม่เพียงพอ มันช่วยฉันสองสามครั้งจากการติดอยู่ในนรกและต้องรีสตาร์ท (ฉันกำลังวิเคราะห์ชุดข้อมูลขนาดใหญ่ดังนั้นฉันต้องการหน่วยความจำทั้งหมด 24 GB ของมัน) ฉันแค่สงสัยว่าvm.swappinessค่าที่ได้รับการปรับสำหรับการแลกเปลี่ยนดิสก์สำรองและถ้าฉันควรเปลี่ยนถ้าฉันส่วนใหญ่จะใช้แลกเปลี่ยนสลับ Zram
Ryan C. Thompson

1
"เร็วขึ้น" การบีบอัดข้อมูลบน Fly นั้นทำงานได้ดีกว่า direct I / O ของดิสก์มานานกว่าทศวรรษที่ผ่านมา (มันจะไม่เร็วกว่าการเข้าถึงหน่วยความจำ - นั่นไม่ใช่ประเด็น)
symcbean

symcbean คุณลืม "เมื่อเทียบกับความเร็วหน่วยความจำ" ความขัดแย้งอยู่ที่ไหน
Alexander

ฉันคิดว่าประเด็นของ symcbean คือเป้าหมายของหน้าหน่วยความจำที่ถูกบีบอัด (zram) คือการเปลี่ยนการแลกเปลี่ยนเป็นสื่อกายภาพ เหตุผลที่มันไม่ "เป็นธรรมชาติในการบีบอัดหน่วยความจำโดยตรง" เพราะมันจะเต็มไปด้วยความซับซ้อนสำหรับแอปพลิเคชันที่จะต้องกำหนดว่าส่วนใดของหน่วยความจำที่สามารถบีบอัดและเมื่อ; ระบบย่อย VM เป็นสถานที่ที่ใช้งานได้ง่ายกว่ามาก ปริมาณงานที่ได้รับประโยชน์จาก zram มีหน้าที่ไม่ได้อยู่ในชุดการทำงานและสามารถบีบอัดได้ง่าย
Daniel Papasian
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.