Có phải tùy chọn của bsvvvvvvvvvvvvvvvvvvvvvvv


58

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 ):

nhập mô tả hình ảnh ở đâ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

11
Điều sẽ thực sự tốt đẹp là có một bs=autotính năng trong ddđó sẽ phát hiện và sử dụng tham số bs tối ưu từ thiết bị.

4
Điều cực kỳ hay là một biểu đồ gồm nhiều bskí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ự giá trị một từ.
MDMoore313

2
@BigHomie - Tôi đã nghĩ đến việc cung cấp một biểu đồ nhưng ... có một số vấn đề "mở rộng". Có lẽ nó cần một thang đo logarit trên cả hai trục và ... trong khi nghĩ về điều này, tôi nghĩ rằng nó không phải là một vấn đề dễ dàng (và nhanh chóng) để giải quyết. Vì vậy, tôi chuyển sang phiên bản "bảng". Đối với "... 15 tá khối mã", tôi muốn mọi người có cơ hội kiểm tra "số nguyên", để tránh mọi sự can thiệp (cá nhân, của tôi).
Damiano Verzulli

1
@DamianoVerzulli cái bàn rất tuyệt, xin vui lòng bỏ qua câu nói của tôi
MDMoore313

1
@warren - để có được 4G, bạn cũng có thể làm bs=8k count=512Khoặc bs=1M count=4Ktôi không nhớ quyền hạn của 2 trong số 65536
dùng313114

Câu trả lời:


24

Những gì bạn đã làm chỉ là một bài kiểm tra tốc độ đọc. nếu bạn thực sự sao chép các khối sang thiết bị khác, bạn sẽ tạm dừng đọc trong khi thiết bị kia chấp nhận dữ liệu bạn muốn ghi, khi điều này xảy ra, bạn có thể gặp sự cố độ trễ quay trên thiết bị đọc (nếu đó là đĩa cứng) và vì vậy Nó thường nhanh hơn đáng kể để đọc các đoạn 1M khỏi ổ cứng khi bạn gặp phải độ trễ quay thường ít hơn theo cách đó.

Tôi biết khi tôi sao chép đĩa cứng, tôi nhận được tốc độ nhanh hơn bằng cách chỉ định bs=1Mso với sử dụng bs=4khoặc mặc định. Tôi đang nói về cải thiện tốc độ từ 30 đến 300 phần trăm. Không cần phải điều chỉnh nó một cách tuyệt đối trừ khi đó là tất cả những gì bạn làm mỗi ngày. nhưng chọn một cái gì đó tốt hơn mặc định có thể cắt giảm thời gian thực hiện.

Khi bạn đang sử dụng nó thực sự, hãy thử một vài số khác nhau và gửi tín hiệu cho ddquá trình SIGUSR1để đưa ra báo cáo trạng thái để bạn có thể thấy nó đang diễn ra như thế nào.

✗ killall -SIGUSR1 dd
1811+1 records in
1811+1 records out
1899528192 bytes (1.9 GB, 1.8 GiB) copied, 468.633 s, 4.1 MB/s

Macbook Pro Retina 2014 sao chép vào thanh USB3 được đánh giá ở mức 90 MB / s ghi: $ sudo dd if=~/Downloads/Qubes-R4.0-rc4-x86_64.iso of=/dev/rdisk2 status=progresshiển thị 6140928 bytes (6.1 MB, 5.9 MiB) copied, 23 s, 267 kB/s. Tôi đã hủy bỏ điều này vì nó mất quá nhiều thời gian. Bây giờ chỉ định byteize: $ sudo dd if=~/Downloads/Qubes-R4.0-rc4-x86_64.iso of=/dev/rdisk2 bs=1M status=progressshows4558159872 bytes (4.6 GB, 4.2 GiB) copied, 54 s, 84.4 MB/s
Eric Duncan

9

Liên quan đến đĩa cứng bên trong, ít nhất - khi bạn đang đọc từ thiết bị, lớp khối ít nhất phải truy xuất một sector có 512 byte.

Vì vậy, khi xử lý đọc 1 byte, bạn chỉ thực sự đọc từ đĩa trên truy xuất byte được căn chỉnh theo cung. 511 lần còn lại được phục vụ bởi bộ nhớ cache.

Bạn có thể chứng minh điều này như sau, trong ví dụ sdbnày là một đĩa quan tâm:

# grep sdb /proc/diskstats
8      16 sdb 767 713 11834 6968 13710 6808 12970792 6846477 0 76967 6853359
...
# dd if=/dev/sdb of=/dev/null bs=1 count=512
512+0 records in
512+0 records out
512 bytes (512 B) copied, 0.0371715 s, 13.8 kB/s
# grep sedb /proc/diskstats
8      16 sdb 768 713 11834 6968 13710 6808 12970792 6846477 0 76967 6853359
...

Cột thứ tư (tính số lần đọc) cho biết chỉ có 1 lần đọc xảy ra, mặc dù thực tế bạn đã yêu cầu 1 byte đọc. Đây là hành vi được mong đợi vì thiết bị này (đĩa SATA 2) tối thiểu phải trả lại kích thước cung của nó. Nhân đơn giản là lưu trữ toàn bộ khu vực.

Yếu tố lớn nhất trong các yêu cầu kích thước này là chi phí phát hành cuộc gọi hệ thống để đọc hoặc ghi. Trên thực tế, việc đưa ra lời kêu gọi <512 là không hiệu quả. Việc đọc rất lớn đòi hỏi ít cuộc gọi hệ thống hơn với chi phí sử dụng nhiều bộ nhớ hơn để thực hiện.

4096 thường là số 'an toàn' để đọc vì:

  • Khi đọc với bộ nhớ đệm trên (mặc định), một trang là 4k. Việc lấp đầy một trang với <4k lượt đọc phức tạp hơn so với việc giữ kích thước đọc và kích thước trang như nhau.
  • Hầu hết các kích thước khối hệ thống tập tin được đặt thành 4k.
  • Nó không phải là một con số đủ nhỏ (có thể là cho SSD bây giờ) để gây ra tình trạng quá tải nhưng không phải là một con số đủ lớn để tiêu thụ nhiều bộ nhớ.
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.