มีนักสะสมขยะที่คำนึงถึงการเพจหรือไม่


12

การรวบรวมขยะต้องไปที่วัตถุทั้งหมดที่ยังมีชีวิตอยู่เพื่อค้นหาหน่วยความจำที่สามารถเรียกคืนได้ (มีหลายชั่วอายุคนที่ล่าช้าไปนิดหน่อย)

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

ความเป็นไปได้อีกอย่างคือเมื่อ OS ต้องการลบหน่วยความจำออกจากกระบวนการ GC จะถูกถามก่อนว่ามีเพจที่สามารถยกเลิกได้หรือไม่โดยไม่ต้องทำการเพจออก GC อาจใช้วัตถุเคลื่อนที่จากหน้าเป็นส่วนใหญ่ดังนั้นสามารถล้างหน้าภายในระยะเวลาที่ระบบปฏิบัติการต้องการสำหรับหน้า

แต่ฉันไม่สามารถเรียกคืนตัวรวบรวมข้อมูลขยะใด ๆ ที่ทำงานร่วมกับระบบเพจจิ้ง OS ที่ขับเคลื่อนการสั่งซื้อที่ GC ทำงานได้


ไม่ใช่เพจจิ้ง แต่ruby enterprise edition gc ถูกเขียนขึ้นใหม่เพื่อลดผลกระทบของ gc ที่มีต่อการคัดลอกบนหน้าการเขียนโดยการย้ายข้อมูลเมตาของออบเจ็กต์ไปยังหน้าอื่น ๆ
user1937198


น่าประหลาดใจ afaik / afaict, เกือบทั้งหมด (?) วรรณกรรม gc ดูเหมือนจะไม่วิเคราะห์เพจจิ้งระบบปฏิบัติการยกเว้นอย่างเป็นนามธรรม ความคิด: ระบบการจัดสรรหน่วยความจำที่ติดตามตัวชี้ระหว่างวัตถุในโครงสร้างที่แยกจากวัตถุนั้นอาจมีความเป็นมิตรกับท้องถิ่น / การเพจเนื่องจากมีเพียงตัวชี้เท่านั้นที่เคลื่อนที่ภายใน (ระหว่าง gc) ในพื้นที่ที่มีการบีบอัดแน่นแทนที่จะเป็นวัตถุทั้งหมดของ ขนาดที่แตกต่างกันซึ่งอาจกระจายออกไปในหน่วยความจำ (และบางอันถูกเข้าถึงไม่บ่อยนักและเพจจิ้ง) อาจมีค่าใช้จ่ายเล็กน้อย แต่อาจใช้การประหยัดโดยรวมขึ้นอยู่กับการใช้งาน
vzn

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

1
รูปแบบที่ฉันใช้ในกรณีที่รายการข้อมูลมีขนาดเล็กทั้งหมดเมื่อเทียบกับขนาดหน่วยความจำของฉันคือให้แต่ละรายการข้อมูลประกอบด้วยส่วนหัวที่มีขนาดคงที่ซึ่งได้รับการจัดสรรแบบตัวต่อตัวและข้อมูลขนาดตัวแปรซึ่งจะ ได้รับการจัดสรรกลับไปด้านหน้า ตารางเก็บแมปลอจิกที่อยู่อันสั้นกับที่อยู่ทางกายภาพและจำนวนพื้นที่ว่างในแต่ละอัน หลังจากการสแกนแต่ละครั้งมันจะระบุว่ามีพื้นที่ว่างเท่าใด การอ้างอิงถูกเก็บไว้ในแฟลชและแต่ละการอ้างอิงมีรูปแบบ "รายการ # 3 ของตรรกะอัน # 7" วัฏจักร GC จะคัดลอกข้อมูลสดทั้งหมดจากอันก้อนหนึ่งไปยังอันใหม่และ ...
supercat

คำตอบ:


8

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

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

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

ความคิดแบบนี้เป็นเรื่องธรรมดาและอาจอธิบายไว้ในบทความบางเรื่อง แต่ฉันไม่จำมันออกมือ ฉันคิดว่าเอกสารเริ่มต้นของ Lisp GC มีแนวคิดเหล่านี้อยู่บ้าง (เช่นควรติดตาม car หรือ cdr ก่อนหรือไม่)

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

จากนั้นคุณมีการโต้ตอบทั้งหมดของ generational GC กับระบบแคชที่ถูกกล่าวถึงในคำถามก่อนหน้านี้: ตัวรวบรวมขยะทั่วไปคือแคชที่เป็นมิตรโดยธรรมชาติหรือไม่?

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


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

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

ฉันยังสงสัย / ไม่แน่ใจ ดูเหมือนว่าโดยสังเขปพื้นที่เก่าจะมีสถานที่ไม่ดีและ / หรือมีความเกี่ยวข้องกันเมื่อมีการเริ่มต้นวงจรการคัดลอก / gc ท้องถิ่นเกี่ยวข้องกับการอ่าน (จากพื้นที่เก่า) และเขียน (ไปยังพื้นที่ใหม่) ในการวิเคราะห์มันต้องศึกษาพฤติกรรมของ gestalt / ฉุกเฉิน อาจเป็นไปได้ว่าสิ่งนี้สามารถศึกษาได้อย่างมีประสิทธิภาพ / ถูกต้อง / สมจริงและไม่ได้มีเหตุผลมากนัก
vzn

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

ขออภัย ... สับสนคำถามนี้กับคำถามอื่นที่มีมากกว่านี้
babou

8

Emery Berger, Matthew Hertz และ Yi Feng ได้ทำสิ่งนี้

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

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

นี่คือวิดีโอการพูดคุยของ Emery เกี่ยวกับเรื่องนี้และเขาเขียนบทความขยะโดยไม่ต้องเพจจิ้ง

ด้วยเหตุผลบางอย่างดูเหมือนจะไม่สามารถใช้งานได้ในภายหลังหรือการใช้งาน "โลกแห่งความจริง" ในตอนท้ายของบทความกล่าวว่า“ เรากำลังพัฒนาชุดวิธีการรวบรวมชุดบุ๊คมาร์คที่เกิดขึ้นพร้อมกัน”แต่ฉันไม่สามารถติดตามได้

CRAMM: สนับสนุนหน่วยความจำเสมือนสำหรับแอปพลิเคชันที่รวบรวมขยะดูที่การเปลี่ยนระบบปฏิบัติการเพื่อให้ GC สร้างการเพจน้อยลง

การใช้ Page Residency เพื่อจัดดุลการแลกเปลี่ยนในการติดตามการเก็บขยะ

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

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