Chapter 3

Collecting System Information
 

 
 
In this chapter:
 
 
* Investigating the properties of the pseudo file system /proc and its ability to provide information on the running Linux system
* Examining /proc's structure
* Uncovering various information about the kernel and the processes running on the system
 
 
 
The proc file system acts as an interface to internal data structures in the kernel. It can be used to obtain information about the system and to change certain kernel parameters at runtime.
 
First, we'll take a look at the read-only parts of /proc. In Chapter 4 , we show you how you can use /proc/sys to change settings.
 
3.1 Process-Specific Subdirectories
 

The directory /proc contains (among other things) one subdirectory for each process running on the system, which is named after the process ID (PID).
 
The link self points to the process reading the file system. Each process subdirectory has the entries listed in Table 3-1 .
 
 

Table 3-1 Process specific entries in /proc
 
File Content
cmdline Command line arguments
environ Values of environment variables
fd Directory, which contains all file descriptors
mem Memory held by this process
stat Process status
status Process status in human readable form
cwd Link to the current working directory
exe Link to the executable of this process
maps Memory maps
root Link to the root directory of this process
statm Process memory status information
  For example, to get the status information of a process, all you have to do is read the file /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 
 
 
This shows you nearly the same information you would get if you viewed it with the ps command. In fact, ps uses the proc file system to obtain its information. The statm file contains more detailed information about the process memory usage. Its seven fields are explained in Table 3-2 .
 
 
Table 3-2 Contents of the statm files
 
File Content
size total program size
resident size of memory portions
shared number of pages that are shared
trs number of pages that are 'code'
drs number of pages of data/stack
lrs number of pages of library
dt number of dirty pages
 
3.2 Kernel data
 

Similar to the process entries, the kernel data files give information about the running kernel. The files used to obtain this information are contained in /proc and are listed in Table 3-3 . Not all of these will be present in your system. It depends on the kernel configuration and the loaded modules, which files are there, and which are missing.  

Table 3-3 Kernel info in /proc
 
File Content
apm Advanced power management info
bus Directory containing bus specific information
cmdline Kernel command line
cpuinfo Info about the CPU
devices Available devices (block and character)
dma Used DMS channels
filesystems Supported filesystems
ide Directory containing info about the IDE subsystem
interrupts Interrupt usage
ioports I/O port usage
kcore Kernel core image
kmsg Kernel messages
ksyms Kernel symbol table
loadavg Load average
locks Kernel locks
meminfo Memory info
misc Miscellaneous
modules List of loaded modules
mounts Mounted filesystems
net Networking info (see text)
partitions Table of partitions known to the system
rtc Real time clock
scsi SCSI info (see text)
slabinfo Slab pool info
stat Overall statistics
swaps Swap space utilization
sys See chapter 4
uptime System uptime
version Kernel version
 
 
You can, for example, check which interrupts are currently in use and what they are used for by looking in the file /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 
 
 
There are three more important subdirectories in /proc: net, scsi, and sys. The general rule is that the contents, or even the existence of these directories, depend on your kernel configuration. If SCSI is not enabled, the directory scsi may not exist. The same is true with the net, which is there only when networking support is present in the running kernel.
 
The slabinfo file gives information about memory usage at the slab level. Linux uses slab pools for memory management above page level in version 2.2. Commonly used objects have their own slab pool (such as network buffers, directory cache, and so on).
 
3.3 IDE devices in /proc/ide
 

The subdirectory /proc/ide contains information about all IDE devices of which the kernel is aware. There is one subdirectory for each IDE controller, the file drivers and a link for each IDE device, pointing to the device directory in the controller specific subtree.
 
The file drivers contains general information about the drivers used for the IDE devices:
 

 
> cat /proc/ide/drivers 
ide-cdrom version 4.53 
ide-disk version 1.08 
 
 
More detailed information can be found in the controller specific subdirectories. These are named ide0, ide1 and so on. Each of these directories contains the files shown in table 3-4 .
 
 
Table 3-4 IDE controller info in /proc/ide/ide?
 
File Content
channel IDE channel (0 or 1)
config Configuration (only for PCI/IDE bridge)
mate Mate name
model Type/Chipset of IDE controller
  Each device connected to a controller has a separate subdirectory in the controllers directory. The files listed in table 3-5 are contained in these directories.
 
 
Table 3-5 IDE device information
 
File Content
cache The cache
capacity Capacity of the medium (in 512Byte blocks)
driver driver and version
geometry physical and logical geometry
identify device identify block
media media type
model device identifier
settings device setup
smart_thresholds IDE disk management thresholds
smart_values IDE disk management values
  The most interesting file is settings. This file contains a nice overview of the drive parameters:
 
 
# 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 
 
 
3.4 Networking info in /proc/net
 

The subdirectory /proc/net follows the usual pattern. Table 3-6 shows the additional values you get for IP version 6 if you configure the kernel to support this. Table 3-7 lists the files and their meaning.
 
 

Table 3-6 IPv6 info in /proc/net
 
File Content
udp6 UDP sockets (IPv6)
tcp6 TCP sockets (IPv6)
raw6 Raw device statistics (IPv6)
igmp6 IP multicast addresses, which this host joined (IPv6)
if_inet6 List of IPv6 interface addresses
ipv6_route Kernel routing table for IPv6
rt6_stats Global IPv6 routing tables statistics
sockstat6 Socket statistics (IPv6)
snmp6 Snmp data (IPv6)
   
Table 3-7 Network info in /proc/net
 
File Content
arp Kernel ARP table
dev network devices with statistics
dev_mcast Lists the Layer2 multicast groups a device is listening too (interface index, label, number of references, number of bound addresses).
dev_stat network device status
ip_fwchains Firewall chain linkage
ip_fwnames Firewall chain names
ip_masq Directory containing the masquerading tables
ip_masquerade Major masquerading table
netstat Network statistics
raw raw device statistics
route Kernel routing table
rpc Directory containing rpc info
rt_cache Routing cache
snmp SNMP data
sockstat Socket statistics
tcp TCP sockets
tr_rif Token ring RIF routing table
udp UDP sockets
unix UNIX domain sockets
wireless Wireless interface data (Wavelan etc)
igmp IP multicast addresses, which this host joined
psched Global packet scheduler parameters.
netlink List of PF_NETLINK sockets
ip_mr_vifs List of multicast virtual interfaces
ip_mr_cache List of multicast routing cache
  You can use this information to see which network devices are available in your system and how much traffic was routed over those devices:
 
 
> 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
 
 
3.5 SCSI info
 

If you have a SCSI host adapter in your system, you'll find a subdirectory named after the driver for this adapter in /proc/scsi. You'll also see a list of all recognized SCSI devices in /proc/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 
 
 
The directory named after the driver has one file for each adapter found in the system. These files contain information about the controller, including the used IRQ and the IO address range. The amount of information shown is dependent on the adapter you use. The example shows the output for an Adaptec AHA-2940 SCSI adapter:
 
 
> 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)
 
 
3.6 Parallel port info in /proc/parport
 

The directory /proc/parport contains information about the parallel ports of your system. It has one subdirectory for each port, named after the port number (0,1,2,...).
 
These directories contain the four files shown in Table 3-8 .
 
 

Table 3-8 Files in /proc/parport
 
File Content
autoprobe Any IEEE-1284 device ID information that has been acquired.
devices A list of the device drivers using that port. A + will appear by the name of the device currently using the port (it might not appear against any).
hardware Parallel port's base address, IRQ line and DMA channel.
irq The IRQ that parport is using for that port. This is in a separate file to allow you to alter it by writing a new value in (IRQ number or none).
 
3.7 TTY info in /proc/tty
 

Information about the available and actually used tty's can be found in the directory /proc/tty.You'll find entries for drivers and line disciplines in this directory, as shown in Table 3-9 .
 
 

Table 3-9 Files in /proc/tty
 
File Content
drivers list of drivers and their usage
ldiscs registered line disciplines
driver/serial usage statistic and status of single tty lines
  To see which tty's are currently in use, you can simply look into the file /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 
 
 
 
Summary:
  The /proc file system serves information about the running system. It not only allows access to process data but also allows you to request the kernel status by reading files in the hierarchy.
 
The directory structure of /proc reflects the types of information and makes it easy, if not obvious, where to look for specific data.
--
Back Up Contents Next
--

Copyright (c) 1999 by Terrehon Bowden and Bodo Bauer
To contact the author please sent mail to bb@bb-zone.com