User Tools

Site Tools


help:proc

This is an old revision of the document!


Proc

The /proc file system, doesn't contain 'real' files. Most of the 'files' within /proc have a file size of 0.

/proc simply acts as an interface to internal data structures in the kernel. It can be used to obtain information about the system (such as memory, disks mounted, hardware configuration, etc.) and to change certain kernel parameters at runtime (sysctl).

It not only allows access to process data but also allows you to request the kernel status by reading files in the hierarchy.

Process-Specific Sub-directories

The /proc directory contains (among other things) one sub-directory for each process running on the system, which is named after the process ID (PID).

Each process sub-directory has the following entries.

FileContent
clear_refsClears page referenced bits shown in smaps output.
cmdlineCommand line arguments.
cpuCurrent and last cpu in which it was executed (2.4)(smp).
cwdLink to the current working directory.
environValues of environment variables.
exeLink to the executable of this process.
fdDirectory, which contains all file descriptors.
mapsMemory maps to executables and library files (2.4).
memMemory held by this process.
rootLink to the root directory of this process.
statProcess status.
statmProcess memory status information.
statusProcess status in human readable form.
wchanIf CONFIG_KALLSYMS is set, a pre-decoded wchan.
pagemapPage table.
stackReport full stack trace, enable via CONFIG_STACKTRACE.
smapsAn extension based on maps, showing the memory consumption of each mapping.

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

FileContent
apmAdvanced power management info.
buddyinfoKernel memory allocator information (2.5).
busDirectory containing bus specific information.
cmdlineKernel command line.
cpuinfoInfo about the CPU.
devicesAvailable devices (block and character).
dmaUsed DMS channels.
filesystemsSupported filesystems.
driverVarious drivers grouped here, currently rtc (2.4).
execdomainsExecdomains, related to security (2.4).
fbFrame Buffer devices (2.4).
fsFile system parameters, currently nfs/exports (2.4).
ideDirectory containing info about the IDE subsystem.
interruptsInterrupt usage.
iomemMemory map (2.4).
ioportsI/O port usage.
irqMasks for irq to cpu affinity (2.4) (smp?).
isapnpISA PnP (Plug&Play) Info (2.4).
kcoreKernel core image (can be ELF or A.OUT (deprecated in 2.4)).
kmsgKernel messages.
ksymsKernel symbol table.
loadavgLoad average of last 1, 5 & 15 minutes.
locksKernel locks.
meminfoMemory info.
miscMiscellaneous.
modulesList of loaded modules.
mountsMounted filesystems.
netNetworking info.
pagetypeinfoAdditional page allocator information (see text) (2.5).
parportsParallel Ports
partitionsTable of partitions known to the system.
pciDeprecated info of PCI bus (new way → /proc/bus/pci/, decoupled by lspci (2.4).
rtcReal time clock.
scsiSCSI info.
slabinfoSlab pool info.
softirqssoftirq usage.
statOverall statistics.
swapsSwap space utilization.
sysSystem info.
sysvipcInfo of SysVIPC Resources (msg, sem, shm) (2.4).
ttyInfo of tty drivers.
uptimeSystem uptime.
versionKernel version.
videobttv info of video resources (2.4).
vmallocinfoShow vmalloced areas.

Per Process Parameters

FileContent
oom_adjOut of memory killer score. Deprecated and will be removed. Replaced by oom_score_adj.
oom_score_adjOut of memory killer score.
ioIO accounting fields, which are IO statistics for each running process.

IO accounting fields

/proc/<pid>/io display the IO accounting fields, which are IO statistics for each running process.

dd if=/dev/zero of=/tmp/test.dat &
[1] 3828
 
 
cat /proc/3828/io
 
rchar: 323934931
wchar: 323929600
syscr: 632687
syscw: 632675
read_bytes: 0
write_bytes: 323932160
cancelled_write_bytes: 0

where:

  • rchar is count of chars read. The number of bytes which this task has caused to be read from storage. This is simply the sum of bytes which this process passed to read() and pread(). It includes things like tty IO and it is unaffected by whether or not actual physical disk IO was required (the read might have been satisfied from pagecache)
  • wchar is count of chars written. The number of bytes which this task has caused, or shall cause to be written to disk. Similar caveats apply here as with rchar.
  • syscr is a count of read syscalls. Attempt to count the number of read I/O operations, i.e. syscalls like read() and pread().
  • syscw is a count of writen syscalls. Attempt to count the number of write I/O operations, i.e. syscalls like write() and pwrite().
  • read_bytes is count of bytes read. Attempt to count the number of bytes which this process really did cause to be fetched from the storage layer. Done at the submit_bio() level, so it is accurate for block-backed filesystems. TODO: Add status regarding NFS and CIFS at a later time.
  • write_bytes is count of bytes written. Attempt to count the number of bytes which this process caused to be sent to the storage layer. This is done at page-dirtying time.
  • cancelled_write_bytes The big inaccuracy here is truncate. If a process writes 1MB to a file and then deletes the file, it will in fact perform no writeout. But it will have been accounted as having caused 1MB of write. In other words: The number of bytes which this process caused to not happen, by truncating pagecache. A task can cause “negative” IO too. If this task truncates some dirty pagecache, some IO which another task has been accounted for (in its write_bytes) will not be happening. We _could_ just subtract that from the truncating task's write_bytes, but there is information loss in doing that.

WARNING: At its current implementation state, this is a bit racy on 32-bit machines: if process A reads process B's /proc/pid/io while process B is updating one of those 64-bit counters, process A could see an intermediate result.

More information about this can be found within the taskstats documentation in Documentation/accounting.

References

help/proc.1491490689.txt.gz · Last modified: 2020/07/15 09:30 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki