Thỉnh thoảng, tôi được bảo rằng để tăng tốc độ của một "dd", tôi nên cẩn thận chọn một "kích thước khối" thích hợp.
Ngay cả ở đây, trên ServerFault, một người khác đã viết rằng " ... kích thước khối tối ưu phụ thuộc vào phần cứng ... " (iain) hoặc " ... kích thước hoàn hảo sẽ phụ thuộc vào bus hệ thống, bộ điều khiển ổ cứng, ổ đĩa cụ thể của bạn chính nó và các trình điều khiển cho mỗi ... " (chris-s)
Vì cảm giác của tôi hơi khác một chút ( BTW: Tôi nghĩ rằng thời gian cần thiết để điều chỉnh sâu tham số bs cao hơn nhiều so với mức tăng nhận được, về mặt thời gian tiết kiệm và mặc định là hợp lý ), hôm nay tôi mới đi thông qua một số điểm chuẩn nhanh và bẩn.
Để giảm bớt ảnh hưởng bên ngoài, tôi quyết định đọc:
- từ thẻ MMC bên ngoài
- từ một phân vùng nội bộ
và:
- với các hệ thống tập tin liên quan đã vượt qua
- gửi đầu ra tới / dev / null để tránh các vấn đề liên quan đến "tốc độ ghi";
- tránh một số vấn đề cơ bản của bộ nhớ đệm, ít nhất là khi liên quan đến ổ cứng.
Trong bảng sau, tôi đã báo cáo phát hiện của mình, đọc 1GB dữ liệu với các giá trị khác nhau của "bs" ( bạn có thể tìm thấy các số nguyên ở cuối tin nhắn này ):
Về cơ bản, nó đưa ra rằng:
MMC: với bs = 4 (có! 4 byte), tôi đã đạt được thông lượng 12MB / s. Một giá trị không quá xa wrt đến mức tối đa 14.2 / 14.3 mà tôi nhận được từ bs = 5 trở lên;
HDD: với bs = 10 Tôi đạt 30 MB / s. Chắc chắn thấp hơn 95,3 MB nhận được với bs mặc định = 512 nhưng ... cũng đáng kể.
Ngoài ra, rất rõ ràng rằng thời gian sys của CPU tỷ lệ nghịch với giá trị bs (nhưng điều này nghe có vẻ hợp lý, vì bs càng thấp, số lượng cuộc gọi sys do dd tạo ra càng cao).
Đã nói tất cả những điều trên, bây giờ câu hỏi: ai đó có thể giải thích (một hacker hạt nhân không?) Thành phần / hệ thống chính liên quan đến thông lượng đó là gì và liệu nó có thực sự đáng nỗ lực trong việc chỉ định bs cao hơn mặc định không?
Trường hợp MMC - số nguyên
bs = 1 triệu
root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=1M count=1000
1000+0 record dentro
1000+0 record fuori
1048576000 byte (1,0 GB) copiati, 74,1239 s, 14,1 MB/s
real 1m14.126s
user 0m0.008s
sys 0m1.588s
bs = 1k
root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=1k count=1000000
1000000+0 record dentro
1000000+0 record fuori
1024000000 byte (1,0 GB) copiati, 72,7795 s, 14,1 MB/s
real 1m12.782s
user 0m0.244s
sys 0m2.092s
bs = 512
root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=512 count=2000000
2000000+0 record dentro
2000000+0 record fuori
1024000000 byte (1,0 GB) copiati, 72,867 s, 14,1 MB/s
real 1m12.869s
user 0m0.324s
sys 0m2.620s
bs = 10
root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=10 count=100000000
100000000+0 record dentro
100000000+0 record fuori
1000000000 byte (1,0 GB) copiati, 70,1662 s, 14,3 MB/s
real 1m10.169s
user 0m6.272s
sys 0m28.712s
bs = 5
root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=5 count=200000000
200000000+0 record dentro
200000000+0 record fuori
1000000000 byte (1,0 GB) copiati, 70,415 s, 14,2 MB/s
real 1m10.417s
user 0m11.604s
sys 0m55.984s
bs = 4
root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=4 count=250000000
250000000+0 record dentro
250000000+0 record fuori
1000000000 byte (1,0 GB) copiati, 80,9114 s, 12,4 MB/s
real 1m20.914s
user 0m14.436s
sys 1m6.236s
bs = 2
root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=2 count=500000000
500000000+0 record dentro
500000000+0 record fuori
1000000000 byte (1,0 GB) copiati, 161,974 s, 6,2 MB/s
real 2m41.976s
user 0m28.220s
sys 2m13.292s
bs = 1
root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=1 count=1000000000
1000000000+0 record dentro
1000000000+0 record fuori
1000000000 byte (1,0 GB) copiati, 325,316 s, 3,1 MB/s
real 5m25.318s
user 0m56.212s
sys 4m28.176s
Vỏ cứng - số nguyên
bs = 1
root@iMac-Chiara:/tmp# time dd if=/dev/sda3 of=/dev/null bs=1 count=1000000000
1000000000+0 record dentro
1000000000+0 record fuori
1000000000 byte (1,0 GB) copiati, 341,461 s, 2,9 MB/s
real 5m41.463s
user 0m56.000s
sys 4m44.340s
bs = 2
root@iMac-Chiara:/tmp# time dd if=/dev/sda3 of=/dev/null bs=2 count=500000000
500000000+0 record dentro
500000000+0 record fuori
1000000000 byte (1,0 GB) copiati, 164,072 s, 6,1 MB/s
real 2m44.074s
user 0m28.584s
sys 2m14.628s
bs = 4
root@iMac-Chiara:/tmp# time dd if=/dev/sda3 of=/dev/null bs=4 count=250000000
250000000+0 record dentro
250000000+0 record fuori
1000000000 byte (1,0 GB) copiati, 81,471 s, 12,3 MB/s
real 1m21.473s
user 0m14.824s
sys 1m6.416s
bs = 5
root@iMac-Chiara:/tmp# time dd if=/dev/sda3 of=/dev/null bs=5 count=200000000
200000000+0 record dentro
200000000+0 record fuori
1000000000 byte (1,0 GB) copiati, 66,0327 s, 15,1 MB/s
real 1m6.035s
user 0m11.176s
sys 0m54.668s
bs = 10
root@iMac-Chiara:/tmp# time dd if=/dev/sda3 of=/dev/null bs=10 count=100000000
100000000+0 record dentro
100000000+0 record fuori
1000000000 byte (1,0 GB) copiati, 33,4151 s, 29,9 MB/s
real 0m33.417s
user 0m5.692s
sys 0m27.624s
bs = 512 (bù cho việc đọc, để tránh bộ đệm)
root@iMac-Chiara:/tmp# time dd if=/dev/sda3 of=/dev/null bs=512 count=2000000 skip=6000000
2000000+0 record dentro
2000000+0 record fuori
1024000000 byte (1,0 GB) copiati, 10,7437 s, 95,3 MB/s
real 0m10.746s
user 0m0.360s
sys 0m2.428s
bs = 1k (bù cho việc đọc, để tránh bộ đệm)
root@iMac-Chiara:/tmp# time dd if=/dev/sda3 of=/dev/null bs=1k count=1000000 skip=6000000
1000000+0 record dentro
1000000+0 record fuori
1024000000 byte (1,0 GB) copiati, 10,6561 s, 96,1 MB/s
real 0m10.658s
user 0m0.164s
sys 0m1.772s
bs = 1k (bù cho việc đọc, để tránh bộ đệm)
root@iMac-Chiara:/tmp# time dd if=/dev/sda3 of=/dev/null bs=1M count=1000 skip=7000
1000+0 record dentro
1000+0 record fuori
1048576000 byte (1,0 GB) copiati, 10,7391 s, 97,6 MB/s
real 0m10.792s
user 0m0.008s
sys 0m1.144s
bs
kích cỡ được vẽ theo tốc độ thay vì 15 tá khối mã trong một câu hỏi. Sẽ mất ít không gian và được vô cùng nhanh hơn để đọc. Một bức tranh thực sự có giá trị một từ.
bs=8k count=512K
hoặc bs=1M count=4K
tôi không nhớ quyền hạn của 2 trong số 65536
bs=auto
tính năng trongdd
đó sẽ phát hiện và sử dụng tham số bs tối ưu từ thiết bị.