fs, notify: add procfs fdinfo helper
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / Documentation / filesystems / proc.txt
CommitLineData
1da177e4
LT
1------------------------------------------------------------------------------
2 T H E /proc F I L E S Y S T E M
3------------------------------------------------------------------------------
4/proc/sys Terrehon Bowden <terrehon@pacbell.net> October 7 1999
5 Bodo Bauer <bb@ricochet.net>
6
72.4.x update Jorge Nerin <comandante@zaralinux.com> November 14 2000
349888ee 8move /proc/sys Shen Feng <shen@cn.fujitsu.com> April 1 2009
1da177e4
LT
9------------------------------------------------------------------------------
10Version 1.3 Kernel version 2.2.12
11 Kernel version 2.4.0-test11-pre4
12------------------------------------------------------------------------------
349888ee 13fixes/update part 1.1 Stefani Seibold <stefani@seibold.net> June 9 2009
1da177e4
LT
14
15Table of Contents
16-----------------
17
18 0 Preface
19 0.1 Introduction/Credits
20 0.2 Legal Stuff
21
22 1 Collecting System Information
23 1.1 Process-Specific Subdirectories
24 1.2 Kernel data
25 1.3 IDE devices in /proc/ide
26 1.4 Networking info in /proc/net
27 1.5 SCSI info
28 1.6 Parallel port info in /proc/parport
29 1.7 TTY info in /proc/tty
30 1.8 Miscellaneous kernel statistics in /proc/stat
760df93e 31 1.9 Ext4 file system parameters
1da177e4
LT
32
33 2 Modifying System Parameters
760df93e
SF
34
35 3 Per-Process Parameters
fa0cbbf1 36 3.1 /proc/<pid>/oom_adj & /proc/<pid>/oom_score_adj - Adjust the oom-killer
a63d83f4 37 score
760df93e
SF
38 3.2 /proc/<pid>/oom_score - Display current oom-killer score
39 3.3 /proc/<pid>/io - Display the IO accounting fields
40 3.4 /proc/<pid>/coredump_filter - Core dump filtering settings
41 3.5 /proc/<pid>/mountinfo - Information about mounts
4614a696 42 3.6 /proc/<pid>/comm & /proc/<pid>/task/<tid>/comm
81841161 43 3.7 /proc/<pid>/task/<tid>/children - Information about task children
760df93e 44
0499680a
VK
45 4 Configuring procfs
46 4.1 Mount options
1da177e4
LT
47
48------------------------------------------------------------------------------
49Preface
50------------------------------------------------------------------------------
51
520.1 Introduction/Credits
53------------------------
54
55This documentation is part of a soon (or so we hope) to be released book on
56the SuSE Linux distribution. As there is no complete documentation for the
57/proc file system and we've used many freely available sources to write these
58chapters, it seems only fair to give the work back to the Linux community.
59This work is based on the 2.2.* kernel version and the upcoming 2.4.*. I'm
60afraid it's still far from complete, but we hope it will be useful. As far as
61we know, it is the first 'all-in-one' document about the /proc file system. It
62is focused on the Intel x86 hardware, so if you are looking for PPC, ARM,
63SPARC, AXP, etc., features, you probably won't find what you are looking for.
64It also only covers IPv4 networking, not IPv6 nor other protocols - sorry. But
65additions and patches are welcome and will be added to this document if you
66mail them to Bodo.
67
68We'd like to thank Alan Cox, Rik van Riel, and Alexey Kuznetsov and a lot of
69other people for help compiling this documentation. We'd also like to extend a
70special thank you to Andi Kleen for documentation, which we relied on heavily
71to create this document, as well as the additional information he provided.
72Thanks to everybody else who contributed source or docs to the Linux kernel
73and helped create a great piece of software... :)
74
75If you have any comments, corrections or additions, please don't hesitate to
76contact Bodo Bauer at bb@ricochet.net. We'll be happy to add them to this
77document.
78
79The latest version of this document is available online at
0ea6e611 80http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html
1da177e4 81
0ea6e611 82If the above direction does not works for you, you could try the kernel
1da177e4
LT
83mailing list at linux-kernel@vger.kernel.org and/or try to reach me at
84comandante@zaralinux.com.
85
860.2 Legal Stuff
87---------------
88
89We don't guarantee the correctness of this document, and if you come to us
90complaining about how you screwed up your system because of incorrect
91documentation, we won't feel responsible...
92
93------------------------------------------------------------------------------
94CHAPTER 1: COLLECTING SYSTEM INFORMATION
95------------------------------------------------------------------------------
96
97------------------------------------------------------------------------------
98In This Chapter
99------------------------------------------------------------------------------
100* Investigating the properties of the pseudo file system /proc and its
101 ability to provide information on the running Linux system
102* Examining /proc's structure
103* Uncovering various information about the kernel and the processes running
104 on the system
105------------------------------------------------------------------------------
106
107
108The proc file system acts as an interface to internal data structures in the
109kernel. It can be used to obtain information about the system and to change
110certain kernel parameters at runtime (sysctl).
111
112First, we'll take a look at the read-only parts of /proc. In Chapter 2, we
113show you how you can use /proc/sys to change settings.
114
1151.1 Process-Specific Subdirectories
116-----------------------------------
117
118The directory /proc contains (among other things) one subdirectory for each
119process running on the system, which is named after the process ID (PID).
120
121The link self points to the process reading the file system. Each process
122subdirectory has the entries listed in Table 1-1.
123
124
349888ee 125Table 1-1: Process specific entries in /proc
1da177e4 126..............................................................................
b813e931
DR
127 File Content
128 clear_refs Clears page referenced bits shown in smaps output
129 cmdline Command line arguments
130 cpu Current and last cpu in which it was executed (2.4)(smp)
131 cwd Link to the current working directory
132 environ Values of environment variables
133 exe Link to the executable of this process
134 fd Directory, which contains all file descriptors
135 maps Memory maps to executables and library files (2.4)
136 mem Memory held by this process
137 root Link to the root directory of this process
138 stat Process status
139 statm Process memory status information
140 status Process status in human readable form
141 wchan If CONFIG_KALLSYMS is set, a pre-decoded wchan
03f890f8 142 pagemap Page table
2ec220e2 143 stack Report full stack trace, enable via CONFIG_STACKTRACE
349888ee 144 smaps a extension based on maps, showing the memory consumption of
834f82e2 145 each mapping and flags associated with it
1da177e4
LT
146..............................................................................
147
148For example, to get the status information of a process, all you have to do is
149read the file /proc/PID/status:
150
349888ee
SS
151 >cat /proc/self/status
152 Name: cat
153 State: R (running)
154 Tgid: 5452
155 Pid: 5452
156 PPid: 743
1da177e4 157 TracerPid: 0 (2.4)
349888ee
SS
158 Uid: 501 501 501 501
159 Gid: 100 100 100 100
160 FDSize: 256
161 Groups: 100 14 16
162 VmPeak: 5004 kB
163 VmSize: 5004 kB
164 VmLck: 0 kB
165 VmHWM: 476 kB
166 VmRSS: 476 kB
167 VmData: 156 kB
168 VmStk: 88 kB
169 VmExe: 68 kB
170 VmLib: 1412 kB
171 VmPTE: 20 kb
b084d435 172 VmSwap: 0 kB
349888ee
SS
173 Threads: 1
174 SigQ: 0/28578
175 SigPnd: 0000000000000000
176 ShdPnd: 0000000000000000
177 SigBlk: 0000000000000000
178 SigIgn: 0000000000000000
179 SigCgt: 0000000000000000
180 CapInh: 00000000fffffeff
181 CapPrm: 0000000000000000
182 CapEff: 0000000000000000
183 CapBnd: ffffffffffffffff
2f4b3bf6 184 Seccomp: 0
349888ee
SS
185 voluntary_ctxt_switches: 0
186 nonvoluntary_ctxt_switches: 1
1da177e4
LT
187
188This shows you nearly the same information you would get if you viewed it with
189the ps command. In fact, ps uses the proc file system to obtain its
349888ee
SS
190information. But you get a more detailed view of the process by reading the
191file /proc/PID/status. It fields are described in table 1-2.
192
193The statm file contains more detailed information about the process
194memory usage. Its seven fields are explained in Table 1-3. The stat file
195contains details information about the process itself. Its fields are
196explained in Table 1-4.
1da177e4 197
34e55232
KH
198(for SMP CONFIG users)
199For making accounting scalable, RSS related information are handled in
200asynchronous manner and the vaule may not be very precise. To see a precise
201snapshot of a moment, you can see /proc/<pid>/smaps file and scan page table.
202It's slow but very precise.
203
cb2992a6 204Table 1-2: Contents of the status files (as of 2.6.30-rc7)
349888ee
SS
205..............................................................................
206 Field Content
207 Name filename of the executable
208 State state (R is running, S is sleeping, D is sleeping
209 in an uninterruptible wait, Z is zombie,
210 T is traced or stopped)
211 Tgid thread group ID
212 Pid process id
213 PPid process id of the parent process
214 TracerPid PID of process tracing this process (0 if not)
215 Uid Real, effective, saved set, and file system UIDs
216 Gid Real, effective, saved set, and file system GIDs
217 FDSize number of file descriptor slots currently allocated
218 Groups supplementary group list
219 VmPeak peak virtual memory size
220 VmSize total program size
221 VmLck locked memory size
222 VmHWM peak resident set size ("high water mark")
223 VmRSS size of memory portions
224 VmData size of data, stack, and text segments
225 VmStk size of data, stack, and text segments
226 VmExe size of text segment
227 VmLib size of shared library code
228 VmPTE size of page table entries
b084d435 229 VmSwap size of swap usage (the number of referred swapents)
349888ee
SS
230 Threads number of threads
231 SigQ number of signals queued/max. number for queue
232 SigPnd bitmap of pending signals for the thread
233 ShdPnd bitmap of shared pending signals for the process
234 SigBlk bitmap of blocked signals
235 SigIgn bitmap of ignored signals
236 SigCgt bitmap of catched signals
237 CapInh bitmap of inheritable capabilities
238 CapPrm bitmap of permitted capabilities
239 CapEff bitmap of effective capabilities
240 CapBnd bitmap of capabilities bounding set
2f4b3bf6 241 Seccomp seccomp mode, like prctl(PR_GET_SECCOMP, ...)
349888ee
SS
242 Cpus_allowed mask of CPUs on which this process may run
243 Cpus_allowed_list Same as previous, but in "list format"
244 Mems_allowed mask of memory nodes allowed to this process
245 Mems_allowed_list Same as previous, but in "list format"
246 voluntary_ctxt_switches number of voluntary context switches
247 nonvoluntary_ctxt_switches number of non voluntary context switches
248..............................................................................
1da177e4 249
349888ee 250Table 1-3: Contents of the statm files (as of 2.6.8-rc3)
1da177e4
LT
251..............................................................................
252 Field Content
253 size total program size (pages) (same as VmSize in status)
254 resident size of memory portions (pages) (same as VmRSS in status)
255 shared number of pages that are shared (i.e. backed by a file)
256 trs number of pages that are 'code' (not including libs; broken,
257 includes data segment)
258 lrs number of pages of library (always 0 on 2.6)
259 drs number of pages of data/stack (including libs; broken,
260 includes library text)
261 dt number of dirty pages (always 0 on 2.6)
262..............................................................................
263
18d96779 264
349888ee 265Table 1-4: Contents of the stat files (as of 2.6.30-rc7)
18d96779
KC
266..............................................................................
267 Field Content
268 pid process id
269 tcomm filename of the executable
270 state state (R is running, S is sleeping, D is sleeping in an
271 uninterruptible wait, Z is zombie, T is traced or stopped)
272 ppid process id of the parent process
273 pgrp pgrp of the process
274 sid session id
275 tty_nr tty the process uses
276 tty_pgrp pgrp of the tty
277 flags task flags
278 min_flt number of minor faults
279 cmin_flt number of minor faults with child's
280 maj_flt number of major faults
281 cmaj_flt number of major faults with child's
282 utime user mode jiffies
283 stime kernel mode jiffies
284 cutime user mode jiffies with child's
285 cstime kernel mode jiffies with child's
286 priority priority level
287 nice nice level
288 num_threads number of threads
2e01e00e 289 it_real_value (obsolete, always 0)
18d96779
KC
290 start_time time the process started after system boot
291 vsize virtual memory size
292 rss resident set memory size
293 rsslim current limit in bytes on the rss
294 start_code address above which program text can run
295 end_code address below which program text can run
b7643757 296 start_stack address of the start of the main process stack
18d96779
KC
297 esp current value of ESP
298 eip current value of EIP
349888ee
SS
299 pending bitmap of pending signals
300 blocked bitmap of blocked signals
301 sigign bitmap of ignored signals
302 sigcatch bitmap of catched signals
18d96779
KC
303 wchan address where process went to sleep
304 0 (place holder)
305 0 (place holder)
306 exit_signal signal to send to parent thread on exit
307 task_cpu which CPU the task is scheduled on
308 rt_priority realtime priority
309 policy scheduling policy (man sched_setscheduler)
310 blkio_ticks time spent waiting for block IO
349888ee
SS
311 gtime guest time of the task in jiffies
312 cgtime guest time of the task children in jiffies
b3f7f573
CG
313 start_data address above which program data+bss is placed
314 end_data address below which program data+bss is placed
315 start_brk address above which program heap can be expanded with brk()
5b172087
CG
316 arg_start address above which program command line is placed
317 arg_end address below which program command line is placed
318 env_start address above which program environment is placed
319 env_end address below which program environment is placed
320 exit_code the thread's exit_code in the form reported by the waitpid system call
18d96779
KC
321..............................................................................
322
32e688b8 323The /proc/PID/maps file containing the currently mapped memory regions and
349888ee
SS
324their access permissions.
325
326The format is:
327
328address perms offset dev inode pathname
329
33008048000-08049000 r-xp 00000000 03:00 8312 /opt/test
33108049000-0804a000 rw-p 00001000 03:00 8312 /opt/test
3320804a000-0806b000 rw-p 00000000 00:00 0 [heap]
333a7cb1000-a7cb2000 ---p 00000000 00:00 0
34441427 334a7cb2000-a7eb2000 rw-p 00000000 00:00 0
349888ee 335a7eb2000-a7eb3000 ---p 00000000 00:00 0
b7643757 336a7eb3000-a7ed5000 rw-p 00000000 00:00 0 [stack:1001]
349888ee
SS
337a7ed5000-a8008000 r-xp 00000000 03:00 4222 /lib/libc.so.6
338a8008000-a800a000 r--p 00133000 03:00 4222 /lib/libc.so.6
339a800a000-a800b000 rw-p 00135000 03:00 4222 /lib/libc.so.6
340a800b000-a800e000 rw-p 00000000 00:00 0
341a800e000-a8022000 r-xp 00000000 03:00 14462 /lib/libpthread.so.0
342a8022000-a8023000 r--p 00013000 03:00 14462 /lib/libpthread.so.0
343a8023000-a8024000 rw-p 00014000 03:00 14462 /lib/libpthread.so.0
344a8024000-a8027000 rw-p 00000000 00:00 0
345a8027000-a8043000 r-xp 00000000 03:00 8317 /lib/ld-linux.so.2
346a8043000-a8044000 r--p 0001b000 03:00 8317 /lib/ld-linux.so.2
347a8044000-a8045000 rw-p 0001c000 03:00 8317 /lib/ld-linux.so.2
348aff35000-aff4a000 rw-p 00000000 00:00 0 [stack]
349ffffe000-fffff000 r-xp 00000000 00:00 0 [vdso]
350
351where "address" is the address space in the process that it occupies, "perms"
352is a set of permissions:
353
354 r = read
355 w = write
356 x = execute
357 s = shared
358 p = private (copy on write)
359
360"offset" is the offset into the mapping, "dev" is the device (major:minor), and
361"inode" is the inode on that device. 0 indicates that no inode is associated
362with the memory region, as the case would be with BSS (uninitialized data).
363The "pathname" shows the name associated file for this mapping. If the mapping
364is not associated with a file:
365
366 [heap] = the heap of the program
367 [stack] = the stack of the main process
b7643757 368 [stack:1001] = the stack of the thread with tid 1001
349888ee
SS
369 [vdso] = the "virtual dynamic shared object",
370 the kernel system call handler
371
372 or if empty, the mapping is anonymous.
373
b7643757
SP
374The /proc/PID/task/TID/maps is a view of the virtual memory from the viewpoint
375of the individual tasks of a process. In this file you will see a mapping marked
376as [stack] if that task sees it as a stack. This is a key difference from the
377content of /proc/PID/maps, where you will see all mappings that are being used
378as stack by all of those tasks. Hence, for the example above, the task-level
379map, i.e. /proc/PID/task/TID/maps for thread 1001 will look like this:
380
38108048000-08049000 r-xp 00000000 03:00 8312 /opt/test
38208049000-0804a000 rw-p 00001000 03:00 8312 /opt/test
3830804a000-0806b000 rw-p 00000000 00:00 0 [heap]
384a7cb1000-a7cb2000 ---p 00000000 00:00 0
385a7cb2000-a7eb2000 rw-p 00000000 00:00 0
386a7eb2000-a7eb3000 ---p 00000000 00:00 0
387a7eb3000-a7ed5000 rw-p 00000000 00:00 0 [stack]
388a7ed5000-a8008000 r-xp 00000000 03:00 4222 /lib/libc.so.6
389a8008000-a800a000 r--p 00133000 03:00 4222 /lib/libc.so.6
390a800a000-a800b000 rw-p 00135000 03:00 4222 /lib/libc.so.6
391a800b000-a800e000 rw-p 00000000 00:00 0
392a800e000-a8022000 r-xp 00000000 03:00 14462 /lib/libpthread.so.0
393a8022000-a8023000 r--p 00013000 03:00 14462 /lib/libpthread.so.0
394a8023000-a8024000 rw-p 00014000 03:00 14462 /lib/libpthread.so.0
395a8024000-a8027000 rw-p 00000000 00:00 0
396a8027000-a8043000 r-xp 00000000 03:00 8317 /lib/ld-linux.so.2
397a8043000-a8044000 r--p 0001b000 03:00 8317 /lib/ld-linux.so.2
398a8044000-a8045000 rw-p 0001c000 03:00 8317 /lib/ld-linux.so.2
399aff35000-aff4a000 rw-p 00000000 00:00 0
400ffffe000-fffff000 r-xp 00000000 00:00 0 [vdso]
349888ee
SS
401
402The /proc/PID/smaps is an extension based on maps, showing the memory
403consumption for each of the process's mappings. For each of mappings there
404is a series of lines such as the following:
405
40608048000-080bc000 r-xp 00000000 03:02 13130 /bin/bash
407Size: 1084 kB
408Rss: 892 kB
409Pss: 374 kB
410Shared_Clean: 892 kB
411Shared_Dirty: 0 kB
412Private_Clean: 0 kB
413Private_Dirty: 0 kB
414Referenced: 892 kB
b40d4f84 415Anonymous: 0 kB
349888ee
SS
416Swap: 0 kB
417KernelPageSize: 4 kB
418MMUPageSize: 4 kB
2d90508f 419Locked: 374 kB
834f82e2 420VmFlags: rd ex mr mw me de
349888ee 421
834f82e2 422the first of these lines shows the same information as is displayed for the
0f4d208f
MM
423mapping in /proc/PID/maps. The remaining lines show the size of the mapping
424(size), the amount of the mapping that is currently resident in RAM (RSS), the
425process' proportional share of this mapping (PSS), the number of clean and
b40d4f84
NK
426dirty private pages in the mapping. Note that even a page which is part of a
427MAP_SHARED mapping, but has only a single pte mapped, i.e. is currently used
428by only one process, is accounted as private and not as shared. "Referenced"
429indicates the amount of memory currently marked as referenced or accessed.
430"Anonymous" shows the amount of memory that does not belong to any file. Even
431a mapping associated with a file may contain anonymous pages: when MAP_PRIVATE
432and a page is modified, the file page is replaced by a private anonymous copy.
433"Swap" shows how much would-be-anonymous memory is also used, but out on
434swap.
349888ee 435
834f82e2
CG
436"VmFlags" field deserves a separate description. This member represents the kernel
437flags associated with the particular virtual memory area in two letter encoded
438manner. The codes are the following:
439 rd - readable
440 wr - writeable
441 ex - executable
442 sh - shared
443 mr - may read
444 mw - may write
445 me - may execute
446 ms - may share
447 gd - stack segment growns down
448 pf - pure PFN range
449 dw - disabled write to the mapped file
450 lo - pages are locked in memory
451 io - memory mapped I/O area
452 sr - sequential read advise provided
453 rr - random read advise provided
454 dc - do not copy area on fork
455 de - do not expand area on remapping
456 ac - area is accountable
457 nr - swap space is not reserved for the area
458 ht - area uses huge tlb pages
459 nl - non-linear mapping
460 ar - architecture specific flag
461 dd - do not include area into core dump
462 mm - mixed map area
463 hg - huge page advise flag
464 nh - no-huge page advise flag
465 mg - mergable advise flag
466
467Note that there is no guarantee that every flag and associated mnemonic will
468be present in all further kernel releases. Things get changed, the flags may
469be vanished or the reverse -- new added.
470
349888ee
SS
471This file is only present if the CONFIG_MMU kernel configuration option is
472enabled.
18d96779 473
398499d5
MB
474The /proc/PID/clear_refs is used to reset the PG_Referenced and ACCESSED/YOUNG
475bits on both physical and virtual pages associated with a process.
476To clear the bits for all the pages associated with the process
477 > echo 1 > /proc/PID/clear_refs
478
479To clear the bits for the anonymous pages associated with the process
480 > echo 2 > /proc/PID/clear_refs
481
482To clear the bits for the file mapped pages associated with the process
483 > echo 3 > /proc/PID/clear_refs
484Any other value written to /proc/PID/clear_refs will have no effect.
485
03f890f8
NK
486The /proc/pid/pagemap gives the PFN, which can be used to find the pageflags
487using /proc/kpageflags and number of times a page is mapped using
488/proc/kpagecount. For detailed explanation, see Documentation/vm/pagemap.txt.
398499d5 489
1da177e4
LT
4901.2 Kernel data
491---------------
492
493Similar to the process entries, the kernel data files give information about
494the running kernel. The files used to obtain this information are contained in
349888ee 495/proc and are listed in Table 1-5. Not all of these will be present in your
1da177e4
LT
496system. It depends on the kernel configuration and the loaded modules, which
497files are there, and which are missing.
498
349888ee 499Table 1-5: Kernel info in /proc
1da177e4
LT
500..............................................................................
501 File Content
502 apm Advanced power management info
503 buddyinfo Kernel memory allocator information (see text) (2.5)
504 bus Directory containing bus specific information
505 cmdline Kernel command line
506 cpuinfo Info about the CPU
507 devices Available devices (block and character)
508 dma Used DMS channels
509 filesystems Supported filesystems
510 driver Various drivers grouped here, currently rtc (2.4)
511 execdomains Execdomains, related to security (2.4)
512 fb Frame Buffer devices (2.4)
513 fs File system parameters, currently nfs/exports (2.4)
514 ide Directory containing info about the IDE subsystem
515 interrupts Interrupt usage
516 iomem Memory map (2.4)
517 ioports I/O port usage
518 irq Masks for irq to cpu affinity (2.4)(smp?)
519 isapnp ISA PnP (Plug&Play) Info (2.4)
520 kcore Kernel core image (can be ELF or A.OUT(deprecated in 2.4))
521 kmsg Kernel messages
522 ksyms Kernel symbol table
523 loadavg Load average of last 1, 5 & 15 minutes
524 locks Kernel locks
525 meminfo Memory info
526 misc Miscellaneous
527 modules List of loaded modules
528 mounts Mounted filesystems
529 net Networking info (see text)
a1b57ac0 530 pagetypeinfo Additional page allocator information (see text) (2.5)
1da177e4 531 partitions Table of partitions known to the system
8b60756a 532 pci Deprecated info of PCI bus (new way -> /proc/bus/pci/,
1da177e4
LT
533 decoupled by lspci (2.4)
534 rtc Real time clock
535 scsi SCSI info (see text)
536 slabinfo Slab pool info
d3d64df2 537 softirqs softirq usage
1da177e4
LT
538 stat Overall statistics
539 swaps Swap space utilization
540 sys See chapter 2
541 sysvipc Info of SysVIPC Resources (msg, sem, shm) (2.4)
542 tty Info of tty drivers
543 uptime System uptime
544 version Kernel version
545 video bttv info of video resources (2.4)
a47a126a 546 vmallocinfo Show vmalloced areas
1da177e4
LT
547..............................................................................
548
549You can, for example, check which interrupts are currently in use and what
550they are used for by looking in the file /proc/interrupts:
551
552 > cat /proc/interrupts
553 CPU0
554 0: 8728810 XT-PIC timer
555 1: 895 XT-PIC keyboard
556 2: 0 XT-PIC cascade
557 3: 531695 XT-PIC aha152x
558 4: 2014133 XT-PIC serial
559 5: 44401 XT-PIC pcnet_cs
560 8: 2 XT-PIC rtc
561 11: 8 XT-PIC i82365
562 12: 182918 XT-PIC PS/2 Mouse
563 13: 1 XT-PIC fpu
564 14: 1232265 XT-PIC ide0
565 15: 7 XT-PIC ide1
566 NMI: 0
567
568In 2.4.* a couple of lines where added to this file LOC & ERR (this time is the
569output of a SMP machine):
570
571 > cat /proc/interrupts
572
573 CPU0 CPU1
574 0: 1243498 1214548 IO-APIC-edge timer
575 1: 8949 8958 IO-APIC-edge keyboard
576 2: 0 0 XT-PIC cascade
577 5: 11286 10161 IO-APIC-edge soundblaster
578 8: 1 0 IO-APIC-edge rtc
579 9: 27422 27407 IO-APIC-edge 3c503
580 12: 113645 113873 IO-APIC-edge PS/2 Mouse
581 13: 0 0 XT-PIC fpu
582 14: 22491 24012 IO-APIC-edge ide0
583 15: 2183 2415 IO-APIC-edge ide1
584 17: 30564 30414 IO-APIC-level eth0
585 18: 177 164 IO-APIC-level bttv
586 NMI: 2457961 2457959
587 LOC: 2457882 2457881
588 ERR: 2155
589
590NMI is incremented in this case because every timer interrupt generates a NMI
591(Non Maskable Interrupt) which is used by the NMI Watchdog to detect lockups.
592
593LOC is the local interrupt counter of the internal APIC of every CPU.
594
595ERR is incremented in the case of errors in the IO-APIC bus (the bus that
596connects the CPUs in a SMP system. This means that an error has been detected,
597the IO-APIC automatically retry the transmission, so it should not be a big
598problem, but you should read the SMP-FAQ.
599
38e760a1
JK
600In 2.6.2* /proc/interrupts was expanded again. This time the goal was for
601/proc/interrupts to display every IRQ vector in use by the system, not
602just those considered 'most important'. The new vectors are:
603
604 THR -- interrupt raised when a machine check threshold counter
605 (typically counting ECC corrected errors of memory or cache) exceeds
606 a configurable threshold. Only available on some systems.
607
608 TRM -- a thermal event interrupt occurs when a temperature threshold
609 has been exceeded for the CPU. This interrupt may also be generated
610 when the temperature drops back to normal.
611
612 SPU -- a spurious interrupt is some interrupt that was raised then lowered
613 by some IO device before it could be fully processed by the APIC. Hence
614 the APIC sees the interrupt but does not know what device it came from.
615 For this case the APIC will generate the interrupt with a IRQ vector
616 of 0xff. This might also be generated by chipset bugs.
617
618 RES, CAL, TLB -- rescheduling, call and TLB flush interrupts are
619 sent from one CPU to another per the needs of the OS. Typically,
620 their statistics are used by kernel developers and interested users to
19f59460 621 determine the occurrence of interrupts of the given type.
38e760a1 622
25985edc 623The above IRQ vectors are displayed only when relevant. For example,
38e760a1
JK
624the threshold vector does not exist on x86_64 platforms. Others are
625suppressed when the system is a uniprocessor. As of this writing, only
626i386 and x86_64 platforms support the new IRQ vector displays.
627
628Of some interest is the introduction of the /proc/irq directory to 2.4.
1da177e4
LT
629It could be used to set IRQ to CPU affinity, this means that you can "hook" an
630IRQ to only one CPU, or to exclude a CPU of handling IRQs. The contents of the
18404756
MK
631irq subdir is one subdir for each IRQ, and two files; default_smp_affinity and
632prof_cpu_mask.
1da177e4
LT
633
634For example
635 > ls /proc/irq/
636 0 10 12 14 16 18 2 4 6 8 prof_cpu_mask
18404756 637 1 11 13 15 17 19 3 5 7 9 default_smp_affinity
1da177e4
LT
638 > ls /proc/irq/0/
639 smp_affinity
640
18404756
MK
641smp_affinity is a bitmask, in which you can specify which CPUs can handle the
642IRQ, you can set it by doing:
1da177e4 643
18404756
MK
644 > echo 1 > /proc/irq/10/smp_affinity
645
646This means that only the first CPU will handle the IRQ, but you can also echo
6475 which means that only the first and fourth CPU can handle the IRQ.
1da177e4 648
18404756
MK
649The contents of each smp_affinity file is the same by default:
650
651 > cat /proc/irq/0/smp_affinity
652 ffffffff
1da177e4 653
4b060420
MT
654There is an alternate interface, smp_affinity_list which allows specifying
655a cpu range instead of a bitmask:
656
657 > cat /proc/irq/0/smp_affinity_list
658 1024-1031
659
18404756
MK
660The default_smp_affinity mask applies to all non-active IRQs, which are the
661IRQs which have not yet been allocated/activated, and hence which lack a
662/proc/irq/[0-9]* directory.
1da177e4 663
92d6b71a
DS
664The node file on an SMP system shows the node to which the device using the IRQ
665reports itself as being attached. This hardware locality information does not
666include information about any possible driver locality preference.
667
18404756 668prof_cpu_mask specifies which CPUs are to be profiled by the system wide
4b060420 669profiler. Default value is ffffffff (all cpus if there are only 32 of them).
1da177e4
LT
670
671The way IRQs are routed is handled by the IO-APIC, and it's Round Robin
672between all the CPUs which are allowed to handle it. As usual the kernel has
673more info than you and does a better job than you, so the defaults are the
4b060420
MT
674best choice for almost everyone. [Note this applies only to those IO-APIC's
675that support "Round Robin" interrupt distribution.]
1da177e4
LT
676
677There are three more important subdirectories in /proc: net, scsi, and sys.
678The general rule is that the contents, or even the existence of these
679directories, depend on your kernel configuration. If SCSI is not enabled, the
680directory scsi may not exist. The same is true with the net, which is there
681only when networking support is present in the running kernel.
682
683The slabinfo file gives information about memory usage at the slab level.
684Linux uses slab pools for memory management above page level in version 2.2.
685Commonly used objects have their own slab pool (such as network buffers,
686directory cache, and so on).
687
688..............................................................................
689
690> cat /proc/buddyinfo
691
692Node 0, zone DMA 0 4 5 4 4 3 ...
693Node 0, zone Normal 1 0 0 1 101 8 ...
694Node 0, zone HighMem 2 0 0 1 1 0 ...
695
a1b57ac0 696External fragmentation is a problem under some workloads, and buddyinfo is a
1da177e4
LT
697useful tool for helping diagnose these problems. Buddyinfo will give you a
698clue as to how big an area you can safely allocate, or why a previous
699allocation failed.
700
701Each column represents the number of pages of a certain order which are
702available. In this case, there are 0 chunks of 2^0*PAGE_SIZE available in
703ZONE_DMA, 4 chunks of 2^1*PAGE_SIZE in ZONE_DMA, 101 chunks of 2^4*PAGE_SIZE
704available in ZONE_NORMAL, etc...
705
a1b57ac0
MG
706More information relevant to external fragmentation can be found in
707pagetypeinfo.
708
709> cat /proc/pagetypeinfo
710Page block order: 9
711Pages per block: 512
712
713Free pages count per migrate type at order 0 1 2 3 4 5 6 7 8 9 10
714Node 0, zone DMA, type Unmovable 0 0 0 1 1 1 1 1 1 1 0
715Node 0, zone DMA, type Reclaimable 0 0 0 0 0 0 0 0 0 0 0
716Node 0, zone DMA, type Movable 1 1 2 1 2 1 1 0 1 0 2
717Node 0, zone DMA, type Reserve 0 0 0 0 0 0 0 0 0 1 0
718Node 0, zone DMA, type Isolate 0 0 0 0 0 0 0 0 0 0 0
719Node 0, zone DMA32, type Unmovable 103 54 77 1 1 1 11 8 7 1 9
720Node 0, zone DMA32, type Reclaimable 0 0 2 1 0 0 0 0 1 0 0
721Node 0, zone DMA32, type Movable 169 152 113 91 77 54 39 13 6 1 452
722Node 0, zone DMA32, type Reserve 1 2 2 2 2 0 1 1 1 1 0
723Node 0, zone DMA32, type Isolate 0 0 0 0 0 0 0 0 0 0 0
724
725Number of blocks type Unmovable Reclaimable Movable Reserve Isolate
726Node 0, zone DMA 2 0 5 1 0
727Node 0, zone DMA32 41 6 967 2 0
728
729Fragmentation avoidance in the kernel works by grouping pages of different
730migrate types into the same contiguous regions of memory called page blocks.
731A page block is typically the size of the default hugepage size e.g. 2MB on
732X86-64. By keeping pages grouped based on their ability to move, the kernel
733can reclaim pages within a page block to satisfy a high-order allocation.
734
735The pagetypinfo begins with information on the size of a page block. It
736then gives the same type of information as buddyinfo except broken down
737by migrate-type and finishes with details on how many page blocks of each
738type exist.
739
740If min_free_kbytes has been tuned correctly (recommendations made by hugeadm
741from libhugetlbfs http://sourceforge.net/projects/libhugetlbfs/), one can
742make an estimate of the likely number of huge pages that can be allocated
743at a given point in time. All the "Movable" blocks should be allocatable
744unless memory has been mlock()'d. Some of the Reclaimable blocks should
745also be allocatable although a lot of filesystem metadata may have to be
746reclaimed to achieve this.
747
1da177e4
LT
748..............................................................................
749
750meminfo:
751
752Provides information about distribution and utilization of memory. This
753varies by architecture and compile options. The following is from a
75416GB PIII, which has highmem enabled. You may not have all of these fields.
755
756> cat /proc/meminfo
757
2d90508f
NK
758The "Locked" indicates whether the mapping is locked in memory or not.
759
1da177e4
LT
760
761MemTotal: 16344972 kB
762MemFree: 13634064 kB
763Buffers: 3656 kB
764Cached: 1195708 kB
765SwapCached: 0 kB
766Active: 891636 kB
767Inactive: 1077224 kB
768HighTotal: 15597528 kB
769HighFree: 13629632 kB
770LowTotal: 747444 kB
771LowFree: 4432 kB
772SwapTotal: 0 kB
773SwapFree: 0 kB
774Dirty: 968 kB
775Writeback: 0 kB
b88473f7 776AnonPages: 861800 kB
1da177e4 777Mapped: 280372 kB
b88473f7
MS
778Slab: 284364 kB
779SReclaimable: 159856 kB
780SUnreclaim: 124508 kB
781PageTables: 24448 kB
782NFS_Unstable: 0 kB
783Bounce: 0 kB
784WritebackTmp: 0 kB
1da177e4
LT
785CommitLimit: 7669796 kB
786Committed_AS: 100056 kB
1da177e4
LT
787VmallocTotal: 112216 kB
788VmallocUsed: 428 kB
789VmallocChunk: 111088 kB
69256994 790AnonHugePages: 49152 kB
1da177e4
LT
791
792 MemTotal: Total usable ram (i.e. physical ram minus a few reserved
793 bits and the kernel binary code)
794 MemFree: The sum of LowFree+HighFree
795 Buffers: Relatively temporary storage for raw disk blocks
796 shouldn't get tremendously large (20MB or so)
797 Cached: in-memory cache for files read from the disk (the
798 pagecache). Doesn't include SwapCached
799 SwapCached: Memory that once was swapped out, is swapped back in but
800 still also is in the swapfile (if memory is needed it
801 doesn't need to be swapped out AGAIN because it is already
802 in the swapfile. This saves I/O)
803 Active: Memory that has been used more recently and usually not
804 reclaimed unless absolutely necessary.
805 Inactive: Memory which has been less recently used. It is more
806 eligible to be reclaimed for other purposes
807 HighTotal:
808 HighFree: Highmem is all memory above ~860MB of physical memory
809 Highmem areas are for use by userspace programs, or
810 for the pagecache. The kernel must use tricks to access
811 this memory, making it slower to access than lowmem.
812 LowTotal:
813 LowFree: Lowmem is memory which can be used for everything that
3f6dee9b 814 highmem can be used for, but it is also available for the
1da177e4
LT
815 kernel's use for its own data structures. Among many
816 other things, it is where everything from the Slab is
817 allocated. Bad things happen when you're out of lowmem.
818 SwapTotal: total amount of swap space available
819 SwapFree: Memory which has been evicted from RAM, and is temporarily
820 on the disk
821 Dirty: Memory which is waiting to get written back to the disk
822 Writeback: Memory which is actively being written back to the disk
b88473f7 823 AnonPages: Non-file backed pages mapped into userspace page tables
69256994 824AnonHugePages: Non-file backed huge pages mapped into userspace page tables
1da177e4 825 Mapped: files which have been mmaped, such as libraries
e82443c0 826 Slab: in-kernel data structures cache
b88473f7
MS
827SReclaimable: Part of Slab, that might be reclaimed, such as caches
828 SUnreclaim: Part of Slab, that cannot be reclaimed on memory pressure
829 PageTables: amount of memory dedicated to the lowest level of page
830 tables.
831NFS_Unstable: NFS pages sent to the server, but not yet committed to stable
832 storage
833 Bounce: Memory used for block device "bounce buffers"
834WritebackTmp: Memory used by FUSE for temporary writeback buffers
1da177e4
LT
835 CommitLimit: Based on the overcommit ratio ('vm.overcommit_ratio'),
836 this is the total amount of memory currently available to
837 be allocated on the system. This limit is only adhered to
838 if strict overcommit accounting is enabled (mode 2 in
839 'vm.overcommit_memory').
840 The CommitLimit is calculated with the following formula:
841 CommitLimit = ('vm.overcommit_ratio' * Physical RAM) + Swap
842 For example, on a system with 1G of physical RAM and 7G
843 of swap with a `vm.overcommit_ratio` of 30 it would
844 yield a CommitLimit of 7.3G.
845 For more details, see the memory overcommit documentation
846 in vm/overcommit-accounting.
847Committed_AS: The amount of memory presently allocated on the system.
848 The committed memory is a sum of all of the memory which
849 has been allocated by processes, even if it has not been
850 "used" by them as of yet. A process which malloc()'s 1G
851 of memory, but only touches 300M of it will only show up
852 as using 300M of memory even if it has the address space
853 allocated for the entire 1G. This 1G is memory which has
854 been "committed" to by the VM and can be used at any time
855 by the allocating application. With strict overcommit
856 enabled on the system (mode 2 in 'vm.overcommit_memory'),
857 allocations which would exceed the CommitLimit (detailed
858 above) will not be permitted. This is useful if one needs
859 to guarantee that processes will not fail due to lack of
860 memory once that memory has been successfully allocated.
1da177e4
LT
861VmallocTotal: total size of vmalloc memory area
862 VmallocUsed: amount of vmalloc area which is used
19f59460 863VmallocChunk: largest contiguous block of vmalloc area which is free
1da177e4 864
a47a126a
ED
865..............................................................................
866
867vmallocinfo:
868
869Provides information about vmalloced/vmaped areas. One line per area,
870containing the virtual address range of the area, size in bytes,
871caller information of the creator, and optional information depending
872on the kind of area :
873
874 pages=nr number of pages
875 phys=addr if a physical address was specified
876 ioremap I/O mapping (ioremap() and friends)
877 vmalloc vmalloc() area
878 vmap vmap()ed pages
879 user VM_USERMAP area
880 vpages buffer for pages pointers was vmalloced (huge area)
881 N<node>=nr (Only on NUMA kernels)
882 Number of pages allocated on memory node <node>
883
884> cat /proc/vmallocinfo
8850xffffc20000000000-0xffffc20000201000 2101248 alloc_large_system_hash+0x204 ...
886 /0x2c0 pages=512 vmalloc N0=128 N1=128 N2=128 N3=128
8870xffffc20000201000-0xffffc20000302000 1052672 alloc_large_system_hash+0x204 ...
888 /0x2c0 pages=256 vmalloc N0=64 N1=64 N2=64 N3=64
8890xffffc20000302000-0xffffc20000304000 8192 acpi_tb_verify_table+0x21/0x4f...
890 phys=7fee8000 ioremap
8910xffffc20000304000-0xffffc20000307000 12288 acpi_tb_verify_table+0x21/0x4f...
892 phys=7fee7000 ioremap
8930xffffc2000031d000-0xffffc2000031f000 8192 init_vdso_vars+0x112/0x210
8940xffffc2000031f000-0xffffc2000032b000 49152 cramfs_uncompress_init+0x2e ...
895 /0x80 pages=11 vmalloc N0=3 N1=3 N2=2 N3=3
8960xffffc2000033a000-0xffffc2000033d000 12288 sys_swapon+0x640/0xac0 ...
897 pages=2 vmalloc N1=2
8980xffffc20000347000-0xffffc2000034c000 20480 xt_alloc_table_info+0xfe ...
899 /0x130 [x_tables] pages=4 vmalloc N0=4
9000xffffffffa0000000-0xffffffffa000f000 61440 sys_init_module+0xc27/0x1d00 ...
901 pages=14 vmalloc N2=14
9020xffffffffa000f000-0xffffffffa0014000 20480 sys_init_module+0xc27/0x1d00 ...
903 pages=4 vmalloc N1=4
9040xffffffffa0014000-0xffffffffa0017000 12288 sys_init_module+0xc27/0x1d00 ...
905 pages=2 vmalloc N1=2
9060xffffffffa0017000-0xffffffffa0022000 45056 sys_init_module+0xc27/0x1d00 ...
907 pages=10 vmalloc N0=10
1da177e4 908
d3d64df2
KK
909..............................................................................
910
911softirqs:
912
913Provides counts of softirq handlers serviced since boot time, for each cpu.
914
915> cat /proc/softirqs
916 CPU0 CPU1 CPU2 CPU3
917 HI: 0 0 0 0
918 TIMER: 27166 27120 27097 27034
919 NET_TX: 0 0 0 17
920 NET_RX: 42 0 0 39
921 BLOCK: 0 0 107 1121
922 TASKLET: 0 0 0 290
923 SCHED: 27035 26983 26971 26746
924 HRTIMER: 0 0 0 0
09223371 925 RCU: 1678 1769 2178 2250
d3d64df2
KK
926
927
1da177e4
LT
9281.3 IDE devices in /proc/ide
929----------------------------
930
931The subdirectory /proc/ide contains information about all IDE devices of which
932the kernel is aware. There is one subdirectory for each IDE controller, the
933file drivers and a link for each IDE device, pointing to the device directory
934in the controller specific subtree.
935
936The file drivers contains general information about the drivers used for the
937IDE devices:
938
939 > cat /proc/ide/drivers
940 ide-cdrom version 4.53
941 ide-disk version 1.08
942
943More detailed information can be found in the controller specific
944subdirectories. These are named ide0, ide1 and so on. Each of these
349888ee 945directories contains the files shown in table 1-6.
1da177e4
LT
946
947
349888ee 948Table 1-6: IDE controller info in /proc/ide/ide?
1da177e4
LT
949..............................................................................
950 File Content
951 channel IDE channel (0 or 1)
952 config Configuration (only for PCI/IDE bridge)
953 mate Mate name
954 model Type/Chipset of IDE controller
955..............................................................................
956
957Each device connected to a controller has a separate subdirectory in the
349888ee 958controllers directory. The files listed in table 1-7 are contained in these
1da177e4
LT
959directories.
960
961
349888ee 962Table 1-7: IDE device information
1da177e4
LT
963..............................................................................
964 File Content
965 cache The cache
966 capacity Capacity of the medium (in 512Byte blocks)
967 driver driver and version
968 geometry physical and logical geometry
969 identify device identify block
970 media media type
971 model device identifier
972 settings device setup
973 smart_thresholds IDE disk management thresholds
974 smart_values IDE disk management values
975..............................................................................
976
977The most interesting file is settings. This file contains a nice overview of
978the drive parameters:
979
980 # cat /proc/ide/ide0/hda/settings
981 name value min max mode
982 ---- ----- --- --- ----
983 bios_cyl 526 0 65535 rw
984 bios_head 255 0 255 rw
985 bios_sect 63 0 63 rw
986 breada_readahead 4 0 127 rw
987 bswap 0 0 1 r
988 file_readahead 72 0 2097151 rw
989 io_32bit 0 0 3 rw
990 keepsettings 0 0 1 rw
991 max_kb_per_request 122 1 127 rw
992 multcount 0 0 8 rw
993 nice1 1 0 1 rw
994 nowerr 0 0 1 rw
995 pio_mode write-only 0 255 w
996 slow 0 0 1 rw
997 unmaskirq 0 0 1 rw
998 using_dma 0 0 1 rw
999
1000
10011.4 Networking info in /proc/net
1002--------------------------------
1003
349888ee 1004The subdirectory /proc/net follows the usual pattern. Table 1-8 shows the
1da177e4 1005additional values you get for IP version 6 if you configure the kernel to
349888ee 1006support this. Table 1-9 lists the files and their meaning.
1da177e4
LT
1007
1008
349888ee 1009Table 1-8: IPv6 info in /proc/net
1da177e4
LT
1010..............................................................................
1011 File Content
1012 udp6 UDP sockets (IPv6)
1013 tcp6 TCP sockets (IPv6)
1014 raw6 Raw device statistics (IPv6)
1015 igmp6 IP multicast addresses, which this host joined (IPv6)
1016 if_inet6 List of IPv6 interface addresses
1017 ipv6_route Kernel routing table for IPv6
1018 rt6_stats Global IPv6 routing tables statistics
1019 sockstat6 Socket statistics (IPv6)
1020 snmp6 Snmp data (IPv6)
1021..............................................................................
1022
1023
349888ee 1024Table 1-9: Network info in /proc/net
1da177e4
LT
1025..............................................................................
1026 File Content
1027 arp Kernel ARP table
1028 dev network devices with statistics
1029 dev_mcast the Layer2 multicast groups a device is listening too
1030 (interface index, label, number of references, number of bound
1031 addresses).
1032 dev_stat network device status
1033 ip_fwchains Firewall chain linkage
1034 ip_fwnames Firewall chain names
1035 ip_masq Directory containing the masquerading tables
1036 ip_masquerade Major masquerading table
1037 netstat Network statistics
1038 raw raw device statistics
1039 route Kernel routing table
1040 rpc Directory containing rpc info
1041 rt_cache Routing cache
1042 snmp SNMP data
1043 sockstat Socket statistics
1044 tcp TCP sockets
1da177e4
LT
1045 udp UDP sockets
1046 unix UNIX domain sockets
1047 wireless Wireless interface data (Wavelan etc)
1048 igmp IP multicast addresses, which this host joined
1049 psched Global packet scheduler parameters.
1050 netlink List of PF_NETLINK sockets
1051 ip_mr_vifs List of multicast virtual interfaces
1052 ip_mr_cache List of multicast routing cache
1053..............................................................................
1054
1055You can use this information to see which network devices are available in
1056your system and how much traffic was routed over those devices:
1057
1058 > cat /proc/net/dev
1059 Inter-|Receive |[...
1060 face |bytes packets errs drop fifo frame compressed multicast|[...
1061 lo: 908188 5596 0 0 0 0 0 0 [...
1062 ppp0:15475140 20721 410 0 0 410 0 0 [...
1063 eth0: 614530 7085 0 0 0 0 0 1 [...
1064
1065 ...] Transmit
1066 ...] bytes packets errs drop fifo colls carrier compressed
1067 ...] 908188 5596 0 0 0 0 0 0
1068 ...] 1375103 17405 0 0 0 0 0 0
1069 ...] 1703981 5535 0 0 0 3 0 0
1070
a33f3224 1071In addition, each Channel Bond interface has its own directory. For
1da177e4
LT
1072example, the bond0 device will have a directory called /proc/net/bond0/.
1073It will contain information that is specific to that bond, such as the
1074current slaves of the bond, the link status of the slaves, and how
1075many times the slaves link has failed.
1076
10771.5 SCSI info
1078-------------
1079
1080If you have a SCSI host adapter in your system, you'll find a subdirectory
1081named after the driver for this adapter in /proc/scsi. You'll also see a list
1082of all recognized SCSI devices in /proc/scsi:
1083
1084 >cat /proc/scsi/scsi
1085 Attached devices:
1086 Host: scsi0 Channel: 00 Id: 00 Lun: 00
1087 Vendor: IBM Model: DGHS09U Rev: 03E0
1088 Type: Direct-Access ANSI SCSI revision: 03
1089 Host: scsi0 Channel: 00 Id: 06 Lun: 00
1090 Vendor: PIONEER Model: CD-ROM DR-U06S Rev: 1.04
1091 Type: CD-ROM ANSI SCSI revision: 02
1092
1093
1094The directory named after the driver has one file for each adapter found in
1095the system. These files contain information about the controller, including
1096the used IRQ and the IO address range. The amount of information shown is
1097dependent on the adapter you use. The example shows the output for an Adaptec
1098AHA-2940 SCSI adapter:
1099
1100 > cat /proc/scsi/aic7xxx/0
1101
1102 Adaptec AIC7xxx driver version: 5.1.19/3.2.4
1103 Compile Options:
1104 TCQ Enabled By Default : Disabled
1105 AIC7XXX_PROC_STATS : Disabled
1106 AIC7XXX_RESET_DELAY : 5
1107 Adapter Configuration:
1108 SCSI Adapter: Adaptec AHA-294X Ultra SCSI host adapter
1109 Ultra Wide Controller
1110 PCI MMAPed I/O Base: 0xeb001000
1111 Adapter SEEPROM Config: SEEPROM found and used.
1112 Adaptec SCSI BIOS: Enabled
1113 IRQ: 10
1114 SCBs: Active 0, Max Active 2,
1115 Allocated 15, HW 16, Page 255
1116 Interrupts: 160328
1117 BIOS Control Word: 0x18b6
1118 Adapter Control Word: 0x005b
1119 Extended Translation: Enabled
1120 Disconnect Enable Flags: 0xffff
1121 Ultra Enable Flags: 0x0001
1122 Tag Queue Enable Flags: 0x0000
1123 Ordered Queue Tag Flags: 0x0000
1124 Default Tag Queue Depth: 8
1125 Tagged Queue By Device array for aic7xxx host instance 0:
1126 {255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255}
1127 Actual queue depth per device for aic7xxx host instance 0:
1128 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
1129 Statistics:
1130 (scsi0:0:0:0)
1131 Device using Wide/Sync transfers at 40.0 MByte/sec, offset 8
1132 Transinfo settings: current(12/8/1/0), goal(12/8/1/0), user(12/15/1/0)
1133 Total transfers 160151 (74577 reads and 85574 writes)
1134 (scsi0:0:6:0)
1135 Device using Narrow/Sync transfers at 5.0 MByte/sec, offset 15
1136 Transinfo settings: current(50/15/0/0), goal(50/15/0/0), user(50/15/0/0)
1137 Total transfers 0 (0 reads and 0 writes)
1138
1139
11401.6 Parallel port info in /proc/parport
1141---------------------------------------
1142
1143The directory /proc/parport contains information about the parallel ports of
1144your system. It has one subdirectory for each port, named after the port
1145number (0,1,2,...).
1146
349888ee 1147These directories contain the four files shown in Table 1-10.
1da177e4
LT
1148
1149
349888ee 1150Table 1-10: Files in /proc/parport
1da177e4
LT
1151..............................................................................
1152 File Content
1153 autoprobe Any IEEE-1284 device ID information that has been acquired.
1154 devices list of the device drivers using that port. A + will appear by the
1155 name of the device currently using the port (it might not appear
1156 against any).
1157 hardware Parallel port's base address, IRQ line and DMA channel.
1158 irq IRQ that parport is using for that port. This is in a separate
1159 file to allow you to alter it by writing a new value in (IRQ
1160 number or none).
1161..............................................................................
1162
11631.7 TTY info in /proc/tty
1164-------------------------
1165
1166Information about the available and actually used tty's can be found in the
1167directory /proc/tty.You'll find entries for drivers and line disciplines in
349888ee 1168this directory, as shown in Table 1-11.
1da177e4
LT
1169
1170
349888ee 1171Table 1-11: Files in /proc/tty
1da177e4
LT
1172..............................................................................
1173 File Content
1174 drivers list of drivers and their usage
1175 ldiscs registered line disciplines
1176 driver/serial usage statistic and status of single tty lines
1177..............................................................................
1178
1179To see which tty's are currently in use, you can simply look into the file
1180/proc/tty/drivers:
1181
1182 > cat /proc/tty/drivers
1183 pty_slave /dev/pts 136 0-255 pty:slave
1184 pty_master /dev/ptm 128 0-255 pty:master
1185 pty_slave /dev/ttyp 3 0-255 pty:slave
1186 pty_master /dev/pty 2 0-255 pty:master
1187 serial /dev/cua 5 64-67 serial:callout
1188 serial /dev/ttyS 4 64-67 serial
1189 /dev/tty0 /dev/tty0 4 0 system:vtmaster
1190 /dev/ptmx /dev/ptmx 5 2 system
1191 /dev/console /dev/console 5 1 system:console
1192 /dev/tty /dev/tty 5 0 system:/dev/tty
1193 unknown /dev/tty 4 1-63 console
1194
1195
11961.8 Miscellaneous kernel statistics in /proc/stat
1197-------------------------------------------------
1198
1199Various pieces of information about kernel activity are available in the
1200/proc/stat file. All of the numbers reported in this file are aggregates
1201since the system first booted. For a quick look, simply cat the file:
1202
1203 > cat /proc/stat
c574358e
ED
1204 cpu 2255 34 2290 22625563 6290 127 456 0 0
1205 cpu0 1132 34 1441 11311718 3675 127 438 0 0
1206 cpu1 1123 0 849 11313845 2614 0 18 0 0
1da177e4
LT
1207 intr 114930548 113199788 3 0 5 263 0 4 [... lots more numbers ...]
1208 ctxt 1990473
1209 btime 1062191376
1210 processes 2915
1211 procs_running 1
1212 procs_blocked 0
d3d64df2 1213 softirq 183433 0 21755 12 39 1137 231 21459 2263
1da177e4
LT
1214
1215The very first "cpu" line aggregates the numbers in all of the other "cpuN"
1216lines. These numbers identify the amount of time the CPU has spent performing
1217different kinds of work. Time units are in USER_HZ (typically hundredths of a
1218second). The meanings of the columns are as follows, from left to right:
1219
1220- user: normal processes executing in user mode
1221- nice: niced processes executing in user mode
1222- system: processes executing in kernel mode
1223- idle: twiddling thumbs
1224- iowait: waiting for I/O to complete
1225- irq: servicing interrupts
1226- softirq: servicing softirqs
b68f2c3a 1227- steal: involuntary wait
ce0e7b28
RO
1228- guest: running a normal guest
1229- guest_nice: running a niced guest
1da177e4
LT
1230
1231The "intr" line gives counts of interrupts serviced since boot time, for each
1232of the possible system interrupts. The first column is the total of all
1233interrupts serviced; each subsequent column is the total for that particular
1234interrupt.
1235
1236The "ctxt" line gives the total number of context switches across all CPUs.
1237
1238The "btime" line gives the time at which the system booted, in seconds since
1239the Unix epoch.
1240
1241The "processes" line gives the number of processes and threads created, which
1242includes (but is not limited to) those created by calls to the fork() and
1243clone() system calls.
1244
e3cc2226
LGE
1245The "procs_running" line gives the total number of threads that are
1246running or ready to run (i.e., the total number of runnable threads).
1da177e4
LT
1247
1248The "procs_blocked" line gives the number of processes currently blocked,
1249waiting for I/O to complete.
1250
d3d64df2
KK
1251The "softirq" line gives counts of softirqs serviced since boot time, for each
1252of the possible system softirqs. The first column is the total of all
1253softirqs serviced; each subsequent column is the total for that particular
1254softirq.
1255
37515fac 1256
c9de560d
AT
12571.9 Ext4 file system parameters
1258------------------------------
37515fac
TT
1259
1260Information about mounted ext4 file systems can be found in
1261/proc/fs/ext4. Each mounted filesystem will have a directory in
1262/proc/fs/ext4 based on its device name (i.e., /proc/fs/ext4/hdc or
1263/proc/fs/ext4/dm-0). The files in each per-device directory are shown
349888ee 1264in Table 1-12, below.
37515fac 1265
349888ee 1266Table 1-12: Files in /proc/fs/ext4/<devname>
37515fac
TT
1267..............................................................................
1268 File Content
1269 mb_groups details of multiblock allocator buddy cache of free blocks
37515fac
TT
1270..............................................................................
1271
23308ba5
JS
12722.0 /proc/consoles
1273------------------
1274Shows registered system console lines.
1275
1276To see which character device lines are currently used for the system console
1277/dev/console, you may simply look into the file /proc/consoles:
1278
1279 > cat /proc/consoles
1280 tty0 -WU (ECp) 4:7
1281 ttyS0 -W- (Ep) 4:64
1282
1283The columns are:
1284
1285 device name of the device
1286 operations R = can do read operations
1287 W = can do write operations
1288 U = can do unblank
1289 flags E = it is enabled
25985edc 1290 C = it is preferred console
23308ba5
JS
1291 B = it is primary boot console
1292 p = it is used for printk buffer
1293 b = it is not a TTY but a Braille device
1294 a = it is safe to use when cpu is offline
1295 major:minor major and minor number of the device separated by a colon
1da177e4
LT
1296
1297------------------------------------------------------------------------------
1298Summary
1299------------------------------------------------------------------------------
1300The /proc file system serves information about the running system. It not only
1301allows access to process data but also allows you to request the kernel status
1302by reading files in the hierarchy.
1303
1304The directory structure of /proc reflects the types of information and makes
1305it easy, if not obvious, where to look for specific data.
1306------------------------------------------------------------------------------
1307
1308------------------------------------------------------------------------------
1309CHAPTER 2: MODIFYING SYSTEM PARAMETERS
1310------------------------------------------------------------------------------
1311
1312------------------------------------------------------------------------------
1313In This Chapter
1314------------------------------------------------------------------------------
1315* Modifying kernel parameters by writing into files found in /proc/sys
1316* Exploring the files which modify certain parameters
1317* Review of the /proc/sys file tree
1318------------------------------------------------------------------------------
1319
1320
1321A very interesting part of /proc is the directory /proc/sys. This is not only
1322a source of information, it also allows you to change parameters within the
1323kernel. Be very careful when attempting this. You can optimize your system,
1324but you can also cause it to crash. Never alter kernel parameters on a
1325production system. Set up a development machine and test to make sure that
1326everything works the way you want it to. You may have no alternative but to
1327reboot the machine once an error has been made.
1328
1329To change a value, simply echo the new value into the file. An example is
1330given below in the section on the file system data. You need to be root to do
1331this. You can create your own boot script to perform this every time your
1332system boots.
1333
1334The files in /proc/sys can be used to fine tune and monitor miscellaneous and
1335general things in the operation of the Linux kernel. Since some of the files
1336can inadvertently disrupt your system, it is advisable to read both
1337documentation and source before actually making adjustments. In any case, be
1338very careful when writing to any of these files. The entries in /proc may
1339change slightly between the 2.1.* and the 2.2 kernel, so if there is any doubt
1340review the kernel documentation in the directory /usr/src/linux/Documentation.
1341This chapter is heavily based on the documentation included in the pre 2.2
1342kernels, and became part of it in version 2.2.1 of the Linux kernel.
1343
395cf969 1344Please see: Documentation/sysctl/ directory for descriptions of these
db0fb184 1345entries.
9d0243bc 1346
760df93e
SF
1347------------------------------------------------------------------------------
1348Summary
1349------------------------------------------------------------------------------
1350Certain aspects of kernel behavior can be modified at runtime, without the
1351need to recompile the kernel, or even to reboot the system. The files in the
1352/proc/sys tree can not only be read, but also modified. You can use the echo
1353command to write value into these files, thereby changing the default settings
1354of the kernel.
1355------------------------------------------------------------------------------
9d0243bc 1356
760df93e
SF
1357------------------------------------------------------------------------------
1358CHAPTER 3: PER-PROCESS PARAMETERS
1359------------------------------------------------------------------------------
1da177e4 1360
fa0cbbf1 13613.1 /proc/<pid>/oom_adj & /proc/<pid>/oom_score_adj- Adjust the oom-killer score
a63d83f4
DR
1362--------------------------------------------------------------------------------
1363
fa0cbbf1 1364These file can be used to adjust the badness heuristic used to select which
a63d83f4
DR
1365process gets killed in out of memory conditions.
1366
1367The badness heuristic assigns a value to each candidate task ranging from 0
1368(never kill) to 1000 (always kill) to determine which process is targeted. The
1369units are roughly a proportion along that range of allowed memory the process
1370may allocate from based on an estimation of its current memory and swap use.
1371For example, if a task is using all allowed memory, its badness score will be
13721000. If it is using half of its allowed memory, its score will be 500.
1373
1374There is an additional factor included in the badness score: root
1375processes are given 3% extra memory over other tasks.
1376
1377The amount of "allowed" memory depends on the context in which the oom killer
1378was called. If it is due to the memory assigned to the allocating task's cpuset
1379being exhausted, the allowed memory represents the set of mems assigned to that
1380cpuset. If it is due to a mempolicy's node(s) being exhausted, the allowed
1381memory represents the set of mempolicy nodes. If it is due to a memory
1382limit (or swap limit) being reached, the allowed memory is that configured
1383limit. Finally, if it is due to the entire system being out of memory, the
1384allowed memory represents all allocatable resources.
1385
1386The value of /proc/<pid>/oom_score_adj is added to the badness score before it
1387is used to determine which task to kill. Acceptable values range from -1000
1388(OOM_SCORE_ADJ_MIN) to +1000 (OOM_SCORE_ADJ_MAX). This allows userspace to
1389polarize the preference for oom killing either by always preferring a certain
1390task or completely disabling it. The lowest possible value, -1000, is
1391equivalent to disabling oom killing entirely for that task since it will always
1392report a badness score of 0.
1393
1394Consequently, it is very simple for userspace to define the amount of memory to
1395consider for each task. Setting a /proc/<pid>/oom_score_adj value of +500, for
1396example, is roughly equivalent to allowing the remainder of tasks sharing the
1397same system, cpuset, mempolicy, or memory controller resources to use at least
139850% more memory. A value of -500, on the other hand, would be roughly
1399equivalent to discounting 50% of the task's allowed memory from being considered
1400as scoring against the task.
1401
fa0cbbf1
DR
1402For backwards compatibility with previous kernels, /proc/<pid>/oom_adj may also
1403be used to tune the badness score. Its acceptable values range from -16
1404(OOM_ADJUST_MIN) to +15 (OOM_ADJUST_MAX) and a special value of -17
1405(OOM_DISABLE) to disable oom killing entirely for that task. Its value is
1406scaled linearly with /proc/<pid>/oom_score_adj.
1407
dabb16f6
MSB
1408The value of /proc/<pid>/oom_score_adj may be reduced no lower than the last
1409value set by a CAP_SYS_RESOURCE process. To reduce the value any lower
1410requires CAP_SYS_RESOURCE.
1411
a63d83f4 1412Caveat: when a parent task is selected, the oom killer will sacrifice any first
25985edc 1413generation children with separate address spaces instead, if possible. This
a63d83f4
DR
1414avoids servers and important system daemons from being killed and loses the
1415minimal amount of work.
1416
9e9e3cbc 1417
760df93e 14183.2 /proc/<pid>/oom_score - Display current oom-killer score
d7ff0dbf
JFM
1419-------------------------------------------------------------
1420
d7ff0dbf 1421This file can be used to check the current score used by the oom-killer is for
fa0cbbf1
DR
1422any given <pid>. Use it together with /proc/<pid>/oom_score_adj to tune which
1423process should be killed in an out-of-memory situation.
1424
f9c99463 1425
760df93e 14263.3 /proc/<pid>/io - Display the IO accounting fields
f9c99463
RK
1427-------------------------------------------------------
1428
1429This file contains IO statistics for each running process
1430
1431Example
1432-------
1433
1434test:/tmp # dd if=/dev/zero of=/tmp/test.dat &
1435[1] 3828
1436
1437test:/tmp # cat /proc/3828/io
1438rchar: 323934931
1439wchar: 323929600
1440syscr: 632687
1441syscw: 632675
1442read_bytes: 0
1443write_bytes: 323932160
1444cancelled_write_bytes: 0
1445
1446
1447Description
1448-----------
1449
1450rchar
1451-----
1452
1453I/O counter: chars read
1454The number of bytes which this task has caused to be read from storage. This
1455is simply the sum of bytes which this process passed to read() and pread().
1456It includes things like tty IO and it is unaffected by whether or not actual
1457physical disk IO was required (the read might have been satisfied from
1458pagecache)
1459
1460
1461wchar
1462-----
1463
1464I/O counter: chars written
1465The number of bytes which this task has caused, or shall cause to be written
1466to disk. Similar caveats apply here as with rchar.
1467
1468
1469syscr
1470-----
1471
1472I/O counter: read syscalls
1473Attempt to count the number of read I/O operations, i.e. syscalls like read()
1474and pread().
1475
1476
1477syscw
1478-----
1479
1480I/O counter: write syscalls
1481Attempt to count the number of write I/O operations, i.e. syscalls like
1482write() and pwrite().
1483
1484
1485read_bytes
1486----------
1487
1488I/O counter: bytes read
1489Attempt to count the number of bytes which this process really did cause to
1490be fetched from the storage layer. Done at the submit_bio() level, so it is
1491accurate for block-backed filesystems. <please add status regarding NFS and
1492CIFS at a later time>
1493
1494
1495write_bytes
1496-----------
1497
1498I/O counter: bytes written
1499Attempt to count the number of bytes which this process caused to be sent to
1500the storage layer. This is done at page-dirtying time.
1501
1502
1503cancelled_write_bytes
1504---------------------
1505
1506The big inaccuracy here is truncate. If a process writes 1MB to a file and
1507then deletes the file, it will in fact perform no writeout. But it will have
1508been accounted as having caused 1MB of write.
1509In other words: The number of bytes which this process caused to not happen,
1510by truncating pagecache. A task can cause "negative" IO too. If this task
1511truncates some dirty pagecache, some IO which another task has been accounted
a33f3224 1512for (in its write_bytes) will not be happening. We _could_ just subtract that
f9c99463
RK
1513from the truncating task's write_bytes, but there is information loss in doing
1514that.
1515
1516
1517Note
1518----
1519
1520At its current implementation state, this is a bit racy on 32-bit machines: if
1521process A reads process B's /proc/pid/io while process B is updating one of
1522those 64-bit counters, process A could see an intermediate result.
1523
1524
1525More information about this can be found within the taskstats documentation in
1526Documentation/accounting.
1527
760df93e 15283.4 /proc/<pid>/coredump_filter - Core dump filtering settings
bb90110d
KH
1529---------------------------------------------------------------
1530When a process is dumped, all anonymous memory is written to a core file as
1531long as the size of the core file isn't limited. But sometimes we don't want
1532to dump some memory segments, for example, huge shared memory. Conversely,
1533sometimes we want to save file-backed memory segments into a core file, not
1534only the individual files.
1535
1536/proc/<pid>/coredump_filter allows you to customize which memory segments
1537will be dumped when the <pid> process is dumped. coredump_filter is a bitmask
1538of memory types. If a bit of the bitmask is set, memory segments of the
1539corresponding memory type are dumped, otherwise they are not dumped.
1540
e575f111 1541The following 7 memory types are supported:
bb90110d
KH
1542 - (bit 0) anonymous private memory
1543 - (bit 1) anonymous shared memory
1544 - (bit 2) file-backed private memory
1545 - (bit 3) file-backed shared memory
b261dfea
HK
1546 - (bit 4) ELF header pages in file-backed private memory areas (it is
1547 effective only if the bit 2 is cleared)
e575f111
KM
1548 - (bit 5) hugetlb private memory
1549 - (bit 6) hugetlb shared memory
bb90110d
KH
1550
1551 Note that MMIO pages such as frame buffer are never dumped and vDSO pages
1552 are always dumped regardless of the bitmask status.
1553
e575f111
KM
1554 Note bit 0-4 doesn't effect any hugetlb memory. hugetlb memory are only
1555 effected by bit 5-6.
1556
1557Default value of coredump_filter is 0x23; this means all anonymous memory
1558segments and hugetlb private memory are dumped.
bb90110d
KH
1559
1560If you don't want to dump all shared memory segments attached to pid 1234,
e575f111 1561write 0x21 to the process's proc file.
bb90110d 1562
e575f111 1563 $ echo 0x21 > /proc/1234/coredump_filter
bb90110d
KH
1564
1565When a new process is created, the process inherits the bitmask status from its
1566parent. It is useful to set up coredump_filter before the program runs.
1567For example:
1568
1569 $ echo 0x7 > /proc/self/coredump_filter
1570 $ ./some_program
1571
760df93e 15723.5 /proc/<pid>/mountinfo - Information about mounts
2d4d4864
RP
1573--------------------------------------------------------
1574
1575This file contains lines of the form:
1576
157736 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue
1578(1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11)
1579
1580(1) mount ID: unique identifier of the mount (may be reused after umount)
1581(2) parent ID: ID of parent (or of self for the top of the mount tree)
1582(3) major:minor: value of st_dev for files on filesystem
1583(4) root: root of the mount within the filesystem
1584(5) mount point: mount point relative to the process's root
1585(6) mount options: per mount options
1586(7) optional fields: zero or more fields of the form "tag[:value]"
1587(8) separator: marks the end of the optional fields
1588(9) filesystem type: name of filesystem of the form "type[.subtype]"
1589(10) mount source: filesystem specific information or "none"
1590(11) super options: per super block options
1591
1592Parsers should ignore all unrecognised optional fields. Currently the
1593possible optional fields are:
1594
1595shared:X mount is shared in peer group X
1596master:X mount is slave to peer group X
97e7e0f7 1597propagate_from:X mount is slave and receives propagation from peer group X (*)
2d4d4864
RP
1598unbindable mount is unbindable
1599
97e7e0f7
MS
1600(*) X is the closest dominant peer group under the process's root. If
1601X is the immediate master of the mount, or if there's no dominant peer
1602group under the same root, then only the "master:X" field is present
1603and not the "propagate_from:X" field.
1604
2d4d4864
RP
1605For more information on mount propagation see:
1606
1607 Documentation/filesystems/sharedsubtree.txt
1608
4614a696
JS
1609
16103.6 /proc/<pid>/comm & /proc/<pid>/task/<tid>/comm
1611--------------------------------------------------------
1612These files provide a method to access a tasks comm value. It also allows for
1613a task to set its own or one of its thread siblings comm value. The comm value
1614is limited in size compared to the cmdline value, so writing anything longer
1615then the kernel's TASK_COMM_LEN (currently 16 chars) will result in a truncated
1616comm value.
0499680a
VK
1617
1618
81841161
CG
16193.7 /proc/<pid>/task/<tid>/children - Information about task children
1620-------------------------------------------------------------------------
1621This file provides a fast way to retrieve first level children pids
1622of a task pointed by <pid>/<tid> pair. The format is a space separated
1623stream of pids.
1624
1625Note the "first level" here -- if a child has own children they will
1626not be listed here, one needs to read /proc/<children-pid>/task/<tid>/children
1627to obtain the descendants.
1628
1629Since this interface is intended to be fast and cheap it doesn't
1630guarantee to provide precise results and some children might be
1631skipped, especially if they've exited right after we printed their
1632pids, so one need to either stop or freeze processes being inspected
1633if precise results are needed.
1634
1635
0499680a
VK
1636------------------------------------------------------------------------------
1637Configuring procfs
1638------------------------------------------------------------------------------
1639
16404.1 Mount options
1641---------------------
1642
1643The following mount options are supported:
1644
1645 hidepid= Set /proc/<pid>/ access mode.
1646 gid= Set the group authorized to learn processes information.
1647
1648hidepid=0 means classic mode - everybody may access all /proc/<pid>/ directories
1649(default).
1650
1651hidepid=1 means users may not access any /proc/<pid>/ directories but their
1652own. Sensitive files like cmdline, sched*, status are now protected against
1653other users. This makes it impossible to learn whether any user runs
1654specific program (given the program doesn't reveal itself by its behaviour).
1655As an additional bonus, as /proc/<pid>/cmdline is unaccessible for other users,
1656poorly written programs passing sensitive information via program arguments are
1657now protected against local eavesdroppers.
1658
1659hidepid=2 means hidepid=1 plus all /proc/<pid>/ will be fully invisible to other
1660users. It doesn't mean that it hides a fact whether a process with a specific
1661pid value exists (it can be learned by other means, e.g. by "kill -0 $PID"),
1662but it hides process' uid and gid, which may be learned by stat()'ing
1663/proc/<pid>/ otherwise. It greatly complicates an intruder's task of gathering
1664information about running processes, whether some daemon runs with elevated
1665privileges, whether other user runs some sensitive program, whether other users
1666run any program at all, etc.
1667
1668gid= defines a group authorized to learn processes information otherwise
1669prohibited by hidepid=. If you use some daemon like identd which needs to learn
1670information about processes information, just add identd to this group.