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.
|
|