/procによるLinuxチューニング [前編]
〜 /procで理解するOSの状態 〜

Linuxの状態確認や挙動の変更で重要な役割を担うのが/procファイルシステムである。前編では/procの概念や/procを利用したOSの状態確認方法を理解していただきたい。(編集局)

遠田 耕平
2002/12/10

 本稿では、/procファイルシステムによるカーネルチューニングを紹介します。カーネル2.4.19をベースに説明していきますが、カーネルのバージョンによって内容が異なる場合があります。また、ディストリビュータが独自の拡張を施しているものもあります。従って、これから説明する内容がすべて当てはまるとは限りません(端的にいうと説明の対象が存在しなかったり、説明されていない機能が追加されていることがあります)。

/procファイルシステムとは

 /procは、Linuxシステムの/(ルート)に「ディレクトリ」として現れますが、このディレクトリは普通にLinuxを使っている分にはあまりなじみのないものかもしれません。水道の元栓のようなもので、「あることは知っているが、使おうと思うと使い方が分からない」というたぐいの存在といえるでしょう。

/proc導入の経緯

 /procはもともと、(「/proc」という名前が表しているように)「プロセスファイルシステム」として商用OSで導入されました。/procの目的は、プロセスとのインタラクションをファイルという一貫したインターフェイスで実現することでした。よく知られているように、UNIXのプロセスがシステムに対して行う操作はファイルという概念をベースに抽象化されています。普通のファイルはもちろん、デバイスのような一見ファイルに見えないものについても、UNIXにおいてはファイルとして抽象化されています。

 /proc導入以前は、あるプロセスが別のプロセスに対して何か操作を行ったり、ほかのプロセスから情報を受け取ったりするには、シグナルなどの非同期通知を使ったり、アプリケーション同士が合意のうえで通信を(パイプなりファイルなりを介して)行う必要がありました。すなわち、「プロセス」という存在に対して、抽象化された共通のアクセス方法はなかったのです()。例えば、デバッガやpsコマンドなどの実装は、システム依存のシステムコールやバイナリイメージを直接読み出すなど、アドホックな手法で実装されていました。

注:データに対するアクセスが「ファイル」として高度に抽象化されているのとは対照的です。

 そこで、プロセスというものに対する抽象化されたアクセス手法として、プロセスをファイルで抽象化した/procファイルシステムが考案されたのです。

Linuxと商用UNIXの/proc

 /procの基本的な考え方は、

/proc/プロセスID/

の配下に仮想的なファイルを用意し、この仮想的なファイルへの読み書きがプロセスの状態に対するアクセスになるというものです。

 ご存じのとおり、Linuxにも/proc/プロセスID/*というファイル群があり、いろいろな情報をユーザーに対して提供してくれます。Linuxの/procの場合は、それ以外にも「システムのチューニングパラメータへのアクセスを提供する」という意味合いも追加されています。

 商用UNIXでは、システムのチューニングパラメータ(例えば最大プロセス数や最大オープンファイル数など)は、カーネルに静的に組み込まれている場合も多く、チューニングを行うにはパラメータ定義ファイルをカーネルに組み込んだうえで再起動する必要があります。

/procの設定方法

 通常、/procを使用するのに必要な機能はカーネルに組み込まれています()。また、/procはファイルシステムなので、ほかのファイルシステム同様、マウントしなければ使えません。ただ、/procのマウントはシステムの起動時にrc.sysinitなどで実施されるので、通常はシステムにログインした時点で使用可能になっていると考えて構わないでしょう。

注:コンフィグレーション・オプションですが、オフにされることはまずないといっていいでしょう。

/procの読み書き

 /procに対する値の「設定」「読み出し」はとても簡単で、catやechoなどのコマンドを使用して、通常のファイルと同じように読み書きできます。もちろん、システム全体にかかわるので、ほとんどの場合はroot権限が必要です。

# cat /proc/xxx
値が表示される

# echo value > /proc/xxx
値が設定される

 /procはファイルシステムなので、その中に含まれる「ファイル」にはオーナーとパーミッションが付与されます。

-r--r--r--  1 root   root      0  9月 29 23:18 /proc/version
-rw-r--r--  1 root   root      0  9月 29 23:18 /proc/sys/kernel/sysrq

 /proc/versionは読み出し専用、/proc/sys/kernel/sysrqは読み書き可能ということになります。パーミッションやオーナーはプログラム上でハードコーディングされているため、chmodなどでこれらを変更することはできません。

sysctlによる設定

 /procのうち、/proc/sys配下のパラメータについてはsysctl(8)インターフェイスからもアクセスできます。sysctlは、システムのチューニングパラメータを操作するためのインターフェイスです()。

注:「/procの一部をsysctl(8)でアクセスできる」というより、Linuxの場合は「sysctl(8)が/procインターフェイスで実現されている」という方が正確でしょう。

# sysctl -w var=value
varというパラメータへvalueという値の書き込み

# sysctl -a
全パラメータの読み出しと表示

などでアクセスが可能で、

# sysctl -w kernel.sysrq=1
/proc/sys以下のパス名は「/」の代わりに「.」で区切って指定する

# echo 1 > /proc/sys/kernel/sysrq

は同じ操作をしていることになります。また、システムの起動時には/etc/sysctl.confという設定ファイルに従って、自動的にパラメータを設定するサービスが一般的です。自分でチューニングを行った結果は/etc/sysctl.confファイルに書き込んでおくのがよいでしょう(編注)。

# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) for
# more details.

# Controls IP packet forwarding
net.ipv4.ip_forward = 0

# Controls source route verification
net.ipv4.conf.default.rp_filter = 1

# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1
/etc/sysctl.confの例(Red Hat Linux 7.3のデフォルト)

編注:/etc/sysctl.confに書き込んでおかなかった場合、マシンを再起動した時点で/proc/sys以下の設定はデフォルト状態に戻ってしまう。

 
1/2

Index
/procによるLinuxチューニング [前編]
 〜 /procで理解するOSの状態 〜
Page 1
/procファイルシステムとは
 /proc導入の経緯
 Linuxと商用UNIXの/proc
/procの設定方法
 /procの読み書き
 sysctlによる設定
  Page 2
/procディレクトリ配下のファイルとディレクトリ
 プロセスIDディレクトリによる状態確認
 /proc直下のファイル群

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カーネルの開発体制などについて伺った

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間