------------------------------------------------------------------------------
                      /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 コマンドを使用し
てこれらのファイルに値を書き込むことにより、カーネルのデフォルトの設定を変更
できます。
------------------------------------------------------------------------------
