อ่าน 3 นาที
การโจมตีอย่างรุนแรง (วิทยาการคอมพิวเตอร์)
ใน วิทยาการคอมพิวเตอร์ การ เกิด thrashing เกิดขึ้นในระบบที่มี การแบ่งหน้าหน่วยความจำ เมื่อ ทรัพยากร หน่วยความจำจริง (RAM) ของคอมพิวเตอร์ถูกใช้ งานเกินกำลัง ทำให้เกิดสถานะ...
การโจมตีอย่างรุนแรง (วิทยาการคอมพิวเตอร์)
ในวิทยาการคอมพิวเตอร์การ เกิด thrashingเกิดขึ้นในระบบที่มีการแบ่งหน้าหน่วยความจำเมื่อ ทรัพยากร หน่วยความจำจริง (RAM) ของคอมพิวเตอร์ถูกใช้งานเกินกำลังทำให้เกิดสถานะการแบ่งหน้า อย่างต่อเนื่อง (การสลับ กล่าวคือ การย้ายหน้าไปยังดิสก์) และข้อผิดพลาดของหน้า ซึ่งทำให้ การประมวลผลระดับแอปพลิเคชันส่วนใหญ่ช้าลง[ 1 ]ซึ่งทำให้ประสิทธิภาพของคอมพิวเตอร์ลดลงหรืออาจล่มสลายได้ สถานการณ์นี้สามารถดำเนินต่อไปได้เรื่อยๆ จนกว่าผู้ใช้จะปิดแอปพลิเคชันที่กำลังทำงานอยู่ หรือกระบวนการที่ใช้งานอยู่จะปล่อยทรัพยากรหน่วยความจำเสมือนเพิ่มเติม
หลังจากเริ่มต้นการทำงาน โปรแกรมส่วนใหญ่จะทำงานกับ หน้าโค้ดและข้อมูลจำนวนน้อยเมื่อเทียบกับหน่วยความจำทั้งหมดที่โปรแกรมต้องการ หน้าที่ถูกเรียกใช้บ่อยที่สุดในแต่ละช่วงเวลาเรียกว่าชุดการทำงาน (working set ) ซึ่งอาจเปลี่ยนแปลงไปตามเวลา
เมื่อชุดข้อมูลที่ใช้งานอยู่ไม่มากกว่าจำนวนเฟรมหน้าหน่วย ความจำจริงทั้งหมดของระบบ อย่างมีนัยสำคัญ ระบบหน่วยความจำเสมือนจะทำงานได้อย่างมีประสิทธิภาพสูงสุด และใช้ทรัพยากรการคำนวณเพียงเล็กน้อยในการแก้ไขข้อผิดพลาดของหน้าหน่วยความจำ เมื่อชุดข้อมูลที่ใช้งานอยู่เพิ่มขึ้น การแก้ไขข้อผิดพลาดของหน้าหน่วยความจำยังคงจัดการได้ จนกระทั่งการเพิ่มขึ้นถึงจุดวิกฤตที่จำนวนข้อผิดพลาดเพิ่มขึ้นอย่างมาก และเวลาที่ใช้ในการแก้ไขข้อผิดพลาดเหล่านั้นมากกว่าเวลาที่ใช้ในการคำนวณสิ่งที่โปรแกรมเขียนไว้ สภาวะนี้เรียกว่าภาวะการทำงานหนักเกินไป (thrashing) ภาวะการทำงานหนักเกินไปอาจเกิดขึ้นกับโปรแกรมที่เข้าถึงโครงสร้างข้อมูลขนาดใหญ่แบบสุ่ม เนื่องจากชุดข้อมูลที่ใช้งานอยู่ขนาดใหญ่ทำให้เกิดข้อผิดพลาดของหน้าหน่วยความจำอย่างต่อเนื่อง ซึ่งทำให้ระบบทำงานช้าลงอย่างมาก การแก้ไขข้อผิดพลาดของหน้าหน่วยความจำอาจต้องมีการปล่อยหน้าหน่วยความจำที่จะต้องอ่านกลับจากดิสก์ในไม่ช้า
คำนี้ยังใช้สำหรับปรากฏการณ์ที่คล้ายคลึงกันต่างๆโดยเฉพาะอย่างยิ่งการเคลื่อนย้ายระหว่างระดับต่างๆ ของลำดับชั้นหน่วยความจำซึ่งกระบวนการดำเนินไปอย่างช้าๆ เนื่องจากใช้เวลามากในการได้มาซึ่งทรัพยากร
คำว่า "Thrashing" ยังถูกใช้ในบริบทอื่นๆ นอกเหนือจากระบบหน่วยความจำเสมือน เช่น ใช้เพื่ออธิบาย ปัญหา แคชในคอมพิวเตอร์ หรืออาการหน้าต่างทำงานผิดปกติในระบบเครือข่าย
ภาพรวม
การแบ่งหน้าและการสลับหน่วยความจำทำงานโดยการใช้ส่วนหนึ่งของหน่วยเก็บข้อมูลสำรองเช่นฮาร์ดดิสก์ ของคอมพิวเตอร์ เป็นชั้นเพิ่มเติมของลำดับชั้นแคชการแบ่งหน้าและการสลับหน่วยความจำช่วยให้กระบวนการต่างๆสามารถใช้หน่วยความจำได้มากกว่าที่มีอยู่จริงในหน่วยความจำหลักระบบปฏิบัติการที่รองรับหน่วยความจำเสมือนแบบแบ่งหน้า จะกำหนด พื้นที่แอดเดรสเสมือนให้กับกระบวนการต่างๆและแต่ละกระบวนการจะอ้างอิงถึงแอดเดรสในบริบทการทำงาน ของตน โดยใช้แอดเดรสเสมือน เพื่อเข้าถึงข้อมูลเช่นโค้ดหรือตัวแปรที่แอดเดรสนั้น กระบวนการจะต้องแปลงแอดเดรสเป็นแอดเดรสทางกายภาพในกระบวนการที่เรียกว่าการแปลงแอดเดรสเสมือนกล่าวคือ หน่วยความจำหลักทางกายภาพจะกลายเป็นแคชสำหรับหน่วยความจำเสมือน ซึ่งโดยทั่วไปจะจัดเก็บไว้ในดิสก์ในหน้าหน่วยความจำ
โปรแกรมต่างๆ จะได้รับการจัดสรรหน้าหน่วยความจำจำนวนหนึ่งตามความต้องการของระบบปฏิบัติการหน้าหน่วยความจำที่ใช้งานอยู่จะอยู่ในทั้ง RAM และบนดิสก์ หน้าหน่วยความจำที่ไม่ได้ใช้งานจะถูกลบออกจากแคชและเขียนลงดิสก์เมื่อหน่วยความจำหลักเต็ม
หากกระบวนการต่างๆ ใช้หน่วยความจำหลักทั้งหมดและต้องการหน้าหน่วยความจำเพิ่มเติมจะเกิดการพลาดแคช อย่างรุนแรง ที่เรียกว่า ข้อผิดพลาดของหน้าหน่วยความจำ ( page fault) ซึ่งมักนำไปสู่ ความล่าช้า ที่เห็นได้ชัด ในการตอบสนองของระบบปฏิบัติการ กระบวนการนี้ร่วมกับการสลับหน้าหน่วยความจำซ้ำๆ ที่ไร้ประโยชน์เรียกว่า "การทำงานหนักเกินไป" (thrashing) ซึ่งมักนำไปสู่การใช้งาน CPU ที่สูงเกินไปจนควบคุมไม่ได้และอาจทำให้ระบบหยุดทำงานได้ ในคอมพิวเตอร์สมัยใหม่ การทำงานหนักเกินไปอาจเกิดขึ้นในระบบเพจจิ้ง (หากมีหน่วยความจำทางกายภาพ ไม่เพียงพอ หรือเวลาในการเข้าถึงดิสก์นานเกินไป) หรือในระบบย่อยการสื่อสาร I/O (โดยเฉพาะอย่างยิ่งในความขัดแย้งเกี่ยวกับการเข้าถึงบัสภายใน ) เป็นต้น
ขึ้นอยู่กับการกำหนดค่าและอัลกอริทึมที่เกี่ยวข้องประสิทธิภาพและความหน่วงของระบบอาจลดลงหลายเท่าตัว การเกิด ภาวะ Thrashing เกิดขึ้นเมื่อ CPU ทำงาน 'ที่มีประสิทธิภาพ' น้อยลงและทำงาน 'สลับ' มากขึ้น เวลาในการเข้าถึงหน่วยความจำโดยรวมอาจเพิ่มขึ้น เนื่องจากหน่วยความจำระดับสูงมีความเร็วเท่ากับหน่วยความจำระดับต่ำกว่าถัดไปในลำดับชั้นของหน่วยความจำ[ 2 ] CPU ยุ่งอยู่กับการสลับหน้ามากจนไม่สามารถตอบสนองต่อโปรแกรมและการขัดจังหวะของผู้ใช้ได้มากเท่าที่ต้องการ การเกิดภาวะ Thrashing เกิดขึ้นเมื่อมีหน้าในหน่วยความจำมากเกินไป และแต่ละหน้าอ้างอิงถึงหน้าอื่น หน่วยความจำจริงลดความจุลงเพื่อรองรับทุกหน้า ดังนั้นจึงใช้ 'หน่วยความจำเสมือน' เมื่อแต่ละหน้าที่กำลังทำงานอยู่ต้องการหน้าที่ไม่ได้อยู่ในหน่วยความจำจริง (RAM) ในขณะนั้น มันจะวางบางหน้าไว้ในหน่วยความจำเสมือนและปรับหน้าที่ต้องการใน RAM หาก CPU ยุ่งอยู่กับการทำงานนี้มากเกินไป การเกิดภาวะ Thrashing ก็จะเกิดขึ้น
สาเหตุ
ใน ระบบ หน่วยความจำเสมือนแบบแบ่งหน้าการทำงานที่ผิดพลาด (thrashing) อาจเกิดจากโปรแกรมหรือภาระงานที่มีการอ้างอิงตำแหน่ง ที่ไม่เพียงพอ กล่าว คือ หากชุดการทำงานของโปรแกรมหรือภาระงานไม่สามารถเก็บไว้ในหน่วยความจำทางกายภาพได้อย่างมีประสิทธิภาพ การสลับข้อมูลอย่างต่อเนื่องหรือที่เรียกว่า thrashing อาจเกิดขึ้นได้ คำนี้ถูกใช้ครั้งแรกในยุคระบบปฏิบัติการเทปเพื่ออธิบายเสียงที่เทปทำเมื่อมีการเขียนและอ่านข้อมูลอย่างรวดเร็ว กรณีที่เลวร้ายที่สุดอาจเกิดขึ้นกับ โปรเซสเซอร์ VAX การข้ามขอบเขตหน้า เพียงครั้งเดียวMOVLอาจมีตัวถูกดำเนินการต้นทางที่ใช้โหมดการกำหนดแอดเดรสแบบเลื่อนตำแหน่ง (displacement deferred addressing mode) ซึ่งคำยาวที่มีแอดเดรสของตัวถูกดำเนินการข้ามขอบเขตหน้า และตัวถูกดำเนินการปลายทางที่ใช้โหมดการกำหนดแอดเดรสแบบเลื่อนตำแหน่ง ซึ่งคำยาวที่มีแอดเดรสของตัวถูกดำเนินการข้ามขอบเขตหน้า และทั้งต้นทางและปลายทางอาจข้ามขอบเขตหน้าได้ คำสั่งเดียวนี้อ้างอิงถึงสิบหน้า หากไม่ทั้งหมดอยู่ใน RAM แต่ละหน้าจะทำให้เกิดข้อผิดพลาดของหน้า (page fault) จำนวนหน้าทั้งหมดที่เกี่ยวข้องในคำสั่งนี้คือสิบหน้า และทั้งสิบหน้าจะต้องมีอยู่ในหน่วยความจำพร้อมกัน หากไม่สามารถ สลับหน้าใดหน้าหนึ่งในสิบหน้า ได้ (เช่น เพื่อให้มีพื้นที่สำหรับหน้าอื่นๆ) คำสั่งจะเกิดข้อผิดพลาด และความพยายามทุกครั้งที่จะเริ่มต้นใหม่จะล้มเหลว จนกว่าจะสามารถสลับหน้าทั้งสิบหน้าได้ครบ
การเกิด thrashing ของระบบมักเป็นผลมาจากความต้องการเพจที่เพิ่มขึ้นอย่างกะทันหันจากโปรแกรมที่กำลังทำงานอยู่จำนวนเล็กน้อย Swap-token [ 3 ]เป็นกลไกป้องกัน thrashing ที่มีน้ำหนักเบาและไดนามิก แนวคิดพื้นฐานคือการตั้งค่าโทเค็นในระบบ ซึ่งจะถูกสุ่มให้กับกระบวนการที่มี page fault เมื่อเกิด thrashing กระบวนการที่มีโทเค็นจะได้รับสิทธิ์ในการจัดสรรหน้าหน่วยความจำทางกายภาพเพิ่มเติมเพื่อสร้าง working set ซึ่งคาดว่าจะเสร็จสิ้นการทำงานอย่างรวดเร็วและปล่อยหน้าหน่วยความจำให้กับกระบวนการอื่น มีการใช้ timestamp เพื่อส่งต่อโทเค็นทีละรายการ เวอร์ชันแรกของ swap-token ถูกนำไปใช้ใน Linux เวอร์ชันที่สองเรียกว่า preempt swap-token ในการใช้งาน swap-token ที่ได้รับการอัปเดตนี้ จะมีการตั้งค่าตัวนับลำดับความสำคัญสำหรับแต่ละกระบวนการเพื่อติดตามจำนวนเพจที่ถูก swap-out โทเค็นจะถูกมอบให้กับกระบวนการที่มีลำดับความสำคัญสูงเสมอ ซึ่งมีจำนวนเพจที่ถูก swap-out สูง ความยาวของไทม์สแตมป์ไม่ใช่ค่าคงที่ แต่ขึ้นอยู่กับลำดับความสำคัญ: ยิ่งจำนวนเพจสลับออกของกระบวนการสูงเท่าไร ไทม์สแตมป์สำหรับกระบวนการนั้นก็จะยิ่งยาวขึ้นเท่านั้น
การใช้งานอื่นๆ
ปรากฏการณ์ "การอาละวาด" เป็นที่รู้จักกันดีในบริบทของหน่วยความจำและการจัดเก็บข้อมูล แต่ปรากฏการณ์ที่คล้ายคลึงกันนี้ก็เกิดขึ้นกับทรัพยากร อื่นๆ ด้วยเช่นกัน ได้แก่:
- การโจมตีแคช
- ในกรณีที่การเข้าถึงหน่วยความจำหลักเกิดขึ้นในรูปแบบที่ทำให้หลายตำแหน่งในหน่วยความจำหลักแย่งชิงบรรทัดแคชเดียวกัน ส่งผลให้เกิดแคชพลาด มากเกินไป ปัญหานี้มักเกิดขึ้นกับแคชที่มีการเชื่อมโยง (associativity )
- รูปแบบการเข้าถึงที่ทำให้เกิดการแย่งชิงแคช ได้แก่ การมีชุดข้อมูล "ร้อน" ขนาดใหญ่เกินไปในหน่วยความจำ หรือรูปแบบอื่นๆ ของการเข้าถึงที่ไม่ดี ในกรณีของแคชแบบเชื่อมโยง รูปแบบการเข้าถึงที่ทำให้เกิดการชนกันของคีย์ก็ทำให้เกิดการแย่งชิงเช่นกัน ตัวอย่างคลาสสิกของกรณีหลังคือ ลู ปเพิ่มค่าแบบมีช่วง[ 4 ]
for (k = 0; k < N; k += 256) v[k] += 1; - TLB ถล่มยับเยิน
- ในกรณีที่บัฟเฟอร์ค้นหาการแปล (TLB) ซึ่งทำหน้าที่เป็นแคชสำหรับหน่วยจัดการหน่วยความจำ (MMU) ที่แปลงที่อยู่เสมือนเป็นที่อยู่จริง มีขนาดเล็กเกินไปสำหรับชุดหน้าหน่วยความจำที่ใช้งานอยู่ ปัญหา TLB thrashing อาจเกิดขึ้นได้แม้ว่าจะไม่มีปัญหา thrashing ในแคชคำสั่งหรือแคชข้อมูล เนื่องจากแคชเหล่านี้มีขนาดต่างกัน คำสั่งและข้อมูลจะถูกแคชในบล็อกขนาดเล็ก ( บรรทัดแคช ) ไม่ใช่ทั้งหน้า แต่การค้นหาที่อยู่จะทำที่ระดับหน้า ดังนั้นแม้ว่าชุดการทำงานของโค้ดและข้อมูลจะพอดีกับแคช แต่ถ้าชุดการทำงานกระจายอยู่หลายหน้า ชุดการทำงานของที่อยู่เสมือนอาจไม่พอดีกับ TLB ทำให้เกิด TLB thrashing
- TLB thrashing อาจเกิดขึ้นได้เมื่อเกิดการชนกันมากเกินไปในหน่วยความจำแบบเชื่อมโยงภายใน (เช่น ตำแหน่งในหน่วยความจำแข่งขันกันเพื่อช่องเฉพาะบางช่อง) สถานการณ์นี้อาจเกิดขึ้นได้เมื่อทำการค้นหาแบบไบนารีในบัฟเฟอร์ขนาดใหญ่ (≥ 512 KiB) ที่มีขนาดเป็นกำลังสองพอดี สามารถป้องกันได้โดยการกระจาย "คีย์" สำหรับหน่วยความจำแบบเชื่อมโยงภายใน (โดยปกติคือบิตล่างของที่อยู่) โดยการลดการจัดเรียงการเข้าถึง ในการค้นหาแบบไบนารี สามารถใช้การแบ่งออฟเซ็ต31/64 ได้นี่เป็นกรณีที่ผิดปกติที่การจัดเรียงที่มากเกินไปส่งผลเสียต่อประสิทธิภาพ[ 5 ]
- การนวดกอง
- การเก็บขยะบ่อยครั้งเนื่องจากไม่สามารถจัดสรรหน่วยความจำสำหรับวัตถุได้เนื่องจากหน่วยความจำว่างไม่เพียงพอหรือหน่วยความจำว่างต่อเนื่องไม่เพียงพอเนื่องจากหน่วยความจำแตกกระจายเรียกว่า heap thrashing [ 6 ]
- การทำลายกระบวนการ
- ปรากฏการณ์ที่คล้ายกันนี้เกิดขึ้นกับกระบวนการ: เมื่อชุดการทำงานของกระบวนการไม่สามารถกำหนดเวลา ร่วมกันได้ กล่าวคือ กระบวนการที่โต้ตอบกันทั้งหมดไม่ได้ถูกกำหนดเวลาให้ทำงานในเวลาเดียวกัน กระบวนการเหล่านั้นจะประสบกับ "การทำงานหนักเกินไปของกระบวนการ" เนื่องจากการถูกกำหนดเวลาและยกเลิกการกำหนดเวลาซ้ำๆ ทำให้มีความคืบหน้าช้าเท่านั้น[ 7 ]
ดูเพิ่มเติม
- อัลกอริทึมการแทนที่หน้า – อัลกอริทึมสำหรับการใช้งานหน่วยความจำเสมือน
- ความแออัดทำให้คุณภาพการให้บริการลดลง – คุณภาพการให้บริการลดลงเนื่องจากปริมาณการใช้งานเครือข่ายสูง
- การแย่งชิงทรัพยากร – ในด้านคอมพิวเตอร์ หมายถึง ความขัดแย้งในการเข้าถึงทรัพยากรที่ใช้ร่วมกัน
- หน่วยความจำไม่เพียงพอ – สภาวะที่คอมพิวเตอร์ไม่สามารถจัดสรรหน่วยความจำเพิ่มเติมได้อีกต่อไป
- การเสื่อมสภาพของซอฟต์แวร์ – แนวโน้มที่ซอฟต์แวร์จะล้มเหลวเนื่องจากการเปลี่ยนแปลงภายนอกหรือการใช้งานเป็นเวลานาน
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ การโจมตีอย่างรุนแรง (วิทยาการคอมพิวเตอร์)
ใน วิทยาการคอมพิวเตอร์ การ เกิด thrashing เกิดขึ้นในระบบที่มี การแบ่งหน้าหน่วยความจำ เมื่อ ทรัพยากร หน่วยความจำจริง (RAM) ของคอมพิวเตอร์ถูกใช้ งานเกินกำลัง ทำให้เกิดสถานะ...
ภาพรวม
การแบ่งหน้าและการสลับหน่วยความจำ ทำงานโดยการใช้ส่วนหนึ่งของ หน่วยเก็บข้อมูลสำรอง เช่น ฮาร์ดดิสก์ ของคอมพิวเตอร์ เป็นชั้นเพิ่มเติมของ ลำดับชั้นแคช การแบ่งหน้าและการสลับหน่วยความจำช่วยให้ กระบวนการต่างๆ สามารถใช้หน่วยความจำได้มากกว่าที่มีอยู่จริงใน...
สาเหตุ
ใน ระบบ หน่วยความจำเสมือนแบบแบ่งหน้า การทำงานที่ผิดพลาด (thrashing) อาจเกิดจากโปรแกรมหรือภาระงานที่มีการ อ้างอิงตำแหน่ง ที่ไม่เพียงพอ กล่าว คือ หาก ชุดการทำงาน ของโปรแกรมหรือภาระงานไม่สามารถเก็บไว้ในหน่วยความจำทางกายภาพได้อย่างมีประสิทธิภาพ...
การใช้งานอื่นๆ
ปรากฏการณ์ "การอาละวาด" เป็นที่รู้จักกันดีในบริบทของหน่วยความจำและการจัดเก็บข้อมูล แต่ปรากฏการณ์ที่คล้ายคลึงกันนี้ก็เกิดขึ้นกับ ทรัพยากร อื่นๆ ด้วยเช่นกัน ได้แก่: