Windows จะถ่ายโอนแรมทั้งหมดในไฟล์ hibernation ได้อย่างรวดเร็วได้อย่างไร


65

ฉันกำลังอ่านบทความที่อธิบายขั้นตอนการจำศีลใน Microsoft Windows ประเด็นหลักที่ฉันได้รับจากมันคือ

  1. Windows จะทิ้ง RAM ทั้งหมด (หลังจากประมวลผลแล้ว) ในhiberfil.sysไฟล์
  2. ในระหว่างการบูทขึ้นไฟล์การไฮเบอร์เนตจะถูกอ่านและเนื้อหาจะถูกโหลดใน RAM

คำถามของฉันคือเมื่อฉันมักจะคัดลอกไฟล์ขนาดพูด, 1 GB จะใช้เวลาประมาณ2 นาทีเพื่อให้เสร็จสมบูรณ์

อย่างไรก็ตามเมื่อ Windows กำลังเขียนไฟล์การไฮเบอร์เนต (ระหว่างขั้นตอนการไฮเบอร์เนต) กระบวนการทั้งหมดอาจใช้เวลา 10-15 วินาที เหตุใดจึงมีความแตกต่างในการเขียนความเร็ว?

ขนาด RAM ของฉันคือ 4 GB (ฉันไม่ได้พูดถึงเทคโนโลยีการบูตเร็ว)

มาตรฐาน:

  1. การคัดลอกไฟล์ 1 GB จากดิสก์ 1 ไปยังดิสก์ 2 (ภายนอก): 2.3 นาที
  2. ไฮเบอร์เนตระบบ: 15 วินาที

3
ฉันไม่รู้คำตอบ แต่ฉันพนันว่าถ้าคุณตรวจสอบหนังสือWindows Internals "บทที่ 13: การเริ่มต้นและปิดเครื่อง" มันจะบอกคุณ (ถ้าฉันมีหนังสือด้วยตัวเองฉันจะตรวจสอบ)
Scott Chamberlain

2
นี่เป็นคำถามที่ดี เมื่อการจำศีลถูกนำมาใช้ครั้งแรกในปี 1998 มันไม่ได้เร็วนัก
Gabe

22
@coder: ระบบ NT ให้แน่ใจว่า hyberfil.sys มีพื้นที่เต็มและมีการแยกส่วนไฟล์ทั้งหมด ในสภาพเช่นนั้นจะไม่มีการกระโดดหัวของฮาร์ดไดรฟ์ในระหว่างการดำเนินการ ดังนั้นคุณจะได้ความเร็วที่มีประสิทธิภาพเช่น 150Mo / s fsutilคุณสามารถตรวจสอบสิ่งที่ผมพูดกับ
user2284570

3
โดยทั่วไปแล้วดิสก์ภายนอกจะช้ากว่าดิสก์ภายในเช่นกัน
แฮร์รี่จอห์นสตัน

2
@EricLippert - แน่นอนที่สุดไม่ได้เก็บ RAM ทั้งหมด แต่ยังไม่สามารถอธิบายได้ ฉันมี RAM ที่ใช้งานอยู่ไม่กี่กิกะไบต์เป็นประจำที่ต้องเก็บไว้ (VS2013 หรือ Eclipse + อีกสองสามอย่างใช้ RAM เยอะ) และพวกมันถูกเก็บไว้ที่ความเร็วที่ดูเหมือนว่ายิ่งกว่าความเร็วในการเขียนทางทฤษฎีของ SSD ที่ไม่ใช่ของฉัน ขับรถ
Davor

คำตอบ:


45

นี่อาจเป็นคำตอบสามเท่า

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

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

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

นอกจากนี้ฮาร์ดไดรฟ์ปัจจุบันค่อนข้างเร็ว ด้วยดิสก์ที่มีการเขียนอย่างต่อเนื่องตามลำดับ 100 MB / s คุณจะสามารถเขียนออก (ไม่บีบอัด) RAM 4 GB ในเวลาไม่ถึงหนึ่งนาที เนื่องจากการไฮเบอร์เนตสามารถทำได้เหมือนสิ่งสุดท้ายหลังจากระงับกระบวนการผู้ใช้ทั้งหมดและก่อนที่จะหยุดการทำงานของ CPU โดยทั่วไประบบปฏิบัติการจะมีความเร็วในการเขียนแบบเต็มของดิสก์ นี่เป็นสิ่งหนึ่งที่เบนช์มาร์กพื้นฐานของคุณจะไม่มีและการคัดลอกจากดิสก์ไปยังดิสก์อาจช้ากว่าการเขียนแรมลงดิสก์

การรวมสิ่งต่าง ๆ เหล่านี้และปริมาณข้อมูลที่จะเขียนลงในไฟล์การจำศีลอาจมีขนาดค่อนข้างเล็กอาจมีความจุ 1 GB และอาจจะถูกเขียนลงในบล็อกต่อเนื่องขนาดใหญ่หนึ่งบล็อกภายในเวลา 10 วินาที


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

2
เพจที่ไม่สกปรกเป็นคำสั่งทั่วไปของ "เพจเอาต์ไปยังไฟล์ swap" ซึ่งจะรวมถึงไฟล์เรียกทำงาน (เนื่องจากไฟล์ที่เรียกใช้งานได้มีการแยกส่วนบนดิสก์ซึ่งอาจทำให้การปลุกช้าลง) นอกจากนี้บัฟเฟอร์ไฟล์แบบใหม่อาจจะถูกลบได้แม้ว่าจะไม่ได้เป็นส่วนหนึ่งของไฟล์ที่แม็พหน่วยความจำ
Paul A. Clayton

3
@ user2284570 จากเอกสารที่ฉันเชื่อมโยงในคำตอบนั้น"Windows รองรับการไฮเบอร์เนตโดยการคัดลอกเนื้อหาของหน่วยความจำไปยังดิสก์ระบบบีบอัดเนื้อหาของหน่วยความจำก่อนที่จะเก็บไว้ในดิสก์ซึ่งจะลดพื้นที่ดิสก์ที่ต้องการ ในระบบ "
Mokubai

4
@ user2284570: นั่นเป็นเพราะสถานการณ์กรณีที่เลวร้ายที่สุดคือการบีบอัด 1: 1 Windows ต้องตรวจสอบให้แน่ใจว่ามีพื้นที่เพียงพอ (สงวนลิขสิทธิ์) ใน hyberfil.sys สำหรับการกำหนดค่าหน่วยความจำที่เป็นไปได้ใด ๆ - แม้ว่าจะต้องการเพียงหนึ่งในสิบของขนาด RAM สำหรับการไฮเบอร์เนตโดยเฉพาะ เพิ่มไปที่ส่วนการใช้ RAM ที่เหมาะสมคือไฟล์ที่โหลดลงในหน่วยความจำ (ไฟล์เรียกทำงานทรัพยากร ... ) แต่ยังคงแมปจาก HDD และคุณสามารถบันทึกการเขียนจำนวนมากได้ ให้โปรแกรมสร้างข้อมูลแบบเข้ารหัสลับขนาด 4 GiB ใน RAM และการจำศีลใช้เวลานานขึ้นอย่างมีนัยสำคัญ - และถึงตอนนั้นบางโปรแกรมอาจมีการสลับสับเปลี่ยน
Luaan

3
@ user2284570: ไฟล์มีขนาดใหญ่มากเพื่อให้แน่ใจว่ามีพื้นที่บนดิสก์เพื่อเก็บหน่วยความจำทั้งหมด ไม่ได้ใช้พื้นที่ทั้งหมดในการไฮเบอร์เนต บางครั้งไฟล์จะถูก (พูด) เนื้อหาหน่วยความจำที่บีบอัด 7%, ขยะ 93%
psmears

31

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

  • เซ็กเมนต์. text ของไฟล์เรียกทำงานได้รับการสนับสนุนโดยการแม็พไฟล์เสมอ นั่นก็เป็นจริงเช่นกันสำหรับอย่างน้อยDLLs บางตัว (แต่ไม่ใช่ทั้งหมดขึ้นอยู่กับว่าพวกเขาจำเป็นต้องย้ายที่ตั้งใหม่หรือไม่)
  • หน่วยความจำที่สำรองข้อมูลไว้ในทำนองเดียวกันโดยการแมปไฟล์สามารถยกเลิกได้ (โดยสันนิษฐานว่าไม่ใช่ CoW หรือ RW และสกปรก)
  • การเขียนกลับขี้เกียจจะยังคงเกิดขึ้น แต่นอกจากนั้นแคชสามารถถูกยกเลิกได้
  • หน่วยความจำที่จัดสรรแล้ว แต่ไม่ได้เขียนลงไป (โดยปกติแล้วส่วนใหญ่ของข้อมูลแอพพลิเคชั่น!) จะได้รับการสนับสนุนจากหน้าศูนย์และสามารถละทิ้งได้
  • ส่วนขนาดใหญ่ของหน้าหน่วยความจำที่อยู่ใน "สแตนด์บาย" สถานะ (ที่เกิดขึ้นจริงมีถิ่นที่อยู่ต่อกระบวนการทำงานตั้งอยู่บน Windows เป็นตื่นตาตื่นใจขนาดเล็ก 16MB เพียง) จะได้รับการคัดลอกไปยังไฟล์หน้าในพื้นหลังในบางจุดและสามารถยกเลิก .
  • ขอบเขตของหน่วยความจำที่ถูกแมปโดยอุปกรณ์บางอย่างเช่นการ์ดกราฟิกอาจไม่จำเป็นต้องบันทึก (อาจ) บางครั้งผู้ใช้จะประหลาดใจว่าพวกเขาเสียบ 8GiB หรือ 16GiB ลงในคอมพิวเตอร์และ 1GiB หรือ 2GiB เป็นเพียง "หายไป" โดยไม่มีเหตุผลที่ชัดเจน API กราฟิกที่สำคัญต้องการแอปพลิเคชันที่สามารถใช้กับเนื้อหาบัฟเฟอร์ที่ไม่ถูกต้อง "ภายใต้เงื่อนไขบางประการ" (โดยไม่ต้องบอกว่าสิ่งนี้หมายถึงอะไร) ดังนั้นจึงไม่มีเหตุผลที่จะคาดหวังว่าหน่วยความจำที่ถูกตรึงโดยไดรเวอร์กราฟิกจะถูกทิ้งเช่นกัน หน้าจอกำลังจะมืดไปแล้วหลังจากทั้งหมด

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

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

ไฟล์ swap และไฟล์ hibernation มักเป็นไฟล์แรกสุดที่สร้างและสำรองไว้บนดิสก์ พวกเขามักจะมีหนึ่งชิ้นไม่เกินสองชิ้น ดังนั้นหากเซกเตอร์เสียหายและดิสก์ต้องทำการจัดสรรเซกเตอร์กายภาพใหม่การเขียนตามลำดับเชิงตรรกะจะแปลเป็นการเขียนตามลำดับทางกายภาพบนดิสก์หมุน

ไม่จำเป็นต้องมีการดำเนินการอ่าน - แก้ไข - เขียนบนดิสก์เมื่อมีการเขียนข้อมูลที่ต่อเนื่องและต่อเนื่องเป็นจำนวนมาก ปัญหานี้เด่นชัดน้อยลงในฮาร์ดดิสที่หมุนได้ซึ่งสามารถเขียนเซกเตอร์เดี่ยวที่ค่อนข้างเล็ก (โดยที่คุณไม่ต้องเขียนไบต์เดียวซึ่งการแคชมักจะป้องกันอุปกรณ์ไม่จำเป็นต้องดึงเนื้อหาต้นฉบับและเขียนเวอร์ชันที่แก้ไขแล้ว) .
อย่างไรก็ตามนี่คือสิ่งที่เห็นได้ชัดเจนมากบน SSD ที่ทุกการเขียนหมายถึงเช่นบล็อก 512kB (นั่นคือจำนวนปกติ แต่อาจมีขนาดใหญ่กว่า) จะต้องอ่านและแก้ไขโดยคอนโทรลเลอร์และเขียนกลับไปที่อื่น บล็อก. ในขณะที่คุณสามารถในหลักการเขียนถึง (แต่ไม่เขียนทับ) หน่วยที่เล็กลงในดิสก์แฟลชคุณสามารถลบบล็อกขนาดใหญ่ได้เท่านั้นมันเป็นวิธีการทำงานของฮาร์ดแวร์ นี่คือเหตุผลว่าทำไม SSD ถึงดีกว่าสำหรับการเขียนตามลำดับมาก


แม้ว่าจะย้าย DLL แล้วสิ่งเดียวที่จำเป็นในการนำกลับมาก็คือที่อยู่ที่ย้ายใหม่ การย้ายถิ่นฐานเป็นกระบวนการที่กำหนดไว้แล้วและสามารถทำซ้ำได้
MSalters

"รวบรวมเขียน"? คุณหมายถึง "ค่อนข้างเขียน" หรือไม่
Peter Mortensen

3
@PeterMortensen: ไม่ฉันหมายถึงรวบรวมการเขียนจริงๆ(ต่างจากการอ่านที่กระจาย) นี่หมายถึงการเขียนไปยังไฟล์เดียวในขณะที่รวบรวมข้อมูลจากหลาย ๆ ที่ คุณจัดหาอาร์เรย์ของโครงสร้างแต่ละแห่งประกอบด้วยที่อยู่เริ่มต้นและความยาว (พร้อมข้อกำหนดการจัดตำแหน่งที่เข้มงวด) ระบบปฏิบัติการผ่านสิ่งเหล่านี้ไปยังตัวควบคุมและฮาร์ดแวร์ทำส่วนที่เหลือ
Damon

1
@MSalters: แต่การย้ายจะสร้างสำเนาส่วนตัวของหน้าและจากนั้นก็ยากมากที่จะตรวจสอบว่ามีการแก้ไขอื่น ๆ ได้ทำกับสำเนาส่วนตัว ตัดกับการแมปที่ไม่ต้องใช้การแก้ไขและใช้ copy-on-write หากทำการแก้ไขอื่น ๆ จะมีการคัดลอกส่วนตัว ถ้าไม่หน้าจะยังคงถูกกำหนดค่าสำหรับ CoW
Ben Voigt

1
@MSalters มันอาจเป็นกระบวนการที่กำหนดขึ้นมา แต่นั่นไม่ได้หมายความว่าโค้ด hibernation นั้นทำงานที่เลเยอร์เดียวกันของซอฟต์แวร์สแต็คเป็นตัวเชื่อมโยง หากการจำศีลอยู่ที่เคอร์เนลเลเยอร์และการเชื่อมโยงคือเลเยอร์ผู้ใช้การจำศีลไม่สามารถตั้งสมมติฐานใด ๆ เกี่ยวกับสิ่งที่ลิงเกอร์ทำ
kasperd

10

มันไม่ได้ถ่ายโอนแรมทั้งหมดในเวลาไฮเบอร์เนต

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

ดังนั้นจึงต้องเขียนเพียงเล็กน้อยของ 4GB และสามารถทำได้ใน 10-15 วินาที

จากmicrosoft :

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


2

นอกเหนือจากที่กล่าวมาทั้งหมดฉันคิดว่ามีปัจจัยอื่น ๆ

หนึ่งคือเมื่อคัดลอกไฟล์ไฟล์จะต้องอ่านและเขียน; ไฮเบอร์เนตต้องใช้ไฟล์ที่จะเขียนเท่านั้น มันคือตามคำนิยามแล้วในหน่วยความจำ!

เกี่ยวข้องกับสิ่งนี้เมื่ออ่านไฟล์และเขียนในเวลาเดียวกันเพื่อบันทึกหน่วยความจำกระบวนการคืออ่าน chunk เขียน chunk ปรับปรุงไดเรคทอรี่ (เพื่อแสดงขนาดใหม่); อ่านอันเขียนเขียนอันอัพเดตไดเรคทอรี่

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

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


มันสร้างความแตกต่างอย่างมาก !
การแข่งขัน Lightness ใน Orbit

@LightnessRacesinOrbit: การช่วงชิงของ CPU จะสร้างความแตกต่างไม่ได้เลย การขาดความขัดแย้งของ I / O เป็นเรื่องใหญ่ แต่คำตอบนี้ได้ระบุไว้แล้วว่าการหาประสิทธิภาพการฆ่าและการค้นหาไม่ขาดแบนด์วิดท์โดยรวมเป็นประเด็นหลักที่มีการโต้แย้ง I / O
Ben Voigt

@BenVoigt: ใช่ฉันเห็นด้วย และเมื่อคุณมีกระบวนการทั้งหมด 40 กระบวนการที่พยายามทำสิ่งต่างๆบนดิสก์นั่นจะเป็นการเพิ่มการค้นหาดิสก์อย่างมาก (tl; dr ฉันไม่ได้พูดเกี่ยวกับการแข่งขันของ CPU)
การแข่งขัน Lightness ใน Orbit

@LightnessRacesinOrbit: ดูเหมือนว่า ... ผิดปกติแม้ในระหว่างการทำงานปกติ (ทุกอย่างยกเว้นการเข้าและออกจากโหมดไฮเบอร์เนต) ฉันรู้ว่าเมื่อฉันจับงานพื้นหลังที่กดปุ่มดิสก์ฉันถอนการติดตั้งเครื่องดูดและแทนที่ด้วยสิ่งที่เข้าถึงดิสก์เมื่อฉันขอมันเพื่ออะไร
Ben Voigt

@BenVoigt: ดูเหมือนว่าไม่น่า การบันทึก Daemon เป็นตัวอย่างที่ชัดเจนที่สุดตามด้วยสิ่งต่าง ๆ เช่นการอัพเดตไฟล์ดริฟท์ของ ntpd ฉันไม่ได้อ้างว่าตัวอย่างเหล่านี้มีผลอย่างมากที่นี่ แต่ฉันไม่คิดว่ามันสมเหตุสมผลที่จะคาดหวังว่าจะไม่มีงานพื้นหลังเพื่อสัมผัสดิสก์ด้วยตนเอง
การแข่งขัน Lightness ใน Orbit

0

อาจเป็นเพราะ RAM มีความเร็วอินพุต / เอาท์พุตที่รวดเร็วกว่าฮาร์ดดิสก์ดังนั้น RAM จึงสามารถส่งออกข้อมูลได้เร็วเท่าที่ฮาร์ดดิสก์สามารถอ่านได้

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


9
แต่ยังคงมีความต้องการระบบปฏิบัติการที่จะเขียนข้อมูล 4GB RAM บนดิสก์ที่ถูกควบคุมโดย I / O คอขวด
coder

นอกจากนี้สมมติว่าพารามิเตอร์ที่น่าพอใจก็หมายความว่าในระหว่างการจำศีลความเร็วในการเขียนดิสก์ของฉันไปจาก 40MB / s ถึง ~ 260 MB / s มันถูกต้องหรือไม่
coder

1
น่าจะเป็น - ไม่ควรมีคอขวด I / O มากเกินไปเพราะมันต้องเขียนข้อมูลเท่านั้น (อาจมีบางอย่างอยู่ในนั้นเพื่อให้รู้ว่ามันจะไม่เขียนทับสิ่งต่าง ๆ และวางข้อมูลไว้ที่ใดดังนั้นจึงไม่ ต้องอ่านดิสก์มากเกินไป) บนแล็ปท็อป (linux dual booted) ของฉันฉันสามารถใช้dd if=/dev/zero of=/tmp/output.img bs=8k count=256kและรับได้1862606848 bytes (1.9 GB) copied, 1.81605 s, 1.0 GB/sดังนั้นจึงเป็นไปได้ (ฉันจะเพิ่มว่า windows การคัดลอกไฟล์ดูเหมือนว่าจะใช้เวลานานโดยไม่จำเป็น)
Wilf

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

ฉันลองใช้เกณฑ์มาตรฐาน dd ในระบบของฉัน มันไม่เคยเกิน 52 MB / s: / (เครื่องเก่า) อย่างไรก็ตามฉันเชื่อว่า"อาจมีบางสิ่งบางอย่างอยู่ในตัวดังนั้นจึงรู้ว่ามันจะไม่เขียนทับสิ่งต่าง ๆ และวางข้อมูลไว้ที่ใดจึงไม่จำเป็นต้องอ่านดิสก์ มากเกินไป "เป็นกุญแจสำคัญสำหรับความเร็วที่รวดเร็ว
coder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.