Linux Kernel 2.2 Documentation:
/usr/src/linux/Documentation/proc.txt
proc.txt
proc ファイルシステムの解説
[プレインテキスト版]
- 原著作者: Terrehon Bowden <terrehon@pacbell.net> Bodo Bauer <bb@bb-zone.com>
- 翻訳者: 花高信哉 <hanataka@abyss.rim.or.jp> 野村淳一 <j-nomura@ce.jp.nec.com>
- バージョン: 2.2.12
- 翻訳日時: 2000/09/06
------------------------------------------------------------------------------
/proc フ ァ イ ル シ ス テ ム
------------------------------------------------------------------------------
/proc/sys Terrehon Bowden <terrehon@pacbell.net> October 7 1999
Bodo Bauer <bb@bb-zone.com>
------------------------------------------------------------------------------
Version 1.2 Kernel version 2.2.12
------------------------------------------------------------------------------
Table of Contents
-----------------
0 序文
0.1 はじめに/謝辞
0.2 法的事項
1 システム情報の収集
1.1 プロセスごとのサブディレクトリ
1.2 カーネルデータ
1.3 /proc/ide の IDE デバイス情報
1.4 /proc/net のネットワーク情報
1.5 SCSI 情報
1.6 /proc/parport のパラレルポート情報
1.7 /proc/tty の TTY 情報
2 システムパラメータの修正
2.1 /proc/sys/fs - ファイルシステム・データ
2.2 /proc/sys/fs/binfmt_misc - その他のバイナリフォーマット
2.3 /proc/sys/kernel - カーネル全般のパラメータ
2.4 /proc/sys/vm - 仮想メモリ・サブシステム
2.5 /proc/sys/dev - デバイス固有のパラメータ
2.6 /proc/sys/sunrpc - リモート・プロシジャ・コール(RPC)
2.7 /proc/sys/net - ネットワーク関連
2.8 /proc/sys/net/ipv4 - IPV4 設定
2.9 Appletalk
2.10 IPX
------------------------------------------------------------------------------
序文
------------------------------------------------------------------------------
0.1 はじめに/謝辞
-----------------
この文章は IDG Books よりまもなく出版される SuSE Linux distribution の本の一
部です。/proc ファイルシステムについて網羅的に説明した文章がなかっため、私た
ちは自由に入手できる多くの文章を元にこの章を記述しました。それでこの成果を
Linux コミュニティに還元することが公平だと考えました。この文章は 2.2.* バー
ジョンのカーネルに基づいています。まだ完全というにはほど遠いのではないかと考
えていますが、役に立つことを期待しています。 私たちの知る限りこれは /proc ファ
イルシステムについて網羅的に扱った最初の文書です。 この文書は Intel x86 ハー
ドウェアに焦点を当てています。 PPC、ARM、SPARC、APX 等の特徴について探してい
るとしたら、たぶん見つけることができないでしょう。また IPv4 ネットワークにつ
いてのみ扱っています。IPv6 や他のプロトコルは扱っていません。ごめんなさい。
しかし追加や修正案は歓迎します。 Bodo 宛てにメールしていただければ、この文章
に追加されるでしょう。
私たちは Alan Cox、Rik van Riel、Alexey Kuznetsov そしてこの文書の編集に協力
してくれた多くの人々に感謝したいと思います。さらにこの文書の作成にあたって
Andi Kleen の文書を大いに参考にしました。 追加の情報を提供してくれたことも合
わせ、彼に特別な感謝をしたいと思います。 さらに Linux カーネルにソースやドキュ
メントを提供された方々、この偉大なるソフトウェアの作成に助力された全ての方々
に感謝します。
どのようなコメント、修正/追加でもありましたら、ためらわずに Bodo Bauer
mail: <bb@bb-zone.com> まで連絡ください。私たちは喜んでこの文書に追加させて
頂きます。
(訳注) Bodo Bauer へのコメントは英語またはドイツ語でお願いします。
この文書の日本語への翻訳は JF プロジェクトのカーネルドキュメント翻訳
の一部として、花高信哉 <hanataka@abyss.rim.or.jp> および 野村淳一
<j-nomura@ce.jp.nec.com> が行いました。 この文書の翻訳に際してアドバイスをし
てくれた JF メンバにこの場を借りて感謝をしたいと思います。またこのすばらしい
文書の原著者であり、日本語への翻訳と配布を快諾してくれた Bodo Bauer
<bb@bb-zone.com> に感謝をします。
なおこの文書は 2.2.12 カーネルに対応したものですが、実際には 2.3/2.4 系カー
ネルに付属しているものです。2.2.12 カーネルに付属している同名の文書よりも
新しいものとなっていますのでご注意ください。
この文書の最新版は http://www.bb-zone.com/Proc/ より HTML 版として入手可能
です。
翻訳版は JF プロジェクトの一部として入手できます。http://www.linux.or.jp/JF/
より探してください。
0.2 法的事項
-------------
私たちはこの文書の正確さは保証しません。この文章が不正確だったためにあなたの
システムが破壊されたと私たちに苦情を言ってきたとしても、私たちは責任を負いま
せん。
(訳注) もちろん日本語版の翻訳者や配布者も文書の正確さについて何の保証も行い
ません。できるだけ正確に訳すよう努力していますし、読者の役に立つことを期待し
て配布を行っていますが、最終的にこの文書は読者の責任にてご利用ください。また
linux は常に進化しており、翻訳時点で既に変更されたり無効になった部分が存在し
ます。これらの点も含めて、そのまま翻訳したことをあらかじめご承知ください。
また原文にあった誤解を招きうるレイアウトを変更したほかスペルミスを修正してあ
ります。これに関してもご了承ください。
------------------------------------------------------------------------------
第1章: システム情報の収集
------------------------------------------------------------------------------
------------------------------------------------------------------------------
この章では
------------------------------------------------------------------------------
* 仮想ファイルシステム /proc の特性とその運用中の Linux システムの情報を提供
する機能について調査する
* /proc の構造を調べる
* カーネルとシステム内で動いているプロセスについて種々の情報を発見する
------------------------------------------------------------------------------
proc ファイルシステムはカーネル内部のデータ構造体のインターフェースとして働
きます。システムに関する情報を入手したり、動いているカーネルのパラメータを調
整するのに使用できます。
最初に /proc の読み取り専用の部分について見てみましょう。第 2 章では設定を変
更するために /proc/sys をどのように使用するかについて説明します。
1.1 プロセスごとのサブディレクトリ
-----------------------------------
/proc ディレクトリにはそのシステムで走っているプロセスそれぞれに対して、プロ
セス ID (PID) の名前がついたサブディレクトリを含んでいます。
self というリンクは proc ファイルシステムを読んでいるプロセスを指しています。
各プロセスのサブディレクトリは 表1-1 に挙げた項目を持っています。
表 1-1: /proc におけるプロセスごとの項目
..............................................................................
ファイル 内容
cmdline コマンドライン引き数
environ 環境変数の値
fd 全てのファイルディスクリプタを含んだディレクトリ
mem このプロセスが保持しているメモリ
stat プロセスの状態
status 人間が読める形式のプロセスの状態
cwd プロセスの現在の作業ディレクトリへのリンク
exe このプロセスの実行形式へのリンク
maps メモリ・マップ
root このプロセスのルート・ディレクトリへのリンク
statm プロセスのメモリ状態についての情報
..............................................................................
例: プロセスの状態についての情報を得るのは /proc/PID/status というファイルを
読むだけで可能です。
> cat /proc/self/status
Name: cat
State: R (running)
Pid: 5452
PPid: 743
Uid: 501 501 501 501
Gid: 100 100 100 100
Groups: 100 14 16
VmSize: 1112 kB
VmLck: 0 kB
VmRSS: 348 kB
VmData: 24 kB
VmStk: 12 kB
VmExe: 8 kB
VmLib: 1044 kB
SigPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000000000000
CapInh: 00000000fffffeff
CapPrm: 0000000000000000
CapEff: 0000000000000000
これは ps コマンドによって見ることができるのとほとんど同じ情報を示しています。
実際 ps はこの情報を proc ファイルシステムから取得しています。statm ファイル
にはプロセスの使用しているメモリについてのより詳しい情報があります。その七つ
の値の意味は 表1-2 で説明します。
表 1-2: statm ファイルの内容
..............................................................................
ファイル 内容
size プログラムの合計サイズ
resident メモリ上にある部分のサイズ
shared 共有されているページ数
trs コードのページ数
drs データ/スタックのページ数
lrs ライブラリのページ数
dt 汚れた(dirty)ページ数
..............................................................................
1.2 カーネルデータ
------------------
プロセスの項目と同様に、走っているカーネルについての情報を与えてくれるファイ
ルが存在します。 この情報を得るのに使用するファイルは /proc の直下に存在しま
す。これを 表1-3 に示します。 これらのファイル全てがあなたのシステムに存在し
ているわけではありません。どのファイルが存在し、どのファイルが存在しないかは
カーネルのコンフィギュレーションやロードされているモジュールに依存しています。
表 1-3: /proc のカーネル情報
..............................................................................
ファイル 内容
apm APM (Advanced power management) 情報
bus バス特有の情報を含んでいるディレクトリ
cmdline カーネルのコマンドライン
cpuinfo CPU についての情報
devices 使用できる(ブロックとキャラクタ)デバイス
dma 使用中の DMA チャネル
filesystems サポートしているファイルシステム
ide IDE サブシステムについての情報を含んでいるディレクトリ
interrupts 割り込みの使用状況
ioports I/O ポートの使用状況
kcore カーネルのメモリ(core)上のイメージ(ELF や A.OUT が可能)
kmsg カーネルのメッセージ
ksyms カーネルのシンボル・テーブル
loadavg ロード・アベレージ
locks カーネル・ロック
meminfo メモリ情報
misc 雑多な情報
modules ロードされているモジュールのリスト
mounts マウントされているファイルシステム
net ネットワーク情報(説明を見てください)
partitions システムが認識しているパーティション
rtc リアル・タイム・クロック
scsi SCSI 情報(説明を見てください)
slabinfo Slab pool の情報
stat カーネル全般の統計情報
swaps スワップ空間の使用状況
sys 第2章を見てください。
uptime システムの使用時間(uptime)
version カーネルのバージョン
..............................................................................
例: 現在どの割り込みが使用されているか、またそれが何の目的に使用されているか
は /proc/interrupts を調べることでチェックできます。
> cat /proc/interrupts
CPU0
0: 8728810 XT-PIC timer
1: 895 XT-PIC keyboard
2: 0 XT-PIC cascade
3: 531695 XT-PIC aha152x
4: 2014133 XT-PIC serial
5: 44401 XT-PIC pcnet_cs
8: 2 XT-PIC rtc
11: 8 XT-PIC i82365
12: 182918 XT-PIC PS/2 Mouse
13: 1 XT-PIC fpu
14: 1232265 XT-PIC ide0
15: 7 XT-PIC ide1
NMI: 0
/proc には特に重要な三つのサブディレクトリ scsi、net、sys が存在します。一般
的なルールとして、これらのディレクトリの内容やディレクトリそのものの存在でさ
えカーネルの設定に依存しています。SCSI が有効になっていなければ、scsi ディレ
クトリは存在しないでしょう。net についても同様で、そのカーネルがネットワーク
をサポートしている場合にのみ存在します。
slabinfo ファイルは slab レベルにおけるメモリ使用状況の情報を与えます。Linux
バージョン 2.2 ではページレベル以上のメモリ管理には slab pool を使用します。
一般に使用されるオブジェクト (ネットワークバッファやディレクトリキャッシュな
ど) はそれら自身の slab pool を持っています。
1.3 /proc/ide の IDE デバイス情報
---------------------------------
/proc/ide サブディレクトリにはカーネルが認識している全ての IDE デバイスにつ
いての情報が含まれています。このディレクトリには各 IDE コントローラのサブディ
レクトリ、drivers ファイル、コントローラのサブツリー中のデバイスディレクトリ
を指している各 IDE デバイスのリンクがあります。
drivers ファイルは IDE デバイスに使用されているドライバに関する一般的な情報
を含んでいます。
> cat /proc/ide/drivers
ide-cdrom version 4.53
ide-disk version 1.08
より詳しい情報はコントローラ特有のサブディクトリにあります。これらは ide0、
ide1 のような名前になります。これらのディレクトリは 表1-4 に示すファイルをそ
れぞれ含んでいます。
表 1-4: /proc/ide/ide? の IDE コントローラ情報
..............................................................................
ファイル 内容
channel IDE チャンネル(0 または 1)
config 設定(PCI/IDE ブリッジのみ)
mate メイトネーム
model IDE コントローラの型/チップセット
..............................................................................
各デバイスはそれが接続しているコントローラのディレクトリにそれぞれ別個のサブ
ディレクトリを持っています。 これらのディレクトリは 表1-5 に挙げたファイルを
含んでいます。
表 1-5: IDE デバイス情報
..............................................................................
ファイル 内容
cache キャッシュ
capacity メディアの容量(512バイトのブロック単位)
driver ドライバとバージョン
geometry 物理ジオメトリと論理ジオメトリ
identify デバイス識別ブロック
media メディアの型
model デバイスの識別子
settings デバイスの設定
smart_thresholds IDE ディスク管理閾値
smart_values IDE ディスク管理値
..............................................................................
最も興味深いファイルは settings です。このファイルを見ればドライブパラメータ
を良い具合に一覧できます。
# cat /proc/ide/ide0/hda/settings
name value min max mode
---- ----- --- --- ----
bios_cyl 526 0 65535 rw
bios_head 255 0 255 rw
bios_sect 63 0 63 rw
breada_readahead 4 0 127 rw
bswap 0 0 1 r
file_readahead 72 0 2097151 rw
io_32bit 0 0 3 rw
keepsettings 0 0 1 rw
max_kb_per_request 122 1 127 rw
multcount 0 0 8 rw
nice1 1 0 1 rw
nowerr 0 0 1 rw
pio_mode write-only 0 255 w
slow 0 0 1 rw
unmaskirq 0 0 1 rw
using_dma 0 0 1 rw
1.4 /proc/net のネットワーク情報
--------------------------------
/proc/net サブディレクトリは一般的な形式に従います。表1-6 は IP version 6 を
サポートする設定のカーネルで得られる追加の値を示しています。表1-7 はその他の
ファイルとその意味を示しています。
表 1-6: /proc/net の IPv6 情報
..............................................................................
ファイル 内容
udp6 UDP ソケット (IPv6)
tcp6 TCP ソケット (IPv6)
raw6 生(raw)デバイスの統計 (IPv6)
igmp6 参加している IP マルチキャスト・アドレス(IPv6)
if_inet6 IPv6 インターフェース・アドレスのリスト
ipv6_route IPv6 のためのカーネル・ルーティング・テーブル
rt6_stats グローバル IPv6 ルーティング・テーブル統計
sockstat6 ソケット統計 (IPv6)
snmp6 SNMP データ (IPv6)
..............................................................................
表 1-7: /proc/net のネットワーク情報
..............................................................................
ファイル 内容
arp カーネルの ARP テーブル
dev ネットワークデバイスとその統計情報
dev_mcast デバイスが listen している Layer2 マルチキャスト・グループ
(インターフェース番号、ラベル、参照数、bind しているアドレス
の数)
dev_stat ネットワークデバイスの状態
ip_fwchains ファイアウォール・チェーンの連鎖
ip_fwnames ファイアウォール・チェーンの名前
ip_masq マスカレードテーブルを含んでいるディレクトリ
ip_masquerade 主要なマスカレードテーブル
netstat ネットワーク統計
raw 生(raw)のデバイス統計
route カーネル・ルーティング・テーブル
rpc RPC 情報を含んだディレクトリ
rt_cache ルーティング・キャッシュ
snmp SNMP データ
sockstat ソケット統計
tcp TCP ソケット
tr_rif トークン・リング RIF ルーティング・テーブル
udp UDP ソケット
unix UNIX ドメインソケット
wireless ワイアレス・インターフェースのデータ(Wavelan など)
igmp 参加している IP マルチキャスト・アドレス
psched グローバル・パケット・スケジューラのパラメータ
netlink PF_NETLINK ソケットのリスト
ip_mr_vifs マルチキャスト仮想インターフェースのリスト
ip_mr_cache マルチキャスト・ルーティング・キャッシュのリスト
..............................................................................
この情報を使用して、システムで利用可能なネットワーク・デバイスについての情報
と、そのデバイスにルーティングされたトラフィックの量を知ることができます。
> cat /proc/net/dev
Inter-|Receive |[...
face |bytes packets errs drop fifo frame compressed multicast|[...
lo: 908188 5596 0 0 0 0 0 0 [...
ppp0:15475140 20721 410 0 0 410 0 0 [...
eth0: 614530 7085 0 0 0 0 0 1 [...
...] Transmit
...] bytes packets errs drop fifo colls carrier compressed
...] 908188 5596 0 0 0 0 0 0
...] 1375103 17405 0 0 0 0 0 0
...] 1703981 5535 0 0 0 3 0 0
1.5 SCSI 情報
-------------
もしシステムに SCSI ホスト・アダプタがあれば、このアダプタに対応するドライバ
にちなんだ名前のサブディレクトリを /proc/scsi 以下に見つけることができます。
さらに認識している全ての SCSI デバイスのリストを /proc/scsi/scsi に見つける
ことができます。
> cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: IBM Model: DGHS09U Rev: 03E0
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 06 Lun: 00
Vendor: PIONEER Model: CD-ROM DR-U06S Rev: 1.04
Type: CD-ROM ANSI SCSI revision: 02
ドライバの名前のディレクトリにはそのシステムで見つかったアダプタごとに一つの
ファイルがあります。これらのファイルはそのコントローラについての情報、使用し
ている IRQ や I/O アドレスの範囲などの情報を含んでいます。示される情報の量は
使用しているアダプタに依存しています。 例では Adaptec AHA-2940 SCSI アダプタ
の出力を示しています。
> cat /proc/scsi/aic7xxx/0
Adaptec AIC7xxx driver version: 5.1.19/3.2.4
Compile Options:
TCQ Enabled By Default : Disabled
AIC7XXX_PROC_STATS : Disabled
AIC7XXX_RESET_DELAY : 5
Adapter Configuration:
SCSI Adapter: Adaptec AHA-294X Ultra SCSI host adapter
Ultra Wide Controller
PCI MMAPed I/O Base: 0xeb001000
Adapter SEEPROM Config: SEEPROM found and used.
Adaptec SCSI BIOS: Enabled
IRQ: 10
SCBs: Active 0, Max Active 2,
Allocated 15, HW 16, Page 255
Interrupts: 160328
BIOS Control Word: 0x18b6
Adapter Control Word: 0x005b
Extended Translation: Enabled
Disconnect Enable Flags: 0xffff
Ultra Enable Flags: 0x0001
Tag Queue Enable Flags: 0x0000
Ordered Queue Tag Flags: 0x0000
Default Tag Queue Depth: 8
Tagged Queue By Device array for aic7xxx host instance 0:
{255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255}
Actual queue depth per device for aic7xxx host instance 0:
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
Statistics:
(scsi0:0:0:0)
Device using Wide/Sync transfers at 40.0 MByte/sec, offset 8
Transinfo settings: current(12/8/1/0), goal(12/8/1/0), user(12/15/1/0)
Total transfers 160151 (74577 reads and 85574 writes)
(scsi0:0:6:0)
Device using Narrow/Sync transfers at 5.0 MByte/sec, offset 15
Transinfo settings: current(50/15/0/0), goal(50/15/0/0), user(50/15/0/0)
Total transfers 0 (0 reads and 0 writes)
1.6 /proc/parport のパラレルポート情報
--------------------------------------
/proc/parport ディレクトリはシステムのパラレルポートについての情報を含んでい
ます。ポートごとに一つのサブディレクトリが存在し、ポート番号 (0,1,2, ...) に
基づいた名前がついています。
これらのディレクトリには表1-8 に示す四つのファイルが含まれています。
表 1-8: /proc/parport にあるファイル
..............................................................................
ファイル 内容
autoprobe 検出できた IEEE-1284 デバイス ID 情報
devices そのポートを使用しているデバイス・ドライバのリスト。現在そのポー
トを使用しているデバイスの名前には + が表示されます。(何も表示さ
れないかもしれません。)
hardware パラレルポートのベースアドレスと IRQ 番号と DMA チャンネル。
irq その parport のために使用している IRQ。新たな値(IRQ 番号または
none) を書き込むことによって変更できます。(そのために独立したファ
イルになっています。)
..............................................................................
1.7 /proc/tty の TTY 情報
-------------------------
使用可能なまたは使用中の tty についての情報は /proc/tty に見つけることができ
ます。表1-9 にあるようなドライバと回線規約(line descipline)についてのファイル
がこのディレクトリにあるでしょう。
表 1-9: /proc/tty にあるファイル
..............................................................................
ファイル 内容
drivers ドライバのリストとその使用状況
ldiscs 登録された回線規約
driver/serial 使用状況の統計と それぞれの tty 回線の状況
..............................................................................
現在どの tty が使用されているかは単純に /proc/tty/drivers を探すだけで見つけ
ることができます。
> cat /proc/tty/drivers
pty_slave /dev/pts 136 0-255 pty:slave
pty_master /dev/ptm 128 0-255 pty:master
pty_slave /dev/ttyp 3 0-255 pty:slave
pty_master /dev/pty 2 0-255 pty:master
serial /dev/cua 5 64-67 serial:callout
serial /dev/ttyS 4 64-67 serial
/dev/tty0 /dev/tty0 4 0 system:vtmaster
/dev/ptmx /dev/ptmx 5 2 system
/dev/console /dev/console 5 1 system:console
/dev/tty /dev/tty 5 0 system:/dev/tty
unknown /dev/tty 4 1-63 console
------------------------------------------------------------------------------
要約
------------------------------------------------------------------------------
/proc ファイルシステムは運用中のシステムの情報を提供します。プロセスのデータ
にアクセスできるのみでなく、階層中のファイルを読むことによりカーネルの状態を
要求することができます。
/proc のディレクトリ構造は情報の種類を反映しており、特定のデータを探す場合に
その位置が明らかでなくも簡単に探せるようになっています。
------------------------------------------------------------------------------
------------------------------------------------------------------------------
第2章: システムパラメータの修正
------------------------------------------------------------------------------
------------------------------------------------------------------------------
この章では
------------------------------------------------------------------------------
* /proc/sys にあるファイルに書き込むことによってカーネルパラメータを変更する
* パラメータを修正するファイルを調査する
* /proc/sys のファイルツリーを評価する
------------------------------------------------------------------------------
/proc/sys ディレクトリは /proc の中でも特に興味深い部分です。 これは情報を提
供するだけでなく、カーネル内部のパラメータを変更することを可能にします。試し
てみる際には十分に注意してください。これはシステムを最適化することもできます
が、同様にクラッシュさせることもできます。サービスを提供しているシステムのカー
ネルパラメータで遊んではいけません。開発マシンを準備してテストを行い、やろう
としていることが全て機能することを確認すべきです。エラーが発生するとマシンを
リブートするしかない場合もあります。
値を変更するには、単に新しい値をファイルに書き込むだけです。後のファイルシス
テム・データのセクションに例があります。変更を行うには root になる必要があり
ます。自分用のブートスクリプトを作成して、システムを起動するたびに書き込むよ
うにすることもできます。
/proc/sys 直下にあるファイルは Linux カーネルの動作において雑多な一般的なこ
とがらを監視したり調整したりするのに使用されます。いくつかのファイルの変更は
システム破壊のような思わぬ結果を招くことがあるため、実際に変更する前にドキュ
メントとカーネルのソースの両方をよく読むことをお勧めします。どのような場合で
も、これらのファイルに何か書き込む時には十分に注意深く行ってください。/proc
の項目は 2.1.* および 2.2 カーネルの間で少し変更になっているかもしれません。
何か疑問がある場合には /usr/src/linux/Documentation にあるカーネルのドキュメ
ントをよく見直してください。 この章は pre 2.2 カーネルに含まれる文章に基づい
ている部分がかなりあり、linux version 2.2.1 カーネルの一部になりました。
2.1 /proc/sys/fs - ファイルシステム・データ
-------------------------------------------
このサブディレクトリは特定のファイルシステム、ファイルハンドル、inode、dentry、
クォータについての情報を含んでいます。
現在、/proc/sys/fs には以下のファイルがあります。
dentry-state
------------
ディレクトリキャッシュの状態。ディレクトリ・エントリは動的に確保されたり解放
されたりするので、このファイルは現在の状態についての情報を与えます。このファ
イルは 6個の値を保持していて、最後の二つは使用されておらず常にゼロです。他の
四つの意味は 表2-1 に挙げます。
表 2-1: ディレクトリキャッシュの状態ファイル
..............................................................................
ファイル 内容
nr_dentry 常にゼロに見えます
nr_unused 使用されていないキャッシュエントリの数
age_limit メモリが足りない時にエントリが再作成されてからの秒単位の寿命
want_pages 内部データ
..............................................................................
dquot-nr と dquot-max
---------------------
dquot-max ファイルはキャッシュしているディスククォータ・エントリの最大値を示
しています。
dquot-nr ファイルはディスククォータ・エントリの確保済みの値と空きディスク
クォータ・エントリを示しています。
もしキャッシュされているディスククォータの利用可能な容量が非常に少なく、多数
のユーザが同時に使用するような場合は、上限を上げた方が良いでしょう。
file-nr と file-max
-------------------
カーネルは動的にファイルハンドルを確保しますが、この時にそれを再び解放するこ
とはしません。
file-max の値は Linux カーネルが割り当てることができるファイルハンドルの最大
数を示します。もしファイルハンドルが足りないというエラーメッセージが多く出る
場合には、この上限を上げた方が良いでしょう。この値のデフォルトは 4096 です。
変更するには単にこのファイルに新しい数を書き込むだけです:
# cat /proc/sys/fs/file-max
4096
# echo 8192 > /proc/sys/fs/file-max
# cat /proc/sys/fs/file-max
8192
この単に新しい値を echo して対応するファイルに書き込むという修正方法は、カー
ネルの全ての変更可能なパラメータに対して有効です。
file-nr の三つの値は、割り合て済みのファイルハンドルの数、使用中のファイルハ
ンドルの数、ファイルハンドルの最大数を示しています。割り当て済みのファイルハ
ンドルの数が最大値近くになっていても実際に使用中の数が十分に小さければ、ファ
イルハンドルの使用量のピークの数が示されているだけですから、最大値を増やす必
要はありません。
一方で、これ以外にプロセスごとにオープンできるファイルの最大数が存在します。
残念なことに、これはそう簡単には変更できません。この最大値はデフォルトでは
1024 に設定されており、これを変更するためには /usr/src/linux/include/linux
にある limits.h と fs.h を書き変える必要があります。NR_OPEN の定義を変更して
カーネルを再コンパイルしてください。
inode-state、inode-nr、inode-max
--------------------------------
ファイルハンドルと同様にカーネルは inode 構造体を動的に確保しますがそれを解
放することはできません。
inode-max の値は inode ハンドルの最大数を示しています。 この値は file-max の
三倍から四倍の大きさであるべきです。なぜならば、標準入力、標準出力、ネットワー
ク・ソケットなどを扱うためにも同様に inode 構造体が必要になるからです。もし
定常的に inode の値が足りないようならばこの値を増やしてください。
inode-nr ファイルは inode-state の最初の二つの値を含んでいます。ですからこの
ファイルの説明は省略します。
inode-state は三つの有効な値と四つのダミーの値を含んでいます。有効な値は順に
nr_inodes、nr_free_inodes、preshrink です。
* nr_inodes
システムが割り当て済みの inode の数を示します。Linux はページ単位で inode
を割り当てるため、この値は inode-max の値より若干大きくなることがあります。
* nr_free_inodes
空いている inode 数を示しています。 nr_inodes が inode-max より大きく、シス
テムがそれ以上 inode を割り当てる前に inode リストを整理しなければならない
場合には preshrink がゼロ以外になります。
super-nr と super-max
---------------------
同じく、カーネルに動的に割り当てられるスーパーブロック構造体で、解放されるこ
とはありません。super-max ファイルはスーパーブロック・ハンドラの最大数を格納
しています。super-nr は現在割り当てられている数です。
全てのマウントされたファイルシステムはスーパーブロックが必要です。非常に多く
ファイルシステムをマウントしようとする場合にはこれらの数値を増やした方が良い
でしょう。
2.2 /proc/sys/fs/binfmt_misc - その他のバイナリフォーマット
-----------------------------------------------------------
これらのファイルの他に /proc/sys/fs/binfmt_misc サブディレクトリが存在します。
これはカーネルがサポートしているその他のバイナリフォーマットを扱います。
binfmt_misc はモジュールを追加したりカーネルをコンパイルしなおしたりすること
なしに新たなバイナリフォーマットを登録することを可能にします。これを行うため
には binfmt_misc はバイナリの先頭のマジックナンバーか、バイナリのファイル名
の拡張子を知っている必要があります。
この機能は構造体のリンクド・リストで管理されており、バイナリフォーマットのマ
ジックとそのサイズ(またはファイル名の拡張子)、オフセット、マスク、インタプリ
タの名前を含んでいます。そのバイナリを起動するように要求された場合は、その元
のプログラム名を引き数として、与えられたインタプリタを起動します。 これは
binfmt_java、binfmt_em86、binfmt_mz と同様の動作です。binfmt_misc はデフォル
トでは何も登録されていません。自分で追加のバイナリフォーマットを登録する必要
があります。
binfmt_misc には二つの全般的なファイルと、登録されたフォーマットごとに一つの
ファイルがあります。二つの全般的なファイルは register と status です。
新しいバイナリフォーマットを登録するには
----------------------------------------
新しいバイナリフォーマットを登録するには以下のコマンドを実行します。
echo :名前:型:オフセット:マジック:マスク:インタープリタ: \
> /proc/sys/fs/binfmt_misc/register
ここで、適切な名前(name: /proc ディレクトリのエントリに使用されます)、オフセッ
ト(offset: 省略するとデフォルトは 0)、マジック(magic)とマスク、(mask: これも
省略できデフォルトは全て 0xff)、そして最後に肝心の起動するインタプリタ
(interpreter: 例えばテスト用に '/bin/echo')を指定する必要があります。通常のマ
ジックによる判別を使用する場合は型(type) に M を、ファイル名の拡張子による判
別を使用する場合には型(type) に E を (拡張子は magic の位置に)指定します。
バイナリフォーマット・ハンドラの状態をチェックまたはセットする
--------------------------------------------------------------
/proc/sys/fs/binfmt_misc/status ファイルを cat すれば、binfmt_misc の現在の
状態(有効/無効)を取得できます。状態を変更するためには 0 (無効)または 1 (有効)
または -1 (警告: これは既に登録されているものを全てクリアします)を status に
echo します。例えば echo 0 > status とすると binfmt_misc を(一時的に) 無効に
します。
個々のハンドラの状態
--------------------
それぞれの登録されたハンドラは /proc/sys/fs/binfmt_misc にエントリを持ちます。
これらのファイルは status と同様の機能を持ちますが、その該当するバイナリフォー
マットにのみ作用します。 このファイルを cat することによって、binfmt の イン
タプリタやマジックについて、関連する情報全てを得ることができます。
binfmt_misc の使用例 (binfmt_java をエミュレート)
-------------------------------------------------
cd /proc/sys/fs/binfmt_misc
echo ':Java:M::\xca\xfe\xba\xbe::/usr/local/java/bin/javawrapper:' > register
echo ':HTML:E::html::/usr/local/java/bin/appletviewer:' > register
echo ':Applet:M::<!--applet::/usr/local/java/bin/appletviewer:' > register
echo ':DEXE:M::\x0eDEX::/usr/bin/dosexec:' > register
これら四行は Java 実行形式と Java アプレットのサポートを追加します。
(binfmt_java と同様ですが、全てのアプレットファイルに <!--applet> を書かなく
てもすむように .html 拡張子も追加します) JDK とシェルスクリプトの
/usr/local/java/bin/javawrapper もインストールする必要があります。このスクリ
プトは Java のファイル名の扱いの問題を回避します。 Java バイナリを加えるには、
パス上のどこかにクラスファイルへのリンクを作成するだけです。
2.3 /proc/sys/kernel - カーネル全般のパラメータ
-----------------------------------------------
このディレクトリはカーネルの全般的な動作を反映しています。前にも述べたように
内容はカーネルのコンフィギュレーションに依存しています。最も重要なファイルの
いくつかについて、それが何を意味し、どのようにそれを使用するかを説明します。
acct
----
このファイルは三つの値 highwater、lowwater、frequency を含んでいます。
これは BSD 形式のプロセス・アカウンティングが有効になっている場合にのみ存在
します。これらの値はその動作を制御します。もしログを書き込んでいるファイルシ
ステムの残り容量が lowwater%以下になるとアカウントは一時停止され、higtwater%
以上になったらアカウントが再開されます。frequency は空き容量をどの程度の頻度
でチェックするかを(秒単位で)指定します。デフォルトの設定は 4、2、30 です。こ
の値だと空き容量が 2%以下になるとアカウントが停止され、4% 以上になると再開さ
れます。空き容量についての情報は 30 秒ごとに確認されます。
ctrl-alt-del
------------
このファイルの値が 0 ならば、ctrl-alt-del はトラップされて、上品にリセットを
行うよう init(1) プログラムに伝えられます。この値が 0 より大きければ、このキー
を押すことにより Linux はすぐにリブートを行い、汚れた(dirty)バッファの sync
は行いません。
[注意]
(dosemu のような)プログラムがキーボードを生(raw)モードに設定している場合
には、crtl-alt-del はカーネルの tty 層に届く前にプログラムによって解釈さ
れます。そしてどのように動作するかはそのプログラムが決定します。
domainname と hostname
----------------------
これらのファイルはマシンの NIS のドメイン名とホスト名の設定を制御します。
伝統的な名前の darkstar.frop.org ならば単に:
# echo "darkstar" > /proc/sys/kernel/hostname
# echo "frop.org" > /proc/sys/kernel/domainname
とすることで、ホスト名と NIS ドメイン名の設定ができます。
osrelease、ostype、version
--------------------------
名前の意味する通りで、これらは以下の内容を含んでいます:
> cat /proc/sys/kernel/osrelease
2.2.12
> cat /proc/sys/kernel/ostype
Linux
> cat /proc/sys/kernel/version
#4 Fri Oct 1 12:41:14 PDT 1999
osrelease ファイルと ostype ファイルは明らかでしょう。version には少し説明が
必要かもしれません。#4 というのはこのソースから 4 回目にコンパイルされたカー
ネルであることを意味し、続く日付けはカーネルが構築された時間を示します。これ
らの値を変更するにはカーネルを再構築するしかありません。
panic
-----
このファイルの値は panic 後リブートするまでにカーネルが何秒待つかを示してい
ます。ソフトウェアによる watchdog を使用する場合は、 60 を設定することを推奨
します。もし 0 に設定するとカーネルが panic した後の自動リブートを無効にしま
す。これがデフォルトの設定です。
printk
------
printk の四つの値はそれぞれ
* console_loglevel、
* default_message_loglevel、
* minimum_console_level、
* default_console_loglevel
を示しています。
これらの値はカーネル内部からのエラー・メッセージを出力したりログに記録したり
する printk() の動作に影響します。それぞれのログレベルに関するより詳しい情報
は syslog(2) を参照してください。
* console_loglevel
これより優先度が高いメッセージはコンソールに表示されます。
* default_message_level
優先度を明示されていないメッセージはこの優先度で表示されます。
* minimum_console_loglevel
console_loglevel に設定できる最小(優先度が最も高い)値です。
* default_console_loglevel
console_loglevel のデフォルトの値です。
sg-big-buff
-----------
このファイルは汎用 SCSI (sg)バッファの大きさを示しています。今の時点ではまだ
この値を変更することはできませんが、カーネルをコンパイルする時に
include/scsi/sg.h の SG_BIG_BUFF の値を修正することによって修正できます。
もし SANE (Scanner Access Now Easy) でスキャナを使用する場合にはこの値をより
高く設定したくなるかもしれません。詳しくは SANE のマニュアルを見てください。
modprobe
--------
modprobe のバイナリがある場所です。 カーネルがモジュールをオンデマンドロード
する場合にここで与えられたプログラムを使用します。
shmmax、shmall (訳者追加)
--------------
shmmax は一度の shmget() システムコールで割り当てることができる IPC の共有
メモリの最大値です。
shmall は共有メモリに使用可能な最大のページ数です。
これらのファイルはカーネルコンフィギュレーションで System V IPC を有効にして
いるときにだけ存在します。
sysrq (訳者追加)
-----
このファイルは神秘の SysRq キー機能が有効になっているかどうかを示します。
値が 1 のときは神秘の SysRq キーの組合せはトラップされ何らかの情報をコンソー
ルに出力します。0 のときはこの機能は無効になります。
神秘の SysRq キーに関するより詳しい情報はカーネル付属文書の sysrq.txt を見て
ください。
2.4 /proc/sys/vm - 仮想メモリ・サブシステム
-------------------------------------------
このディレクトリにはあるファイルは Linux カーネルの仮想メモリ
(VM:Virtual Memory)サブシステムの機能の調整に使用することができます。さらに、
bdflush ファイルはディスクの使用量にも少し影響します。
bdflush
-------
このファイルは bdflush カーネル・デーモンの機能を制御します。 このファイルは
現在のところ 9 個の整数値を含んでおり、そのうちの 6 個がカーネルによって実際
に使用されています。これらは 表2-2 に挙げます。
Table 2-2: Parameters in /proc/sys/vm/bdflush
表 2-2: /proc/sys/vm/bdflush のパラメータ
..............................................................................
値 意味
nfract 汚れたバッファ・キャッシュのパーセンテージがこの値になったら
bdflush を活性化します。
ndirty 一回のサイクルで書き込みを実施できる最大ブロック数
nrefill refill を呼び出す度に取得しようとする汚れていない(clean)バッファ
の数
nref_dirt バッファの refill を試みようとした時に汚れたバッファの数がこの閾
値を超えていたら bdflushを活性化します。
dummy 未使用
age_buffer 通常バッファをフラッシュするまでの時間
age_super スーパーブロックをフラッシュするまでの時間
dummy 未使用
dummy 未使用
..............................................................................
* nfract
このパラメータはバッファキャッシュの中の汚れたバッファの最大数を制御します。
「汚れた」とはバッファの内容をディスクに書き込む必要があることを意味します。
(反対に「綺麗な」バッファはそれを忘れてしまっても構いません。)これを大きな
値に設定すると Linux はディスクへの書き込みを長い間遅らせることができるこ
とになります。 しかしこれはメモリが足りなくなった時に一度に大量の I/O が発
生することも意味します。小さな値にするとより頻繁にディスクへの書き込みを行
い、ディスク I/Oを平均化します。
* ndirty
ndirty は bdflush が一度にディスクに書き込むことができる汚れたバッファの最
大数を示します。 大きな値は、遅らせて一度に I/O を行うことを意味します。一
方で小さな値にすると bdflush が十分な頻度で呼び出されなければメモリ不足を
起こすことになります。
* nrefill
この値は refill_freelist() が呼び出された時に bdflush が空いているバッファ
のリストに追加すべきバッファの数を示しています。バッファはしばしばメモリペー
ジとは異なった大きさであり、前もって管理情報を記録しておかなければならない
のであらかじめ空きバッファを確保することが必要なのです。値が大きければ大き
いほど、多くのメモリが浪費されますが refill_freelist() を実行する頻度は少な
くなります。
* nref_dirt
refill_freelist() を行う時に nref_dirt より多くの汚れたバッファがあれば
bdflush を実行します。
* age_buffer と age_super
最後の age_buffer と age_super は Linux が汚れたバッファをファイルに書き込
むまでの最大時間を与えます。値は jiffy (クロック刻み)で表現され、1 秒は
100 jiffy です。 age_buffer はデータブロックの最大時間で、age_super はファ
イルシステムのメタデータの最大時間です。
buffermem
---------
このファイルの三つの値はバッファ・メモリに使用するメモリの量を制御します。パー
センテージはシステムの全メモリを基準に計算します。
これらの値は:
* min_percent
この値はバッファメモリに消費すべきメモリの最低パーセンテージです。
* borrow_percent
Linux のメモリが足りなくなった時にバッファキャシュにこの値以上のメモリを割
り当てていた場合、 メモリ管理(MM: Memory Management)サブシステムは他の目的
に使用しているメモリを補償するために、バッファキャッシュのメモリをより積極
的に切り詰めます。
* max_percent
この値はバッファキャッシュに割り当てることができるメモリの最大数です。
freepages
---------
このファイルは三つの値を含んでいます: min、low、high:
* min
システムの空きページの数がこの値に達した時は、カーネル以外はそれ以上のメモ
リを割り当てることができなくなります。
* low
空きページの数がこの値以下になった時点で、カーネルは積極的なスワップを開始
します。
* high
カーネルはこの数以上のメモリを常に空いた状態に保とうと試みます。メモリがこ
の値より少なくなった時点で、カーネルは緩やかにスワップを開始し、実際に積極
的なスワップをしなくてすむことを期待します。
kswapd
------
kswapd はカーネル・スワップアウト・デーモンです。kswapd はカーネルの一部で、
メモリが断片化したり一杯になったりした時に、メモリを解放します。それぞれのシ
ステムは異なっているので、システムのこの機能を調整したくなるでしょう。
このファイルは三つの数字を含みます:
* tries_base
kswapd が一度に解放しようとするメモリの最大数はこの数値から計算されます。
たいていはこの値は 4 か 8 (mm/vmscan.c を参照)で除算されるので、見た目ほど
大きくはありません。
swap の出し入れの帯域幅を上昇させたい場合には、 この値を増やすと良いでしょ
う。
* tries_min
これは kswapd が呼び出される度にページを解放しようと試みる最小の回数です。
この数値が存在するのは kswapd が最低の優先度で呼び出されたとしてもある程度
のページを解放することを保証するためです。
* swap_cluster
おそらく、この値がシステムの性能に最も大きな影響を与えるでしょう。
swap_cluster は kswapd が一回に書き込むページの数です。 この値を大きくする
ことによって kswapd は I/Oを大きな塊で行いディスクのシークの回数を減らしま
す。しかし大きくし過ぎてはいけません。あまりにも大きいとリクエスト・キュー
が一杯になってしまいます。
overcommit_memory
-----------------
このファイルは一つの値を含んでいます。十分にメモリがあるか調べる場合には以下
のようなアルゴリズムが使用されます: overcommit_memory の値が正ならば、常に十
分なメモリがあると仮定します。これは便利な機能で、プログラムはしばしば万一に
備えて巨大なメモリを malloc() しますが、普通はそのうちの一部分のみしか使用し
ません。 この値を 0 にしておくと、実際にシステムにプログラムが走るのに十分な
メモリがあっても、そのような巨大な malloc() の試みを失敗させます。
一方で、この機能を有効にするとメモリが足りなくなってスラッシングしたり、シス
テムが落ちたりするもしれません。ですから大きな、もしくは重要なサーバではこの
値を 0 に設定すると良いでしょう。
pagecache
---------
このファイルは buffermem と同様の働きをします。メモリ・マップとファイルの
一般キャッシュのためのメモリの割り当てを制御するという点が異なっています。
最低レベルを低すぎる値にしてはいけません。そうでないと、メモリの残りが少なく
なったり断片化が進んだりすると、システムはスラッシングを起こしてしまいます。
pagetable_cache
---------------
カーネルはプロセッサごとにキャッシュを用意して、いくつかのページテーブルを保
持しています。(これは SMP システムで大いに助けになります) プロセッサごとの
キャッシュの大きさは low と high の間になります。
メモリが少なく CPU が一つのシステムでは、メモリを無駄にしないように、この値
を 0 にしても問題ありません。 このキャッシュは、SMP システムでカーネル・メモ
リのロックを必要としない高速なページテーブル割り当てを行うために使用されます。
大きなシステムでは設定はそのままで多分問題ないでしょう。通常のシステムでも特
に問題ないでしょう。(RAM が 16MB 以下の) 小さなシステムでは両方の値を 0 に設
定した方が良いでしょう。
swapctl
-------
このファイルは 8 個もの変数を含んでいます。 これら全ての値は kswapd によって
使用されます。
最初の四つの変数
* sc_max_page_age、
* sc_page_advance、
* sc_page_decline、
* sc_page_initial_age
は Linux のページ寿命の管理に使用されます。 ページ寿命とはどのメモリページが
よく使われるか、どのページが問題なくスワップアウトできるかを記録する方法です。
スワップインされた時にページは最初に sc_page_initial_age (デフォルト 3) の寿
命を持ちます。そのページが kswapd によってスキャンされた時にその寿命は以下の
方式に従って修正されます。
* 最後にスキャンした以降にページが使用された場合、その寿命は sc_page_advance
(デフォルト 3)の分だけ増加します。 ただし最大値は sc_max_page_age(デフォル
トは 20) です。
* そうでなければ(つまり使用されていなければ)ページの寿命は sc_page_decline
(デフォルト 1) だけ減少します。
寿命が 0 に達したページはスワップアウトされる準備ができていることになります。
変数 sc_age_cluster_fract、sc_age_cluster_min、sc_pageout_weight、
sc_bufferout_weight はページをスワップアウトする際の kswapd の積極性を制御す
るのに使用できます。
sc_age_cluster_fract は kswapd によってそれぞれのプロセスからいくつのページ
がスキャンされるかを計算するのに使用されます。計算式は以下のようになります。
sc_age_cluster_fract
-------------------- * 常駐サイズ
1024
したがって kswapd にプロセス全体をスキャンさせたい場合は sc_age_cluster_fract
に 1024 を設定する必要があります。 kswapd がスキャンするページ数の最小値は
sc_age_cluster_min が示しています。 これは kswapd が小さなプロセスもスキャン
するようにします。
sc_pageout_weight と sc_bufferout_weight の値は kswapd が一つのページ/バッファ
のスワップアウトを何回試みるかを制御するために使用します。これらの値によって
ユーザページとバッファ/キャッシュ・メモリの割合を細かく調整できます。 もし
Linux システムがバッファメモリの要求を満たすためにスワップアウトするプロセス
の数が多過ぎるようならば、sc_bufferout_weight を増やすか sc_pageout_weight
を減らすかした方が良いでしょう。
2.5 /proc/sys/dev - デバイス固有のパラメータ
--------------------------------------------
今のところ CDROM ドライバについてのみサポートしています。 システムに取り付け
られている CD-ROM ドライブについての読み込み専用の情報ファイルのみが存在しま
す:
> cat /proc/sys/dev/cdrom/info
CD-ROM information, Id: cdrom.c 2.55 1999/04/25
drive name: sr0 hdb
drive speed: 32 40
drive # of slots: 1 0
Can close tray: 1 1
Can open tray: 1 1
Can lock tray: 1 1
Can change speed: 1 1
Can select disk: 0 1
Can read multisession: 1 1
Can read MCN: 1 1
Reports media changed: 1 1
Can play audio: 1 1
sr0 と hdb の二つのドライブが存在することと、その機能がわかります。
2.6 /proc/sys/sunrpc - リモート・プロシジャ・コール(RPC)
---------------------------------------------------------
このディレクトリは四つのファイルを含んでおり、それぞれ RPC 関数の NFS、 NFS
デーモン、 RPC、NLM のデバッグモードを有効か無効かに設定します。デフォルトの
値は 0 です。これを 1 に設定することでデバッグ機能がオンになります。
2.7 /proc/sys/net - ネットワーク関連
------------------------------------
カーネルのネットワーク部分へのインターフェースは /proc/sys/net にあります。
表2-3 には存在する可能性のある全てのサブディレクトリを示しています。カーネル
のコンフィギュレーションによって存在しないものもあるかもしれません。
表 2-3: /proc/sys/net のサブディレクトリ
..............................................................................
ディレクトリ 内容 ディレクトリ 内容
core 一般パラメータ appletalk Appletalk プロトコル
unix Unix ドメイン・ソケット netrom NET/ROM
802 E802 プロトコル ax25 AX25
ethernet イーサネット・プロトコル rose X.25 PLP 層
ipv4 IP バージョン 4 x25 X.25 プロトコル
ipx IPX token-ring IBM トークン・リング
bridge ブリッジ decnet DEC net
ipv6 IP バージョン 6
..............................................................................
ここでは IP ネットワークに焦点を当てます。 AX15、X.25、DEC Net 等は Linux の
世界ではごく一部の人たちしか使用していないので、この章では省略します。IPX と
Appletalk に関してはこの章で少しだけ情報を提供しています。これらのプロトコル
に関する詳しいパラメータの内容はオンライン・ドキュメントやカーネルのソースを
参照してください。この節では上記の表のうちの主要なサブディレクトリについて説
明します。ほとんど場合はデフォルトのままで大丈夫で、これらの値を変更する必要
はありません。
/proc/sys/net/core - ネットワークの一般オプション
-------------------------------------------------
rmem_default
------------
ソケットの受信バッファのデフォルトの大きさ(単位はバイト)です。
rmem_max
--------
ソケットの受信バッファの最大の大きさ(単位はバイト)です。
wmem_default
------------
ソケットの送信バッファのデフォルトの大きさ(単位はバイト)です。
wmem_max
--------
ソケットの送信バッファの最大の大きさ(単位はバイト)です。
message_burst と message_cost
-----------------------------
これらのパラメータはネットワークコードからカーネルのログに書き込まれる警告
メッセージを制限します。これらはサービス不能攻撃を不可能にするために制限を
設定します。
massage_cost を大きくすると書き出されるメッセージは少なくなります。
message_burst はメッセージが捨てられる時に制御を行います。デフォルトの設定で
は警告メッセージを 5 秒に一回に制限しています。
netdev_max_backlog
------------------
インターフェースがカーネルが扱えるよりも高速にパケットを受信した場合に、入力
側のキューに蓄えるパケットの最大数です。
optmem_max
----------
ソケットごとの補助バッファの最大サイズです。補助データは追加データを持った
struct cmsghdr 構造体の配列になります。
/proc/sys/net/unix - Unix ドメイン・ソケットのパラメータ
--------------------------------------------------------
このサブディレクトリにはファイルが二つだけあります。これらはソケット・ディス
クリプタが削除・破棄されるまでの時間を制御します。
2.8 /proc/sys/net/ipv4 - IPV4 設定
----------------------------------
IP バージョン 4 は今なお Unix のネットワークにおいて最も使用されているプロト
コルです。 今後の数年で IP バージョン 6 に置き換えられるでしょう。しかし、今
のところバージョン 4 がインターネットの事実上の標準で、 世界中のネットワーク
環境のほとんどで使用されています。このプロトコルは重要なので、Linux カーネル
の IPv4 サブシステムの動作を制御するサブディレクトリを詳しく見ていきます。
まず最初に /proc/sys/net/ipv4 の項目について見てみましょう。
ICMP 設定
---------
icmp_echo_ignore_all と icmp_echo_ignore_broadcasts
---------------------------------------------------
(1)が有効、(0)が無効です。 それぞれカーネルが全ての ICMP ECHO 要求を無視する
か、 カーネルがブロードキャストやマルチキャスト・アドレスへの ICMP ECHO を無
視するかを設定します。
もしブロードキャスト・アドレスやマルチキャスト・アドレスを目的アドレスとした
ICMP echo を受け入れるようにした場合、あなたのネットワークが他のホストへのパ
ケット・フラッディングによるサービス不能攻撃に利用されるかもしれないことに注
意してください。
icmp_destunreach_rate、icmp_echoreply_rate、
--------------------------------------------
icmp_paramprob_rate、icmp_timeexeed_rate
----------------------------------------
特定の目的地に送る ICMP パケット数の限度を設定します。ゼロに設定すると全く制
限しません。正の値を設定した場合には送信パケットの数を rate/100 秒間(Intel シ
ステムの場合)に一回に制限します。
IP 設定
-------
ip_autoconfig
-------------
システムの IP 設定が RARP、BOOTP、DHCP などの機構によって動的に行われた場合に
は 1 になります。そうでなければ 0 です。
ip_default_ttl
--------------
IPv4 インターフェース の TTL (パケット寿命)です。 これは単純にパケットが移動
できる最大のホップ数です。
ip_dynaddr
----------
インターフェースのアドレスが変更された場合に動的にソケットのアドレスを書き換
える機能を有効にします。これは毎回 IP アドレスが変更になるダイアルアップ・イ
ンターフェースなどで便利です。
ip_forward
----------
インターフェース間の IP パケットのフォワードを有効または無効にします。このパ
ラメータを変更すると他の全てのパラメータはデフォルトにリセットされます。この
項目のデフォルトはカーネルがホストまたはルータのどちらにコンフィギュレーション
されているかによって異なります。
ip_local_port_range
-------------------
TCP および UDP によってローカルポートとして使用されるポートの範囲です。二つ
の数字を含んでいて最初の値は最も低いポートの番号、二つ目の数字は最も高いポー
トの番号です。デフォルトでは 1024-4999 です。使用率の高いシステムでは
32768-61000 に変更すべきです。
ip_no_pmtu_disc
---------------
パス MTU ディスカバリをオフにするためのグローバルスイッチです。これとは別に、
アプリケーションからソケットごと、ルートごとにオンやオフにすることもできます。
ip_masq_debug
-------------
IP マスカレードのデバッグ機能の有効/無効を設定します。
IP フラグメンテーション設定
---------------------------
ipfrag_high_thresh と ipfrag_low_thresh
---------------------------------------
IP フラグメントの再構成に使用できるメモリの最大量です。 もしこの目的に割り当
てられたメモリが ipfrag_high_thresh バイトになったら、フラグメント・ハンドラ
は ipfrag_low_thresh に達するまで、パケットを捨てます。
ipfrag_time
-----------
IP フラグメントをメモリに置いておく時間です。
TCP 設定
--------
tcp_retrans_collapse
--------------------
いくつかのイカレたプリンタのためにバグ=バグ互換を保持するためのものです。そ
のような TCP スタックのバグを回避するために、 再送信する場合にはより大きなパ
ケットを送るように試みます。ゼロに設定することでこの機能をオフにできます。
tcp_keepalive_probes
--------------------
キープアライブ(keep alive) 設定された TCP 接続において、ここに設定した数だけ
確認パケットを送っても応答がない場合には切断されたと判断します。
tcp_keepalive_time
------------------
キープアライブ(keep alive)が有効な時に、どれくらいの頻度でキープアライブ・メッ
セージを TCP が送信するかを示します。 デフォルトの値は 2 時間です。
tcp_syn_retries
---------------
TCP の接続を行うために最初の SYN パケットの再送信を試みる回数です。 255 以上
に設定してはいけません。これは外向きの接続に対しての時間切れを設定します。内
向きの接続に対する再送信回数は tcp_retries1 によって定義されます。
tcp_sack
--------
RFC2018 による選択的確認応答(SACK)を有効にします。
tcp_timestamps
--------------
RFC1323 に定義されたタイムスタンプを有効にします。
tcp_stdurg
----------
TCP 緊急ポインタ(urgent pointer)フィールドを厳密に RFC793 に従って解釈するよ
うにします。 デフォルトは BSD 互換の解釈で緊急ポインタは緊急データの直後を指
しています。 RFC793 の解釈では緊急データの最後を指すことになっています。この
オプションを有効にするとこの実装の違いによる問題が出てくるかもしれません。デ
フォルトでは無効になっています。
tcp_syncookies
--------------
カーネルが CONFIG_SYNCOOKIES オプション付きでコンパイルされている場合にのみ
使用できます。ソケットの SYN 蓄積キューが溢れた場合に syncookie を送信します。
これは一般的な「syn flood 攻撃」を防ぎます。デフォルトでは無効になっています。
ソケット蓄積の概念は放棄されることに注意してください。これは syncookies が設
定されたサーバが過負荷になった場合に相手側は信頼できるエラーメッセージを受け
とれないかもしれないことを意味します。
tcp_window_scaling
------------------
RFC1323 に定義された通信ウィンドウのスケーリングを有効にします。
tcp_fin_timeout
---------------
最終 FIN を何秒間待つかを設定します。これだけ待っても FIN が来なければソケッ
トは無条件に閉じられます。 これは厳密に言えば TCP の規格には違反しています。
しかしサービス不能攻撃を防ぐために必要となります。
tcp_max_ka_probes
-----------------
slow timer が切れるごとに、キープアライブ検査を何回送るかを示します。 バース
トを防ぐためにこれを大きな値に設定してはいけません。
tcp_max_syn_backlog
-------------------
ソケットごとの蓄積キューの長さです。 Linux 2.2 から listen(2) で指定された
backlog の値は既に接続したソケットの蓄積キューのみを指定します。この値以上の
接続要求を受けた場合には Linux はそのパケットを捨て始めます。syncookies が有
効になっている場合にはそれでもパケットへの返信が行われ、キューの最大値は効果
的に無視されます。
tcp_retries1
------------
TCP 接続要求に対する応答の再送を試みる回数を指定します。
tcp_retries2
------------
TCP パケットの再送を試みる回数を指定します。
インターフェース固有の設定
--------------------------
/proc/sys/net/ipv4/conf ディレクトリ以下にはシステムが認識しているインター
フェースごとに一つのサブディレクトリが存在します。 さらに all という名前のサ
ブディレクトリが存在します。all サブディレクトリを変更した場合には全てのイン
ターフェースに影響があります。それ以外のサブディレクトリを変更した場合にはそ
のインターフェースにのみ影響があります。全てのディレクトリは同じエントリを持
ちます:
accept_redirects
----------------
このスイッチはカーネルが ICMP リダイレクトメッセージを受け入れるかどうかを決
定します。デフォルトでは、カーネルが通常のホストとして設定されている場合には
'yes' に、ルータとしてコンフィギュレーションされている場合には 'no' になりま
す。
accept_source_route
-------------------
ソース・ルーティド・パケットを受け入れるか拒否するかを決めます。デフォルトは
カーネルがどのようにコンフィギュレーションされているかに依存し、ルータの場合
は 'yes' に、ホストの場合は 'no' になります。
bootp_relay
-----------
送信元アドレスが 0.b.c.d となっており、 送信先がこのホストになっていないパケッ
トを自分宛てとして受け入れるかどうかを示します。これは BOOTP 中継デーモンが
そのようなパケットを受信して転送することを可能にします。
デフォルトは 0 です。 この機能は(カーネル・バージョン 2.2.12 では)まだ実装さ
れていません。
forwarding
----------
このインターフェースで IP フォワーディングが有効かどうかを示します。
log_martians
------------
知らないルートの送信元アドレスを持ったパケットをカーネルログに出力するかどう
かを示します。
mc_forwarding
-------------
マルチキャストのルーティングを行うかを示します。この機能を使うには、カーネル
が CONFIG_MROUTE オプション付きでコンパイルされている必要があります。さらに
マルチキャスト・ルーティング・デーモンが必要になります。
proxy_arp
---------
代理 ARP を行う(1)か行わない(0)かを示します。
rp_filter
---------
発信元の検証を行うかどうかを整数で指定します。1 が有効で 0 が無効です。デフォ
ルトでは無効ですが、しかしローカルアドレスやブロードキャストアドレスの偽称に
対しては常に有効になっています。
あるネットワークからインターネットへの唯一の経路となるルータでこの値を 1 に
設定することで、ファイアウォールの設定を追加しなくても、内部ネットワークへの
明らかな偽称攻撃を防ぎます。(外部アドレスは偽称される可能性があります)
secure_redirects
----------------
デフォルトのゲートウェイのリストにあるゲートウェイに対してのみ ICMP リダイレ
トを受け入れます。デフォルトで有効です。
shared_media
------------
もし設定されていないと、カーネルはこのデバイスに繋っている異なったサブネット
間で直接通信できるという仮定を行いません。 デフォルトでは 'yes' に設定されて
います。
send_redirects
--------------
他のホストへと ICMP リダイレクトを送るかどうかを決定します。
ルーティング設定
----------------
/proc/sys/net/ipv4/route ディレクトリにはルーティング関連の制御を行ういくつ
かのファイルが含まれています。
error_burst と error_cost
-------------------------
これらのパラメータはルーティングのコードからカーネル・ログに書き出される警告
メッセージを制限するために使用されます。error_costを大きくすると書き出される
メッセージは少なくなります。error_burst はメッセージを捨てる際の制御を行いま
す。デフォルトでは警告メッセージを 5 秒間に一回に制限しています。
flush
-----
このファイルに書き込むとルーティング・キャッシュをフラッシュします。
gc_elasticity、gc_interval、gc_min_interval、gc_thresh、gc_timeout
------------------------------------------------------------------
ルーティング・キャッシュのガーベッジ・コレクションの頻度と動作を制御する値で
す。
max_size
--------
ルーティング・キャッシュの最大サイズです。キャッシュがこのサイズに達した場合
は、古いエントリは破棄されます。
max_delay、min_delay
--------------------
ルーティング・キャッシュがフラッシュされるまでの時間です。
redirect_load、redirect_number
------------------------------
特定のホストに対して ICMP リダイレクトをより多く送るべきかを決定するための因
子です。負荷(load)やリダイレクトの数がここで指定した数に達した場合には、それ
以上のリダイレクトは送信されません。
redirect_silence
----------------
リダイレクトの時間切れ。負荷やリダイレクト数が制限に達したためにリダイレクト
が停止されていたとしても、この期間が過ぎるとリダイレクトを再び送ります。
ネットワーク近隣の扱い
----------------------
直接の近隣(同じリンクに接続しているノード)への接続をどのように扱うかについて
の設定を /proc/sys/net/ipv4/neigh ディレクトリに設定します。
conf ディレクトリの時と同様に、デフォルトの値を保持するための default サブディ
レクトリと、インターフェースごとに一つのサブディレクトリが存在します。ディレ
クトリの中身はどれも同じです。 唯一の例外は default ディレクトリにはガーベッ
ジ・コレクションのパラメータを設定するためのオプションが含まれていることです。
インターフェース・ディレクトリには以下のエントリが含まれています。
base_reachable_time
-------------------
RFC2461 に指定されているランダム到着可能時間を計算するのに使用されるベースと
なる値です。
retrans_time
------------
近隣確認(Neighbor Solicitation) メッセージを再送信するまでの時間(単位は jiffy
= 1/100 秒)です。 アドレスを解決したり、近隣が到着不能であることを確認したり
する際に使用します。
unres_qlen
----------
ARP 要求を保持するためのキューの最大の長さです。ARP アドレスが解決されている
最中に、他の層からの要求パケットをどれだけ受け入れるかを示しています。
anycast_delay
-------------
近隣確認メッセージへ答える際のランダム遅延の最大時間です。単位は jiffy (1/100
秒)です。これはまだ実装されていません。 (Linux はまだ anycast をサポートして
いません)
ucast_solicit
-------------
ユニキャスト(unicast)解決のための再試行の最大回数です。
mcast_solicit
-------------
マルチキャスト(multicast)解決のための再試行の最大回数です。
delay_first_probe_time
----------------------
近隣が到着可能かどうかの最初の確認を行うまでの遅延時間です。 (gc_stale_time
を参照してください)
locktime
--------
新しい ARP/近隣エントリは最低でも locktime だけ経過しないと置き換えできませ
ん。これによって ARP キャッシュのスラッシングを防ぎます。
proxy_delay
-----------
代理 ARP エントリを持っている時に ARP 要求に答えるまでの最大時間です。実際の
時間は 0 以上 proxy_delay 以下の乱数になります。ある場合には、これはネットワー
クの溢れを防ぐために使用されます。
proxy_qlen
----------
代理 ARP タイマの遅延のキューの最大の長さです。(proxy_delay を参照してくださ
い)
app_solicit
-----------
ユーザ・レベル ARP デーモンへと送る要求の数です。0 にするとオフになります。
gc_stale_time
-------------
古い ARP エントリをどの程度の頻度でチェックするかを決めます。 古くなった ARP
エントリは再び解決を行います。 (これは他のマシンへ IP アドレスが移動する時に
役に立ちます) ucast_solicit が 0 より大きければ最初に目的のホストに直接 ARP
パケットを送信します。 これが失敗して mcast_solicit が 0 より大きな場合には
ARP 要求をブロードキャストします。
2.9 Appletalk
-------------
/proc/sys/net/appletalk は Appletalk を使用する際に設定データを保持します。
設定パラメータは以下のようになります。
aarp-expiry-time
----------------
AARP エントリが時間切れになるまでの時間です。 これは古いホストを取り除くため
に使用されます。
(訳注) 原文 "ARP" とありますが、これは "AARP" の誤りです。
aarp-resolve-time
-----------------
Appletalk アドレスの解決を試みるために使用できる時間です。
aarp-retransmit-limit
---------------------
アドレス解決の再送信を試みる最大回数です。
aarp-tick-time
--------------
時間切れをチェックする頻度を制御する値です。
/proc/net/appletalk ディレクトリには現在このマシンで使用中の Appletalk ソケッ
トのリストがあります。
各フィールドは DDP タイプ、ローカル・アドレス(形式は network:node)、 リモート
アドレス、送信待ちキューの大きさ、受信キューの大きさ(アプリケーションによって
読み込まれるのを待っているバイト数)、 状態、ソケットの所有者の uid となってい
ます。
/proc/net/atalk_iface は Appletalk の設定をされた全てのインターフェースのリ
ストです。これはインターフェースの名前、Appletalk アドレス、そのアドレスでの
ネットワーク範囲(または phase 1 ネットワークの場合はネットワーク番号)、 イン
ターフェースの状態を示しています。
/proc/net/atalk_route は知っているネットワークルートのリストです。これはその
ルートの目的のネットワーク、直接接続しているルータ、ルート・フラグ、ルータの
経由するデバイスを含んでいます。
2.10 IPX
--------
IPX プロトコルは /proc/sys/net には調整可能な値を持ちません。
とはいえ IPX プロトコルのために /proc/net/ipx が提供されています。これは IPX
ソケットのリストを含んでおり、 ローカルアドレスとリモートアドレスをNovell 形
式(network:node:port)で与えます。 Novell の奇妙な伝統に従って port 以外は 16
進数です。Not_Connected は特定のリモートアドレスには結びつけられていないこと
を意味しています。 Tx と Rx は送信待ちキューと受信キューの大きさをバイト単位
で示しています。state はソケットの状態を、uid はそのソケットの所有者のユーザ
ID を示します。
/proc/net/ipx_interface ファイルは IPX インターフェースのリストです。 各イン
ターフェースのネットワーク番号、ノード番号、ネットワークがプライマリネットワー
クかどうかを示します。 またどのデバイスに結び付けられているか(内部ネットワー
クならば Internal)と割り当てられていれば Frame タイプを示します。Linux は IPX
用に 802.3、802.2、802.2 SNAP、DIX (Blue Book)イーサネットフレームをサポート
しています。
/proc/net/ipx_route は IPX ルートの一覧表です。それぞれのルートについて、目
的のネットワーク、ルータのノード(または Directly)、 内部ネットワークの場合は
ルータのネットワークアドレス(または Connected)を表示します。
------------------------------------------------------------------------------
要約
------------------------------------------------------------------------------
カーネルの動作のいくつかの要素は、カーネルをリコンパイルすることなくシステム
をリブートすることさえなしに、運用中に修正ができます。/proc/sys ツリーにある
ファイルは読み込みのみでなく、修正することもできます。 echo コマンドを使用し
てこれらのファイルに値を書き込むことにより、カーネルのデフォルトの設定を変更
できます。
------------------------------------------------------------------------------
Linux カーネル 2.2 付属文書一覧へ戻る