〜 /proc/sysの主要パラメータ群総解説 〜
遠田 耕平
2002/12/17
/proc/sys/fsディレクトリ
/proc/sys/fsには、ファイルシステム関連のチューニングパラメータが集められています。
file-max
システム中のオープンファイル管理データの最大数を指定できます。file-nr
file-nr内のパラメータはそれぞれ、オープンされているファイル数、空きファイル管理データの数、システム中のオープンファイル管理データの最大数(file-maxと同じ)を示します。ファイルのクローズ時には、使っていたファイル管理データを即座に解放するのではなく、いったん(次の機会に使えるように)取り置きます。この取り置かれている管理データの数が、2番目の数値となります。
inode-state、inode-nr
inode-stateには全部で7組の数値が含まれますが、意味があるのは最初の2つだけで、残りは0になっています。2つの値は、それぞれシステム中のメモリiノードの数および使用されていないメモリiノードの数を表します。
inode-nrは、名前こそ違うものの内部的にはinode-state(の最初の2つ)とまったく同じ情報を出力します。/procには、このように同じ情報を出力するだけだったり、変更しても何の影響もない無意味なファイルが存在します。よくあるのは、「以前は意味があったがカーネル全体の構造の変更、見直しに伴って意味がなくなった」というパターンです。この辺りにもLinuxがダイナミックに改良、改善されているのを介間見ることができます。
iノードおよびクオータ管理構造体については上限を制約することはできません。勝手にカーネルが割り当て、メモリが足りなくなってきたタイミングで不要なものを解放します。
dentry-state
dentry(名前とiノードの対応付けを行う構造体)のシステム中の数およびフリーなdentryの数を表示します。
ファイル管理構造体やiノード、dentryは数が増え過ぎると逆にメモリを使い過ぎてオーバヘッドが増加します。これらの値は、チューニングに当たって観察が必要なパラメータだといえます。
/proc/sys/vmディレクトリ
/proc/sys/vmには、仮想記憶(バーチャルメモリ)関連のチューニングパラメータが集められています。
bdflush
ブロックI/O用のバッファ制御に関連するパラメータです。
- 第1パラメータ:バッファとして使用できるメモリ(おおよそ全メモリと思って構わない)のうち、この値を超えたページがダーティになるとバッファのディスクへの書き出しを始める
- 第5パラメータ:kupdatedデーモンの起動間隔。kupdatedデーモンは、古くなったバッファやiノード、スーパーブロックなどを定期的にフラッシュするデーモン
- 第6パラメータ:バッファは「古い」ものを選択的にディスクに書き出すようになっているが、どの程度の時間がたつと「古い」とするかを指定する。単位はjiffies(一般には1/100秒)
- 第7パラメータ:バッファとして使用できるメモリのうち、この値を超えたページがダーティになると、bdflush(バッファの書き出しデーモン)を起動する
「ダーティ」(汚れている)とは、メモリ上のデータが更新されていて、ディスク上のイメージとの間に違いが生じていることを指します。逆に「クリーン」は、メモリとディスク上のイメージが一致している状態をいいます。
ダーティなページはいずれディスクに書き出さなければなりませんが、クリーンなページは(ディスクから読み込めばよいので)そのまま捨てて(解放して)しまっても構いません。
max-readahead、min-readahead
ディスクの先読みの最大ページ数、最小ページ数を指定します。page-cluster
ページイン、ページアウトの単位をページ数で指定します(この値の2のべき乗ページが単位)。あまり大きいと無駄なI/Oが発生しますし、小さ過ぎるとI/Oの回数が増えてオーバヘッドとなります。overcommit_memory
仮想メモリの割り当て時に、物理メモリ/スワップ領域の裏付けのない空間を割り当てます。物理メモリ/スワップの合計を超えた量を(表面上は)利用することができますが、その代わりメモリが足りなくなる危険性が増えます。pagetable_cache
ページテーブルキャッシュの上下限を指定します。ページテーブルキャッシュとは、使い終わったページテーブルを一時的に保管(キャッシング)しておき、高速に再利用する仕組みです。プロセスの生成/終了が頻繁に起きる環境であれば、増やしてみる価値があります。当然ながら、あまり多く保管しておくとメモリの無駄になります。max_map_count
仮想空間にマッピングできる最大ページ数を指定します。ここでいうマッピングには、mmap(2)システムコールによるファイルマッピングはもちろん、プログラムテキストのロードやmallocなども含まれるので、あまり小さくするのは考えものです。
/proc/sys/net/ディレクトリ
/proc/sys/net配下には、ネットワーク関連のチューニングパラメータが格納されています。/proc/sys/net/core配下にはネットワーキング一般(ソケット関連)、/proc/sys/net/ipv4にはipv4関連のチューニングパラメータがあります。
いずれもネットワーク操作に関する大量のチューニングパラメータが含まれていますが、その中の代表的なものを示します。
■/proc/sys/net/core
rmem_default、rmem_max、wmem_default、wmem_max
これらは、いわゆるソケットバッファ(ソケットに送信された/到着したデータを格納しておくバッファ)のデフォルト値/最大値を規定します。デフォルト値を大きくすることで性能を稼ぐことができますが、その分メモリを消費します。setsockopt(7)のSO_SNDBUF/SO_RCVBUFオプションを利用して、ソケット個別に指定する方がよいかもしれません。なお、SO_SNDBUFオプションで設定できる値は、ここで指定する最大値よりも大きくすることはできません。
なお、これらの値は起動時にメモリ実装量をチェックしたうえで、ふさわしいサイズに「調整」されます(注)。
注:rmem_*、wmem_*に限らず、Linuxのチューニングパラメータはマシン構成に応じて動的に計算される場合があるので、複数のマシンでチューニングを行う際は注意する必要があります。
■/proc/sys/net/ipv4
tcp_window_scaling
TCPウィンドウスケーリングオプションを有効化します。デフォルトで有効になっていますので、設定し直す必要はありません。tcp_sack、tcp_fack
選択的ACKおよび高速再送を有効にします。これもデフォルトで有効になっているので、特に調整する必要はないでしょう。tcp_max_syn_backlog
ネットワーク接続(SYN)を受け付けたが、相手からまだACKを受け取っていないような状態のコネクションを、listen中のソケット当たりいくつ保持するかを指定します。大規模なサーバでは、この値を増やすことで性能が改善される可能性があります。tcp_mem
TCPネットワーキングに使用可能なメモリの上限を指定します。たくさんのデータが到着してメモリ使用量が増加し、このしきい値を超えるとカーネルはメモリ不足と判断してTCPへのメモリ割り当てを一時中断します。すなわち、このパラメータはメモリ上にためてよいデータ量を表すことになります。多数のサーバを動作させたり、あるいは実メモリが非常に多くてデフォルトよりも多いメモリをネットワークに使用できるような場合は、大きめに設定しておくのがよいでしょう。
tcp_rmem、tcp_wmem
TCPのデータ転送の際の制御パラメータです。第1パラメータはTCPソケットバッファの下限値で、それより多量のメモリを使用している場合はメモリに余裕がないと判断されます。第2、第3パラメータはrmem_max、rmem_default、wmem_max、wmem_defaultを上書きします(ソケットバッファの量をTCP向けに設定し直します)。
2/4
|
|
||||||||
|
Linux Square全記事インデックス |
Linux Squareフォーラム Linuxカーネル関連記事 |
連載:Linux Kernel Watch(連載中) Linuxカーネル開発の現場ではさまざまな提案や議論が交わされています。その中からいくつかのトピックをピックアップしてお伝えします |
|
連載:Linuxファイルシステム技術解説 ファイルシステムにはそれぞれ特性がある。本連載では、基礎技術から各ファイルシステムの特徴、パフォーマンスを検証する |
|
特集:全貌を現したLinuxカーネル2.6[第1章] エンタープライズ向けに刷新されたカーネル・コア ついに全貌が明らかになったカーネル2.6。6月に正式リリースされる予定の次期安定版カーネルの改良点や新機能を詳しく解説する |
|
特集:/procによるLinuxチューニング[前編] /procで理解するOSの状態 Linuxの状態確認や挙動の変更で重要なのが/procファイルシステムである。/procの概念や/procを利用したOSの状態確認方法を解説する |
|
特集:仮想OS「User
Mode Linux」活用法 Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説 |
|
Linuxのカーネルメンテナは柔軟なシステム カーネルメンテナが語るコミュニティとIA-64 Linux IA-64 LinuxのカーネルメンテナであるBjorn Helgaas氏。同氏にLinuxカーネルの開発体制などについて伺った |
|
|
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
|
|