私のコンピュータに深刻なI / Oの問題が発生しました。
ソフトウェア: Kali-rolling, Linux x86-desktop-1 4.12.0-kali2-amd64 #1 SMP Debian 4.12.13-1kali2 (2017-10-03) x86_64 GNU/Linux.しかし、私は基本コアやカスタムコアなど、さまざまなコアを持っています。
ハードウェア:対応するハードウェアは次のとおりです。 Ryzen 1800X CPU、16 GiB RAM、最新のBIOSを搭載したMSI X370 SLI PLUS(バージョン3.6、しかし他の3つも試してみました)、M.2:Crucial®MX300 525GB M.2 SSDと256GB Samsung SSD 840 PRO。
問題:この問題は、ユーザーの観点から最初に説明するのが最善です。
私はLinuxカーネルソースツリーのような小さなファイルをたくさんコピーしています。これはかなりの速度低下を引き起こし、 "ls"バイナリや "dmesg"などの単純なコマンドでも実行に15秒以上かかることがあります。 I / O側では、システム全体が停止し、ブロックエントリがI / Oキューを通過できるようになるまで、すべての形式のI / Oブロックが必要なすべてが停止します。
以下を実行する際に問題が見つかりました。
- ネットワーク経由でCIFSリソースのビデオファイルを再生します。このタイプのI / Oは、ビデオストリームに1〜2秒の遅延時間をもたらす可能性があります。
- Webブラウザを使用してネットワーク経由でMP3ファイルを再生すると、音声が途切れることがあります。
- 特に、多くの小さなファイルが含まれている場合は、SSDまたはM.2デバイスにローカルに何かをコピーします。
この問題は、OSをインストールした後から始まり、続行されました。
私の推論とこの問題を解決する方法は次のとおりです。ハードウェアは複数のI / O要求を同時に処理できる必要があります。 SSDと物理的に分離されたM.2デバイスを試してみましたが、すべて同じ問題があったため、これがすべてSSD / M.2の欠陥によって引き起こされたと考えるのは不合理です。また、特に4.9、4.12、4.13.2、4.13.10などのいくつかのカーネルを試してみたので、基本的なkaliカーネルにこれらの特定のI / O問題があることは不合理に見えます。私はこのパフォーマンスに影響を与えるいくつかのBIOSオプションがあるかもしれないと思いましたが、何も見つかりませんでした。とにかく私はSet Defaultsを実行し、バージョン3.4、3.5、3.6を含むいくつかのBIOSバージョンを試しました。
I / Oエラーがあるかどうかdmesgを確認しましたが、エラーはありませんでした。
また、Linuxには複数のI / Oスケジューラがあることも考慮しました。
$ cat /sys/block/sda/queue/scheduler
noop deadline [cfq]
スケジューラは、たとえば、次のように実行することで変更できます。
echo "noop" > /sys/block/sda/queue/scheduler
詳しくは、この質問をご覧ください。https://stackoverflow.com/questions/1009577/selecting-a-linux-io-scheduler
しかし、noop、Deadline、CFQを試してみましたが、問題にまったく影響を与えないようです。
また、不揮発性デバイスの性能を確認したいと思います。
hdparm -t /dev/sda
/dev/sda:
Timing buffered disk reads: 1112 MB in 3.01 seconds = 369.69 MB/sec
hdparm -t /dev/sda
/dev/sda:
Timing buffered disk reads: 1122 MB in 3.00 seconds = 373.53 MB/sec
パフォーマンスは驚くべきことではなく、実際にはもっとやりました。しかし、この種の性能にもこのような問題は存在してはならない。現在経験している問題がI/Oパフォーマンスの低下に関連しているかどうかは不明です。
同じシステムでGentooを実行すると、840 PROデバイスに次の結果が表示されます(hdparm -t
):
510.82 MB/sec
524.05 MB/sec
この問題をどのようにデバッグするのですか?問題が何であるかを知っている人はいますか?
答え1
何が起こっているのか説明しませんが、ionice
ドライブ操作とtc
(トラフィックシェーピング)ネットワークタスクを使用して問題を解決しようとすることができます。