Tại sao thẻ SD của tôi chậm?


23

Thẻ SD của tôi dường như đang chạy chậm. Tôi có thẻ ADATA 16 GB SDHC Class 10. Tôi đã kiểm tra danh sách tương thích liệt kê một thẻ có thông số kỹ thuật tương tự và thông báo rằng nó đang "hoạt động". Ngay cả các tác vụ đơn giản như nhận danh sách thư mục trên một thư mục nhỏ cũng có thể mất vài giây trong lần đầu tiên tôi yêu cầu. Có công cụ nào tôi có thể sử dụng để xác minh loại hiệu suất nào tôi nhận được từ thẻ SD không? Ngoài ra, có bất kỳ thay đổi cấu hình nào tôi có thể thực hiện để nhận thẻ SD phản hồi nhanh hơn không?

Tôi đang sử dụng Raspberry Pi như một hộp hạt giống BitTorrent không đầu , vì vậy tất cả những thứ tôi đang chạy chỉ là chạy trên dòng lệnh. Tôi đang sử dụng phân tách 240/16 để đảm bảo rằng tôi có đủ bộ nhớ tối đa.

Cập nhật

Sau khi chạy một số thử nghiệm như @Krzysztof Adamski đã đề xuất với "dd", tôi đã nhận được một số kết quả tốt khi nhận được tốc độ đọc 20 MB / s và tốc độ ghi khoảng 10 MB / s. Tuy nhiên, nó dường như vẫn có một số vấn đề về tốc độ I / O. Khi kiểm tra, tôi chạy các lệnh "dd" trong nền và chạy trên cùng, để xem điều gì đang xảy ra. Tôi nhận thấy rằng quá trình "mmcqd" đã chiếm khá nhiều sử dụng bộ xử lý, từ 5% đến 10%. Tôi đã tìm kiếm trên Internet và thấy nhiều trường hợp người báo cáo rằng "mmcqd" sử dụng khá nhiều CPU. Sau đó tôi đã chạy lệnh sau để kiểm tra đọc và viết cùng một lúc

sudo dd if=/dev/mmcblk0 of=test.dat bs=1M count=1024

Khi chạy lệnh này, tôi nhận được thông lượng chỉ 977 kB / s và "mmcqd" đã báo cáo mức sử dụng của bộ xử lý trong khoảng từ 10% đến 25% cứ sau 5 đến 10 giây, sau đó nó sẽ quay trở lại không có gì. Vì vậy, tôi đã làm thêm một số thử nghiệm. Tôi đã chạy hai lệnh sau trong nền, và sau đó xem những gì đang diễn ra ở trên cùng.

sudo dd if=/dev/mmcblk0 of=/dev/null bs=1M count=1024 &
sudo dd if=/dev/zero of=test.dat bs=1M count=1024 &

Trong trường hợp này, "mmcqd" sẽ đạt mức sử dụng bộ xử lý khoảng 35%, nhưng thông lượng tốt hơn rất nhiều, khoảng 7,5 MB / giây để đọc và khoảng 5,3 MB / giây khi viết.

Dường như có một số loại vấn đề đang xảy ra ở đây, nơi ghi nặng khiến "mmcqd" khóa hệ thống. Điều này khiến cho daemon truyền chậm xuống gần như bằng 0 ngay khi tốc độ quá cao khi nó chờ thẻ SD. Khi chạy daemon truyền, tôi cũng thấy việc sử dụng "mmcqd" khá cao.


Bạn có chắc chắn rằng thẻ SD gây ra vấn đề này? Trước tiên bạn có thể thử sử dụng một thẻ khác để loại trừ các phần khác của hệ thống không?
Dawid Ferenczy Rogožan

Bạn đã kiểm tra nhật ký hệ thống và nhật ký kernel cho các tin nhắn liên quan đến thiết bị mmc chưa? Một số thẻ đơn giản là không hoạt động trong Raspberry Pi. Một số người khác đòi hỏi một chút tinh chỉnh để làm việc đáng tin cậy.
Joppe

Liên kết thẻ SD đã được di chuyển
ray023

1
@ Ray023 Cảm ơn. Tôi đã cập nhật các liên kết. Trong tương lai, bạn chỉ có thể chỉnh sửa câu hỏi. Tôi nghĩ bởi vì bạn là người mới, bản chỉnh sửa sẽ không được thực hiện ngay lập tức, nhưng sẽ được lưu cho người đăng ban đầu hoặc một số người dùng đại diện cao khác chấp thuận.
Kibbee

Câu trả lời:


21

Kiểm tra tốc độ đọc thẻ:

Có hai cách dễ dàng để kiểm tra tốc độ đọc (thư mục liệt kê chỉ là thao tác đọc):

  • sử dụng lệnh dd:

    sudo dd if=/dev/mmcblk0 of=/dev/null bs=8M count=100

    Điều này sẽ đọc 800 MB dữ liệu từ thẻ SD của bạn và loại bỏ dữ liệu này thành / dev / null. Nếu mất nhiều thời gian, bạn có thể thay đổi đếm = 100 thành đếm = 10 để chỉ đọc 80MB. Sau khi hoàn thành lệnh, nó sẽ in một tin nhắn với tốc độ đọc. Bạn sẽ nhận được ít nhất vài MB / s.

  • sử dụng lệnh hdparm:

    sudo hdparm -t /dev/mmcblk0

    Điều này sẽ cung cấp cho bạn kết quả tốc độ tương tự như lệnh đầu tiên và cũng phải có ít nhất vài MB / s.

Kiểm tra tốc độ ghi thẻ:

Không có cách dễ dàng để kiểm tra tốc độ ghi vì để làm điều này, bạn sẽ phải thực sự ghi một số dữ liệu vào thẻ. Nếu bạn muốn làm điều này ở mức độ thấp (bỏ qua hệ thống tập tin), bạn sẽ phải ghi đè một số dữ liệu trên thẻ và có lẽ bạn không muốn làm điều này. Điều này có thể được thực hiện nếu bạn có phân vùng trao đổi vì nó có thể dễ dàng hủy kích hoạt (với swapoff -a), được thử nghiệm với dd (với dd if=/dev/zero of=/dev/{yourswappartitionnanehare} bs=8M count=25) và sau đó được tạo lại (với mkswap /dev/{yourswappartitionnanehare}).

Nếu bạn không có phân vùng trao đổi, bạn cũng có thể kiểm tra tốc độ ghi của hệ thống tệp bằng cách sử dụng lệnh dd:

dd if = / dev / zero of = / home / pi / testfile bs = 8M đếm = 25

Điều này sẽ tạo tập tin 200 MB trong /home/pi/testfile. Bạn có thể sử dụng bất kỳ tên tệp nào bạn muốn.

Ghi chú:

  • Trong khi kiểm tra tốc độ, đảm bảo không có chương trình nào khác đang chạy trong hệ thống của bạn (như ứng dụng torrent, v.v.).
  • Sau khi kiểm tra, bạn có thể kiểm tra đầu ra của dmesglệnh để xem liệu có bất kỳ thông báo nào về hệ thống con mmc không.
  • Đảm bảo bạn đã cài đặt phần sụn cập nhật nhất. Thỉnh thoảng có các bản vá bất kể tốc độ thẻ SD.
  • Bạn cũng có thể muốn kiểm tra một số phần mềm cũ hơn vì có thể có một số hồi quy. Cách dễ nhất để làm điều này (nhưng không phải là tốt nhất) là kiểm tra các hình ảnh hệ thống khác nhau, nơi xây dựng vào các ngày khác nhau. Cách khó hơn là sử dụng github và kiểm tra các phiên bản lịch sử của tệp phần sụn.

Những lời khen của tôi. Trên MacBook Air, tôi nhận được 1,4 MB / giây khi ghi tệp img vào Thẻ SD 4GB lớp 6. Một bài kiểm tra đọc trên PI báo cáo 20 MB / giây!?
ScrollerBlaster

Tôi có cùng một điều. Tốc độ đọc của tôi là khoảng 500MB / giây. Tôi có bị nhầm không?
N2O đen tối nhất

12

Đối với hiệu suất của thẻ SD, vấn đề rất lớn cho dù truy cập là tuần tự (như với dd) hay truy cập ngẫu nhiên trong các khối nhỏ. Thẻ SD, đặc biệt là thẻ cao cấp dường như được tối ưu hóa để truy cập tuần tự, rất tốt cho việc lưu trữ ảnh hoặc video. Tuy nhiên, để chạy hệ điều hành truy cập ngẫu nhiên của thẻ SD thì quan trọng hơn, vì rất nhiều tệp nhỏ được đọc và ghi. Tôi đoán bittorrent cũng tạo ra một số truy cập ngẫu nhiên.

Những hai chủ đề thảo luận có chứa rất nhiều chuẩn thẻ SD và thảo luận. Nhìn chung, tốc độ ghi ngẫu nhiên được xác định là quyết định cho khả năng đáp ứng của việc chạy HĐH của thẻ. Tốc độ này thường thấp hơn nhiều so với tốc độ ghi tuần tự, đây là tốc độ mà các nhà sản xuất muốn báo cáo. Lớp thẻ SD dựa trên tốc độ tuần tự và các lớp thấp hơn (4 hoặc 6) trên thực tế có thể phù hợp hơn cho việc sử dụng quả mâm xôi.

Công cụ iozone đo tốc độ của nhiều mẫu truy cập khác nhau. Tôi đã đăng các hướng dẫn ngắn gọn để biên dịch iozone trên quả mâm xôi ở đây .


2
Câu trả lời thú vị. Đẹp một.
Jivings

rất thú vị khi tôi vừa mua 4x lớp 10 ... dang! :-(
BerggreenDK

@ BerggreenDK : Có thể trong tương lai bạn sử dụng tốt các thẻ cho một mục đích khác và sau đó có thể bạn sẽ rất vui khi bạn mua thẻ lớp 10.
Neverland

1
Tốc độ ghi ngẫu nhiên sẽ có ít ảnh hưởng trong các tác vụ thông thường như trình tự khởi động hoặc danh sách thư mục. Ngay cả đối với các torrent, kết quả kiểm tra với ghi 4KB là không liên quan: kích thước khối thông thường là khoảng 1MB và trừ khi bạn không có RAM miễn phí, bộ đệm đĩa sẽ nhóm chúng thành các lần ghi tuần tự lớn hơn.
Dmitry Grigoryev


0

Bạn viết "bittorrent" và điều đó kích hoạt dự đoán / câu trả lời của tôi.

Giao thức torrent nhận các gói theo thứ tự ngẫu nhiên từ các seeder ngẫu nhiên.

Khi bạn bắt đầu sử dụng torrent trên bất kỳ hệ thống tập tin nào, nó sẽ trở nên khá phân mảnh. Điều này sẽ làm tổn thương hiệu suất lớn.

Từ những gì tôi biết về SDCARD, nó chạy FAT / FAT32 và thậm chí còn tệ hơn khi xử lý phân mảnh.

Vì vậy, hãy tìm cách chống phân mảnh SDCARD của bạn hoặc sao chép tất cả các tệp khỏi nó và sau đó cài đặt lại HĐH.

Cuối cùng, viết RẤT NHIỀU (như công cụ bittorrent sẽ) sẽ xé SDCARD của bạn nhanh hơn so với việc sử dụng thông thường. Tôi không nói rằng đó là sai lầm khi làm điều đó, vì tôi đã tự coi mình là tương tự. Nhưng - đó có thể là lý do cho vấn đề của bạn.

Tôi ước có một máy khách torrent tự động chuyển / di chuyển các tệp đã tải xuống sang một đích khác sau khi quá trình tải xuống + "thời gian tải lên dành riêng" hoàn tất.

Sau đó, việc chống phân mảnh sẽ nhanh hơn rất nhiều.


Làm thế nào để phân mảnh áp dụng cho thẻ SD? Tôi nghĩ rằng phân mảnh chỉ là một vấn đề trên các đĩa quay, vì tệp sẽ nằm trên các khu vực không tuần tự, khiến đầu đọc / ghi phải di chuyển khắp nơi để truy cập tệp. Trên lưu trữ trạng thái rắn như thẻ SD, đây không phải là vấn đề. Tuy nhiên, tôi sẽ đồng ý với bạn về số lượng hành động viết do bittorrent gây ra. Tôi nghĩ rằng có rất nhiều để làm với vấn đề. Kết hợp điều đó với dung lượng bộ nhớ nhỏ trên RPi (của tôi có 256 MB) và nó dường như là một công thức để truy cập đĩa chậm. Ngoài ra thẻ SD nói chung là chậm.
Kibbee

Chà, cấu trúc FAT / FAT32 rất tệ và chậm khi bạn bắt đầu có nhiều đoạn tệp. Và Raspberry nhỏ không có quá nhiều sức mạnh để di chuyển. Vì vậy, bất cứ điều gì đến theo cách của nó, làm chậm nó. Nhưng một lần nữa, đó chỉ là phỏng đoán của tôi. Tôi không có sự thật về điều này.
BerggreenDK

1
RPi thậm chí không sử dụng FAT / FAT32. Hệ thống tập tin là EXT4.
Kibbee

3
Câu trả lời có một điểm hay ở chỗ bittorrent có thể ghi dữ liệu vào các tệp thành từng phần nhỏ theo thứ tự ngẫu nhiên. Kiểu ghi ngẫu nhiên này rất kém hiệu quả trên thẻ SD. Nhưng tôi không nghĩ việc chống phân mảnh sẽ giúp ích. Trên thực tế, FAT được sử dụng trên Pi, nhưng chỉ cho phân vùng khởi động.
Frepa

1
@Kibbee: Xem câu trả lời của tôi tại raspberrypi.stackexchange.com/questions/8850/NH để hiểu tại sao thẻ SD có vấn đề phân mảnh của riêng họ. Nhiều kỹ thuật phần mềm tránh phân mảnh đĩa vật lý (như tệp phân bổ trước) là vô dụng với thẻ SD, vì các cung được đặt (hoặc di chuyển) khi dữ liệu được ghi vào chúng, thay vì khi chúng được phân bổ.
supercat
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.