パフォーマンスの向上

提供: ArchWiki
2015年1月11日 (日) 13:47時点におけるKusakata (トーク | 投稿記録)による版 (1版 をインポートしました)
ナビゲーションに移動 検索に移動

関連記事

この記事ではパフォーマンスに関する基本的なシステムの診断法と、リソースの消費を減らしたりシステムを最適化することができる、また、システムのパフォーマンスを向上させると言われている手順の情報を提供しています。

基本

システムを知る

システムをチューンするには、まず全体のスピードを下げているボトルネックのサブシステムを見つける必要があります。普通システムの仕様を知ることで特定することができますが、目に見える兆候もあります:

  • OpenOffice.org や Firefox などの大きなアプリケーションを同時に動作させたときにコンピュータが遅くなる場合、RAM の量が十分でないのかもしれません。利用できる RAM の量を知るには、次のコマンドを使い、-/+buffers で始まる行をチェックしてください:
$ free -m
  • 起動時間が非常に長い場合、または、アプリケーションを初めて起動するときにロードに長い時間がかかるが起動後は順調に動作する場合、おそらくハードドライブが遅過ぎます。ハードドライブの速度を計測するには hdparm コマンドを使います:
$ hdparm -t /dev/sdx

ハードドライブの純粋な読み込み速度なので、正しいベンチマークとは言えませんが、(アイドル状態のときにドライブをテストして)平均的なコンピュータでは 40MB/s より高い数値が出るのが普通だと思われます。hdparm は公式リポジトリに入っています。

  • RAM が利用できる時でも CPU 負担が一貫して高い場合、CPU 使用量を減らすことが優先事項でしょう。top コマンドを使うなど多くの方法で CPU 負担をモニタすることができます:
$ top
  • ダイレクトレンダリングを使うアプリケーション、つまりビデオプレーヤーやゲームなどグラフィックカードを使うアプリケーションにラグが生じる場合、グラフィックパフォーマンスを向上させることで解決するはずです。まず初めにダイレクトレンダリングが有効になっているかどうか確認しましょう。glxinfo コマンドを使います:
$ glxinfo | grep direct

glxinfomesa-demos パッケージに含まれています。

初めにすること

パフォーマンスを向上させるのに、一番簡単で最も効果的な方法は軽量な環境・アプリケーションを動かすことです。

妥協

ほとんど全てのチューニングには代償が伴います。軽量なアプリケーションは一般的に機能が少ないですし、調整がシステムを不安定にすることもあります。また、実行と管理に時間が必要になるでしょう。このページではそうした欠点もできるだけ触れますが、最終的に決定を下すのはユーザーです。

ベンチマーク

最適化の効果を判断できないことがたびたびあります。そういった場合はベンチマークツールで計測することができます。

ストレージデバイス

デバイスレイアウト

パフォーマンスを一番大きく向上させるもののひとつが、オペレーティングシステムが動くレイアウトを複数のデバイスで作ることです。/ /home /var /usr を異なるディスクに置くと、全てを同じハードドライブに置く、シングルディスクレイアウトに比べて劇的に速くなります。

スワップファイル

スワップファイルを分割したディスクに作成するのも、特にマシンがスワップを頻繁に使う場合、多くの利益があります。利用したい環境に十分な量の RAM がない場合によく使われます。多くの機能とアプリケーションを装備した KDE を使うには数 GiB のメモリが必要になりますが、小さなウィンドウマネージャとコンソールアプリケーションなら 512 MiB メモリ以下でも完全に適合します。

RAID

(2つ以上の)複数のディスクを使える場合、ソフトウェア RAID を設定することでスピードを向上させることが可能です。RAID 0 アレイではドライブ障害に対する冗長性はありませんが、アレイにディスクを追加すればそれだけディスクの速度を高速にできます。賢い選択は RAID 5 を使うことです、RAID 5 はスピードとデータ保護の両方を提供します。

ハードウェアの接続端子

内部ハードウェア端子によってストレージデバイスはマザーボードに接続されます。NIC を通る TCP/IP のように、マザーボードに接続する方法は複数あり、PCIe/PCI を使って直接つなぐ、Firewire、Raid カード、USB、などがあります。ストレージデバイスをこれらの複数の接続端子を使うようにすることで、マザーボードを最大限に使うことできます。例えば、6つのハードドライブを接続するのに全部 USB を使うのは、3つずつ USB と Firewire を使いわけるのよりも、ずっとずっと遅くなります。なぜならば、マザーボードに接続する各々の端子はパイプのようになっており、そのパイプを一度に通過できる量はセットで制限されているからです。吉報は、マザーボードには一般的に複数のパイプがあるということです。

その他の例

  1. pci/PCIe/ata を使って直接マザーボードに接続
  2. 外部容器を使ってディスクを USB/Firewire を通して収納する
  3. tcp/ip で接続してデバイスをネットワークストレージデバイスに変える

また、あなたがマシンのフロントに2つの USB 端子、バックに4つの USB 端子、そして4つのディスクを持っている場合、おそらく一番速くなる構成は、フロント2/バック2もしくはフロント1/バック3です。フロントの端子はバックとは異なり、分割されたルートハブのようになっているため、2倍のデータを送ることができるのです。以下のコマンドを使うことでマシンにある様々な接続経路を確認できます。

USB デバイスツリー
$ lsusb -tv
PCI デバイスツリー
$ lspci -tv

パーティション

パーティションレイアウトもシステムのパフォーマンスに影響を与えることがあります。ドライブの最初のセクター(ディスクの中心部)は最後のセクターよりも高速です。また、パーティションを小さくすれば必要なドライブヘッドの移動が少なくなり、ディスク操作をスピードアップできます。従って、システムのために作るパーティションは小さくして、できるだけドライブの最初に配置することが推奨されます。他のデータ(画像・動画など)は分割パーティションに置くべきです。通常、システム (/) から home ディレクトリ (/home/user) を分割することでこれを達成できます。

ファイルシステムの選択とチューニング

ファイルシステムごとに強みが異なるのでシステムごとにファイルシステムを選ぶことはとても重要です。ファイルシステムの記事に人気のあるファイルシステムの簡単な説明がされています。ここから関連記事も見ることができます。

マウントオプション

マウントオプションを使えばフォーマットする必要なく簡単にスピードを改善できます。マウントコマンドを使うときにマウントオプションを設定できます:

$ mount -o option1,option2 /dev/partition /mnt/partition

永続的に設定するには、/etc/fstab を編集して対象の行を次のようにしてください:

/dev/partition /mnt/partition partitiontype option1,option2 0 0

noatime,nodiratime マウントオプションはほとんど全てのファイルシステムでパフォーマンスを向上させることができるとして知られています。前者は後者の上位版です (nodiratime はディレクトリにだけ適用されます -- noatime はファイルとディレクトリ両方に適用されます)。レアケースで、例えば、あなたが mutt を使っている場合など、小さな問題が起こることがあります。代わりに relatime オプションを使うこともできます (カーネル 2.6.30 以上ではデフォルトです)。

Ext3

Ext3 を見て下さい。

Ext4

Ext4 を見て下さい。

JFS

JFS Filesystem を見て下さい。

XFS

XFS ファイルシステムは作成するときに デフォルトで "boost knobs" が有効になっています:

$ mkfs.xfs /dev/thetargetpartition

Reiserfs

data=writeback マウントオプションはスピードを向上させますが、電源喪失でデータが破損します。notail マウントオプションはファイルシステムが使う容量を 5% ほど増やしますが、全体的なスピードが向上します。ジャーナルとデータを分割してドライブに置くことで読み込み時間を減らすこともできます。これをするにはファイルシステムを作成する際に次のようにしてください:

# mkreiserfs –j /dev/sda1 /dev/sdb1

/dev/sda1 をジャーナルとして使うパーティションに、/dev/sdb1 をデータ用のパーティションに置き換えてください。reiserfs について詳しくはこの記事を見て下さい。

Btrfs

デフラグメンテーション圧縮を見て下さい。

カーネルパラメータの調整

ブロックデバイスのパフォーマンスに影響するキーが複数存在します、詳しくは sysctl#仮想メモリ を見て下さい。

SSD 向けのチューニング

SSD#SSD のパフォーマンスを最大化させるヒント

RAM ディスク / 本当に遅いディスクのためのチューニング

CPU

直接 CPU の速度をあげる唯一の方法がオーバークロックです。煩雑でリスクが伴う作業が必要なので、上級者以外には推奨されません。オーバークロックするのに最適な方法は BIOS を使うことです。パソコンを買うときに、Intel マザーボードがオーバークロックを出来ないようにしていないか確認しておきましょう。

多くの Intel i5・i7 チップは、BIOS や UEFI インターフェースを通して正しくオーバークロックされた場合でも、acpi_cpufreq などのユーティリティに正しいクロック周波数を伝えません。この結果、acpi_cpufreq をアンロードしてブラックリスト化しない限り dmesg は極端なメッセージを表示します。オーバークロックしたチップのクロック速度を Linux で正しく読むことができる唯一のツールが i7z です。i7z パッケージは community リポジトリから利用可能で、i7z-gitAURAUR から利用可能です。

パフォーマンスを改善する方法には (ref)、Con Kolivas の、デスクトップ中心のカーネルパッチセットを使って、Completely Fair Scheduler (CFS) を Brain Fuck Scheduler (BFS) に置き換えるという方法もあります。

BFS パッチを含んだカーネル PKGBUILD は AUR非公式ユーザーリポジトリからインストールできます。追加パッチについての詳しい情報は、linux-ckAURLinux-ck ページを、linux-bfsAURlinux-pfAUR はそれぞれのページを見て下さい。

ノート: BFS/CK はデスクトップ・ラップトップでの利用を考えてデザインされています、サーバーとしての利用は考慮されていません。低レイテンシを提供し 16 CPU 以下で動作します。また、Con Kolivas は HZ を 1000 に設定することを提案しています。詳しくは、BFS FAQKernel patch homepage of Con Kolivas を見て下さい。

Verynice

Verynice は動的に実行可能ファイルの nice レベルを調整するためのデーモンで、AUR では veryniceAUR として利用可能です。nice レベルとは、CPU 資源を配分するときに実行可能ファイルの優先度を表すものです。X やマルチメディアアプリケーションなどレスポンスが重要なアプリケーションを /etc/verynice.confgoodexe と定義しましょう。同じように、make などの、バックグラウンドで CPU を使う実行可能ファイルを badexe として定義することができます。こうやって優先順位をつけることで重い処理を行なっている時のシステムのレスポンスを向上させることができます。

irqbalance

irqbalance はマルチプロセッサシステムでパフォーマンスを向上させるためにプロセッサ間でハードウェア割り込みを分散させます。irqbalance.service操作することが可能です。

ネットワーク

General Recommendations#ネットワーク も見て下さい。

グラフィック

Xorg.conf 設定

グラフィックパフォーマンスは主に /etc/X11/xorg.conf の設定に依存しています。Nvidia, ATI, Intel のカードを使うためのチュートリアルを見ましょう。不適当な設定は Xorg の動作を止めます、警告が参考になるでしょう。

Driconf

driconf はオープンソースドライバのダイレクトレンダリング設定を変えるための小さなユーティリティです。公式リポジトリからインストールできます。HyperZ を有効にすることで劇的にパフォーマンスを向上させることができるかもしれません。

GPU オーバークロック

グラフィックカードをオーバークロックすることは CPU のそれよりも一般的に好都合です、なぜなら、オンザフライで GPU のクロックを調節できる分かりやすいソフトウェアパッケージがあるからです。ATI ユーザーは、rovclockAURamdoverdrivectrlAUR を使って下さい。Nvidia ユーザーは nvclockAUR が必要です。Intel チップセットのユーザーは gmaboosterAUR AUR パッケージで GMABooster をインストールできます。

変更を永続的にするには、X 起動後に適当なコマンドを実行させてください、例えば、~/.xinitrc にコマンドを追加するなど。ただし、必要な時だけにオーバークロック設定を適用させるほうがより安全ではあります。

RAM とスワップ

ファイルを tmpfs に再配置する

ブラウザプロファイルなどのファイルを /tmp/dev/shm などの tmpfs ファイルシステムに再配置すれと、ファイルが RAM に保存され、アプリケーションのレスポンスを向上させることができます。

信頼性を上げ使いやすくするために活発な管理スクリプトを使いましょう。

ブラウザプロファイルの同期についての情報は Profile-sync-daemon を参照してください。

特定のフォルダの同期についての情報は Anything-sync-daemon を参照してください。

Swappiness

Swap#Swappiness を参照してください。

Compcache / Zram

Compcache はデバイスを RAM に作成して圧縮する機構です。最近 compcache は zram カーネルモジュールに置き換えられました。スワップに Zram を使うと、RAM 上に保持できる情報が増やせますが、CPU の使用量は増加します。ただし、ハードドライブにスワップするよりかは大いに高速です。システムがスワップをよく使う場合、レスポンスを向上させることができるかもしれません。Zram はカーネル 3.14 から安定状態になりました (Kernel Newbies の報告)、そのため古いカーネルバージョンを使っている場合は気をつけて下さい。

AUR パッケージ zramswapAUR はあなたのシステムに最適な設定で (RAM サイズや CPU コア数にあわせて) スワップデバイスをセットする自動スクリプトを提供します。スクリプトは1つの CPU コアに1つの zram デバイスを作成し、全体のスペースが RAM の量と同じになるようにします。起動時に自動でこれを行わせるには、systemctl を使って zramswap.service を有効にしてください。

標準スワップよりも圧縮スワップに高い優先度を持たせることでデータの圧縮に複数の CPU コアを利用します。

ヒント: zram の使用は、スワップが SSD にある場合、読み書き回数を減らすのにも役立ちます。

グラフィックカードの RAM を使う

搭載している RAM が僅かでビデオ RAM の余りがないような場合でなければ、ビデオ RAM をスワップとして使うことができます。Swap on video ram を見て下さい。

プリロード

プリロードとは、ターゲットファイルを RAM に置くことです。ハードドライブよりも RAM のほうが速く読み込まれるので、プリロードされたアプリケーションはより早く起動するという利益があります。しかしながら、RAM の一部を(アプリケーションを起動していないときでも)そのために取っておくことになります。したがって、プリロードは Firefox や OpenOffice など巨大でよく使うアプリケーションと一緒に使うのがベストです。

Go-preload

gopreload-gitAURGentoo forum で作成された小さなデーモンです。使うには、まず、起動時にプリロードしたいプログラムごとに、次のコマンドを端末で実行してください:

# gopreload-prepare program

それから、指示通りに、プログラムが完全にロードされたら Enter を押します。これでそのプログラムが必要とするファイルの一覧が /usr/share/gopreload/enabled に追加されます。起動時に全てのリストをロードするには、systemd のサービスファイルを有効にしてください。

# systemctl enable gopreload.service

プログラムのロードを無効化するには、/usr/share/gopreload/enabled の適切なリストを削除するか、/usr/share/gopreload/disabled に移動してください。

Preload

Preload はもっと自動化されたアプローチを取ります。あなたがするべきことは systemd で Preload を有効にすることだけです。

# systemctl enable preload

システムで一番よく使われるファイルを監視して、起動時にプリロードするファイル一覧に組み込みます。

起動時間

Improve Boot Performance にチュートリアルとヒントがあります。

Suspend to RAM

起動時間を短縮する最適解は全く起動しないことです。Suspend to RAM を使えないか考えてみて下さい。

カスタムカーネル

カスタムカーネルをコンパイルすることで起動時間やメモリ使用量を減らすことができるかもしれません、ただし、逆に増えてしまったり、問題が生じることもありえます。基本的に試す価値はありませんが、面白みを感じたり良い勉強の経験になるかもしれません。どうすればいいのか知りたいのなら、ここから始めて下さい。

ネットワーク

ローカルネットワーク上の DNS キャッシュサーバーを使いましょう。接続が作成される度に、TCP/IP スタックは IP アドレスの完全修飾ドメイン名を解決する必要があります。それから接続が可能になります。DNS キャッシュサーバーを使うことで新しい接続の遅延を減らすことが可能です。サーバーをインストールできない場合、DSL ルーターにそのようなサーバーがあるはずです。詳しくは Dnsmasq を見て下さい。

アプリケーションごとの最適化

Firefox

Firefox tweaks にはパフォーマンスを向上させる方法が載っています; 特にアンチフィッシングの停止SQlite データベースのデフラグは効果的です。次も参照: Firefox in Ramdisk

公式リポジトリの Firefox は Profile Guided Optimization が有効になっているプロファイルでビルドされています。カスタムビルドでも PGO を有効にするには .mozconfig に次を加えて下さい:

ac_add_options --enable-profile-guided-optimization

Gcc/Makepkg

Ccache を見て下さい。

LibreOffice

LibreOffice#LibreOffice の高速化 を見て下さい。

Pacman

Improve Pacman Performance を見て下さい。

SSH

SSH の高速化を見て下さい。

ノートパソコン

Laptop を見て下さい。