Tại sao viết SLOW trên thiết bị thô và NHANH CHÓNG trên hệ thống tập tin (khóa USB)?


7

Tôi có một khóa USB ( PQI U822V-Speedy 32G ) mà tôi đang cố gắng điểm chuẩn nhanh trên Linux. Tôi đang thử viết bandwith.

dd trên phân vùng thô

Tôi đã tạo một phân vùng bắt đầu từ sector 2048, sau đó thực hiện ghi tuần tự 4 GB:

dd if=/dev/zero of=/dev/sdb1 bs=1M count=4096

Tôi nhận được ~ 22 MB / s.

Tôi cũng đã thử một vài (4) ddchạy song song như ở trên nhưng sử dụng count=1024seek=tùy chọn để ghi vào các khu vực khác nhau của ổ đĩa. Kết quả tương tự.

dd trên hệ thống tập tin

Tuy nhiên, khi tôi định dạng sdb1phân vùng bằng ext4hoặc NTFS, và sao chép các tệp lớn vào đó (có thực hoặc /dev/zero), như thế này:

time dd if=/dev/zero of=/media/USBKEY/file.bin bs=1M count=4096 ; time sync

Tôi đạt được> 66 MB / s như quảng cáo của nhà sản xuất. Tất nhiên, tôi đã xem xét syncthời lượng ngay sau khi sao chép.

Tại sao có sự khác biệt hiệu suất lớn như vậy?


1
Hệ thống tập tin của bạn có thể lưu vào bộ đệm đó - sự khác biệt là o/iflag=nocachegì? Ngoài ra còn có directsynctùy chọn có liên quan - tôi luôn luôn sử dụng syncít nhất là với usb chỉ vì vậy tôi có thể chắc chắn không để kéo ưu quá sớm. Và nếu bạn đang sử dụng syncthì có thể xem liệu bạn có thể có được tốc độ tương tự vớinonblock
mikeerv

Hệ thống tập tin sẽ ghi tập tin ở đâu đó ngoài phần bắt đầu của phân vùng. Có lẽ có một cái gì đó sai với khu vực gần bắt đầu? Hãy thử một ddđối số nhưng với các đối số tìm kiếm cao hơn để ghi vào các phần khác nhau của đĩa.
psusi

Hấp dẫn. Bạn có thể lặp lại thử nghiệm với các kích thước khối khác nhau (sức mạnh khác nhau của hai loại, ví dụ 4K, 8K, 16K, 32K, 64K, 128K, 256K, 512K) nhưng tổng dữ liệu giống hệt nhau không? Tôi rất tò mò nếu điều đó sẽ làm cho một sự khác biệt.
marcelm

Tôi đã thấy Linux chậm khi ghi vào các phím USB ngay cả với hệ thống tệp FAT32. Tôi đã thấy rằng sử dụng rsync --bwlimitkhi sao chép tập tin thực sự có thể giúp đỡ . Nó có vẻ giống như bị kẹt xe: nếu Linux cố gắng đưa quá nhiều dữ liệu xuống cổ họng của thiết bị USB, thì nó thực sự bị chậm và chậm cho đến khi tôi tạm dừng bản sao trong khi bộ đệm bị xóa. (đây là với thanh USB giá rẻ).
Peter Cordes

Câu trả lời:


1

Bây giờ tôi nhìn lại, tôi nhận ra bạn nói đây là khóa usb (ổ flash) không phải ổ cứng. Bộ nhớ flash chỉ có thể bị xóa trong các khối lớn và các thành phần riêng lẻ không thể được ghi mà không xóa chúng (và toàn bộ khối chúng nằm trong) trước tiên. Vì phần mềm hy vọng có thể ghi bất cứ nơi nào nó muốn trên đĩa bất cứ lúc nào, nên đĩa có logic dịch trong đó để xử lý việc xóa một cách trong suốt. Làm thế nào điều này được thực hiện có ảnh hưởng đáng kể đến hiệu suất viết. Nhiều thiết bị sử dụng một thuật toán cho hầu hết các đĩa xử lý việc ghi tuần tự rất tốt, nhưng lại bị mất khi ghi ngẫu nhiên. Khu vực gần đầu đĩa thường được sử dụng bởi FAT trong hệ thống tệp FAT mà chúng được định dạng sẵn và khu vực này được ghi ngẫu nhiên thành thường xuyên, vì vậy chúng sử dụng một thuật toán khác trong khu vực này chậm hơn khi ghi tuần tự,

Vì vậy, bây giờ tôi khá chắc chắn rằng dự đoán ban đầu của tôi, tôi đã thêm vào như một nhận xét là đúng. Những gì bạn đang thấy khi bạn ghi vào hệ thống tập tin là hiệu suất của phần còn lại của đĩa và khi bạn dd ở offset 0, bạn đang ghi vào vùng mỡ. Nếu bạn tìm kiếm điểm đến dd vài trăm mb, nó sẽ tăng tốc đáng kể.


1
Đó là một khẳng định táo bạo để khẳng định bất kỳ mức độ chắc chắn nào mặc dù không có cập nhật nào từ người hỏi và, 0 trích dẫn nhân đôi và không có bằng chứng về bất kỳ bài kiểm tra nào của bạn. Quá táo bạo, tôi nghĩ vậy.
mikeerv


Cảm ơn bạn. Bạn có thể thích điều này: bunniestudios.com/blog/?p=3554 Họ đã nói chuyện một giờ dài ở đây: youtube.com/watch?feature=player_embedded&v=r3GDPwIuRKI Nó sẽ không cho phép tôi đảo ngược phiếu bầu của mình. Đã quá lâu rồi. Và bạn nên đặt nó trong câu trả lời của bạn - nhưng tôi nợ bạn một câu. Không, tôi không. Chúng tôi thậm chí.
mikeerv

@psusi: vì vậy nó trở nên tốt hơn so ddvới thiết bị khối thô và trong điểm chuẩn được thực hiện, sử dụng một hệ thống tệp là yếu tố hỗ trợ cho việc này, phải không?
Bananguin

1
@Bananguin, lập luận của bạn tương đương với việc gặp tai nạn xe hơi trên đường đi làm và cho rằng làm việc gây ra tai nạn xe hơi. Có thể đúng là lúc đó bạn không lên xe hơi để đi làm, bạn sẽ không gặp tai nạn cụ thể đó, nhưng bạn không thể kết luận rằng làm việc gây ra tai nạn xe hơi. Nó chỉ xảy ra như vậy đó là nơi bạn sẽ đến khi bạn có một. Ở đây, hệ thống tập tin đặt dữ liệu vào một phần của đĩa nhanh hơn so với nơi OP dd'd đến. Điều đó không có nghĩa là hệ thống tập tin kỳ diệu nhanh hơn dd nói chung.
psusi

0

Kết quả đo của bạn có thể được giải thích với kiến ​​trúc kernel. Sử dụng truy cập hệ thống tập tin sẽ giải phóng toàn bộ tiềm năng của kernel với tất cả các bộ đệm và tối ưu hóa mà nó có thể làm. Đặc biệt, bộ đệm sẽ tăng tốc điểm chuẩn của bạn (b / c kernel là 100% a_A_syncronous). dd trên một tập tin thiết bị không sử dụng bất kỳ / nhiều trong số này.


3
Viết trực tiếp vào một thiết bị khối sẽ sử dụng bộ đệm.
psusi

@psusi - có thể. Nhưng nếu không có hệ thống tệp mục tiêu và ddđang viết ra các khối liên tiếp có kích thước bằng nhau, thì hệ thống tệp nào lưu trữ ghi?
mikeerv

1
@mikeerv, giao diện thiết bị khối lưu trữ truy cập trực tiếp vào các thiết bị khối.
psusi

@psusi vậy bộ đệm của thiết bị vật lý sau đó hay có một số lớp bộ đệm trong kernel?
mikeerv

2
@mikeerv Giao diện thiết bị khối là một phần của kernel.
Chris Down

0

hdparmThay vào đó, hãy thử sử dụng để đánh giá hiệu năng của ổ đĩa có và không sử dụng bất kỳ bộ đệm nào:

$ sudo hdparm -tT /dev/sda1

/dev/sda1:
 Timing cached reads:   6314 MB in  2.00 seconds = 3157.61 MB/sec
 Timing buffered disk reads: 244 MB in  3.04 seconds =  80.26 MB/sec

Tôi đang viết chuẩn , xem tiêu đề câu hỏi.
Totor

1
Nếu tôi nhớ chính xác hdparm cũng có thể viết (phá hoại).
Thorbjørn Ravn Andersen

-2

Điều này xảy ra do việc tối ưu hóa việc ghi các tệp thưa trong hệ thống tệp.

Khi bạn thực hiện dd if=/dev/zerovới thiết bị thô, các khối 0 thực sự được ghi vào đĩa.

Tuy nhiên, khi bạn ghi chúng vào một tệp, hệ thống tệp sẽ bỏ qua việc ghi dữ liệu và chỉ lưu siêu dữ liệu. Điều này dẫn đến rất ít khối được ghi vào đĩa. Các tập tin có thể được coi là một lỗ lớn, không chứa gì.

Để kiểm tra hiệu suất theo cách này, hãy sử dụng / dev / urandom làm tệp đầu vào ( dd if=/dev/urandom). Điều đó sẽ buộc hệ thống tập tin ghi dữ liệu ngẫu nhiên vào đĩa.


2
Sai, vì ba lý do. 1 / Tôi đã nói rằng tôi đã thử nghiệm với các tệp thực: "hoặc thực hoặc /dev/zero"; 2 / trên nhiều máy, /dev/urandomchậm hơn nhiều so với thiết bị lưu trữ; 3 / thường xuyên nhất, tối ưu hóa hệ thống tệp như các tệp thưa thớt phải được yêu cầu rõ ràng, xem cp --sparsevà những thứ khác ...
Totor
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.