DD từ / dev / zero đến / dev / null, những gì thực sự xảy ra


12

Điều gì xảy ra trong lệnh

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

Các số không thực sự đi đâu và nói chung điều gì xảy ra? Tốc độ là 905 MB / s

Nếu tôi dd để ramdisk, tốc độ chỉ là 388 MB / s. Và nếu tôi ddđến hdd của tôi, tốc độ chỉ là 63,2 MB / s


1
/dev/nulllà một điểm đến tốt cho các hoạt động đọc thử nghiệm / thời gian . /dev/zerolà một nguồn tốt để kiểm tra / ghi thời gian hoạt động. Kết hợp nguồn này và đích trong một thao tác không có nhiều ý nghĩa. Thậm chí không chắc chắn nếu điều này cung cấp bất kỳ số trên đầu có ý nghĩa.
mùn cưa

@sawdust Cách khác, không?
Jamie

2
Có, @sawdust, nhận xét của bạn ở trên thật khó chịu (đối với người mới). of = / dev / sda sẽ ghi đè lên phân vùng ổ đĩa, nội dung, v.v. của = ~ / bigfile.tmp sẽ là một ví dụ tốt hơn để sử dụng ...
Kevin Traas

2
Tôi biết tôi đến bữa tiệc khá muộn, nhưng trong trường hợp bất cứ ai cũng muốn tự mình thử điều này: không cần phải chạy lệnh này với quyền root, và do đó không cần sudo.
Roel Schroeven

@Jamie Nah, đó là cách đúng đắn.
Awn

Câu trả lời:


14

/dev/zerocung cấp một luồng vô tận các byte bằng 0 khi đọc. Hàm này được cung cấp bởi kernel và không yêu cầu cấp phát bộ nhớ. Tất cả viết để /dev/nullđược bỏ âm thầm.

Kết quả là, khi bạn thực hiện dd, hệ thống sẽ tạo ra 500 megabyte bằng 0 byte mà chỉ cần loại bỏ. Ngoại trừ bộ đệm tạm thời, không có dữ liệu nào được lưu trữ trước, trong hoặc sau thao tác này.

Tốc độ chuyển từ /dev/zerođến /dev/nullđược xác định chủ yếu bằng tốc độ của bộ xử lý của bạn và các cuộc gọi hệ thống có liên quan. (Trong trường hợp của bạn, bộ đệm có dung lượng lớn 500 MB và do đó hoạt động cũng kiểm tra tốc độ của bộ nhớ của bạn.)


7

Tôi sẽ dịch lệnh này cho bạn:

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

Sao chép dữ liệu ( dd) từ tệp đầu vào ( if) của /dev/zero(nguồn cung cấp ảo không giới hạn 0) vào tệp đầu ra ( of) của /dev/null(lỗ chìm ảo) bằng cách sử dụng các khối có kích thước 500M ( bs= kích thước khối) và lặp lại điều này ( count) chỉ một lần ( 1).

Nói chung, lệnh này chỉ nên đo tốc độ bộ nhớ và bus. Tuy nhiên, nó có thể thất bại nếu bạn không có sẵn 500 MB RAM. Vì vậy, theo một nghĩa nào đó, nó cũng ngầm định mức độ nhanh chóng mà hệ điều hành của bạn có thể phân bổ các khối bộ nhớ lớn.


Nếu nó đo bộ nhớ, làm thế nào việc ghi vào ramdisk chậm hơn đáng kể?
agz

2
Bởi vì ramdisk vẫn phải được định dạng để có một hệ thống tập tin, phải được duy trì bởi trình điều khiển kernel. Điều đó cũng có nghĩa là việc ghi vào ramdisk sẽ có chi phí sao chép dữ liệu từ không gian người dùng vào không gian kernel - không hoàn toàn miễn phí. Với / dev / zero hoặc / dev / null, chi phí này gần như bằng không.
mvp

Tôi chưa bao giờ thấy "dữ liệu trùng lặp" trước đây. Tôi nhớ lại việc đọc trong các trang man SunOS cũ mà dd là viết tắt của "copy & convert" (cc đã được thực hiện).
Dan Pritts

5

/ dev / null là một lỗ đen. Nó không chính xác để kiểm tra các hoạt động ghi thông thường vì nó không thực sự ghi vào đĩa như một tệp bình thường. Thay vì ghi đầu vào đĩa, dữ liệu sẽ bị loại bỏ ngay lập tức khi ghi vào thiết bị, vì vậy nó sẽ luôn nhanh hơn ghi cục bộ thông thường.

/ dev / zero là tương tự để đọc. Nó không yêu cầu chuyển động đầu để đọc từ, nó chỉ là nguồn cung cấp vô số ký tự null, vì vậy nó sẽ luôn đọc nhanh hơn bất kỳ đọc cục bộ nào.

Nói cách khác, điều này giống như thử nghiệm trong một khoảng trống và sẽ không đưa ra một bức tranh chính xác về những gì đọc và viết thông thường cục bộ sẽ mang lại.


Ram cũng không liên quan, tôi giả sử ... vậy thử nghiệm này là gì ... tốc độ đồng hồ?
agz

1
  1. /dev/nullkhông ở đâu cả; dữ liệu được ghi vào nó chỉ đơn giản là bị xóa.

  2. Ramdisk của bạn có một hệ thống tập tin mà nó phải sử dụng. ddphải tạo một mục hệ thống tệp và viết theo các quy tắc của hệ thống tệp. Ngoài ra, hệ điều hành của bạn đang sử dụng bộ nhớ của bạn cho những thứ khác cùng một lúc để thao tác ghi của bạn có được những gì còn lại.

  3. Ổ cứng không SSD chỉ đơn giản là chậm nên cũng đúng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.