パフォーマンスの向上
関連記事
この記事ではパフォーマンスに関する基本的なシステムの診断法と、リソースの消費を減らしたりシステムを最適化することができる、また、システムのパフォーマンスを向上させると言われている手順の情報を提供しています。
基本
システムを知る
システムをチューンするには、まず全体のスピードを下げているボトルネックのサブシステムを見つける必要があります。普通システムの仕様を知ることで特定することができますが、目に見える兆候もあります:
- 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
glxinfo
は mesa-demos パッケージに含まれています。
初めにすること
パフォーマンスを向上させるのに、一番簡単で最も効果的な方法は軽量な環境・アプリケーションを動かすことです。
- デスクトップ環境の代わりにウィンドウマネージャを使いましょう。dwm, wmii, i3, Awesome, Openbox, Fluxbox, JWM, xmonad などがあります。
- 重量級のデスクトップ環境、GNOME や KDE の代わりに、LXDE や Xfce などの軽量な環境を使いましょう。
- 軽量なアプリケーションを使いましょう。アプリケーション一覧でコンソールアプリケーションを探したり、フォーラム内のライトアンドファースト・アプリケーション・アワードのスレッドを見て下さい: 2007, 2008, 2009, 2010, 2011, 2012。
- 不必要なデーモンを停止させたり
systemctl
を使ってバックグラウンドで動かしているデーモンを削除しましょう。
妥協
ほとんど全てのチューニングには代償が伴います。軽量なアプリケーションは一般的に機能が少ないですし、調整がシステムを不安定にすることもあります。また、実行と管理に時間が必要になるでしょう。このページではそうした欠点もできるだけ触れますが、最終的に決定を下すのはユーザーです。
ベンチマーク
最適化の効果を判断できないことがたびたびあります。そういった場合はベンチマークツールで計測することができます。
ストレージデバイス
デバイスレイアウト
パフォーマンスを一番大きく向上させるもののひとつが、オペレーティングシステムが動くレイアウトを複数のデバイスで作ることです。/
/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 を使いわけるのよりも、ずっとずっと遅くなります。なぜならば、マザーボードに接続する各々の端子はパイプのようになっており、そのパイプを一度に通過できる量はセットで制限されているからです。吉報は、マザーボードには一般的に複数のパイプがあるということです。
その他の例
- pci/PCIe/ata を使って直接マザーボードに接続
- 外部容器を使ってディスクを USB/Firewire を通して収納する
- 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 向けのチューニング
RAM ディスク / 本当に遅いディスクのためのチューニング
CPU
直接 CPU の速度をあげる唯一の方法がオーバークロックです。煩雑でリスクが伴う作業が必要なので、上級者以外には推奨されません。オーバークロックするのに最適な方法は BIOS を使うことです。パソコンを買うときに、Intel マザーボードがオーバークロックを出来ないようにしていないか確認しておきましょう。
多くの Intel i5・i7 チップは、BIOS や UEFI インターフェースを通して正しくオーバークロックされた場合でも、acpi_cpufreq などのユーティリティに正しいクロック周波数を伝えません。この結果、acpi_cpufreq をアンロードしてブラックリスト化しない限り dmesg は極端なメッセージを表示します。オーバークロックしたチップのクロック速度を Linux で正しく読むことができる唯一のツールが i7z です。i7z パッケージは community リポジトリから利用可能で、i7z-gitAUR は AUR から利用可能です。
パフォーマンスを改善する方法には (ref)、Con Kolivas の、デスクトップ中心のカーネルパッチセットを使って、Completely Fair Scheduler (CFS) を Brain Fuck Scheduler (BFS) に置き換えるという方法もあります。
BFS パッチを含んだカーネル PKGBUILD は AUR や非公式ユーザーリポジトリからインストールできます。追加パッチについての詳しい情報は、linux-ckAUR は Linux-ck ページを、linux-bfsAUR や linux-pfAUR はそれぞれのページを見て下さい。
Verynice
Verynice は動的に実行可能ファイルの nice レベルを調整するためのデーモンで、AUR では veryniceAUR として利用可能です。nice レベルとは、CPU 資源を配分するときに実行可能ファイルの優先度を表すものです。X やマルチメディアアプリケーションなどレスポンスが重要なアプリケーションを /etc/verynice.conf
で goodexe と定義しましょう。同じように、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 ユーザーは、rovclockAUR か amdoverdrivectrlAUR を使って下さい。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 コアを利用します。
グラフィックカードの RAM を使う
搭載している RAM が僅かでビデオ RAM の余りがないような場合でなければ、ビデオ RAM をスワップとして使うことができます。Swap on video ram を見て下さい。
プリロード
プリロードとは、ターゲットファイルを RAM に置くことです。ハードドライブよりも RAM のほうが速く読み込まれるので、プリロードされたアプリケーションはより早く起動するという利益があります。しかしながら、RAM の一部を(アプリケーションを起動していないときでも)そのために取っておくことになります。したがって、プリロードは Firefox や OpenOffice など巨大でよく使うアプリケーションと一緒に使うのがベストです。
Go-preload
gopreload-gitAUR は Gentoo 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 を見て下さい。