【Linux】procファイル情報活用のすすめ

Linuxにはprocファイルシステムというとても便利で素晴らしい機能があります。

このprocファイルを参照すればほとんどのシステム情報を得ることが可能です。

システム情報を表示するコマンドもありますが、単にこのprocファイルから情報を取得して人間が見やすいように加工しているだけだったりします。

よく使うprocファイルを紹介していこうと思います。

代表的なprocファイル

/proc/cpuinfo

以下のようにCPUの詳しい情報が得られます。

$ cat /proc/cpuinfo 
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 28
model name      : Intel(R) Atom(TM) CPU Z530   @ 1.60GHz
stepping        : 2
microcode       : 0x217
cpu MHz         : 798.070
cache size      : 512 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fdiv_bug        : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc arch_perfmon pebs bts cpuid aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 xtpr pdcm movbe lahf_lm tpr_shadow vnmi flexpriority dtherm
bugs            :
bogomips        : 3192.28
clflush size    : 64
cache_alignment : 64
address sizes   : 32 bits physical, 32 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 28
model name      : Intel(R) Atom(TM) CPU Z530   @ 1.60GHz
stepping        : 2
microcode       : 0x217
cpu MHz         : 798.101
cache size      : 512 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 1
apicid          : 1
initial apicid  : 1
fdiv_bug        : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc arch_perfmon pebs bts cpuid aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 xtpr pdcm movbe lahf_lm tpr_shadow vnmi flexpriority dtherm
bugs            :
bogomips        : 3192.28
clflush size    : 64
cache_alignment : 64
address sizes   : 32 bits physical, 32 bits virtual
power management:

個人的にはCPUのコア数やSSEいくつまで対応しているか調べて、gccのコンパイルオプションを指定するときにこの情報を参照することがあります。

/proc/meminfo

メモリー使用状況の詳細な情報を得ることができます。

$ cat /proc/meminfo 
MemTotal:        2064280 kB
MemFree:          437160 kB
MemAvailable:    1103524 kB
Buffers:           96904 kB
Cached:           642988 kB
SwapCached:            0 kB
Active:          1467384 kB
Inactive:         117720 kB
Active(anon):     800356 kB
Inactive(anon):    71012 kB
Active(file):     667028 kB
Inactive(file):    46708 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:       1178312 kB
HighFree:          32360 kB
LowTotal:         885968 kB
LowFree:          404800 kB
SwapTotal:       2097148 kB
SwapFree:        2096628 kB
Dirty:                12 kB
Writeback:             4 kB
AnonPages:        845236 kB
Mapped:            54716 kB
Shmem:             26156 kB
Slab:              25852 kB
SReclaimable:      19004 kB
SUnreclaim:         6848 kB
KernelStack:        1016 kB
PageTables:         2264 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     3129288 kB
Committed_AS:    1467920 kB
VmallocTotal:     122880 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
CmaTotal:          16384 kB
CmaFree:           16328 kB
DirectMap4k:       16376 kB
DirectMap4M:      892928 kB

各種メモリーの使われ方の詳細を知りたい時に重宝します。

/proc/interrupts

IRQなどのハードウェア割り込み回数の情報を得ることができます。

$ cat /proc/interrupts 
           CPU0       CPU1       
  0:         25          0   IO-APIC   2-edge      timer
  8:          1          0   IO-APIC   8-edge      rtc0
  9:          0          0   IO-APIC   9-fasteoi   acpi
 14:     733591          0   IO-APIC  14-edge      pata_sch
 15:          0          0   IO-APIC  15-edge      pata_sch
 18:          0          0   IO-APIC  18-fasteoi   uhci_hcd:usb4
 19:          0          0   IO-APIC  19-fasteoi   uhci_hcd:usb3
 21:         18          0   IO-APIC  21-fasteoi   ehci_hcd:usb1
 23:          0          0   IO-APIC  23-fasteoi   uhci_hcd:usb2
 24:    6566494          0   PCI-MSI 1048576-edge      eth0
 25:   20077583          0   PCI-MSI 1572864-edge      eth1
NMI:          0          0   Non-maskable interrupts
LOC:  120368497  114360274   Local timer interrupts
SPU:          0          0   Spurious interrupts
PMI:          0          0   Performance monitoring interrupts
IWI:          0          0   IRQ work interrupts
RTR:          0          0   APIC ICR read retries
RES:     217539     233941   Rescheduling interrupts
CAL:     287430    7437333   Function call interrupts
TLB:      12008       7956   TLB shootdowns
ERR:          0
MIS:          0
PIN:          0          0   Posted-interrupt notification event
NPI:          0          0   Nested posted-interrupt event
PIW:          0          0   Posted-interrupt wakeup event

smp_affinityなどを設定して各CPUへ割り込みを分散するときなどに便利な情報です。

/proc/softirqs

こちらはソフトウェア割り込み回数の情報になります。

$ cat /proc/softirqs  
                    CPU0       CPU1       
          HI:          0          0
       TIMER:    4192370    4388613
      NET_TX:    7536700    1164664
      NET_RX:   37350421    7869458
       BLOCK:          0          0
    IRQ_POLL:          0          0
     TASKLET:    9243007      46148
       SCHED:    3414335    3432548
     HRTIMER:          0          0
         RCU:    2688608    2375643

その他

/proc以下には他にもPID以下にそのプロセスの情報やnet以下にネットワーク関連の情報など有益な情報がたくさんあります。

気になった方はprocファイルの情報について調べてみて下さい。