Difference between revisions of "Maximizing Performance (日本語)"

From ArchWiki
Jump to: navigation, search
m (初めにすること)
m (Compcache / Zram)
Line 182: Line 182:
  
 
===Compcache / Zram ===
 
===Compcache / Zram ===
[https://code.google.com/p/compcache/ Compcache], nowadays replaced by the '''zram''' kernel module, creates a device in RAM and compresses it. If you use for swap means that part of the RAM can hold much more information but uses more CPU. Still, it is much quicker than swapping to a hard drive. If a system often falls back to swap, this could improve responsiveness. Zram is in mainline staging (therefore its not stable yet, use with caution).
+
[https://code.google.com/p/compcache/ Compcache] はデバイスを RAM に作成して圧縮する機構です。最近 compcache は '''zram''' カーネルモジュールに置き換えられました。スワップに Zram を使うと、RAM 上に保持できる情報が増やせますが、CPU の使用量は増加します。ただし、ハードドライブにスワップするよりかは大いに高速です。システムがスワップをよく使う場合、レスポンスを向上させることができるかもしれません。Zram はまだメインラインには取り込まれていません(なので安定はしていません、気をつけて使って下さい)。
  
The AUR package {{aur|zramswap}} provides an automated script fot setting up such swap devices with optimal settings for your system (such as RAM size and CPU core number). The script creates one zram device per CPU core with a total space equivalent to the RAM available. To do this automatically on every boot:
+
AUR パッケージ {{aur|zramswap}} はあなたのシステムに最適な設定で (RAM サイズや CPU コア数にあわせて) スワップデバイスをセットする自動スクリプトを提供します。スクリプトは1つの CPU コアに1つの zram デバイスを作成し、全体のスペースが RAM の量と同じになるようにします。起動時に自動でこれを行わせるには:
  
* If you use [[rc.conf|initscripts]], add {{ic|zramswap}} to the DAEMONS array in {{ic|/etc/rc.conf}}.
+
* [[rc.conf|initscripts]] を使っている場合、{{ic|/etc/rc.conf}} DAEMONS 行に {{ic|zramswap}} を追加してください。
* If you use [[systemd]], enable {{ic|zramswap.service}} via systemctl. 
+
* [[systemd (日本語)|systemd]] を使っている場合、systemctl を使って {{ic|zramswap.service}} を有効にしてください。
  
You will have a compressed swap with higher priority than your regular swap which will utilize multiple CPU cores for compessing data.
+
標準スワップよりも圧縮スワップに高い優先度を持たせることでデータの圧縮に複数の CPU コアを利用します。
  
{{Tip|Using zram is also a good way to reduce disk read/write cycles due to swap on SSDs.}}
+
{{Tip|zram の使用は、スワップが SSD にある場合、読み書き回数を減らすのにも役立ちます。}}
{{Note|The service file (and rc.d script) have been moved to a separate package in the AUR called [https://aur.archlinux.org/packages/zramswap/ zramswap].}}
+
  
 
===グラフィックカードの RAM を使う===
 
===グラフィックカードの RAM を使う===

Revision as of 07:47, 12 January 2013

この記事では Arch Linux のパフォーマンスを向上させるための分析と基本的な概要を記述します。

基本

システムを知る

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

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

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

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

初めにすること

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

妥協

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

ベンチマーク

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

ストレージデバイス

デバイスレイアウト

パフォーマンスを一番大きく向上させるもののひとつが、オペレーティングシステムが動くレイアウトを複数のデバイスで作ることです。/ /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 -t
PCI デバイスツリー
$ lspci -t

パーティション

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

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

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

概要

  • XFS: 大きなファイルで素晴らしいパフォーマンスを発揮します。/home で使うと良いかもしれません
  • Reiserfs: 小さなファイルで素晴らしいパフォーマンスを発揮します。/var で使うと良いかもしれません
  • Ext3: 平均的なパフォーマンスと、信頼性があります。
  • Ext4: 全体的に良いパフォーマンスを持ち、信頼性もありますが、sqlite などのデータベースでパフォーマンスが落ちる問題があります。
  • JFS: 全体的に良いパフォーマンスを持ち、CPU 使用量が非常に少なく、電源が落ちた後の修復が極めて高速です。
  • Btrfs: おそらく(圧縮を使うことで)全体で最高パフォーマンスを持ち多くの機能を備えています。開発途中ですがサポートはされています、ただしまだ不安定です。何をするのかを理解して潜在的なデータロスの対策をしないかぎりこのファイルシステムを使わないで下さい。

マウントオプション

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

$ 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 オプションを使うこともできます (relatime はカーネル 2.6.30 以上ではデフォルトです)。

Ext3

Ext3 を見て下さい。

Ext4

Ext4 を見て下さい。

JFS

JFS Filesystem を見て下さい。

XFS

最適のスピードを得るには、XFS ファイルシステムを次のようにして作成します:

$ mkfs.xfs -l internal,lazy-count=1,size=128m -d agcount=2 /dev/thetargetpartition

Reiserfs

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

$ mkreiserfs –j /dev/hda1 /dev/hdb1

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

Btrfs

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

/usr の圧縮

Note: Linux カーネルのバージョン 3.0 現在、aufs2 は既にサポートされていません。

A way to speed up reading from the hard drive is to compress the data, because there is less data to be read. It must however be decompressed, which means a greater CPU load. Some file systems support transparent compression, most notably Btrfs and reiserfs4, but their compression ratio is limited by the 4k block size. A good alternative is to compress /usr in a squashfs file, with a 64k(128k) block size, as instructed in this Gentoo forums thread. What this tutorial does is basically to compress the /usr folder into a compressed squashfs file-system, then mounts it with aufs. A lot of space is saved, usually two thirds of the original size of /usr, and applications load faster. However, each time an application is installed or reinstalled, it is written uncompressed, so /usr must be re-compressed periodically. Squashfs is already in the kernel, and aufs2 is in the official repositories, so no kernel compilation is needed if using the stock kernel. Since the linked guide is for Gentoo, the next commands outline the steps specifically for Arch. To get it working, install the packages aufs2 and squashfs-tools. These packages provide the aufs-modules and some userspace-tools for the squash-filesystem.

Now we need some extra directories where we can store the archive of /usr as read-only and another folder where we can store the data changed after the last compression as writeable:

# mkdir -p /squashed/usr/{ro,rw}

Now that we got a rough setup you should perform a complete system-upgrade since every change of content in /usr after the compression will be excluded from this speedup. If you use prelink you should also perform a complete prelink before creating the archive. Now it is time to invoke the command to compress /usr:

# mksquashfs /usr /squashed/usr/usr.sfs -b 65536

These parameters/options are the ones suggested by the Gentoo link but there might be some room for improvement using some of the options described here. Now to get the archive mounted together with the writeable folder it is necessary to edit /etc/fstab and add the following lines:

/squashed/usr/usr.sfs   /squashed/usr/ro   squashfs   loop,ro   0 0 
usr    /usr    aufs    udba=reval,br:/squashed/usr/rw:/squashed/usr/ro  0 0

Now you should be done and able to reboot. The original author suggests to delete all the old content of /usr, but this might cause some problems if anything goes wrong during some later re-compression. It is safer to leave the old files in place.

A Bash script has been created that will automate the process of re-compressing (read updating) the archive since the tutorial is meant for Gentoo and some options do not correlate to what they should be in Arch.

SSD 向けのチューニング

SSD#Tips_for_Maximizing_SSD_Performance

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

CPU

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

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

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

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

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

Verynice

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

Ulatencyd

Ulatencyd は Linux カーネルが動作中のプロセスにリソースをどう費やすのかコントロールするデーモンです。カーネルヒントとプロセスの制限をするのに動的な cgroups を使います。CPU の使用だけでなく、ディスク I/O でのプロセスの優先順位付けもサポートしており、また、Verynice よりも賢いヒューリスティックを持っています。さらに、すぐに使える設定セットもあります。

1つ警告として、デフォルトでは全てのブロックデバイスのデフォルトスケジューラを cfq に変更するので注意してください。この挙動を無効にする方法は Ulatencyd を見て下さい。

ネットワーク

General Recommendations の関連セクションも見て下さい。

グラフィック

Xorg.conf 設定

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

Driconf

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

GPU オーバークロック

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

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

RAM とスワップ

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

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

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

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

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

Swappiness

swappiness はカーネルがどれくらいスワップより RAM を使うか示すものです。非常に低い値に設定、つまりカーネルにほとんど常時 RAM を使わせるようにすると、多くのシステムでレスポンスを改善できることが知られています。これをするには、/etc/sysctl.conf に以下を加えて下さい:

vm.swappiness=20
vm.vfs_cache_pressure=50

テストをしたり、動作について詳しく知るには、この記事を見て下さい。

Compcache / Zram

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

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

  • initscripts を使っている場合、/etc/rc.conf の DAEMONS 行に zramswap を追加してください。
  • systemd を使っている場合、systemctl を使って zramswap.service を有効にしてください。

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

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

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

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

プリロード

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

Go-preload

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

# gopreload-prepare program

それから、指示通りに、プログラムが完全にロードされたら Enter を押します。これでそのプログラムが必要とするファイルの一覧が /usr/share/gopreload/enabled に追加されます。起動時に全てのリストをロードするには、/etc/rc.conf の DAEMONS 行に gopreload を追加してください。プログラムのロードを無効化するには、/usr/share/gopreload/enabled の適切なリストを削除するか、/usr/share/gopreload/disabled に移動してください。

Preload

Preload はもっと自動化されたアプローチを取ります。あなたがするべきことは systemd で Preload を有効にすることだけです。システムで一番よく使われるファイルを監視して、起動時にプリロードするファイル一覧に組み込みます。

Readahead

Readahead は後に必要になるファイルをキャッシュすることでプログラムの起動を早くするツールです。

起動時間

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

Suspend to RAM

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

カーネルブートオプション

ブートオプションによってカーネルの起動時間を減らすことが可能です。通常 fastboot オプションは起動時間を一秒程度減らします(ただし rootfs の fsck が犠牲になります)。また、起動時に "Waiting 8s for device XXX" というメッセージが表示される場合、rootdelay=1 を加えることで待ち時間を減らすことができるかもしれません、ただし気をつけなければいけないのは、それによってブートプロセスを破壊する恐れがあるということです。これらオプションを設定するには、カーネルパラメータを見て下さい。

カスタムカーネル

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

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

Firefox

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

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

ac_add_options --enable-profile-guided-optimization

Gcc/Makepkg

Ccache を見て下さい。

LibreOffice

Speed up LibreOffice を見て下さい。

Pacman

Improve Pacman Performance を見て下さい。

SSH

Speed up SSH を見て下さい。

Laptops

Laptop を見て下さい。