SDカードが遅いのはなぜですか?


23

SDカードの動作が遅いようです。ADATA 16 GB SDHCクラス10カードを持っています。同様の仕様のカードをリストした互換性リストを確認しましたが、「機能している」と記載されています。小さなディレクトリにディレクトリリストを取得するなどの単純なタスクでも、最初に要求したときに数秒かかることがあります。SDカードからどのようなパフォーマンスが得られるかを確認するために使用できるツールはありますか?また、SDカードの応答を速くするために行うことができる構成の変更はありますか?

Raspberry PiをヘッドレスBitTorrentシードボックスとして使用しているため、実行しているものはすべてコマンドラインで実行されています。240/16分割を使用して、使用可能なメモリの最大量を確保しています。

更新情報

@Krzysztof Adamskiが「dd」で推奨したいくつかのテストを実行した後、20 MB / sの読み取り速度と約10 MB / sの書き込み速度でいくつかの良い結果が得られました。ただし、I / O速度の問題があるようです。テスト中に、バックグラウンドで「dd」コマンドを実行し、何が起こっているのかを確認するためにトップを実行しました。「mmcqd」プロセスは、5%〜10%のかなりのプロセッサ使用率を占めていることに気付きました。インターネットを調べてみると、「mmcqd」がかなりのCPUを消費していると報告する人々の多くのインスタンスが見つかりました。次に、次のコマンドを実行して、読み取りと書き込みを同時にテストしました

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

このコマンドを実行すると、わずか977 kB / sのスループットが得られ、「mmcqd」は5〜10秒ごとに10%〜25%のプロセッサ使用率を報告し、その後はゼロに戻りました。そこで、さらにテストを行いました。バックグラウンドで次の2つのコマンドを実行し、次に何が起こっているかを確認しました。

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

この場合、「mmcqd」は約35%のプロセッサ使用率のピークになりますが、スループットは読み取りで約7.5 MB /秒、書き込みで約5.3 MB /秒で大幅に向上しました。

大量の書き込みが "mmcqd"によってシステムをロックアップするような問題がここで起こっているようです。これにより、SDカードを待機する速度が高くなりすぎるとすぐに、伝送デーモンがほぼゼロまで減速します。transmission-daemonを実行すると、「mmcqd」の使用率も非常に高くなります。


SDカードがこの問題の原因であると確信していますか?最初に別のカードを使用して、システムの別の部分を除外してみてください。
ダウィドフェレンツィーロゴザン

mmcデバイスに関連するメッセージのsyslogおよびカーネルログを確認しましたか?一部のカードは、Raspberry Piでは機能しません。他のいくつかは、確実に動作するために少し調整が必要です。
ジョッペ

SDカードのリンクが移動しました
ray023

1
@ Ray023ありがとう。リンクを更新しました。将来的には、質問を編集できます。あなたは新しいので、編集内容はすぐには反映されず、元のポスターや他の高解像度ユーザーが承認するために保存されると思います。
キブビー

回答:


21

カードの読み取り速度のテスト:

読み取り速度をテストするには、2つの簡単な方法があります(ディレクトリの一覧表示は読み取り操作のみです)。

  • ddコマンドを使用:

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

    これにより、SDカードから800MBのデータが読み取られ、/ dev / nullに破棄されます。時間がかかる場合は、count = 100をcount = 10に変更して、80MBのみを読み取ることができます。コマンドが終了すると、読み取り速度でメッセージが出力されます。少なくともカップルMB /秒を取得する必要があります。

  • hdparmコマンドを使用:

    sudo hdparm -t /dev/mmcblk0

    これにより、最初のコマンドと同様の速度結果が得られ、少なくとも数MB /秒である必要があります。

カードの書き込み速度のテスト:

実際にカードにデータを書き込む必要があるため、書き込み速度をテストする簡単な方法はありません。低レベル(ファイルシステムの省略)でこれを行いたい場合は、カードの一部のデータをオーバーライドする必要があり、おそらくこれを行いたくないでしょう。これは、スワップパーティションがある場合に簡単に非アクティブ化(でswapoff -a)でき、ddでテスト(でdd if=/dev/zero of=/dev/{yourswappartitionnanehare} bs=8M count=25)してから再作成(でmkswap /dev/{yourswappartitionnanehare})できる場合に実行できます。

スワップパーティションがない場合は、ddコマンドを使用してファイルシステムの書き込み速度をテストできます。

dd if = / dev / zero of = / home / pi / testfile bs = 8M count = 25

これにより、200MBのファイルが作成され/home/pi/testfileます。他の任意のファイル名を使用できます。

ノート:

  • 速度をテストしながら、システムで他のプログラムが実行されていないことを確認します(トレントアプリケーションなど)。
  • テスト後、dmesgコマンドの出力を確認して、mmcサブシステムに関するメッセージがあるかどうかを確認できます。
  • 最新のファームウェアがインストールされていることを確認してください。時々SDカードの速度に関係なくパッチがあります。
  • いくつかのリグレッションがある可能性があるため、古いファームウェアをチェックすることもできます。これを行う最も簡単な方法(ただし、最善ではありません)は、異なる日付にビルドする異なるシステムイメージをテストすることです。より難しい方法は、githubを使用して、ファームウェアファイルの履歴バージョンをチェックアウトすることです。

私の賛辞。MacBook Airで、クラス6の4GB SDカードにimgファイルを書き込むと、1.4 MB /秒になりました。PIの読み取りテストで20 MB /秒と報告されました!?
ScrollerBlaster

私も同じことをしています。私の読み取り速度は500MB /秒のようなものです。私は何か間違っていますか?
最も暗いN2O

12

SDカードのパフォーマンスにとって、アクセスがシーケンシャル(ddのように)なのか、小さなブロックでのランダムアクセスなのかは重要です。SDカード、特にハイクラスのSDカードは、写真やビデオの保存に適したシーケンシャルアクセス用に最適化されているようです。ただし、SDカードのOSを実行するには、多くの小さなファイルが読み書きされるため、ランダムアクセスがより重要です。BitTorrentは多少ランダムなアクセスも生成すると思います。

これら 2つのディスカッションスレッドには、多くのSDカードのベンチマークとディスカッションが含まれています。一般に、ランダム書き込み速度は、カードのOSを実行する応答性にとって決定的なものであることがわかっています。多くの場合、この速度はシーケンシャル書き込みの速度よりはるかに遅く、メーカーが報告したい速度です。SDカードクラスはシーケンシャルスピードに基づいており、実際には、より低いクラス(4または6)がラズベリーの使用により適している場合があります。

iozoneのツールは、多くの異なるアクセスパターンの速度を測定します。ラズベリー iozoneをコンパイルするための簡単な手順をここに投稿しまし


2
興味深い答え。良いですね。
Jivings

4xクラス10を購入したばかりなので、とても興味深いです... :-(
BerggreenDK

@ BerggreenDK:将来的には、カードを別の目的に使用することになるかもしれません。そうすれば、クラス10のカードを買ったことに満足するでしょう。
ネバーランド

1
ランダムな書き込み速度は、ブートシーケンスやディレクトリリストなどの一般的なタスクにはほとんど影響しません。トレントの場合でも、4KBの書き込みでのテスト結果は無関係です。通常のチャンクサイズは約1MBで、空きRAMがない場合、ディスクキャッシュはこれらをさらに大きな順次書き込みにグループ化します。
ドミトリーグリゴリエフ

0

RasPIオンボードスロットについては、RasPIサイトで大きな議論があります:http ://www.raspberrypi.org/phpBB3/viewtopic.php?f=63&t=5057&sid=ee346e3e7cea48d2858a143bcf086362

12ページのディスカッションをすべて読む時間はありませんでしたが、CLK信号に問題があるようです。


0

あなたは「ビットトレント」と書いて、それが私の推測/答えを引き起こします。

トレントプロトコルは、ランダムシーダーからランダムな順序でパッケージを受け取ります。

ファイルシステムでtorrentを使用し始めると、かなり断片化されます。これにより、パフォーマンスが大幅に低下します。

私がSDCARDについて知っていることから、その実行中のFAT / FAT32およびthasはフラグメンテーションの処理に関してさらに悪い。

したがって、SDCARDを最適化する方法を見つけるか、SDCARDからすべてのファイルをコピーして、OSを再インストールしてください。

最後に、(bittorrentエンジンがそうであるように)LOTを記述すると、通常の使用よりも早くSDCARDが破損します。私はそれをするのが間違っていると言ってはいけません、事実、私は自分自身に似ていると考えていました。しかし-それがあなたの問題の理由かもしれません。

ダウンロードと「予約されたアップロード時間」が完了すると、ダウンロードされたファイルを他の宛先全体に自動的に転送/移動するトレントクライアントがあればいいのにと思います。

その後、デフラグは非常に速くなります。


フラグメンテーションはSDカードにどのように適用されますか?ファイルは非シーケンシャルセクタに配置され、ファイルにアクセスするために読み取り/書き込みヘッドを場所全体に移動する必要があるため、断片化は回転ディスクでのみ問題だと思いました。SDカードなどのソリッドステートストレージでは、これは問題ではありません。ただし、bittorrentによる書き込みアクションの数については同意します。私はそれが多くの問題に関係していると思います。それをRPiの少量のメモリ(256 MBのメモリ)と組み合わせると、遅いディスクアクセスのレシピのようです。また、一般的にSDカードは遅いです。
キブビー

さて、FAT / FAT32構造は、多くのファイルの断片を持ち始めると、不良で遅くなります。そして、小さなラズベリーには、動き回る力があまりありません。そのため、邪魔になるものは何でも遅くなります。しかし、繰り返しますが、それは私の推測です。これについては事実がありません。
BerggreenDK

1
RPiはFAT / FAT32も使用しません。ファイルシステムはEXT4です。
キブビー

3
答えは、ビットトレントがおそらくランダムな順序でファイルに小さな断片でデータを書き込むという点で良い点を持っています。このタイプのランダム書き込みは、SDカードでは非常に非効率的です。しかし、デフラグが役立つとは思いません。実際、FATはPiで使用されますが、ブートパーティションにのみ使用されます。
フレパ

1
@Kibbee:raspberrypi.stackexchange.com/questions/8850/での私の回答を参照してください。SDカードに独自のフラグメンテーションの問題がある理由を理解するために。物理ディスクの断片化(ファイルの事前割り当てなど)を回避する多くのソフトウェア技術は、データが割り当てられているときではなく、書き込まれたときにセクターが配置(または移動)されるため、SDカードでは役に立ちません。
supercat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.