web-dev-qa-db-ja.com

Linuxディスクアクセスはシステムの速度を低下させます

CPU負荷が100%未満の場合でもシステムの速度が低下しますが、これはスワップパーティションに書き込んでいるためだと思います。はい、スワップパーティションはOSとは別のディスクにあります。 ATAディスクを使用しているWindowsからのこのタイプの速度低下の問題を覚えています。 DMAモードを使用することで解決しました。ディスクがDMAモードを使用しているかどうかはわかりません。SATAドライブであるため、使用していると思いました。これはhdparmからの出力です

/dev/sda:
 multcount     =  0 (off)
 IO_support    =  1 (32-bit)
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 182401/255/63, sectors = 2930277168, start = 0

ev/sdb:
 multcount     =  0 (off)
 IO_support    =  1 (32-bit)
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 30401/255/63, sectors = 488397168, start = 0

このタイプの速度低下動作を最後に見たのは、Windows3.1からでした。

Hdparm -i/dev/sda/dev/sdbからの出力は次のとおりです。

/dev/sda:

 Model=ST31500541AS, FwRev=CC34, SerialNo=6XW0N2LJ
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
 BuffType=unknown, BuffSize=0kB, MaxMultSect=16, MultSect=off
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=2930277168
 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4 
 DMA modes:  mdma0 mdma1 mdma2 
 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
 AdvancedPM=yes: unknown setting WriteCache=enabled
 Drive conforms to: unknown:  ATA/ATAPI-4,5,6,7

 * signifies the current active mode


/dev/sdb:

 Model=HDT722525DLA380, FwRev=V44OA96A, SerialNo=VDB41BT4EUH03C
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=52
 BuffType=DualPortCache, BuffSize=7674kB, MaxMultSect=16, MultSect=off
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=488397168
 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4 
 DMA modes:  mdma0 mdma1 mdma2 
 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
 AdvancedPM=yes: disabled (255) WriteCache=enabled
 Drive conforms to: ATA/ATAPI-7 T13 1532D revision 1:  ATA/ATAPI-2,3,4,5,6,7

 * signifies the current active mode

システムの速度が低下すると、これはfreeからの出力です。

             total       used       free     shared    buffers     cached
Mem:       3538356    3057180     481176          0       8588     280412
-/+ buffers/cache:    2768180     770176
Swap:      5124692    1563140    3561552
6
tony_sid

あなたは質問をしていません。 「なぜ私のシステムは遅いのか」または「どうすればシステムを速くすることができるのか」という質問をするつもりだったと思いますが、どちらも曖昧すぎて答えられません。 「パフォーマンスのボトルネックを調査するにはどうすればよいですか」という、それほど野心的ではない質問に部分的に対処します。

どうやら、システムが応答しないときは、多くのディスクアクティビティがあります。私の答えはこれに基づいています。

RAMとスワップ

ディスクの速度がどれほど速くても、スワッピングは遅くなります。スワップを目に見えて速くするためにできることはあまりありません。システムがスワップしている場合、現実的な解決策は、使用するメモリを減らすか、メモリを増やすことだけです。

freeの出力の解釈

コマンドfreeを使用して、システムが使用しているメモリの量のスナップショットを取得できます。これは次のようなものを示しています。

             total       used       free     shared    buffers     cached
Mem:       3538356    3057180     481176          0       8588     280412
-/+ buffers/cache:    2768180     770176
Swap:      5124692    1563140    3561552
  • Memtotalの数値(ここでは3538356、約3.3GB)は、プロセスで使用可能なRAMの量です(これには、ビデオで使用されるメモリは含まれません)。カードまたはカーネルによる)。

    (64ビットカーネルを使用している場合は、この段落をスキップできます。)x86アーキテクチャは複雑であるため、カーネルがRAMにアクセスする方法はいくつかあります。最近では、実際には、次の2つのモードから選択できます。 [〜#〜] pae [〜#〜] モード。カーネルは最大64GBのRAMを使用できます。カーネルが約3GBしか使用できない非PAEモード。非PAEモードが存在する理由は、PAEモードにはメモリ使用量のオーバーヘッドがあるためです。これは、3GBを超えるRAMがある場合にのみコストに見合う価値があります。心配しているUbuntuユーザーは buntu wikiのPAEページ を読む必要があります。

  • Memfreeの数字は、何にも使用されていないメモリの量を示しています。 RAMが十分に活用されていないか、システムが起動したばかりでない限り、通常はかなり小さい(たとえば、マルチGB-RAMシステムでは10〜50MB)。ここでは、数値はかなり高い(450MB)、これはおそらく、そのくらいのメモリを使用しているアプリケーションが最近閉じられたためです。心配しないでください。すぐにいっぱいになります。

  • -/+ buffers/cacheという見出しの行は、ディスクキャッシュではなく、プロセスによって使用されているメモリの量を示しています。ここでは、キャッシュに使用できるのは約730MBしかないことがわかります。これはRAMのわずか20%であり、それほど多くはありません。システムの応答性を維持するには、ディスクキャッシュに多くのRAMを使用することが重要です。

  • 最後の行は、使用されているスワップの量を示しています。 RAMがいっぱいでない場合でも、スワップが使用されているのは正常です。Linuxは、ディスクがアイドル状態のときにメモリをコピーしてスワップを防止します。後でメモリが必要になった場合に備えて、ディスクがアイドル状態でない可能性があります。

    Linuxは、ディスクキャッシュ用のスペースを確保するために、プロセスメモリをスワップに移動することがよくあります。これは通常のシステム動作であり、トーンダウンしようとすると、システムがslowerになる可能性があります。 vm.swapinessと呼ばれる、Linuxがスワップする量の調整可能な設定があります。実験する場合は、必ず スワッピングを増やす と減らすことを試してください。

    この例のfree出力では、プロセスメモリの約40%がスワップにあることがわかります。それがパフォーマンスを損なうかどうかは、そのメモリが何に使用されるかによって異なります。現在使用されていない1つの大きなアプリケーションであれば、問題はありません。アクティブに使用されているプロセスの一部がスワップされると、システムが非常に応答しなくなる可能性があります。

では、このすべてのメモリを何が使用しているのでしょうか。

メモリ使用量の分析は困難です。プロセスごとに、割り当てられるアドレス空間の量を測定できます。特定の時間にアクティブに使用するメモリの量を測定できます(試行できます)。ファイルにバックアップされたメモリ(プロセスの実行可能ファイルとライブラリからロードされたコードなど)とファイルにバックアップされていないメモリ(プロセスのスタックとヒープ)を追跡する必要があります。もちろん、かなりの量のメモリがプロセス間で共有されるため、特定のプロセスが使用しているメモリの量について話すことはあまり意味がありません。

tophtopなどのコマンドラインツール、または任意の数のグラフィカルシステムモニターとパフォーマンスメーターを使用して、メモリ使用量の全体像を把握できます。 htopの場合、メモリ使用量に関心がある場合は、セットアップ/表示オプションで「カーネルスレッドを非表示」および「ユーザーランドスレッドを非表示」オプションをオンにします。

topまたはhtopの表示では、関連する列はVIRTおよびRESです。 VIRTは、プロセスが割り当てたアドレススペースの量を示します。これには、共有メモリと割り当てられているが使用されていないメモリが含まれます。あまり心配しないでください。 RESは、プロセスが現在使用しているRAM(つまり、スワップをカウントしない)量を示します。

システムがアクティブにスワップしているかどうかを確認する1つの方法は、作業中にtop表示を監視することです。一部のプロセスでRESの数値が上昇し、他のプロセスでは減少している場合は、前者のスペースを確保するために後者のプロセスが交換されていることを意味します。それが頻繁に発生する場合は、使用パターンに慣れるために、さらにRAMが必要です。

ディスク速度

過去の経験から、ディスクが利用可能な最速のアクセスモードを使用していないと思われます。しかし、LinuxはWindowsではありません(特に昔はサードパーティのドライバーが必要でした)。 Linuxディストリビューションをインストールすると、ほとんどの場合、すべての周辺機器に最速のアクセスモードが提供されますクラッシュやデータ損失を引き起こすことが知られていない。 (ビデオドライバは多少例外です。)

hdparm -iを使用して、システムで使用されているDMAモードを確認できます。たとえば、ディスクには両方ともUDMA modes: … *udma6が表示されます。これは、使用可能な最速モードを使用していることを意味します。 (原則として、UDMAはDMAはPIOよりも高速です。数値部分では、高いほど高速です。)

hdparm -tを使用してディスクの生スループットを測定できます。数値自体は、システムの応答性に関する情報を直接提供するものではありませんが、2つのディスクの速度、または同じディスク上の2つのアクセスモードの速度を比較するのに役立ちます。

コンピュータの[〜#〜] bios [〜#〜]を使用すると、ディスクのさまざまな動作モードから選択できる場合があります。最初のSATAディスクが発売されたとき、多くのオペレーティングシステム(WindowsやLinuxなど)には適切なドライバーが付属していませんでした。そのため、BIOSには、原則として低速ですが互換性の高いPATAエミュレーションモードを使用するオプションが付属しています。当時、ディスクはSATA接続を飽和させるほど高速ではありませんでしたが、最近ではそうなる可能性があります。互換性のある設定は「IDE」または「ATAPI」と呼ばれることが多く、より高速な設定は通常「AHCI」と呼ばれます。

ディスクエラー

ディスク関連の速度低下の考えられる原因の1つは、ディスクに障害が発生していて、システムがディスクへのアクセスを数回再試行する必要がある場合です。場合によっては、速度低下が最初の兆候であり、読み取り不可能なファイルの形での実際のエラーは後で発生します。

これが当てはまるかどうかを確認するには、カーネルログ(通常は/var/log/kern.log)を調べます。次のような行が表示された場合

end_request: I/O error, dev sda, sector 123456789
ata3.00: error: { UNC }

バックアップが最新であることを確認し、すぐにディスクを交換してください。上記の行は単なる例であり、エラーメッセージにはさまざまな種類があることに注意してください。

SMART監視ツール を使用して、ディスクの状態に関するレポートを取得できます。

私はいつもすべてのネットブックとノートブックをマルチブートしています:Ubuntu-32とWin7-32​​。 1台のHDD。キャッシュ、一時、およびスワップパーティションは、ドライブの最初のクラスターの近くの最速のドライブに配置する必要があります。入出力速度はそこで最速です。

私が使用しているUbuntuは、スワップドライブを使用することはめったにないようです。 4GBのSODIMMDDR3 RAM、つまり4GBのスワップは、両方のUbuntuブートパーティションに使用されます。私のUbuntuの選択肢は両方とも拡張パーティションにあります。 3つのオペレーティングシステムはすべて、拡張パーティションでも同じDATAパーティションを使用します。このデータパーティションはMS-NTFS-COMPRESSEDです。 Linuxで使用されるNTFS-3Gは、パーティションとして圧縮されていません。低速で低電力のノートブック(「グリーン」)HDDでは、I-Oの読み取り/書き込みが遅いため、小さなクラスターへの圧縮が速くなります。 Microsoftは、余分なCPUサイクル(Zip形式)は重要ではないと主張しています。

ATM Acer5740ノートブックにテラバイトのHDDがあります。 I3 CPU、非常に遅いグラフィック。もともと新しいノートブックにはWin7-64ビットがありましたが、プログラムとハードウェアが多すぎると64ビットで問題が発生します。また、GPUは4GB RAM as 'シャードメモリ'として噛み砕くので、32ビットまたはLinux32-PAEで問題ありません。

1
user37991