DD จาก / dev / ศูนย์ถึง / dev / null …เกิดอะไรขึ้นจริง


13

เกิดอะไรขึ้นในคำสั่ง

sudo dd if=/dev/zero of=/dev/null bs=500M count=1. 

เลขศูนย์ไปจริงและโดยทั่วไปจะเกิดอะไรขึ้น ความเร็ว 905 MB / s

ถ้าฉันจะ ramdisk ความเร็วเพียง 388 MB / s และถ้าฉันddไปที่ hdd ของฉันความเร็วก็แค่ 63.2 MB / s


1
/dev/nullเป็นสถานที่ที่ดีสำหรับการทดสอบ / ระยะเวลาการอ่านการดำเนินงาน /dev/zeroเป็นแหล่งที่ดีสำหรับการทดสอบ / ระยะเวลาในการเขียนการดำเนินงาน การรวมแหล่งที่มาและปลายทางในการดำเนินการครั้งเดียวไม่สมเหตุสมผล ไม่แน่ใจว่านี่จะให้หมายเลขค่าใช้จ่ายใด ๆ ที่มีความหมายหรือไม่
ขี้เลื่อย

@Sawdust วิธีอื่น ๆ ใช่ไหม
เจมี่

2
ใช่ @sawdust ความคิดเห็นของคุณด้านบนนั้นน่ารังเกียจ (สำหรับมือใหม่) ของ = / dev / sda จะเขียนทับพาร์ติชั่นฮาร์ดไดรฟ์เนื้อหาอื่น ๆ ของ = ~ / bigfile.tmp น่าจะเป็นตัวอย่างที่ดีกว่าในการใช้ ...
Kevin Traas

2
ฉันรู้ว่าฉันมาช้าไปงานเลี้ยง แต่ในกรณีที่ใคร ๆ ก็อยากลองด้วยตัวเอง: ไม่จำเป็นต้องเรียกใช้คำสั่งนี้ในฐานะรูทและด้วยเหตุนี้จึงไม่จำเป็นต้องใช้ sudo
Roel Schroeven

@Jamie Nah เป็นวิธีที่ถูกต้อง
Awn

คำตอบ:


14

/dev/zeroให้กระแสที่ไม่มีที่สิ้นสุดของศูนย์ไบต์เมื่ออ่าน ฟังก์ชั่นนี้ให้บริการโดยเคอร์เนลและไม่จำเป็นต้องจัดสรรหน่วยความจำ การเขียนทั้งหมดจะ/dev/nullถูกดร็อปอย่างเงียบ ๆ

ด้วยเหตุนี้เมื่อคุณดำเนินการddระบบจะสร้าง 500 เมกะไบต์ในศูนย์ไบต์ที่จะถูกยกเลิก ยกเว้นบัฟเฟอร์ชั่วคราวจะไม่มีการจัดเก็บข้อมูลก่อนระหว่างหรือหลังการดำเนินการนี้

ความเร็วของการถ่ายโอนจาก/dev/zeroไปยังจะ/dev/nullถูกกำหนดโดยความเร็วของโปรเซสเซอร์และการเรียกระบบที่เกี่ยวข้อง (ในกรณีของคุณบัฟเฟอร์มีขนาดใหญ่ 500 MB และด้วยเหตุนี้การดำเนินการทดสอบความเร็วของหน่วยความจำของคุณเช่นกัน)


7

ฉันจะแปลคำสั่งนี้ให้คุณ:

dd if=/dev/zero of=/dev/null bs=500M count=1

ข้อมูลที่ซ้ำกัน ( dd) จากอินพุตไฟล์ ( if) ของ/dev/zero(อุปทานไม่ จำกัด เสมือนของ0's) ลงในไฟล์เอาต์พุต ( of) ของ/dev/null(เสมือน sinkhole) โดยใช้บล็อกขนาด 500M ( bs= ขนาดบล็อก) และทำซ้ำ ( count) เพียงครั้งเดียว ( 1)

โดยทั่วไปคำสั่งนี้ควรวัดเพียงความเร็วหน่วยความจำและบัส อย่างไรก็ตามอาจล้มเหลวหากคุณไม่มี RAM 500MB ดังนั้นในแง่หนึ่งก็เป็นเกณฑ์มาตรฐานโดยนัยว่าระบบปฏิบัติการของคุณสามารถจัดสรรหน่วยความจำขนาดใหญ่ได้อย่างรวดเร็วเพียงใด


ถ้ามันวัดขนาดหน่วยความจำทำไมการเขียน ramdisk จึงช้าลงอย่างมาก?
agz

2
เพราะ ramdisk ยังคงต้องมีการจัดรูปแบบเพื่อให้มีระบบไฟล์ซึ่งจะต้องได้รับการดูแลโดยไดรเวอร์เคอร์เนล นั่นหมายถึงการเขียนไปยัง ramdisk จะมีค่าใช้จ่ายในการคัดลอกข้อมูลจาก userspace ไปยังพื้นที่เคอร์เนล - ไม่ฟรีแน่นอน ด้วย / dev / zero หรือ / dev / null ค่าใช้จ่ายนี้เกือบเป็นศูนย์
mvp

ฉันไม่เคยเห็น "ข้อมูลที่ซ้ำกัน" มาก่อน ฉันจำได้ว่าอ่านหนังสือเก่า ๆ ของ SunOS ที่ dd ย่อมาจาก "copy & convert" (ถ่ายสำเนาไปแล้ว)
Dan Pritts

5

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

/ dev / zeroคล้ายกับการอ่าน มันไม่จำเป็นต้องมีการเคลื่อนไหวของหัวอ่านมันเป็นเพียงตัวอักษร null ที่ไม่มีขีด จำกัด ดังนั้นมันจะอ่านเร็วกว่าการอ่านในเครื่อง

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


Ram ไม่เกี่ยวข้องกับฉันสมมติว่า ... ดังนั้นการทดสอบนี้ ... ความเร็วสัญญาณนาฬิกาคืออะไร?
agz

1
  1. /dev/nullไม่มีที่ไหนเลย; ข้อมูลที่เขียนไปนั้นจะถูกลบเพียงแค่

  2. ramdisk ของคุณมีระบบไฟล์ที่ต้องใช้ ddจะต้องสร้างรายการระบบไฟล์และเขียนตามกฎของระบบไฟล์ นอกจากนี้ระบบปฏิบัติการของคุณใช้หน่วยความจำของคุณสำหรับสิ่งอื่น ๆ ในเวลาเดียวกันเพื่อให้การเขียนของคุณได้รับสิ่งที่เหลืออยู่

  3. ฮาร์ดไดรฟ์ที่ไม่ใช่ SSD นั้นทำงานช้ามากดังนั้นจึงถูกต้อง

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