Changes from rev 1.1.2.26 to 1.1.2.27

Submitted by:	NOKUBI Hirotaka <nokubi@ff.iij4u.or.jp>
This commit is contained in:
Kazuo Horikawa 2002-09-01 03:42:50 +00:00
parent 473830b3e1
commit 8829e61962
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=14128

View file

@ -13,11 +13,15 @@
.Nd FreeBSD における性能チューニング
.Sh システム設定 - disklabel, newfs, tunefs, スワップ
.Xr disklabel 8
または
.Xr sysinstall 8
を使ってハードディスク上にファイルシステムをレイアウトする場合、
ディスクの内周トラックよりも外周トラックのほうがずっと速くデータを
転送できることを意識することが重要です。この利点を生かすには、
転送できることを意識することが重要です。
この利点を生かすには、
小さいファイルシステムやスワップを外周トラックに近いほうから
詰めていくべきです。より大きいファイルシステムは内周へ近いほうへ詰めていき、
詰めていくべきです。
より大きいファイルシステムは内周へ近いほうへ詰めていき、
最も大きいファイルシステムを最後にします。
後でマシンを増強した時にシステム標準のファイルシステムの大きさを
変更しなくて済むような大きさに決めることが重要です。
@ -34,12 +38,14 @@
.Pp
典型的にはメインメモリの約 2 倍のスワップスペースを用意すべきです。
RAM がそれほど多くない場合は、一般にもっとスワップが必要でしょう。
256M より小さいスワップを設定するのは奨められません。スワップ
256M より小さいスワップを設定するのは奨められません。
スワップ
パーティションの大きさを決めるときは将来のメモリ増設のことを
考えておくべきです。
カーネルの VM ページングアルゴリズムは、スワップの大きさが
メインメモリの少なくとも 2 倍ある場合に最高の
性能が出るようにチューンされています。スワップを小さくしすぎると、
性能が出るようにチューンされています。
スワップを小さくしすぎると、
VM ページ走査コードが効率的に動かなくなります。
メモリをさらに追加した時も同様です。
最後に、複数の SCSI ディスク (あるいは異なるコントローラ上にある
@ -52,7 +58,8 @@ VM
スワップパーティションをだいたい同じ大きさにすることで、
カーネルは最適な方法でスワップ空間を N 台のディスクに対し
ストライピングします。
少々のやりすぎを気にする必要はありません。スワップ空間は
少々のやりすぎを気にする必要はありません。
スワップ空間は
.Ux
が優雅に動作するためのものです。
普段それほどスワップを使っていなくても、
@ -77,13 +84,9 @@ VM
の大きさは、テンポラリファイルの類が
どれだけ使われる必要があるかで決まります。
最低でも 128M にすることを推奨します。
sysinstall は
また sysinstall は
.Pa /tmp
ディレクトリを作成しますが、
.Pa /tmp
は後で
.Pa /var/tmp
へのソフトリンクにしておくのは大抵良い考えです。
ディレクトリも作成します。
テンポラリファイル領域専用に 1 つのパーティションを
割り当てることは重要で、2 つの理由があります:
クラッシュ時のファイルシステムの破壊の可能性を
@ -136,7 +139,8 @@ Linux
.Pa /usr
を推奨します。
このパーティションに対して必要な領域の大きさを過小評価
しないでください。これは緩やかに成長し、驚かされることになります !
しないでください。
これは緩やかに成長し、驚かされることになります !
.Pp
.Pa /home
パーティションはユーザ固有のデータを保持するのに使われます。
@ -220,7 +224,8 @@ Linux
大きなパーティションに、データベースファイルのような
少数の大きなファイルを置くのであれば、
.Em bytes/inode
の比率を増やすことができます。これは、そのパーティションの
の比率を増やすことができます。
これは、そのパーティションの
inode の数 (ファイルやディレクトリの最大の数) を減らします。
inode の数を減らすことで、クラッシュ後の
.Xr fsck 8
@ -252,17 +257,22 @@ min-free
.Em softupdates
を有効にすることです
(注意:
.Fx
4.5 以降では
.Fx 4.5
以降では
.Xr newfs 8
.Fl U
オプションを与えることで softupdates を有効に
することができます)。
することができます。
そして
.Xr sysinstall 8
は、ルート以外のファイルシステムの softupdates を標準で
自動的に有効にします)。
softupdates はメタデータの性能、
主にファイルの作成と削除の性能を劇的に改善します。
全てのファイルシステムで softupdates を有効にすることを推奨します。
softupdates に関して、2 つの欠点を意識すべきです。
大部分のファイルシステムで softupdates を有効にすることを推奨します。
しかしながら、ファイルシステムで softupdates を使うかどうか判断する際に
気をつけるべき 2 つの制限があります。
1 つめは、softupdates はクラッシュ時における
ファイルシステムの一貫性は保証しますが、
物理ディスクの更新が何秒か (1 分になることもあります!)
@ -274,6 +284,8 @@ softupdates
それに対する大規模な更新、たとえば
.Dq Li "make installworld"
をすると、空き領域を使い果たして更新が失敗してしまうことがあります。
そのため標準的なインストールではルートファイルシステムの softupdates を
有効にしません。
.Pp
.Xr mount 8
実行時のいくつかのオプションはファイルシステムをチューンするのに役立ちます。
@ -365,7 +377,8 @@ sysctl
.Xr sysctl 8
変数が存在します。
そのなかには、チューニングの候補のように見えますが本当は
そうでないものも多く含まれます。この文書では
そうでないものも多く含まれます。
この文書では
システムに最も大きな影響を与えるものだけを扱います。
.Pp
.Va kern.ipc.shm_use_phys
@ -404,11 +417,38 @@ VM
このオプションをオフにすることを推奨します。
一方、オンにすると、多数のファイルを操作するサービスの性能が向上します。
そのようなサービスには、web キャッシュや、大規模なメールシステム、
ニューズシステムなどが含まれます。このオプションは一般に
ニューズシステムなどが含まれます。
このオプションは一般に
メモリを消費しますが、性能を削減することはありません。
ただし実験して調べてみるべきでしょう。
.Pp
バッファキャッシュと VM ページキャッシュに関連した、様々な sysctl が
.Va vfs.write_behind
sysctl は、デフォルトで 1 (オン) です。
これによって、
ファイルシステムからメディアへの書き込みが、クラスタ分が集まった時に
発行されるようになります。
そのような状況は、典型的には、大きな
シーケンシャルファイルへ書き込んでいる時に起こります。
これは、I/O パフォーマンスに寄与しないであろう場合に、
ダーティなバッファでバッファキャッシュが飽和するのを避けるという
アイデアです。
しかしながら、これによってプロセスが止まるかも
しれないので、状況によっては この機能を切りたいと望むかもしれません。
.Pp
.Va vfs.hirunningspace
sysctl は、任意の時点においてシステム全体で、
ディスクコントローラのキューに入れて未完了状態にして良い、
書き込み I/O の量を決定します。
通常、デフォルト値で十分ですが、
ディスクをたくさん持つマシンでは 4、5メガバイトに増やしたくなるかもしれません。
値を大きくしすぎる (バッファキャッシュの
書き込みの閾値を超えて) と、クラスタリングの効果が極端に悪くなる
可能性があるので注意してください。
この値を思いつきで大きくしては
いけません! また書き込みのキュー値を大きくすると、同時に発生した
読みだしが待たされるかもしれません。
.Pp
他にもバッファキャッシュと VM ページキャッシュに関連した、様々な sysctl が
存在します。
これらを変更することは推奨されません。
.Fx 4.3
@ -419,7 +459,8 @@ VM
sysctl と
.Va net.inet.tcp.recvspace
sysctl は、ネットワークに関連するアプリケーションを
稼動している場合は特に重要です。これは、TCP コネクションの
稼動している場合は特に重要です。
これは、TCP コネクションの
送信および受信バッファ領域の大きさを調節します。
デフォルトでは、送信バッファは 32K で、受信バッファは 64K です。
このデフォルトを増やすことで
@ -467,17 +508,30 @@ TCP
RFC1323 サポートは、デフォルトでオンになっています。
.Pp
.Va net.inet.tcp.always_keepalive
sysctl はオン (1 にセット) にしてそのままにしておいてください。
デフォルトは大抵オフです。少量のネットワーク帯域を消費しますが、
偶然死んでしまった TCP コネクションを認識し除去することを保証します。
死んでしまった TCP コネクションは、特にダイアルアップのユーザによりアクセス
されるシステムで発生する問題です。
ユーザは、しばしば正しくアクティブコネクションを閉じずにモデムを切断
するからです。
sysctl は、TCP インプリメンテーションが、コネクション上に断続的に
.Dq keepalives
を配送することで死んでしまった TCP コネクションの検出を試みるか
どうかを決定します。
デフォルトで、これはすべてのアプリケーションについて許可されています。
この sysctl を 0 に設定すると、特に keepalives を要求した
アプリケーションだけが検出機能を利用できます。
大抵の環境において、死んでしまった TCP コネクションを失効にすることで、
TCP keepalives はシステム状態の管理を改善します。
特にダイアルアップのユーザにサービスを提供しているシステムでは
効果があります。
なぜならユーザーがネットワークとの接続を切る前に
いつも個々の TCP コネクションを終了するとは限らないからです。
しかしながら、ある種の環境では、一時的なネットワークの停止が
誤ってセッションの死と判断されるかもしれません。
結果として
予期しない TCP コネクションの終了となります。
その様な環境では、sysctl を 0 に設定することで、
TCP のセッション切断の発生を減らせるかもしれません。
.Pp
.Va kern.ipc.somaxconn
sysctl は、新しい TCP コネクションを受け付けるための listen キューの
サイズを制限します。高負荷の web サーバ環境では、
サイズを制限します。
高負荷の web サーバ環境では、
デフォルト値の 128 は新しいコネクションを余裕をもって扱うには低すぎます。
そのような環境では、この値を 1024 以上に増やすことが推奨されます。
サービスデーモン (例えば
@ -489,7 +543,8 @@ listen
.Pp
.Va kern.maxfiles
sysctl は、システムがどれだけの数のファイルをオープンできるかを
決めます。デフォルトは典型的には数千ですが、データベースや記述子を
決めます。
デフォルトは典型的には数千ですが、データベースや記述子を
大量に使うデーモンを稼働している場合は 10000 や 20000 に引き上げる必要
があるかもしれません。
読み込み専用の
@ -500,14 +555,16 @@ sysctl
sysctl は、多数のユーザがシステムに出入りして大量のアイドルプロセスが
ある大きなマルチユーザシステムで便利です。
そのようなシステムでは、フリーメモリの予約に対し、
継続して重大な負担をかける傾向にあります。これをオンにして
継続して重大な負担をかける傾向にあります。
これをオンにして
.Va vm.swap_idle_threshold1
sysctl と
.Va vm.swap_idle_threshold2
sysctl でスワップアウトヒステリシス (アイドルの秒数) を調整することで
アイドルプロセスに与えられているページの優先度を通常のページアウト
アルゴリズムよりも速やかに下げることができます。
これはページアウトデーモンを手助けします。必要がないかぎり、
これはページアウトデーモンを手助けします。
必要がないかぎり、
このオプションはオンにしないでください。
これによって起こるトレードオフは、本質的に、
スワップとディスク帯域幅をより多く消費してメモリのプリページングを
@ -603,7 +660,8 @@ sysctl
このパラメータに手を出す必要はありません。
.Sh カーネル構成におけるチューニング
大規模なシステムでは、いくつかのカーネルオプションを操作しなければ
ならないかもしれません。これらのオプションを変更する場合、あなたは
ならないかもしれません。
これらのオプションを変更する場合、あなたは
ソースから新しいカーネルをコンパイルできなければなりません。
.Xr config 8
マニュアルページやハンドブックが良い入門となるでしょう。
@ -630,21 +688,25 @@ sysctl
.Dv I386_CPU
.Dv I486_CPU
は削除することができます。ただし、
は削除することができます。
ただし、
.Dv I586_CPU
は、CPU が Pentium II 以上として認識されることを確認してから
削除してください。Pentium や 486 としてさえ認識されるクローンが存在し、
削除してください。
Pentium や 486 としてさえ認識されるクローンが存在し、
その場合はこれらのオプションがないと起動することができません。
もし動いたらすごいことです !
オペレーティングシステムは、MMU や
タスク切り替え、タイムベース、デバイス操作に至る、より高度な機能を
より利用することができるようになります。
加えてより高度な CPU は、カーネルがカーネル自身をメモリにマップする
4MB の MMU ページをサポートします。これは高いシステムコール負荷の
4MB の MMU ページをサポートします。
これは高いシステムコール負荷の
下での効率を上げます。
.Sh IDE ライトキャッシュ
.Fx 4.3
では IDE のライトキャッシュがオフになりました。これは
では IDE のライトキャッシュがオフになりました。
これは
IDE ディスクへの書き込み帯域幅を減らしてしまうことになりますが、
ハードドライブベンダに起因するデータの一貫性に関する重大な問題のために、
必要なことだと考えられました。
@ -745,12 +807,14 @@ SCSI
.Xr newfs 8 ,
.Xr route 8 ,
.Xr sysctl 8 ,
.Xr sysinstall 8 ,
.Xr tunefs 8 ,
.Xr vinum 8
.Sh 歴史
.Nm
マニュアルページは、もともと
.An Matthew Dillon
によって書かれました。最初に登場したのは
によって書かれました。
最初に登場したのは
.Fx 4.3
で、2001 年 5 月のことです。