xref: /linux/Documentation/filesystems/proc.rst (revision c33e97efa9d9de538e5f0afe6cb07f83afcd5b68)
1*c33e97efSMauro Carvalho Chehab.. SPDX-License-Identifier: GPL-2.0
2*c33e97efSMauro Carvalho Chehab
3*c33e97efSMauro Carvalho Chehab====================
4*c33e97efSMauro Carvalho ChehabThe /proc Filesystem
5*c33e97efSMauro Carvalho Chehab====================
6*c33e97efSMauro Carvalho Chehab
7*c33e97efSMauro Carvalho Chehab=====================  =======================================  ================
8*c33e97efSMauro Carvalho Chehab/proc/sys              Terrehon Bowden <terrehon@pacbell.net>,  October 7 1999
9*c33e97efSMauro Carvalho Chehab                       Bodo Bauer <bb@ricochet.net>
10*c33e97efSMauro Carvalho Chehab2.4.x update	       Jorge Nerin <comandante@zaralinux.com>   November 14 2000
11*c33e97efSMauro Carvalho Chehabmove /proc/sys	       Shen Feng <shen@cn.fujitsu.com>	        April 1 2009
12*c33e97efSMauro Carvalho Chehabfixes/update part 1.1  Stefani Seibold <stefani@seibold.net>    June 9 2009
13*c33e97efSMauro Carvalho Chehab=====================  =======================================  ================
14*c33e97efSMauro Carvalho Chehab
15*c33e97efSMauro Carvalho Chehab
16*c33e97efSMauro Carvalho Chehab
17*c33e97efSMauro Carvalho Chehab.. Table of Contents
18*c33e97efSMauro Carvalho Chehab
19*c33e97efSMauro Carvalho Chehab  0     Preface
20*c33e97efSMauro Carvalho Chehab  0.1	Introduction/Credits
21*c33e97efSMauro Carvalho Chehab  0.2	Legal Stuff
22*c33e97efSMauro Carvalho Chehab
23*c33e97efSMauro Carvalho Chehab  1	Collecting System Information
24*c33e97efSMauro Carvalho Chehab  1.1	Process-Specific Subdirectories
25*c33e97efSMauro Carvalho Chehab  1.2	Kernel data
26*c33e97efSMauro Carvalho Chehab  1.3	IDE devices in /proc/ide
27*c33e97efSMauro Carvalho Chehab  1.4	Networking info in /proc/net
28*c33e97efSMauro Carvalho Chehab  1.5	SCSI info
29*c33e97efSMauro Carvalho Chehab  1.6	Parallel port info in /proc/parport
30*c33e97efSMauro Carvalho Chehab  1.7	TTY info in /proc/tty
31*c33e97efSMauro Carvalho Chehab  1.8	Miscellaneous kernel statistics in /proc/stat
32*c33e97efSMauro Carvalho Chehab  1.9	Ext4 file system parameters
33*c33e97efSMauro Carvalho Chehab
34*c33e97efSMauro Carvalho Chehab  2	Modifying System Parameters
35*c33e97efSMauro Carvalho Chehab
36*c33e97efSMauro Carvalho Chehab  3	Per-Process Parameters
37*c33e97efSMauro Carvalho Chehab  3.1	/proc/<pid>/oom_adj & /proc/<pid>/oom_score_adj - Adjust the oom-killer
38*c33e97efSMauro Carvalho Chehab								score
39*c33e97efSMauro Carvalho Chehab  3.2	/proc/<pid>/oom_score - Display current oom-killer score
40*c33e97efSMauro Carvalho Chehab  3.3	/proc/<pid>/io - Display the IO accounting fields
41*c33e97efSMauro Carvalho Chehab  3.4	/proc/<pid>/coredump_filter - Core dump filtering settings
42*c33e97efSMauro Carvalho Chehab  3.5	/proc/<pid>/mountinfo - Information about mounts
43*c33e97efSMauro Carvalho Chehab  3.6	/proc/<pid>/comm  & /proc/<pid>/task/<tid>/comm
44*c33e97efSMauro Carvalho Chehab  3.7   /proc/<pid>/task/<tid>/children - Information about task children
45*c33e97efSMauro Carvalho Chehab  3.8   /proc/<pid>/fdinfo/<fd> - Information about opened file
46*c33e97efSMauro Carvalho Chehab  3.9   /proc/<pid>/map_files - Information about memory mapped files
47*c33e97efSMauro Carvalho Chehab  3.10  /proc/<pid>/timerslack_ns - Task timerslack value
48*c33e97efSMauro Carvalho Chehab  3.11	/proc/<pid>/patch_state - Livepatch patch operation state
49*c33e97efSMauro Carvalho Chehab  3.12	/proc/<pid>/arch_status - Task architecture specific information
50*c33e97efSMauro Carvalho Chehab
51*c33e97efSMauro Carvalho Chehab  4	Configuring procfs
52*c33e97efSMauro Carvalho Chehab  4.1	Mount options
53*c33e97efSMauro Carvalho Chehab
54*c33e97efSMauro Carvalho ChehabPreface
55*c33e97efSMauro Carvalho Chehab=======
56*c33e97efSMauro Carvalho Chehab
57*c33e97efSMauro Carvalho Chehab0.1 Introduction/Credits
58*c33e97efSMauro Carvalho Chehab------------------------
59*c33e97efSMauro Carvalho Chehab
60*c33e97efSMauro Carvalho ChehabThis documentation is  part of a soon (or  so we hope) to be  released book on
61*c33e97efSMauro Carvalho Chehabthe SuSE  Linux distribution. As  there is  no complete documentation  for the
62*c33e97efSMauro Carvalho Chehab/proc file system and we've used  many freely available sources to write these
63*c33e97efSMauro Carvalho Chehabchapters, it  seems only fair  to give the work  back to the  Linux community.
64*c33e97efSMauro Carvalho ChehabThis work is  based on the 2.2.*  kernel version and the  upcoming 2.4.*. I'm
65*c33e97efSMauro Carvalho Chehabafraid it's still far from complete, but we  hope it will be useful. As far as
66*c33e97efSMauro Carvalho Chehabwe know, it is the first 'all-in-one' document about the /proc file system. It
67*c33e97efSMauro Carvalho Chehabis focused  on the Intel  x86 hardware,  so if you  are looking for  PPC, ARM,
68*c33e97efSMauro Carvalho ChehabSPARC, AXP, etc., features, you probably  won't find what you are looking for.
69*c33e97efSMauro Carvalho ChehabIt also only covers IPv4 networking, not IPv6 nor other protocols - sorry. But
70*c33e97efSMauro Carvalho Chehabadditions and patches  are welcome and will  be added to this  document if you
71*c33e97efSMauro Carvalho Chehabmail them to Bodo.
72*c33e97efSMauro Carvalho Chehab
73*c33e97efSMauro Carvalho ChehabWe'd like  to  thank Alan Cox, Rik van Riel, and Alexey Kuznetsov and a lot of
74*c33e97efSMauro Carvalho Chehabother people for help compiling this documentation. We'd also like to extend a
75*c33e97efSMauro Carvalho Chehabspecial thank  you to Andi Kleen for documentation, which we relied on heavily
76*c33e97efSMauro Carvalho Chehabto create  this  document,  as well as the additional information he provided.
77*c33e97efSMauro Carvalho ChehabThanks to  everybody  else  who contributed source or docs to the Linux kernel
78*c33e97efSMauro Carvalho Chehaband helped create a great piece of software... :)
79*c33e97efSMauro Carvalho Chehab
80*c33e97efSMauro Carvalho ChehabIf you  have  any comments, corrections or additions, please don't hesitate to
81*c33e97efSMauro Carvalho Chehabcontact Bodo  Bauer  at  bb@ricochet.net.  We'll  be happy to add them to this
82*c33e97efSMauro Carvalho Chehabdocument.
83*c33e97efSMauro Carvalho Chehab
84*c33e97efSMauro Carvalho ChehabThe   latest   version    of   this   document   is    available   online   at
85*c33e97efSMauro Carvalho Chehabhttp://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html
86*c33e97efSMauro Carvalho Chehab
87*c33e97efSMauro Carvalho ChehabIf  the above  direction does  not works  for you,  you could  try the  kernel
88*c33e97efSMauro Carvalho Chehabmailing  list  at  linux-kernel@vger.kernel.org  and/or try  to  reach  me  at
89*c33e97efSMauro Carvalho Chehabcomandante@zaralinux.com.
90*c33e97efSMauro Carvalho Chehab
91*c33e97efSMauro Carvalho Chehab0.2 Legal Stuff
92*c33e97efSMauro Carvalho Chehab---------------
93*c33e97efSMauro Carvalho Chehab
94*c33e97efSMauro Carvalho ChehabWe don't  guarantee  the  correctness  of this document, and if you come to us
95*c33e97efSMauro Carvalho Chehabcomplaining about  how  you  screwed  up  your  system  because  of  incorrect
96*c33e97efSMauro Carvalho Chehabdocumentation, we won't feel responsible...
97*c33e97efSMauro Carvalho Chehab
98*c33e97efSMauro Carvalho ChehabChapter 1: Collecting System Information
99*c33e97efSMauro Carvalho Chehab========================================
100*c33e97efSMauro Carvalho Chehab
101*c33e97efSMauro Carvalho ChehabIn This Chapter
102*c33e97efSMauro Carvalho Chehab---------------
103*c33e97efSMauro Carvalho Chehab* Investigating  the  properties  of  the  pseudo  file  system  /proc and its
104*c33e97efSMauro Carvalho Chehab  ability to provide information on the running Linux system
105*c33e97efSMauro Carvalho Chehab* Examining /proc's structure
106*c33e97efSMauro Carvalho Chehab* Uncovering  various  information  about the kernel and the processes running
107*c33e97efSMauro Carvalho Chehab  on the system
108*c33e97efSMauro Carvalho Chehab
109*c33e97efSMauro Carvalho Chehab------------------------------------------------------------------------------
110*c33e97efSMauro Carvalho Chehab
111*c33e97efSMauro Carvalho ChehabThe proc  file  system acts as an interface to internal data structures in the
112*c33e97efSMauro Carvalho Chehabkernel. It  can  be  used to obtain information about the system and to change
113*c33e97efSMauro Carvalho Chehabcertain kernel parameters at runtime (sysctl).
114*c33e97efSMauro Carvalho Chehab
115*c33e97efSMauro Carvalho ChehabFirst, we'll  take  a  look  at the read-only parts of /proc. In Chapter 2, we
116*c33e97efSMauro Carvalho Chehabshow you how you can use /proc/sys to change settings.
117*c33e97efSMauro Carvalho Chehab
118*c33e97efSMauro Carvalho Chehab1.1 Process-Specific Subdirectories
119*c33e97efSMauro Carvalho Chehab-----------------------------------
120*c33e97efSMauro Carvalho Chehab
121*c33e97efSMauro Carvalho ChehabThe directory  /proc  contains  (among other things) one subdirectory for each
122*c33e97efSMauro Carvalho Chehabprocess running on the system, which is named after the process ID (PID).
123*c33e97efSMauro Carvalho Chehab
124*c33e97efSMauro Carvalho ChehabThe link  self  points  to  the  process reading the file system. Each process
125*c33e97efSMauro Carvalho Chehabsubdirectory has the entries listed in Table 1-1.
126*c33e97efSMauro Carvalho Chehab
127*c33e97efSMauro Carvalho ChehabNote that an open a file descriptor to /proc/<pid> or to any of its
128*c33e97efSMauro Carvalho Chehabcontained files or subdirectories does not prevent <pid> being reused
129*c33e97efSMauro Carvalho Chehabfor some other process in the event that <pid> exits. Operations on
130*c33e97efSMauro Carvalho Chehabopen /proc/<pid> file descriptors corresponding to dead processes
131*c33e97efSMauro Carvalho Chehabnever act on any new process that the kernel may, through chance, have
132*c33e97efSMauro Carvalho Chehabalso assigned the process ID <pid>. Instead, operations on these FDs
133*c33e97efSMauro Carvalho Chehabusually fail with ESRCH.
134*c33e97efSMauro Carvalho Chehab
135*c33e97efSMauro Carvalho Chehab.. table:: Table 1-1: Process specific entries in /proc
136*c33e97efSMauro Carvalho Chehab
137*c33e97efSMauro Carvalho Chehab =============  ===============================================================
138*c33e97efSMauro Carvalho Chehab File		Content
139*c33e97efSMauro Carvalho Chehab =============  ===============================================================
140*c33e97efSMauro Carvalho Chehab clear_refs	Clears page referenced bits shown in smaps output
141*c33e97efSMauro Carvalho Chehab cmdline	Command line arguments
142*c33e97efSMauro Carvalho Chehab cpu		Current and last cpu in which it was executed	(2.4)(smp)
143*c33e97efSMauro Carvalho Chehab cwd		Link to the current working directory
144*c33e97efSMauro Carvalho Chehab environ	Values of environment variables
145*c33e97efSMauro Carvalho Chehab exe		Link to the executable of this process
146*c33e97efSMauro Carvalho Chehab fd		Directory, which contains all file descriptors
147*c33e97efSMauro Carvalho Chehab maps		Memory maps to executables and library files	(2.4)
148*c33e97efSMauro Carvalho Chehab mem		Memory held by this process
149*c33e97efSMauro Carvalho Chehab root		Link to the root directory of this process
150*c33e97efSMauro Carvalho Chehab stat		Process status
151*c33e97efSMauro Carvalho Chehab statm		Process memory status information
152*c33e97efSMauro Carvalho Chehab status		Process status in human readable form
153*c33e97efSMauro Carvalho Chehab wchan		Present with CONFIG_KALLSYMS=y: it shows the kernel function
154*c33e97efSMauro Carvalho Chehab		symbol the task is blocked in - or "0" if not blocked.
155*c33e97efSMauro Carvalho Chehab pagemap	Page table
156*c33e97efSMauro Carvalho Chehab stack		Report full stack trace, enable via CONFIG_STACKTRACE
157*c33e97efSMauro Carvalho Chehab smaps		An extension based on maps, showing the memory consumption of
158*c33e97efSMauro Carvalho Chehab		each mapping and flags associated with it
159*c33e97efSMauro Carvalho Chehab smaps_rollup	Accumulated smaps stats for all mappings of the process.  This
160*c33e97efSMauro Carvalho Chehab		can be derived from smaps, but is faster and more convenient
161*c33e97efSMauro Carvalho Chehab numa_maps	An extension based on maps, showing the memory locality and
162*c33e97efSMauro Carvalho Chehab		binding policy as well as mem usage (in pages) of each mapping.
163*c33e97efSMauro Carvalho Chehab =============  ===============================================================
164*c33e97efSMauro Carvalho Chehab
165*c33e97efSMauro Carvalho ChehabFor example, to get the status information of a process, all you have to do is
166*c33e97efSMauro Carvalho Chehabread the file /proc/PID/status::
167*c33e97efSMauro Carvalho Chehab
168*c33e97efSMauro Carvalho Chehab  >cat /proc/self/status
169*c33e97efSMauro Carvalho Chehab  Name:   cat
170*c33e97efSMauro Carvalho Chehab  State:  R (running)
171*c33e97efSMauro Carvalho Chehab  Tgid:   5452
172*c33e97efSMauro Carvalho Chehab  Pid:    5452
173*c33e97efSMauro Carvalho Chehab  PPid:   743
174*c33e97efSMauro Carvalho Chehab  TracerPid:      0						(2.4)
175*c33e97efSMauro Carvalho Chehab  Uid:    501     501     501     501
176*c33e97efSMauro Carvalho Chehab  Gid:    100     100     100     100
177*c33e97efSMauro Carvalho Chehab  FDSize: 256
178*c33e97efSMauro Carvalho Chehab  Groups: 100 14 16
179*c33e97efSMauro Carvalho Chehab  VmPeak:     5004 kB
180*c33e97efSMauro Carvalho Chehab  VmSize:     5004 kB
181*c33e97efSMauro Carvalho Chehab  VmLck:         0 kB
182*c33e97efSMauro Carvalho Chehab  VmHWM:       476 kB
183*c33e97efSMauro Carvalho Chehab  VmRSS:       476 kB
184*c33e97efSMauro Carvalho Chehab  RssAnon:             352 kB
185*c33e97efSMauro Carvalho Chehab  RssFile:             120 kB
186*c33e97efSMauro Carvalho Chehab  RssShmem:              4 kB
187*c33e97efSMauro Carvalho Chehab  VmData:      156 kB
188*c33e97efSMauro Carvalho Chehab  VmStk:        88 kB
189*c33e97efSMauro Carvalho Chehab  VmExe:        68 kB
190*c33e97efSMauro Carvalho Chehab  VmLib:      1412 kB
191*c33e97efSMauro Carvalho Chehab  VmPTE:        20 kb
192*c33e97efSMauro Carvalho Chehab  VmSwap:        0 kB
193*c33e97efSMauro Carvalho Chehab  HugetlbPages:          0 kB
194*c33e97efSMauro Carvalho Chehab  CoreDumping:    0
195*c33e97efSMauro Carvalho Chehab  THP_enabled:	  1
196*c33e97efSMauro Carvalho Chehab  Threads:        1
197*c33e97efSMauro Carvalho Chehab  SigQ:   0/28578
198*c33e97efSMauro Carvalho Chehab  SigPnd: 0000000000000000
199*c33e97efSMauro Carvalho Chehab  ShdPnd: 0000000000000000
200*c33e97efSMauro Carvalho Chehab  SigBlk: 0000000000000000
201*c33e97efSMauro Carvalho Chehab  SigIgn: 0000000000000000
202*c33e97efSMauro Carvalho Chehab  SigCgt: 0000000000000000
203*c33e97efSMauro Carvalho Chehab  CapInh: 00000000fffffeff
204*c33e97efSMauro Carvalho Chehab  CapPrm: 0000000000000000
205*c33e97efSMauro Carvalho Chehab  CapEff: 0000000000000000
206*c33e97efSMauro Carvalho Chehab  CapBnd: ffffffffffffffff
207*c33e97efSMauro Carvalho Chehab  CapAmb: 0000000000000000
208*c33e97efSMauro Carvalho Chehab  NoNewPrivs:     0
209*c33e97efSMauro Carvalho Chehab  Seccomp:        0
210*c33e97efSMauro Carvalho Chehab  Speculation_Store_Bypass:       thread vulnerable
211*c33e97efSMauro Carvalho Chehab  voluntary_ctxt_switches:        0
212*c33e97efSMauro Carvalho Chehab  nonvoluntary_ctxt_switches:     1
213*c33e97efSMauro Carvalho Chehab
214*c33e97efSMauro Carvalho ChehabThis shows you nearly the same information you would get if you viewed it with
215*c33e97efSMauro Carvalho Chehabthe ps  command.  In  fact,  ps  uses  the  proc  file  system  to  obtain its
216*c33e97efSMauro Carvalho Chehabinformation.  But you get a more detailed  view of the  process by reading the
217*c33e97efSMauro Carvalho Chehabfile /proc/PID/status. It fields are described in table 1-2.
218*c33e97efSMauro Carvalho Chehab
219*c33e97efSMauro Carvalho ChehabThe  statm  file  contains  more  detailed  information about the process
220*c33e97efSMauro Carvalho Chehabmemory usage. Its seven fields are explained in Table 1-3.  The stat file
221*c33e97efSMauro Carvalho Chehabcontains details information about the process itself.  Its fields are
222*c33e97efSMauro Carvalho Chehabexplained in Table 1-4.
223*c33e97efSMauro Carvalho Chehab
224*c33e97efSMauro Carvalho Chehab(for SMP CONFIG users)
225*c33e97efSMauro Carvalho Chehab
226*c33e97efSMauro Carvalho ChehabFor making accounting scalable, RSS related information are handled in an
227*c33e97efSMauro Carvalho Chehabasynchronous manner and the value may not be very precise. To see a precise
228*c33e97efSMauro Carvalho Chehabsnapshot of a moment, you can see /proc/<pid>/smaps file and scan page table.
229*c33e97efSMauro Carvalho ChehabIt's slow but very precise.
230*c33e97efSMauro Carvalho Chehab
231*c33e97efSMauro Carvalho Chehab.. table:: Table 1-2: Contents of the status files (as of 4.19)
232*c33e97efSMauro Carvalho Chehab
233*c33e97efSMauro Carvalho Chehab ==========================  ===================================================
234*c33e97efSMauro Carvalho Chehab Field                       Content
235*c33e97efSMauro Carvalho Chehab ==========================  ===================================================
236*c33e97efSMauro Carvalho Chehab Name                        filename of the executable
237*c33e97efSMauro Carvalho Chehab Umask                       file mode creation mask
238*c33e97efSMauro Carvalho Chehab State                       state (R is running, S is sleeping, D is sleeping
239*c33e97efSMauro Carvalho Chehab                             in an uninterruptible wait, Z is zombie,
240*c33e97efSMauro Carvalho Chehab			     T is traced or stopped)
241*c33e97efSMauro Carvalho Chehab Tgid                        thread group ID
242*c33e97efSMauro Carvalho Chehab Ngid                        NUMA group ID (0 if none)
243*c33e97efSMauro Carvalho Chehab Pid                         process id
244*c33e97efSMauro Carvalho Chehab PPid                        process id of the parent process
245*c33e97efSMauro Carvalho Chehab TracerPid                   PID of process tracing this process (0 if not)
246*c33e97efSMauro Carvalho Chehab Uid                         Real, effective, saved set, and  file system UIDs
247*c33e97efSMauro Carvalho Chehab Gid                         Real, effective, saved set, and  file system GIDs
248*c33e97efSMauro Carvalho Chehab FDSize                      number of file descriptor slots currently allocated
249*c33e97efSMauro Carvalho Chehab Groups                      supplementary group list
250*c33e97efSMauro Carvalho Chehab NStgid                      descendant namespace thread group ID hierarchy
251*c33e97efSMauro Carvalho Chehab NSpid                       descendant namespace process ID hierarchy
252*c33e97efSMauro Carvalho Chehab NSpgid                      descendant namespace process group ID hierarchy
253*c33e97efSMauro Carvalho Chehab NSsid                       descendant namespace session ID hierarchy
254*c33e97efSMauro Carvalho Chehab VmPeak                      peak virtual memory size
255*c33e97efSMauro Carvalho Chehab VmSize                      total program size
256*c33e97efSMauro Carvalho Chehab VmLck                       locked memory size
257*c33e97efSMauro Carvalho Chehab VmPin                       pinned memory size
258*c33e97efSMauro Carvalho Chehab VmHWM                       peak resident set size ("high water mark")
259*c33e97efSMauro Carvalho Chehab VmRSS                       size of memory portions. It contains the three
260*c33e97efSMauro Carvalho Chehab                             following parts
261*c33e97efSMauro Carvalho Chehab                             (VmRSS = RssAnon + RssFile + RssShmem)
262*c33e97efSMauro Carvalho Chehab RssAnon                     size of resident anonymous memory
263*c33e97efSMauro Carvalho Chehab RssFile                     size of resident file mappings
264*c33e97efSMauro Carvalho Chehab RssShmem                    size of resident shmem memory (includes SysV shm,
265*c33e97efSMauro Carvalho Chehab                             mapping of tmpfs and shared anonymous mappings)
266*c33e97efSMauro Carvalho Chehab VmData                      size of private data segments
267*c33e97efSMauro Carvalho Chehab VmStk                       size of stack segments
268*c33e97efSMauro Carvalho Chehab VmExe                       size of text segment
269*c33e97efSMauro Carvalho Chehab VmLib                       size of shared library code
270*c33e97efSMauro Carvalho Chehab VmPTE                       size of page table entries
271*c33e97efSMauro Carvalho Chehab VmSwap                      amount of swap used by anonymous private data
272*c33e97efSMauro Carvalho Chehab                             (shmem swap usage is not included)
273*c33e97efSMauro Carvalho Chehab HugetlbPages                size of hugetlb memory portions
274*c33e97efSMauro Carvalho Chehab CoreDumping                 process's memory is currently being dumped
275*c33e97efSMauro Carvalho Chehab                             (killing the process may lead to a corrupted core)
276*c33e97efSMauro Carvalho Chehab THP_enabled		     process is allowed to use THP (returns 0 when
277*c33e97efSMauro Carvalho Chehab			     PR_SET_THP_DISABLE is set on the process
278*c33e97efSMauro Carvalho Chehab Threads                     number of threads
279*c33e97efSMauro Carvalho Chehab SigQ                        number of signals queued/max. number for queue
280*c33e97efSMauro Carvalho Chehab SigPnd                      bitmap of pending signals for the thread
281*c33e97efSMauro Carvalho Chehab ShdPnd                      bitmap of shared pending signals for the process
282*c33e97efSMauro Carvalho Chehab SigBlk                      bitmap of blocked signals
283*c33e97efSMauro Carvalho Chehab SigIgn                      bitmap of ignored signals
284*c33e97efSMauro Carvalho Chehab SigCgt                      bitmap of caught signals
285*c33e97efSMauro Carvalho Chehab CapInh                      bitmap of inheritable capabilities
286*c33e97efSMauro Carvalho Chehab CapPrm                      bitmap of permitted capabilities
287*c33e97efSMauro Carvalho Chehab CapEff                      bitmap of effective capabilities
288*c33e97efSMauro Carvalho Chehab CapBnd                      bitmap of capabilities bounding set
289*c33e97efSMauro Carvalho Chehab CapAmb                      bitmap of ambient capabilities
290*c33e97efSMauro Carvalho Chehab NoNewPrivs                  no_new_privs, like prctl(PR_GET_NO_NEW_PRIV, ...)
291*c33e97efSMauro Carvalho Chehab Seccomp                     seccomp mode, like prctl(PR_GET_SECCOMP, ...)
292*c33e97efSMauro Carvalho Chehab Speculation_Store_Bypass    speculative store bypass mitigation status
293*c33e97efSMauro Carvalho Chehab Cpus_allowed                mask of CPUs on which this process may run
294*c33e97efSMauro Carvalho Chehab Cpus_allowed_list           Same as previous, but in "list format"
295*c33e97efSMauro Carvalho Chehab Mems_allowed                mask of memory nodes allowed to this process
296*c33e97efSMauro Carvalho Chehab Mems_allowed_list           Same as previous, but in "list format"
297*c33e97efSMauro Carvalho Chehab voluntary_ctxt_switches     number of voluntary context switches
298*c33e97efSMauro Carvalho Chehab nonvoluntary_ctxt_switches  number of non voluntary context switches
299*c33e97efSMauro Carvalho Chehab ==========================  ===================================================
300*c33e97efSMauro Carvalho Chehab
301*c33e97efSMauro Carvalho Chehab
302*c33e97efSMauro Carvalho Chehab.. table:: Table 1-3: Contents of the statm files (as of 2.6.8-rc3)
303*c33e97efSMauro Carvalho Chehab
304*c33e97efSMauro Carvalho Chehab ======== ===============================	==============================
305*c33e97efSMauro Carvalho Chehab Field    Content
306*c33e97efSMauro Carvalho Chehab ======== ===============================	==============================
307*c33e97efSMauro Carvalho Chehab size     total program size (pages)		(same as VmSize in status)
308*c33e97efSMauro Carvalho Chehab resident size of memory portions (pages)	(same as VmRSS in status)
309*c33e97efSMauro Carvalho Chehab shared   number of pages that are shared	(i.e. backed by a file, same
310*c33e97efSMauro Carvalho Chehab						as RssFile+RssShmem in status)
311*c33e97efSMauro Carvalho Chehab trs      number of pages that are 'code'	(not including libs; broken,
312*c33e97efSMauro Carvalho Chehab						includes data segment)
313*c33e97efSMauro Carvalho Chehab lrs      number of pages of library		(always 0 on 2.6)
314*c33e97efSMauro Carvalho Chehab drs      number of pages of data/stack		(including libs; broken,
315*c33e97efSMauro Carvalho Chehab						includes library text)
316*c33e97efSMauro Carvalho Chehab dt       number of dirty pages			(always 0 on 2.6)
317*c33e97efSMauro Carvalho Chehab ======== ===============================	==============================
318*c33e97efSMauro Carvalho Chehab
319*c33e97efSMauro Carvalho Chehab
320*c33e97efSMauro Carvalho Chehab.. table:: Table 1-4: Contents of the stat files (as of 2.6.30-rc7)
321*c33e97efSMauro Carvalho Chehab
322*c33e97efSMauro Carvalho Chehab  ============= ===============================================================
323*c33e97efSMauro Carvalho Chehab  Field         Content
324*c33e97efSMauro Carvalho Chehab  ============= ===============================================================
325*c33e97efSMauro Carvalho Chehab  pid           process id
326*c33e97efSMauro Carvalho Chehab  tcomm         filename of the executable
327*c33e97efSMauro Carvalho Chehab  state         state (R is running, S is sleeping, D is sleeping in an
328*c33e97efSMauro Carvalho Chehab                uninterruptible wait, Z is zombie, T is traced or stopped)
329*c33e97efSMauro Carvalho Chehab  ppid          process id of the parent process
330*c33e97efSMauro Carvalho Chehab  pgrp          pgrp of the process
331*c33e97efSMauro Carvalho Chehab  sid           session id
332*c33e97efSMauro Carvalho Chehab  tty_nr        tty the process uses
333*c33e97efSMauro Carvalho Chehab  tty_pgrp      pgrp of the tty
334*c33e97efSMauro Carvalho Chehab  flags         task flags
335*c33e97efSMauro Carvalho Chehab  min_flt       number of minor faults
336*c33e97efSMauro Carvalho Chehab  cmin_flt      number of minor faults with child's
337*c33e97efSMauro Carvalho Chehab  maj_flt       number of major faults
338*c33e97efSMauro Carvalho Chehab  cmaj_flt      number of major faults with child's
339*c33e97efSMauro Carvalho Chehab  utime         user mode jiffies
340*c33e97efSMauro Carvalho Chehab  stime         kernel mode jiffies
341*c33e97efSMauro Carvalho Chehab  cutime        user mode jiffies with child's
342*c33e97efSMauro Carvalho Chehab  cstime        kernel mode jiffies with child's
343*c33e97efSMauro Carvalho Chehab  priority      priority level
344*c33e97efSMauro Carvalho Chehab  nice          nice level
345*c33e97efSMauro Carvalho Chehab  num_threads   number of threads
346*c33e97efSMauro Carvalho Chehab  it_real_value	(obsolete, always 0)
347*c33e97efSMauro Carvalho Chehab  start_time    time the process started after system boot
348*c33e97efSMauro Carvalho Chehab  vsize         virtual memory size
349*c33e97efSMauro Carvalho Chehab  rss           resident set memory size
350*c33e97efSMauro Carvalho Chehab  rsslim        current limit in bytes on the rss
351*c33e97efSMauro Carvalho Chehab  start_code    address above which program text can run
352*c33e97efSMauro Carvalho Chehab  end_code      address below which program text can run
353*c33e97efSMauro Carvalho Chehab  start_stack   address of the start of the main process stack
354*c33e97efSMauro Carvalho Chehab  esp           current value of ESP
355*c33e97efSMauro Carvalho Chehab  eip           current value of EIP
356*c33e97efSMauro Carvalho Chehab  pending       bitmap of pending signals
357*c33e97efSMauro Carvalho Chehab  blocked       bitmap of blocked signals
358*c33e97efSMauro Carvalho Chehab  sigign        bitmap of ignored signals
359*c33e97efSMauro Carvalho Chehab  sigcatch      bitmap of caught signals
360*c33e97efSMauro Carvalho Chehab  0		(place holder, used to be the wchan address,
361*c33e97efSMauro Carvalho Chehab		use /proc/PID/wchan instead)
362*c33e97efSMauro Carvalho Chehab  0             (place holder)
363*c33e97efSMauro Carvalho Chehab  0             (place holder)
364*c33e97efSMauro Carvalho Chehab  exit_signal   signal to send to parent thread on exit
365*c33e97efSMauro Carvalho Chehab  task_cpu      which CPU the task is scheduled on
366*c33e97efSMauro Carvalho Chehab  rt_priority   realtime priority
367*c33e97efSMauro Carvalho Chehab  policy        scheduling policy (man sched_setscheduler)
368*c33e97efSMauro Carvalho Chehab  blkio_ticks   time spent waiting for block IO
369*c33e97efSMauro Carvalho Chehab  gtime         guest time of the task in jiffies
370*c33e97efSMauro Carvalho Chehab  cgtime        guest time of the task children in jiffies
371*c33e97efSMauro Carvalho Chehab  start_data    address above which program data+bss is placed
372*c33e97efSMauro Carvalho Chehab  end_data      address below which program data+bss is placed
373*c33e97efSMauro Carvalho Chehab  start_brk     address above which program heap can be expanded with brk()
374*c33e97efSMauro Carvalho Chehab  arg_start     address above which program command line is placed
375*c33e97efSMauro Carvalho Chehab  arg_end       address below which program command line is placed
376*c33e97efSMauro Carvalho Chehab  env_start     address above which program environment is placed
377*c33e97efSMauro Carvalho Chehab  env_end       address below which program environment is placed
378*c33e97efSMauro Carvalho Chehab  exit_code     the thread's exit_code in the form reported by the waitpid
379*c33e97efSMauro Carvalho Chehab		system call
380*c33e97efSMauro Carvalho Chehab  ============= ===============================================================
381*c33e97efSMauro Carvalho Chehab
382*c33e97efSMauro Carvalho ChehabThe /proc/PID/maps file contains the currently mapped memory regions and
383*c33e97efSMauro Carvalho Chehabtheir access permissions.
384*c33e97efSMauro Carvalho Chehab
385*c33e97efSMauro Carvalho ChehabThe format is::
386*c33e97efSMauro Carvalho Chehab
387*c33e97efSMauro Carvalho Chehab    address           perms offset  dev   inode      pathname
388*c33e97efSMauro Carvalho Chehab
389*c33e97efSMauro Carvalho Chehab    08048000-08049000 r-xp 00000000 03:00 8312       /opt/test
390*c33e97efSMauro Carvalho Chehab    08049000-0804a000 rw-p 00001000 03:00 8312       /opt/test
391*c33e97efSMauro Carvalho Chehab    0804a000-0806b000 rw-p 00000000 00:00 0          [heap]
392*c33e97efSMauro Carvalho Chehab    a7cb1000-a7cb2000 ---p 00000000 00:00 0
393*c33e97efSMauro Carvalho Chehab    a7cb2000-a7eb2000 rw-p 00000000 00:00 0
394*c33e97efSMauro Carvalho Chehab    a7eb2000-a7eb3000 ---p 00000000 00:00 0
395*c33e97efSMauro Carvalho Chehab    a7eb3000-a7ed5000 rw-p 00000000 00:00 0
396*c33e97efSMauro Carvalho Chehab    a7ed5000-a8008000 r-xp 00000000 03:00 4222       /lib/libc.so.6
397*c33e97efSMauro Carvalho Chehab    a8008000-a800a000 r--p 00133000 03:00 4222       /lib/libc.so.6
398*c33e97efSMauro Carvalho Chehab    a800a000-a800b000 rw-p 00135000 03:00 4222       /lib/libc.so.6
399*c33e97efSMauro Carvalho Chehab    a800b000-a800e000 rw-p 00000000 00:00 0
400*c33e97efSMauro Carvalho Chehab    a800e000-a8022000 r-xp 00000000 03:00 14462      /lib/libpthread.so.0
401*c33e97efSMauro Carvalho Chehab    a8022000-a8023000 r--p 00013000 03:00 14462      /lib/libpthread.so.0
402*c33e97efSMauro Carvalho Chehab    a8023000-a8024000 rw-p 00014000 03:00 14462      /lib/libpthread.so.0
403*c33e97efSMauro Carvalho Chehab    a8024000-a8027000 rw-p 00000000 00:00 0
404*c33e97efSMauro Carvalho Chehab    a8027000-a8043000 r-xp 00000000 03:00 8317       /lib/ld-linux.so.2
405*c33e97efSMauro Carvalho Chehab    a8043000-a8044000 r--p 0001b000 03:00 8317       /lib/ld-linux.so.2
406*c33e97efSMauro Carvalho Chehab    a8044000-a8045000 rw-p 0001c000 03:00 8317       /lib/ld-linux.so.2
407*c33e97efSMauro Carvalho Chehab    aff35000-aff4a000 rw-p 00000000 00:00 0          [stack]
408*c33e97efSMauro Carvalho Chehab    ffffe000-fffff000 r-xp 00000000 00:00 0          [vdso]
409*c33e97efSMauro Carvalho Chehab
410*c33e97efSMauro Carvalho Chehabwhere "address" is the address space in the process that it occupies, "perms"
411*c33e97efSMauro Carvalho Chehabis a set of permissions::
412*c33e97efSMauro Carvalho Chehab
413*c33e97efSMauro Carvalho Chehab r = read
414*c33e97efSMauro Carvalho Chehab w = write
415*c33e97efSMauro Carvalho Chehab x = execute
416*c33e97efSMauro Carvalho Chehab s = shared
417*c33e97efSMauro Carvalho Chehab p = private (copy on write)
418*c33e97efSMauro Carvalho Chehab
419*c33e97efSMauro Carvalho Chehab"offset" is the offset into the mapping, "dev" is the device (major:minor), and
420*c33e97efSMauro Carvalho Chehab"inode" is the inode  on that device.  0 indicates that  no inode is associated
421*c33e97efSMauro Carvalho Chehabwith the memory region, as the case would be with BSS (uninitialized data).
422*c33e97efSMauro Carvalho ChehabThe "pathname" shows the name associated file for this mapping.  If the mapping
423*c33e97efSMauro Carvalho Chehabis not associated with a file:
424*c33e97efSMauro Carvalho Chehab
425*c33e97efSMauro Carvalho Chehab =======                    ====================================
426*c33e97efSMauro Carvalho Chehab [heap]                     the heap of the program
427*c33e97efSMauro Carvalho Chehab [stack]                    the stack of the main process
428*c33e97efSMauro Carvalho Chehab [vdso]                     the "virtual dynamic shared object",
429*c33e97efSMauro Carvalho Chehab                            the kernel system call handler
430*c33e97efSMauro Carvalho Chehab =======                    ====================================
431*c33e97efSMauro Carvalho Chehab
432*c33e97efSMauro Carvalho Chehab or if empty, the mapping is anonymous.
433*c33e97efSMauro Carvalho Chehab
434*c33e97efSMauro Carvalho ChehabThe /proc/PID/smaps is an extension based on maps, showing the memory
435*c33e97efSMauro Carvalho Chehabconsumption for each of the process's mappings. For each mapping (aka Virtual
436*c33e97efSMauro Carvalho ChehabMemory Area, or VMA) there is a series of lines such as the following::
437*c33e97efSMauro Carvalho Chehab
438*c33e97efSMauro Carvalho Chehab    08048000-080bc000 r-xp 00000000 03:02 13130      /bin/bash
439*c33e97efSMauro Carvalho Chehab
440*c33e97efSMauro Carvalho Chehab    Size:               1084 kB
441*c33e97efSMauro Carvalho Chehab    KernelPageSize:        4 kB
442*c33e97efSMauro Carvalho Chehab    MMUPageSize:           4 kB
443*c33e97efSMauro Carvalho Chehab    Rss:                 892 kB
444*c33e97efSMauro Carvalho Chehab    Pss:                 374 kB
445*c33e97efSMauro Carvalho Chehab    Shared_Clean:        892 kB
446*c33e97efSMauro Carvalho Chehab    Shared_Dirty:          0 kB
447*c33e97efSMauro Carvalho Chehab    Private_Clean:         0 kB
448*c33e97efSMauro Carvalho Chehab    Private_Dirty:         0 kB
449*c33e97efSMauro Carvalho Chehab    Referenced:          892 kB
450*c33e97efSMauro Carvalho Chehab    Anonymous:             0 kB
451*c33e97efSMauro Carvalho Chehab    LazyFree:              0 kB
452*c33e97efSMauro Carvalho Chehab    AnonHugePages:         0 kB
453*c33e97efSMauro Carvalho Chehab    ShmemPmdMapped:        0 kB
454*c33e97efSMauro Carvalho Chehab    Shared_Hugetlb:        0 kB
455*c33e97efSMauro Carvalho Chehab    Private_Hugetlb:       0 kB
456*c33e97efSMauro Carvalho Chehab    Swap:                  0 kB
457*c33e97efSMauro Carvalho Chehab    SwapPss:               0 kB
458*c33e97efSMauro Carvalho Chehab    KernelPageSize:        4 kB
459*c33e97efSMauro Carvalho Chehab    MMUPageSize:           4 kB
460*c33e97efSMauro Carvalho Chehab    Locked:                0 kB
461*c33e97efSMauro Carvalho Chehab    THPeligible:           0
462*c33e97efSMauro Carvalho Chehab    VmFlags: rd ex mr mw me dw
463*c33e97efSMauro Carvalho Chehab
464*c33e97efSMauro Carvalho ChehabThe first of these lines shows the same information as is displayed for the
465*c33e97efSMauro Carvalho Chehabmapping in /proc/PID/maps.  Following lines show the size of the mapping
466*c33e97efSMauro Carvalho Chehab(size); the size of each page allocated when backing a VMA (KernelPageSize),
467*c33e97efSMauro Carvalho Chehabwhich is usually the same as the size in the page table entries; the page size
468*c33e97efSMauro Carvalho Chehabused by the MMU when backing a VMA (in most cases, the same as KernelPageSize);
469*c33e97efSMauro Carvalho Chehabthe amount of the mapping that is currently resident in RAM (RSS); the
470*c33e97efSMauro Carvalho Chehabprocess' proportional share of this mapping (PSS); and the number of clean and
471*c33e97efSMauro Carvalho Chehabdirty shared and private pages in the mapping.
472*c33e97efSMauro Carvalho Chehab
473*c33e97efSMauro Carvalho ChehabThe "proportional set size" (PSS) of a process is the count of pages it has
474*c33e97efSMauro Carvalho Chehabin memory, where each page is divided by the number of processes sharing it.
475*c33e97efSMauro Carvalho ChehabSo if a process has 1000 pages all to itself, and 1000 shared with one other
476*c33e97efSMauro Carvalho Chehabprocess, its PSS will be 1500.
477*c33e97efSMauro Carvalho Chehab
478*c33e97efSMauro Carvalho ChehabNote that even a page which is part of a MAP_SHARED mapping, but has only
479*c33e97efSMauro Carvalho Chehaba single pte mapped, i.e.  is currently used by only one process, is accounted
480*c33e97efSMauro Carvalho Chehabas private and not as shared.
481*c33e97efSMauro Carvalho Chehab
482*c33e97efSMauro Carvalho Chehab"Referenced" indicates the amount of memory currently marked as referenced or
483*c33e97efSMauro Carvalho Chehabaccessed.
484*c33e97efSMauro Carvalho Chehab
485*c33e97efSMauro Carvalho Chehab"Anonymous" shows the amount of memory that does not belong to any file.  Even
486*c33e97efSMauro Carvalho Chehaba mapping associated with a file may contain anonymous pages: when MAP_PRIVATE
487*c33e97efSMauro Carvalho Chehaband a page is modified, the file page is replaced by a private anonymous copy.
488*c33e97efSMauro Carvalho Chehab
489*c33e97efSMauro Carvalho Chehab"LazyFree" shows the amount of memory which is marked by madvise(MADV_FREE).
490*c33e97efSMauro Carvalho ChehabThe memory isn't freed immediately with madvise(). It's freed in memory
491*c33e97efSMauro Carvalho Chehabpressure if the memory is clean. Please note that the printed value might
492*c33e97efSMauro Carvalho Chehabbe lower than the real value due to optimizations used in the current
493*c33e97efSMauro Carvalho Chehabimplementation. If this is not desirable please file a bug report.
494*c33e97efSMauro Carvalho Chehab
495*c33e97efSMauro Carvalho Chehab"AnonHugePages" shows the ammount of memory backed by transparent hugepage.
496*c33e97efSMauro Carvalho Chehab
497*c33e97efSMauro Carvalho Chehab"ShmemPmdMapped" shows the ammount of shared (shmem/tmpfs) memory backed by
498*c33e97efSMauro Carvalho Chehabhuge pages.
499*c33e97efSMauro Carvalho Chehab
500*c33e97efSMauro Carvalho Chehab"Shared_Hugetlb" and "Private_Hugetlb" show the ammounts of memory backed by
501*c33e97efSMauro Carvalho Chehabhugetlbfs page which is *not* counted in "RSS" or "PSS" field for historical
502*c33e97efSMauro Carvalho Chehabreasons. And these are not included in {Shared,Private}_{Clean,Dirty} field.
503*c33e97efSMauro Carvalho Chehab
504*c33e97efSMauro Carvalho Chehab"Swap" shows how much would-be-anonymous memory is also used, but out on swap.
505*c33e97efSMauro Carvalho Chehab
506*c33e97efSMauro Carvalho ChehabFor shmem mappings, "Swap" includes also the size of the mapped (and not
507*c33e97efSMauro Carvalho Chehabreplaced by copy-on-write) part of the underlying shmem object out on swap.
508*c33e97efSMauro Carvalho Chehab"SwapPss" shows proportional swap share of this mapping. Unlike "Swap", this
509*c33e97efSMauro Carvalho Chehabdoes not take into account swapped out page of underlying shmem objects.
510*c33e97efSMauro Carvalho Chehab"Locked" indicates whether the mapping is locked in memory or not.
511*c33e97efSMauro Carvalho Chehab"THPeligible" indicates whether the mapping is eligible for allocating THP
512*c33e97efSMauro Carvalho Chehabpages - 1 if true, 0 otherwise. It just shows the current status.
513*c33e97efSMauro Carvalho Chehab
514*c33e97efSMauro Carvalho Chehab"VmFlags" field deserves a separate description. This member represents the
515*c33e97efSMauro Carvalho Chehabkernel flags associated with the particular virtual memory area in two letter
516*c33e97efSMauro Carvalho Chehabencoded manner. The codes are the following:
517*c33e97efSMauro Carvalho Chehab
518*c33e97efSMauro Carvalho Chehab    ==    =======================================
519*c33e97efSMauro Carvalho Chehab    rd    readable
520*c33e97efSMauro Carvalho Chehab    wr    writeable
521*c33e97efSMauro Carvalho Chehab    ex    executable
522*c33e97efSMauro Carvalho Chehab    sh    shared
523*c33e97efSMauro Carvalho Chehab    mr    may read
524*c33e97efSMauro Carvalho Chehab    mw    may write
525*c33e97efSMauro Carvalho Chehab    me    may execute
526*c33e97efSMauro Carvalho Chehab    ms    may share
527*c33e97efSMauro Carvalho Chehab    gd    stack segment growns down
528*c33e97efSMauro Carvalho Chehab    pf    pure PFN range
529*c33e97efSMauro Carvalho Chehab    dw    disabled write to the mapped file
530*c33e97efSMauro Carvalho Chehab    lo    pages are locked in memory
531*c33e97efSMauro Carvalho Chehab    io    memory mapped I/O area
532*c33e97efSMauro Carvalho Chehab    sr    sequential read advise provided
533*c33e97efSMauro Carvalho Chehab    rr    random read advise provided
534*c33e97efSMauro Carvalho Chehab    dc    do not copy area on fork
535*c33e97efSMauro Carvalho Chehab    de    do not expand area on remapping
536*c33e97efSMauro Carvalho Chehab    ac    area is accountable
537*c33e97efSMauro Carvalho Chehab    nr    swap space is not reserved for the area
538*c33e97efSMauro Carvalho Chehab    ht    area uses huge tlb pages
539*c33e97efSMauro Carvalho Chehab    ar    architecture specific flag
540*c33e97efSMauro Carvalho Chehab    dd    do not include area into core dump
541*c33e97efSMauro Carvalho Chehab    sd    soft dirty flag
542*c33e97efSMauro Carvalho Chehab    mm    mixed map area
543*c33e97efSMauro Carvalho Chehab    hg    huge page advise flag
544*c33e97efSMauro Carvalho Chehab    nh    no huge page advise flag
545*c33e97efSMauro Carvalho Chehab    mg    mergable advise flag
546*c33e97efSMauro Carvalho Chehab    ==    =======================================
547*c33e97efSMauro Carvalho Chehab
548*c33e97efSMauro Carvalho ChehabNote that there is no guarantee that every flag and associated mnemonic will
549*c33e97efSMauro Carvalho Chehabbe present in all further kernel releases. Things get changed, the flags may
550*c33e97efSMauro Carvalho Chehabbe vanished or the reverse -- new added. Interpretation of their meaning
551*c33e97efSMauro Carvalho Chehabmight change in future as well. So each consumer of these flags has to
552*c33e97efSMauro Carvalho Chehabfollow each specific kernel version for the exact semantic.
553*c33e97efSMauro Carvalho Chehab
554*c33e97efSMauro Carvalho ChehabThis file is only present if the CONFIG_MMU kernel configuration option is
555*c33e97efSMauro Carvalho Chehabenabled.
556*c33e97efSMauro Carvalho Chehab
557*c33e97efSMauro Carvalho ChehabNote: reading /proc/PID/maps or /proc/PID/smaps is inherently racy (consistent
558*c33e97efSMauro Carvalho Chehaboutput can be achieved only in the single read call).
559*c33e97efSMauro Carvalho Chehab
560*c33e97efSMauro Carvalho ChehabThis typically manifests when doing partial reads of these files while the
561*c33e97efSMauro Carvalho Chehabmemory map is being modified.  Despite the races, we do provide the following
562*c33e97efSMauro Carvalho Chehabguarantees:
563*c33e97efSMauro Carvalho Chehab
564*c33e97efSMauro Carvalho Chehab1) The mapped addresses never go backwards, which implies no two
565*c33e97efSMauro Carvalho Chehab   regions will ever overlap.
566*c33e97efSMauro Carvalho Chehab2) If there is something at a given vaddr during the entirety of the
567*c33e97efSMauro Carvalho Chehab   life of the smaps/maps walk, there will be some output for it.
568*c33e97efSMauro Carvalho Chehab
569*c33e97efSMauro Carvalho ChehabThe /proc/PID/smaps_rollup file includes the same fields as /proc/PID/smaps,
570*c33e97efSMauro Carvalho Chehabbut their values are the sums of the corresponding values for all mappings of
571*c33e97efSMauro Carvalho Chehabthe process.  Additionally, it contains these fields:
572*c33e97efSMauro Carvalho Chehab
573*c33e97efSMauro Carvalho Chehab- Pss_Anon
574*c33e97efSMauro Carvalho Chehab- Pss_File
575*c33e97efSMauro Carvalho Chehab- Pss_Shmem
576*c33e97efSMauro Carvalho Chehab
577*c33e97efSMauro Carvalho ChehabThey represent the proportional shares of anonymous, file, and shmem pages, as
578*c33e97efSMauro Carvalho Chehabdescribed for smaps above.  These fields are omitted in smaps since each
579*c33e97efSMauro Carvalho Chehabmapping identifies the type (anon, file, or shmem) of all pages it contains.
580*c33e97efSMauro Carvalho ChehabThus all information in smaps_rollup can be derived from smaps, but at a
581*c33e97efSMauro Carvalho Chehabsignificantly higher cost.
582*c33e97efSMauro Carvalho Chehab
583*c33e97efSMauro Carvalho ChehabThe /proc/PID/clear_refs is used to reset the PG_Referenced and ACCESSED/YOUNG
584*c33e97efSMauro Carvalho Chehabbits on both physical and virtual pages associated with a process, and the
585*c33e97efSMauro Carvalho Chehabsoft-dirty bit on pte (see Documentation/admin-guide/mm/soft-dirty.rst
586*c33e97efSMauro Carvalho Chehabfor details).
587*c33e97efSMauro Carvalho ChehabTo clear the bits for all the pages associated with the process::
588*c33e97efSMauro Carvalho Chehab
589*c33e97efSMauro Carvalho Chehab    > echo 1 > /proc/PID/clear_refs
590*c33e97efSMauro Carvalho Chehab
591*c33e97efSMauro Carvalho ChehabTo clear the bits for the anonymous pages associated with the process::
592*c33e97efSMauro Carvalho Chehab
593*c33e97efSMauro Carvalho Chehab    > echo 2 > /proc/PID/clear_refs
594*c33e97efSMauro Carvalho Chehab
595*c33e97efSMauro Carvalho ChehabTo clear the bits for the file mapped pages associated with the process::
596*c33e97efSMauro Carvalho Chehab
597*c33e97efSMauro Carvalho Chehab    > echo 3 > /proc/PID/clear_refs
598*c33e97efSMauro Carvalho Chehab
599*c33e97efSMauro Carvalho ChehabTo clear the soft-dirty bit::
600*c33e97efSMauro Carvalho Chehab
601*c33e97efSMauro Carvalho Chehab    > echo 4 > /proc/PID/clear_refs
602*c33e97efSMauro Carvalho Chehab
603*c33e97efSMauro Carvalho ChehabTo reset the peak resident set size ("high water mark") to the process's
604*c33e97efSMauro Carvalho Chehabcurrent value::
605*c33e97efSMauro Carvalho Chehab
606*c33e97efSMauro Carvalho Chehab    > echo 5 > /proc/PID/clear_refs
607*c33e97efSMauro Carvalho Chehab
608*c33e97efSMauro Carvalho ChehabAny other value written to /proc/PID/clear_refs will have no effect.
609*c33e97efSMauro Carvalho Chehab
610*c33e97efSMauro Carvalho ChehabThe /proc/pid/pagemap gives the PFN, which can be used to find the pageflags
611*c33e97efSMauro Carvalho Chehabusing /proc/kpageflags and number of times a page is mapped using
612*c33e97efSMauro Carvalho Chehab/proc/kpagecount. For detailed explanation, see
613*c33e97efSMauro Carvalho ChehabDocumentation/admin-guide/mm/pagemap.rst.
614*c33e97efSMauro Carvalho Chehab
615*c33e97efSMauro Carvalho ChehabThe /proc/pid/numa_maps is an extension based on maps, showing the memory
616*c33e97efSMauro Carvalho Chehablocality and binding policy, as well as the memory usage (in pages) of
617*c33e97efSMauro Carvalho Chehabeach mapping. The output follows a general format where mapping details get
618*c33e97efSMauro Carvalho Chehabsummarized separated by blank spaces, one mapping per each file line::
619*c33e97efSMauro Carvalho Chehab
620*c33e97efSMauro Carvalho Chehab    address   policy    mapping details
621*c33e97efSMauro Carvalho Chehab
622*c33e97efSMauro Carvalho Chehab    00400000 default file=/usr/local/bin/app mapped=1 active=0 N3=1 kernelpagesize_kB=4
623*c33e97efSMauro Carvalho Chehab    00600000 default file=/usr/local/bin/app anon=1 dirty=1 N3=1 kernelpagesize_kB=4
624*c33e97efSMauro Carvalho Chehab    3206000000 default file=/lib64/ld-2.12.so mapped=26 mapmax=6 N0=24 N3=2 kernelpagesize_kB=4
625*c33e97efSMauro Carvalho Chehab    320621f000 default file=/lib64/ld-2.12.so anon=1 dirty=1 N3=1 kernelpagesize_kB=4
626*c33e97efSMauro Carvalho Chehab    3206220000 default file=/lib64/ld-2.12.so anon=1 dirty=1 N3=1 kernelpagesize_kB=4
627*c33e97efSMauro Carvalho Chehab    3206221000 default anon=1 dirty=1 N3=1 kernelpagesize_kB=4
628*c33e97efSMauro Carvalho Chehab    3206800000 default file=/lib64/libc-2.12.so mapped=59 mapmax=21 active=55 N0=41 N3=18 kernelpagesize_kB=4
629*c33e97efSMauro Carvalho Chehab    320698b000 default file=/lib64/libc-2.12.so
630*c33e97efSMauro Carvalho Chehab    3206b8a000 default file=/lib64/libc-2.12.so anon=2 dirty=2 N3=2 kernelpagesize_kB=4
631*c33e97efSMauro Carvalho Chehab    3206b8e000 default file=/lib64/libc-2.12.so anon=1 dirty=1 N3=1 kernelpagesize_kB=4
632*c33e97efSMauro Carvalho Chehab    3206b8f000 default anon=3 dirty=3 active=1 N3=3 kernelpagesize_kB=4
633*c33e97efSMauro Carvalho Chehab    7f4dc10a2000 default anon=3 dirty=3 N3=3 kernelpagesize_kB=4
634*c33e97efSMauro Carvalho Chehab    7f4dc10b4000 default anon=2 dirty=2 active=1 N3=2 kernelpagesize_kB=4
635*c33e97efSMauro Carvalho Chehab    7f4dc1200000 default file=/anon_hugepage\040(deleted) huge anon=1 dirty=1 N3=1 kernelpagesize_kB=2048
636*c33e97efSMauro Carvalho Chehab    7fff335f0000 default stack anon=3 dirty=3 N3=3 kernelpagesize_kB=4
637*c33e97efSMauro Carvalho Chehab    7fff3369d000 default mapped=1 mapmax=35 active=0 N3=1 kernelpagesize_kB=4
638*c33e97efSMauro Carvalho Chehab
639*c33e97efSMauro Carvalho ChehabWhere:
640*c33e97efSMauro Carvalho Chehab
641*c33e97efSMauro Carvalho Chehab"address" is the starting address for the mapping;
642*c33e97efSMauro Carvalho Chehab
643*c33e97efSMauro Carvalho Chehab"policy" reports the NUMA memory policy set for the mapping (see Documentation/admin-guide/mm/numa_memory_policy.rst);
644*c33e97efSMauro Carvalho Chehab
645*c33e97efSMauro Carvalho Chehab"mapping details" summarizes mapping data such as mapping type, page usage counters,
646*c33e97efSMauro Carvalho Chehabnode locality page counters (N0 == node0, N1 == node1, ...) and the kernel page
647*c33e97efSMauro Carvalho Chehabsize, in KB, that is backing the mapping up.
648*c33e97efSMauro Carvalho Chehab
649*c33e97efSMauro Carvalho Chehab1.2 Kernel data
650*c33e97efSMauro Carvalho Chehab---------------
651*c33e97efSMauro Carvalho Chehab
652*c33e97efSMauro Carvalho ChehabSimilar to  the  process entries, the kernel data files give information about
653*c33e97efSMauro Carvalho Chehabthe running kernel. The files used to obtain this information are contained in
654*c33e97efSMauro Carvalho Chehab/proc and  are  listed  in Table 1-5. Not all of these will be present in your
655*c33e97efSMauro Carvalho Chehabsystem. It  depends  on the kernel configuration and the loaded modules, which
656*c33e97efSMauro Carvalho Chehabfiles are there, and which are missing.
657*c33e97efSMauro Carvalho Chehab
658*c33e97efSMauro Carvalho Chehab.. table:: Table 1-5: Kernel info in /proc
659*c33e97efSMauro Carvalho Chehab
660*c33e97efSMauro Carvalho Chehab ============ ===============================================================
661*c33e97efSMauro Carvalho Chehab File         Content
662*c33e97efSMauro Carvalho Chehab ============ ===============================================================
663*c33e97efSMauro Carvalho Chehab apm          Advanced power management info
664*c33e97efSMauro Carvalho Chehab buddyinfo    Kernel memory allocator information (see text)	(2.5)
665*c33e97efSMauro Carvalho Chehab bus          Directory containing bus specific information
666*c33e97efSMauro Carvalho Chehab cmdline      Kernel command line
667*c33e97efSMauro Carvalho Chehab cpuinfo      Info about the CPU
668*c33e97efSMauro Carvalho Chehab devices      Available devices (block and character)
669*c33e97efSMauro Carvalho Chehab dma          Used DMS channels
670*c33e97efSMauro Carvalho Chehab filesystems  Supported filesystems
671*c33e97efSMauro Carvalho Chehab driver       Various drivers grouped here, currently rtc	(2.4)
672*c33e97efSMauro Carvalho Chehab execdomains  Execdomains, related to security			(2.4)
673*c33e97efSMauro Carvalho Chehab fb 	      Frame Buffer devices				(2.4)
674*c33e97efSMauro Carvalho Chehab fs 	      File system parameters, currently nfs/exports	(2.4)
675*c33e97efSMauro Carvalho Chehab ide          Directory containing info about the IDE subsystem
676*c33e97efSMauro Carvalho Chehab interrupts   Interrupt usage
677*c33e97efSMauro Carvalho Chehab iomem 	      Memory map					(2.4)
678*c33e97efSMauro Carvalho Chehab ioports      I/O port usage
679*c33e97efSMauro Carvalho Chehab irq 	      Masks for irq to cpu affinity			(2.4)(smp?)
680*c33e97efSMauro Carvalho Chehab isapnp       ISA PnP (Plug&Play) Info				(2.4)
681*c33e97efSMauro Carvalho Chehab kcore        Kernel core image (can be ELF or A.OUT(deprecated in 2.4))
682*c33e97efSMauro Carvalho Chehab kmsg         Kernel messages
683*c33e97efSMauro Carvalho Chehab ksyms        Kernel symbol table
684*c33e97efSMauro Carvalho Chehab loadavg      Load average of last 1, 5 & 15 minutes
685*c33e97efSMauro Carvalho Chehab locks        Kernel locks
686*c33e97efSMauro Carvalho Chehab meminfo      Memory info
687*c33e97efSMauro Carvalho Chehab misc         Miscellaneous
688*c33e97efSMauro Carvalho Chehab modules      List of loaded modules
689*c33e97efSMauro Carvalho Chehab mounts       Mounted filesystems
690*c33e97efSMauro Carvalho Chehab net          Networking info (see text)
691*c33e97efSMauro Carvalho Chehab pagetypeinfo Additional page allocator information (see text)  (2.5)
692*c33e97efSMauro Carvalho Chehab partitions   Table of partitions known to the system
693*c33e97efSMauro Carvalho Chehab pci 	      Deprecated info of PCI bus (new way -> /proc/bus/pci/,
694*c33e97efSMauro Carvalho Chehab              decoupled by lspci				(2.4)
695*c33e97efSMauro Carvalho Chehab rtc          Real time clock
696*c33e97efSMauro Carvalho Chehab scsi         SCSI info (see text)
697*c33e97efSMauro Carvalho Chehab slabinfo     Slab pool info
698*c33e97efSMauro Carvalho Chehab softirqs     softirq usage
699*c33e97efSMauro Carvalho Chehab stat         Overall statistics
700*c33e97efSMauro Carvalho Chehab swaps        Swap space utilization
701*c33e97efSMauro Carvalho Chehab sys          See chapter 2
702*c33e97efSMauro Carvalho Chehab sysvipc      Info of SysVIPC Resources (msg, sem, shm)		(2.4)
703*c33e97efSMauro Carvalho Chehab tty 	      Info of tty drivers
704*c33e97efSMauro Carvalho Chehab uptime       Wall clock since boot, combined idle time of all cpus
705*c33e97efSMauro Carvalho Chehab version      Kernel version
706*c33e97efSMauro Carvalho Chehab video 	      bttv info of video resources			(2.4)
707*c33e97efSMauro Carvalho Chehab vmallocinfo  Show vmalloced areas
708*c33e97efSMauro Carvalho Chehab ============ ===============================================================
709*c33e97efSMauro Carvalho Chehab
710*c33e97efSMauro Carvalho ChehabYou can,  for  example,  check  which interrupts are currently in use and what
711*c33e97efSMauro Carvalho Chehabthey are used for by looking in the file /proc/interrupts::
712*c33e97efSMauro Carvalho Chehab
713*c33e97efSMauro Carvalho Chehab  > cat /proc/interrupts
714*c33e97efSMauro Carvalho Chehab             CPU0
715*c33e97efSMauro Carvalho Chehab    0:    8728810          XT-PIC  timer
716*c33e97efSMauro Carvalho Chehab    1:        895          XT-PIC  keyboard
717*c33e97efSMauro Carvalho Chehab    2:          0          XT-PIC  cascade
718*c33e97efSMauro Carvalho Chehab    3:     531695          XT-PIC  aha152x
719*c33e97efSMauro Carvalho Chehab    4:    2014133          XT-PIC  serial
720*c33e97efSMauro Carvalho Chehab    5:      44401          XT-PIC  pcnet_cs
721*c33e97efSMauro Carvalho Chehab    8:          2          XT-PIC  rtc
722*c33e97efSMauro Carvalho Chehab   11:          8          XT-PIC  i82365
723*c33e97efSMauro Carvalho Chehab   12:     182918          XT-PIC  PS/2 Mouse
724*c33e97efSMauro Carvalho Chehab   13:          1          XT-PIC  fpu
725*c33e97efSMauro Carvalho Chehab   14:    1232265          XT-PIC  ide0
726*c33e97efSMauro Carvalho Chehab   15:          7          XT-PIC  ide1
727*c33e97efSMauro Carvalho Chehab  NMI:          0
728*c33e97efSMauro Carvalho Chehab
729*c33e97efSMauro Carvalho ChehabIn 2.4.* a couple of lines where added to this file LOC & ERR (this time is the
730*c33e97efSMauro Carvalho Chehaboutput of a SMP machine)::
731*c33e97efSMauro Carvalho Chehab
732*c33e97efSMauro Carvalho Chehab  > cat /proc/interrupts
733*c33e97efSMauro Carvalho Chehab
734*c33e97efSMauro Carvalho Chehab             CPU0       CPU1
735*c33e97efSMauro Carvalho Chehab    0:    1243498    1214548    IO-APIC-edge  timer
736*c33e97efSMauro Carvalho Chehab    1:       8949       8958    IO-APIC-edge  keyboard
737*c33e97efSMauro Carvalho Chehab    2:          0          0          XT-PIC  cascade
738*c33e97efSMauro Carvalho Chehab    5:      11286      10161    IO-APIC-edge  soundblaster
739*c33e97efSMauro Carvalho Chehab    8:          1          0    IO-APIC-edge  rtc
740*c33e97efSMauro Carvalho Chehab    9:      27422      27407    IO-APIC-edge  3c503
741*c33e97efSMauro Carvalho Chehab   12:     113645     113873    IO-APIC-edge  PS/2 Mouse
742*c33e97efSMauro Carvalho Chehab   13:          0          0          XT-PIC  fpu
743*c33e97efSMauro Carvalho Chehab   14:      22491      24012    IO-APIC-edge  ide0
744*c33e97efSMauro Carvalho Chehab   15:       2183       2415    IO-APIC-edge  ide1
745*c33e97efSMauro Carvalho Chehab   17:      30564      30414   IO-APIC-level  eth0
746*c33e97efSMauro Carvalho Chehab   18:        177        164   IO-APIC-level  bttv
747*c33e97efSMauro Carvalho Chehab  NMI:    2457961    2457959
748*c33e97efSMauro Carvalho Chehab  LOC:    2457882    2457881
749*c33e97efSMauro Carvalho Chehab  ERR:       2155
750*c33e97efSMauro Carvalho Chehab
751*c33e97efSMauro Carvalho ChehabNMI is incremented in this case because every timer interrupt generates a NMI
752*c33e97efSMauro Carvalho Chehab(Non Maskable Interrupt) which is used by the NMI Watchdog to detect lockups.
753*c33e97efSMauro Carvalho Chehab
754*c33e97efSMauro Carvalho ChehabLOC is the local interrupt counter of the internal APIC of every CPU.
755*c33e97efSMauro Carvalho Chehab
756*c33e97efSMauro Carvalho ChehabERR is incremented in the case of errors in the IO-APIC bus (the bus that
757*c33e97efSMauro Carvalho Chehabconnects the CPUs in a SMP system. This means that an error has been detected,
758*c33e97efSMauro Carvalho Chehabthe IO-APIC automatically retry the transmission, so it should not be a big
759*c33e97efSMauro Carvalho Chehabproblem, but you should read the SMP-FAQ.
760*c33e97efSMauro Carvalho Chehab
761*c33e97efSMauro Carvalho ChehabIn 2.6.2* /proc/interrupts was expanded again.  This time the goal was for
762*c33e97efSMauro Carvalho Chehab/proc/interrupts to display every IRQ vector in use by the system, not
763*c33e97efSMauro Carvalho Chehabjust those considered 'most important'.  The new vectors are:
764*c33e97efSMauro Carvalho Chehab
765*c33e97efSMauro Carvalho ChehabTHR
766*c33e97efSMauro Carvalho Chehab  interrupt raised when a machine check threshold counter
767*c33e97efSMauro Carvalho Chehab  (typically counting ECC corrected errors of memory or cache) exceeds
768*c33e97efSMauro Carvalho Chehab  a configurable threshold.  Only available on some systems.
769*c33e97efSMauro Carvalho Chehab
770*c33e97efSMauro Carvalho ChehabTRM
771*c33e97efSMauro Carvalho Chehab  a thermal event interrupt occurs when a temperature threshold
772*c33e97efSMauro Carvalho Chehab  has been exceeded for the CPU.  This interrupt may also be generated
773*c33e97efSMauro Carvalho Chehab  when the temperature drops back to normal.
774*c33e97efSMauro Carvalho Chehab
775*c33e97efSMauro Carvalho ChehabSPU
776*c33e97efSMauro Carvalho Chehab  a spurious interrupt is some interrupt that was raised then lowered
777*c33e97efSMauro Carvalho Chehab  by some IO device before it could be fully processed by the APIC.  Hence
778*c33e97efSMauro Carvalho Chehab  the APIC sees the interrupt but does not know what device it came from.
779*c33e97efSMauro Carvalho Chehab  For this case the APIC will generate the interrupt with a IRQ vector
780*c33e97efSMauro Carvalho Chehab  of 0xff. This might also be generated by chipset bugs.
781*c33e97efSMauro Carvalho Chehab
782*c33e97efSMauro Carvalho ChehabRES, CAL, TLB]
783*c33e97efSMauro Carvalho Chehab  rescheduling, call and TLB flush interrupts are
784*c33e97efSMauro Carvalho Chehab  sent from one CPU to another per the needs of the OS.  Typically,
785*c33e97efSMauro Carvalho Chehab  their statistics are used by kernel developers and interested users to
786*c33e97efSMauro Carvalho Chehab  determine the occurrence of interrupts of the given type.
787*c33e97efSMauro Carvalho Chehab
788*c33e97efSMauro Carvalho ChehabThe above IRQ vectors are displayed only when relevant.  For example,
789*c33e97efSMauro Carvalho Chehabthe threshold vector does not exist on x86_64 platforms.  Others are
790*c33e97efSMauro Carvalho Chehabsuppressed when the system is a uniprocessor.  As of this writing, only
791*c33e97efSMauro Carvalho Chehabi386 and x86_64 platforms support the new IRQ vector displays.
792*c33e97efSMauro Carvalho Chehab
793*c33e97efSMauro Carvalho ChehabOf some interest is the introduction of the /proc/irq directory to 2.4.
794*c33e97efSMauro Carvalho ChehabIt could be used to set IRQ to CPU affinity, this means that you can "hook" an
795*c33e97efSMauro Carvalho ChehabIRQ to only one CPU, or to exclude a CPU of handling IRQs. The contents of the
796*c33e97efSMauro Carvalho Chehabirq subdir is one subdir for each IRQ, and two files; default_smp_affinity and
797*c33e97efSMauro Carvalho Chehabprof_cpu_mask.
798*c33e97efSMauro Carvalho Chehab
799*c33e97efSMauro Carvalho ChehabFor example::
800*c33e97efSMauro Carvalho Chehab
801*c33e97efSMauro Carvalho Chehab  > ls /proc/irq/
802*c33e97efSMauro Carvalho Chehab  0  10  12  14  16  18  2  4  6  8  prof_cpu_mask
803*c33e97efSMauro Carvalho Chehab  1  11  13  15  17  19  3  5  7  9  default_smp_affinity
804*c33e97efSMauro Carvalho Chehab  > ls /proc/irq/0/
805*c33e97efSMauro Carvalho Chehab  smp_affinity
806*c33e97efSMauro Carvalho Chehab
807*c33e97efSMauro Carvalho Chehabsmp_affinity is a bitmask, in which you can specify which CPUs can handle the
808*c33e97efSMauro Carvalho ChehabIRQ, you can set it by doing::
809*c33e97efSMauro Carvalho Chehab
810*c33e97efSMauro Carvalho Chehab  > echo 1 > /proc/irq/10/smp_affinity
811*c33e97efSMauro Carvalho Chehab
812*c33e97efSMauro Carvalho ChehabThis means that only the first CPU will handle the IRQ, but you can also echo
813*c33e97efSMauro Carvalho Chehab5 which means that only the first and third CPU can handle the IRQ.
814*c33e97efSMauro Carvalho Chehab
815*c33e97efSMauro Carvalho ChehabThe contents of each smp_affinity file is the same by default::
816*c33e97efSMauro Carvalho Chehab
817*c33e97efSMauro Carvalho Chehab  > cat /proc/irq/0/smp_affinity
818*c33e97efSMauro Carvalho Chehab  ffffffff
819*c33e97efSMauro Carvalho Chehab
820*c33e97efSMauro Carvalho ChehabThere is an alternate interface, smp_affinity_list which allows specifying
821*c33e97efSMauro Carvalho Chehaba cpu range instead of a bitmask::
822*c33e97efSMauro Carvalho Chehab
823*c33e97efSMauro Carvalho Chehab  > cat /proc/irq/0/smp_affinity_list
824*c33e97efSMauro Carvalho Chehab  1024-1031
825*c33e97efSMauro Carvalho Chehab
826*c33e97efSMauro Carvalho ChehabThe default_smp_affinity mask applies to all non-active IRQs, which are the
827*c33e97efSMauro Carvalho ChehabIRQs which have not yet been allocated/activated, and hence which lack a
828*c33e97efSMauro Carvalho Chehab/proc/irq/[0-9]* directory.
829*c33e97efSMauro Carvalho Chehab
830*c33e97efSMauro Carvalho ChehabThe node file on an SMP system shows the node to which the device using the IRQ
831*c33e97efSMauro Carvalho Chehabreports itself as being attached. This hardware locality information does not
832*c33e97efSMauro Carvalho Chehabinclude information about any possible driver locality preference.
833*c33e97efSMauro Carvalho Chehab
834*c33e97efSMauro Carvalho Chehabprof_cpu_mask specifies which CPUs are to be profiled by the system wide
835*c33e97efSMauro Carvalho Chehabprofiler. Default value is ffffffff (all cpus if there are only 32 of them).
836*c33e97efSMauro Carvalho Chehab
837*c33e97efSMauro Carvalho ChehabThe way IRQs are routed is handled by the IO-APIC, and it's Round Robin
838*c33e97efSMauro Carvalho Chehabbetween all the CPUs which are allowed to handle it. As usual the kernel has
839*c33e97efSMauro Carvalho Chehabmore info than you and does a better job than you, so the defaults are the
840*c33e97efSMauro Carvalho Chehabbest choice for almost everyone.  [Note this applies only to those IO-APIC's
841*c33e97efSMauro Carvalho Chehabthat support "Round Robin" interrupt distribution.]
842*c33e97efSMauro Carvalho Chehab
843*c33e97efSMauro Carvalho ChehabThere are  three  more  important subdirectories in /proc: net, scsi, and sys.
844*c33e97efSMauro Carvalho ChehabThe general  rule  is  that  the  contents,  or  even  the  existence of these
845*c33e97efSMauro Carvalho Chehabdirectories, depend  on your kernel configuration. If SCSI is not enabled, the
846*c33e97efSMauro Carvalho Chehabdirectory scsi  may  not  exist. The same is true with the net, which is there
847*c33e97efSMauro Carvalho Chehabonly when networking support is present in the running kernel.
848*c33e97efSMauro Carvalho Chehab
849*c33e97efSMauro Carvalho ChehabThe slabinfo  file  gives  information  about  memory usage at the slab level.
850*c33e97efSMauro Carvalho ChehabLinux uses  slab  pools for memory management above page level in version 2.2.
851*c33e97efSMauro Carvalho ChehabCommonly used  objects  have  their  own  slab  pool (such as network buffers,
852*c33e97efSMauro Carvalho Chehabdirectory cache, and so on).
853*c33e97efSMauro Carvalho Chehab
854*c33e97efSMauro Carvalho Chehab::
855*c33e97efSMauro Carvalho Chehab
856*c33e97efSMauro Carvalho Chehab    > cat /proc/buddyinfo
857*c33e97efSMauro Carvalho Chehab
858*c33e97efSMauro Carvalho Chehab    Node 0, zone      DMA      0      4      5      4      4      3 ...
859*c33e97efSMauro Carvalho Chehab    Node 0, zone   Normal      1      0      0      1    101      8 ...
860*c33e97efSMauro Carvalho Chehab    Node 0, zone  HighMem      2      0      0      1      1      0 ...
861*c33e97efSMauro Carvalho Chehab
862*c33e97efSMauro Carvalho ChehabExternal fragmentation is a problem under some workloads, and buddyinfo is a
863*c33e97efSMauro Carvalho Chehabuseful tool for helping diagnose these problems.  Buddyinfo will give you a
864*c33e97efSMauro Carvalho Chehabclue as to how big an area you can safely allocate, or why a previous
865*c33e97efSMauro Carvalho Chehaballocation failed.
866*c33e97efSMauro Carvalho Chehab
867*c33e97efSMauro Carvalho ChehabEach column represents the number of pages of a certain order which are
868*c33e97efSMauro Carvalho Chehabavailable.  In this case, there are 0 chunks of 2^0*PAGE_SIZE available in
869*c33e97efSMauro Carvalho ChehabZONE_DMA, 4 chunks of 2^1*PAGE_SIZE in ZONE_DMA, 101 chunks of 2^4*PAGE_SIZE
870*c33e97efSMauro Carvalho Chehabavailable in ZONE_NORMAL, etc...
871*c33e97efSMauro Carvalho Chehab
872*c33e97efSMauro Carvalho ChehabMore information relevant to external fragmentation can be found in
873*c33e97efSMauro Carvalho Chehabpagetypeinfo::
874*c33e97efSMauro Carvalho Chehab
875*c33e97efSMauro Carvalho Chehab    > cat /proc/pagetypeinfo
876*c33e97efSMauro Carvalho Chehab    Page block order: 9
877*c33e97efSMauro Carvalho Chehab    Pages per block:  512
878*c33e97efSMauro Carvalho Chehab
879*c33e97efSMauro Carvalho Chehab    Free pages count per migrate type at order       0      1      2      3      4      5      6      7      8      9     10
880*c33e97efSMauro Carvalho Chehab    Node    0, zone      DMA, type    Unmovable      0      0      0      1      1      1      1      1      1      1      0
881*c33e97efSMauro Carvalho Chehab    Node    0, zone      DMA, type  Reclaimable      0      0      0      0      0      0      0      0      0      0      0
882*c33e97efSMauro Carvalho Chehab    Node    0, zone      DMA, type      Movable      1      1      2      1      2      1      1      0      1      0      2
883*c33e97efSMauro Carvalho Chehab    Node    0, zone      DMA, type      Reserve      0      0      0      0      0      0      0      0      0      1      0
884*c33e97efSMauro Carvalho Chehab    Node    0, zone      DMA, type      Isolate      0      0      0      0      0      0      0      0      0      0      0
885*c33e97efSMauro Carvalho Chehab    Node    0, zone    DMA32, type    Unmovable    103     54     77      1      1      1     11      8      7      1      9
886*c33e97efSMauro Carvalho Chehab    Node    0, zone    DMA32, type  Reclaimable      0      0      2      1      0      0      0      0      1      0      0
887*c33e97efSMauro Carvalho Chehab    Node    0, zone    DMA32, type      Movable    169    152    113     91     77     54     39     13      6      1    452
888*c33e97efSMauro Carvalho Chehab    Node    0, zone    DMA32, type      Reserve      1      2      2      2      2      0      1      1      1      1      0
889*c33e97efSMauro Carvalho Chehab    Node    0, zone    DMA32, type      Isolate      0      0      0      0      0      0      0      0      0      0      0
890*c33e97efSMauro Carvalho Chehab
891*c33e97efSMauro Carvalho Chehab    Number of blocks type     Unmovable  Reclaimable      Movable      Reserve      Isolate
892*c33e97efSMauro Carvalho Chehab    Node 0, zone      DMA            2            0            5            1            0
893*c33e97efSMauro Carvalho Chehab    Node 0, zone    DMA32           41            6          967            2            0
894*c33e97efSMauro Carvalho Chehab
895*c33e97efSMauro Carvalho ChehabFragmentation avoidance in the kernel works by grouping pages of different
896*c33e97efSMauro Carvalho Chehabmigrate types into the same contiguous regions of memory called page blocks.
897*c33e97efSMauro Carvalho ChehabA page block is typically the size of the default hugepage size e.g. 2MB on
898*c33e97efSMauro Carvalho ChehabX86-64. By keeping pages grouped based on their ability to move, the kernel
899*c33e97efSMauro Carvalho Chehabcan reclaim pages within a page block to satisfy a high-order allocation.
900*c33e97efSMauro Carvalho Chehab
901*c33e97efSMauro Carvalho ChehabThe pagetypinfo begins with information on the size of a page block. It
902*c33e97efSMauro Carvalho Chehabthen gives the same type of information as buddyinfo except broken down
903*c33e97efSMauro Carvalho Chehabby migrate-type and finishes with details on how many page blocks of each
904*c33e97efSMauro Carvalho Chehabtype exist.
905*c33e97efSMauro Carvalho Chehab
906*c33e97efSMauro Carvalho ChehabIf min_free_kbytes has been tuned correctly (recommendations made by hugeadm
907*c33e97efSMauro Carvalho Chehabfrom libhugetlbfs https://github.com/libhugetlbfs/libhugetlbfs/), one can
908*c33e97efSMauro Carvalho Chehabmake an estimate of the likely number of huge pages that can be allocated
909*c33e97efSMauro Carvalho Chehabat a given point in time. All the "Movable" blocks should be allocatable
910*c33e97efSMauro Carvalho Chehabunless memory has been mlock()'d. Some of the Reclaimable blocks should
911*c33e97efSMauro Carvalho Chehabalso be allocatable although a lot of filesystem metadata may have to be
912*c33e97efSMauro Carvalho Chehabreclaimed to achieve this.
913*c33e97efSMauro Carvalho Chehab
914*c33e97efSMauro Carvalho Chehab
915*c33e97efSMauro Carvalho Chehabmeminfo
916*c33e97efSMauro Carvalho Chehab~~~~~~~
917*c33e97efSMauro Carvalho Chehab
918*c33e97efSMauro Carvalho ChehabProvides information about distribution and utilization of memory.  This
919*c33e97efSMauro Carvalho Chehabvaries by architecture and compile options.  The following is from a
920*c33e97efSMauro Carvalho Chehab16GB PIII, which has highmem enabled.  You may not have all of these fields.
921*c33e97efSMauro Carvalho Chehab
922*c33e97efSMauro Carvalho Chehab::
923*c33e97efSMauro Carvalho Chehab
924*c33e97efSMauro Carvalho Chehab    > cat /proc/meminfo
925*c33e97efSMauro Carvalho Chehab
926*c33e97efSMauro Carvalho Chehab    MemTotal:     16344972 kB
927*c33e97efSMauro Carvalho Chehab    MemFree:      13634064 kB
928*c33e97efSMauro Carvalho Chehab    MemAvailable: 14836172 kB
929*c33e97efSMauro Carvalho Chehab    Buffers:          3656 kB
930*c33e97efSMauro Carvalho Chehab    Cached:        1195708 kB
931*c33e97efSMauro Carvalho Chehab    SwapCached:          0 kB
932*c33e97efSMauro Carvalho Chehab    Active:         891636 kB
933*c33e97efSMauro Carvalho Chehab    Inactive:      1077224 kB
934*c33e97efSMauro Carvalho Chehab    HighTotal:    15597528 kB
935*c33e97efSMauro Carvalho Chehab    HighFree:     13629632 kB
936*c33e97efSMauro Carvalho Chehab    LowTotal:       747444 kB
937*c33e97efSMauro Carvalho Chehab    LowFree:          4432 kB
938*c33e97efSMauro Carvalho Chehab    SwapTotal:           0 kB
939*c33e97efSMauro Carvalho Chehab    SwapFree:            0 kB
940*c33e97efSMauro Carvalho Chehab    Dirty:             968 kB
941*c33e97efSMauro Carvalho Chehab    Writeback:           0 kB
942*c33e97efSMauro Carvalho Chehab    AnonPages:      861800 kB
943*c33e97efSMauro Carvalho Chehab    Mapped:         280372 kB
944*c33e97efSMauro Carvalho Chehab    Shmem:             644 kB
945*c33e97efSMauro Carvalho Chehab    KReclaimable:   168048 kB
946*c33e97efSMauro Carvalho Chehab    Slab:           284364 kB
947*c33e97efSMauro Carvalho Chehab    SReclaimable:   159856 kB
948*c33e97efSMauro Carvalho Chehab    SUnreclaim:     124508 kB
949*c33e97efSMauro Carvalho Chehab    PageTables:      24448 kB
950*c33e97efSMauro Carvalho Chehab    NFS_Unstable:        0 kB
951*c33e97efSMauro Carvalho Chehab    Bounce:              0 kB
952*c33e97efSMauro Carvalho Chehab    WritebackTmp:        0 kB
953*c33e97efSMauro Carvalho Chehab    CommitLimit:   7669796 kB
954*c33e97efSMauro Carvalho Chehab    Committed_AS:   100056 kB
955*c33e97efSMauro Carvalho Chehab    VmallocTotal:   112216 kB
956*c33e97efSMauro Carvalho Chehab    VmallocUsed:       428 kB
957*c33e97efSMauro Carvalho Chehab    VmallocChunk:   111088 kB
958*c33e97efSMauro Carvalho Chehab    Percpu:          62080 kB
959*c33e97efSMauro Carvalho Chehab    HardwareCorrupted:   0 kB
960*c33e97efSMauro Carvalho Chehab    AnonHugePages:   49152 kB
961*c33e97efSMauro Carvalho Chehab    ShmemHugePages:      0 kB
962*c33e97efSMauro Carvalho Chehab    ShmemPmdMapped:      0 kB
963*c33e97efSMauro Carvalho Chehab
964*c33e97efSMauro Carvalho ChehabMemTotal
965*c33e97efSMauro Carvalho Chehab              Total usable ram (i.e. physical ram minus a few reserved
966*c33e97efSMauro Carvalho Chehab              bits and the kernel binary code)
967*c33e97efSMauro Carvalho ChehabMemFree
968*c33e97efSMauro Carvalho Chehab              The sum of LowFree+HighFree
969*c33e97efSMauro Carvalho ChehabMemAvailable
970*c33e97efSMauro Carvalho Chehab              An estimate of how much memory is available for starting new
971*c33e97efSMauro Carvalho Chehab              applications, without swapping. Calculated from MemFree,
972*c33e97efSMauro Carvalho Chehab              SReclaimable, the size of the file LRU lists, and the low
973*c33e97efSMauro Carvalho Chehab              watermarks in each zone.
974*c33e97efSMauro Carvalho Chehab              The estimate takes into account that the system needs some
975*c33e97efSMauro Carvalho Chehab              page cache to function well, and that not all reclaimable
976*c33e97efSMauro Carvalho Chehab              slab will be reclaimable, due to items being in use. The
977*c33e97efSMauro Carvalho Chehab              impact of those factors will vary from system to system.
978*c33e97efSMauro Carvalho ChehabBuffers
979*c33e97efSMauro Carvalho Chehab              Relatively temporary storage for raw disk blocks
980*c33e97efSMauro Carvalho Chehab              shouldn't get tremendously large (20MB or so)
981*c33e97efSMauro Carvalho ChehabCached
982*c33e97efSMauro Carvalho Chehab              in-memory cache for files read from the disk (the
983*c33e97efSMauro Carvalho Chehab              pagecache).  Doesn't include SwapCached
984*c33e97efSMauro Carvalho ChehabSwapCached
985*c33e97efSMauro Carvalho Chehab              Memory that once was swapped out, is swapped back in but
986*c33e97efSMauro Carvalho Chehab              still also is in the swapfile (if memory is needed it
987*c33e97efSMauro Carvalho Chehab              doesn't need to be swapped out AGAIN because it is already
988*c33e97efSMauro Carvalho Chehab              in the swapfile. This saves I/O)
989*c33e97efSMauro Carvalho ChehabActive
990*c33e97efSMauro Carvalho Chehab              Memory that has been used more recently and usually not
991*c33e97efSMauro Carvalho Chehab              reclaimed unless absolutely necessary.
992*c33e97efSMauro Carvalho ChehabInactive
993*c33e97efSMauro Carvalho Chehab              Memory which has been less recently used.  It is more
994*c33e97efSMauro Carvalho Chehab              eligible to be reclaimed for other purposes
995*c33e97efSMauro Carvalho ChehabHighTotal, HighFree
996*c33e97efSMauro Carvalho Chehab              Highmem is all memory above ~860MB of physical memory
997*c33e97efSMauro Carvalho Chehab              Highmem areas are for use by userspace programs, or
998*c33e97efSMauro Carvalho Chehab              for the pagecache.  The kernel must use tricks to access
999*c33e97efSMauro Carvalho Chehab              this memory, making it slower to access than lowmem.
1000*c33e97efSMauro Carvalho ChehabLowTotal, LowFree
1001*c33e97efSMauro Carvalho Chehab              Lowmem is memory which can be used for everything that
1002*c33e97efSMauro Carvalho Chehab              highmem can be used for, but it is also available for the
1003*c33e97efSMauro Carvalho Chehab              kernel's use for its own data structures.  Among many
1004*c33e97efSMauro Carvalho Chehab              other things, it is where everything from the Slab is
1005*c33e97efSMauro Carvalho Chehab              allocated.  Bad things happen when you're out of lowmem.
1006*c33e97efSMauro Carvalho ChehabSwapTotal
1007*c33e97efSMauro Carvalho Chehab              total amount of swap space available
1008*c33e97efSMauro Carvalho ChehabSwapFree
1009*c33e97efSMauro Carvalho Chehab              Memory which has been evicted from RAM, and is temporarily
1010*c33e97efSMauro Carvalho Chehab              on the disk
1011*c33e97efSMauro Carvalho ChehabDirty
1012*c33e97efSMauro Carvalho Chehab              Memory which is waiting to get written back to the disk
1013*c33e97efSMauro Carvalho ChehabWriteback
1014*c33e97efSMauro Carvalho Chehab              Memory which is actively being written back to the disk
1015*c33e97efSMauro Carvalho ChehabAnonPages
1016*c33e97efSMauro Carvalho Chehab              Non-file backed pages mapped into userspace page tables
1017*c33e97efSMauro Carvalho ChehabHardwareCorrupted
1018*c33e97efSMauro Carvalho Chehab              The amount of RAM/memory in KB, the kernel identifies as
1019*c33e97efSMauro Carvalho Chehab	      corrupted.
1020*c33e97efSMauro Carvalho ChehabAnonHugePages
1021*c33e97efSMauro Carvalho Chehab              Non-file backed huge pages mapped into userspace page tables
1022*c33e97efSMauro Carvalho ChehabMapped
1023*c33e97efSMauro Carvalho Chehab              files which have been mmaped, such as libraries
1024*c33e97efSMauro Carvalho ChehabShmem
1025*c33e97efSMauro Carvalho Chehab              Total memory used by shared memory (shmem) and tmpfs
1026*c33e97efSMauro Carvalho ChehabShmemHugePages
1027*c33e97efSMauro Carvalho Chehab              Memory used by shared memory (shmem) and tmpfs allocated
1028*c33e97efSMauro Carvalho Chehab              with huge pages
1029*c33e97efSMauro Carvalho ChehabShmemPmdMapped
1030*c33e97efSMauro Carvalho Chehab              Shared memory mapped into userspace with huge pages
1031*c33e97efSMauro Carvalho ChehabKReclaimable
1032*c33e97efSMauro Carvalho Chehab              Kernel allocations that the kernel will attempt to reclaim
1033*c33e97efSMauro Carvalho Chehab              under memory pressure. Includes SReclaimable (below), and other
1034*c33e97efSMauro Carvalho Chehab              direct allocations with a shrinker.
1035*c33e97efSMauro Carvalho ChehabSlab
1036*c33e97efSMauro Carvalho Chehab              in-kernel data structures cache
1037*c33e97efSMauro Carvalho ChehabSReclaimable
1038*c33e97efSMauro Carvalho Chehab              Part of Slab, that might be reclaimed, such as caches
1039*c33e97efSMauro Carvalho ChehabSUnreclaim
1040*c33e97efSMauro Carvalho Chehab              Part of Slab, that cannot be reclaimed on memory pressure
1041*c33e97efSMauro Carvalho ChehabPageTables
1042*c33e97efSMauro Carvalho Chehab              amount of memory dedicated to the lowest level of page
1043*c33e97efSMauro Carvalho Chehab              tables.
1044*c33e97efSMauro Carvalho ChehabNFS_Unstable
1045*c33e97efSMauro Carvalho Chehab              NFS pages sent to the server, but not yet committed to stable
1046*c33e97efSMauro Carvalho Chehab	      storage
1047*c33e97efSMauro Carvalho ChehabBounce
1048*c33e97efSMauro Carvalho Chehab              Memory used for block device "bounce buffers"
1049*c33e97efSMauro Carvalho ChehabWritebackTmp
1050*c33e97efSMauro Carvalho Chehab              Memory used by FUSE for temporary writeback buffers
1051*c33e97efSMauro Carvalho ChehabCommitLimit
1052*c33e97efSMauro Carvalho Chehab              Based on the overcommit ratio ('vm.overcommit_ratio'),
1053*c33e97efSMauro Carvalho Chehab              this is the total amount of  memory currently available to
1054*c33e97efSMauro Carvalho Chehab              be allocated on the system. This limit is only adhered to
1055*c33e97efSMauro Carvalho Chehab              if strict overcommit accounting is enabled (mode 2 in
1056*c33e97efSMauro Carvalho Chehab              'vm.overcommit_memory').
1057*c33e97efSMauro Carvalho Chehab
1058*c33e97efSMauro Carvalho Chehab              The CommitLimit is calculated with the following formula::
1059*c33e97efSMauro Carvalho Chehab
1060*c33e97efSMauro Carvalho Chehab                CommitLimit = ([total RAM pages] - [total huge TLB pages]) *
1061*c33e97efSMauro Carvalho Chehab                               overcommit_ratio / 100 + [total swap pages]
1062*c33e97efSMauro Carvalho Chehab
1063*c33e97efSMauro Carvalho Chehab              For example, on a system with 1G of physical RAM and 7G
1064*c33e97efSMauro Carvalho Chehab              of swap with a `vm.overcommit_ratio` of 30 it would
1065*c33e97efSMauro Carvalho Chehab              yield a CommitLimit of 7.3G.
1066*c33e97efSMauro Carvalho Chehab
1067*c33e97efSMauro Carvalho Chehab              For more details, see the memory overcommit documentation
1068*c33e97efSMauro Carvalho Chehab              in vm/overcommit-accounting.
1069*c33e97efSMauro Carvalho ChehabCommitted_AS
1070*c33e97efSMauro Carvalho Chehab              The amount of memory presently allocated on the system.
1071*c33e97efSMauro Carvalho Chehab              The committed memory is a sum of all of the memory which
1072*c33e97efSMauro Carvalho Chehab              has been allocated by processes, even if it has not been
1073*c33e97efSMauro Carvalho Chehab              "used" by them as of yet. A process which malloc()'s 1G
1074*c33e97efSMauro Carvalho Chehab              of memory, but only touches 300M of it will show up as
1075*c33e97efSMauro Carvalho Chehab	      using 1G. This 1G is memory which has been "committed" to
1076*c33e97efSMauro Carvalho Chehab              by the VM and can be used at any time by the allocating
1077*c33e97efSMauro Carvalho Chehab              application. With strict overcommit enabled on the system
1078*c33e97efSMauro Carvalho Chehab              (mode 2 in 'vm.overcommit_memory'),allocations which would
1079*c33e97efSMauro Carvalho Chehab              exceed the CommitLimit (detailed above) will not be permitted.
1080*c33e97efSMauro Carvalho Chehab              This is useful if one needs to guarantee that processes will
1081*c33e97efSMauro Carvalho Chehab              not fail due to lack of memory once that memory has been
1082*c33e97efSMauro Carvalho Chehab              successfully allocated.
1083*c33e97efSMauro Carvalho ChehabVmallocTotal
1084*c33e97efSMauro Carvalho Chehab              total size of vmalloc memory area
1085*c33e97efSMauro Carvalho ChehabVmallocUsed
1086*c33e97efSMauro Carvalho Chehab              amount of vmalloc area which is used
1087*c33e97efSMauro Carvalho ChehabVmallocChunk
1088*c33e97efSMauro Carvalho Chehab              largest contiguous block of vmalloc area which is free
1089*c33e97efSMauro Carvalho ChehabPercpu
1090*c33e97efSMauro Carvalho Chehab              Memory allocated to the percpu allocator used to back percpu
1091*c33e97efSMauro Carvalho Chehab              allocations. This stat excludes the cost of metadata.
1092*c33e97efSMauro Carvalho Chehab
1093*c33e97efSMauro Carvalho Chehabvmallocinfo
1094*c33e97efSMauro Carvalho Chehab~~~~~~~~~~~
1095*c33e97efSMauro Carvalho Chehab
1096*c33e97efSMauro Carvalho ChehabProvides information about vmalloced/vmaped areas. One line per area,
1097*c33e97efSMauro Carvalho Chehabcontaining the virtual address range of the area, size in bytes,
1098*c33e97efSMauro Carvalho Chehabcaller information of the creator, and optional information depending
1099*c33e97efSMauro Carvalho Chehabon the kind of area :
1100*c33e97efSMauro Carvalho Chehab
1101*c33e97efSMauro Carvalho Chehab ==========  ===================================================
1102*c33e97efSMauro Carvalho Chehab pages=nr    number of pages
1103*c33e97efSMauro Carvalho Chehab phys=addr   if a physical address was specified
1104*c33e97efSMauro Carvalho Chehab ioremap     I/O mapping (ioremap() and friends)
1105*c33e97efSMauro Carvalho Chehab vmalloc     vmalloc() area
1106*c33e97efSMauro Carvalho Chehab vmap        vmap()ed pages
1107*c33e97efSMauro Carvalho Chehab user        VM_USERMAP area
1108*c33e97efSMauro Carvalho Chehab vpages      buffer for pages pointers was vmalloced (huge area)
1109*c33e97efSMauro Carvalho Chehab N<node>=nr  (Only on NUMA kernels)
1110*c33e97efSMauro Carvalho Chehab             Number of pages allocated on memory node <node>
1111*c33e97efSMauro Carvalho Chehab ==========  ===================================================
1112*c33e97efSMauro Carvalho Chehab
1113*c33e97efSMauro Carvalho Chehab::
1114*c33e97efSMauro Carvalho Chehab
1115*c33e97efSMauro Carvalho Chehab    > cat /proc/vmallocinfo
1116*c33e97efSMauro Carvalho Chehab    0xffffc20000000000-0xffffc20000201000 2101248 alloc_large_system_hash+0x204 ...
1117*c33e97efSMauro Carvalho Chehab    /0x2c0 pages=512 vmalloc N0=128 N1=128 N2=128 N3=128
1118*c33e97efSMauro Carvalho Chehab    0xffffc20000201000-0xffffc20000302000 1052672 alloc_large_system_hash+0x204 ...
1119*c33e97efSMauro Carvalho Chehab    /0x2c0 pages=256 vmalloc N0=64 N1=64 N2=64 N3=64
1120*c33e97efSMauro Carvalho Chehab    0xffffc20000302000-0xffffc20000304000    8192 acpi_tb_verify_table+0x21/0x4f...
1121*c33e97efSMauro Carvalho Chehab    phys=7fee8000 ioremap
1122*c33e97efSMauro Carvalho Chehab    0xffffc20000304000-0xffffc20000307000   12288 acpi_tb_verify_table+0x21/0x4f...
1123*c33e97efSMauro Carvalho Chehab    phys=7fee7000 ioremap
1124*c33e97efSMauro Carvalho Chehab    0xffffc2000031d000-0xffffc2000031f000    8192 init_vdso_vars+0x112/0x210
1125*c33e97efSMauro Carvalho Chehab    0xffffc2000031f000-0xffffc2000032b000   49152 cramfs_uncompress_init+0x2e ...
1126*c33e97efSMauro Carvalho Chehab    /0x80 pages=11 vmalloc N0=3 N1=3 N2=2 N3=3
1127*c33e97efSMauro Carvalho Chehab    0xffffc2000033a000-0xffffc2000033d000   12288 sys_swapon+0x640/0xac0      ...
1128*c33e97efSMauro Carvalho Chehab    pages=2 vmalloc N1=2
1129*c33e97efSMauro Carvalho Chehab    0xffffc20000347000-0xffffc2000034c000   20480 xt_alloc_table_info+0xfe ...
1130*c33e97efSMauro Carvalho Chehab    /0x130 [x_tables] pages=4 vmalloc N0=4
1131*c33e97efSMauro Carvalho Chehab    0xffffffffa0000000-0xffffffffa000f000   61440 sys_init_module+0xc27/0x1d00 ...
1132*c33e97efSMauro Carvalho Chehab    pages=14 vmalloc N2=14
1133*c33e97efSMauro Carvalho Chehab    0xffffffffa000f000-0xffffffffa0014000   20480 sys_init_module+0xc27/0x1d00 ...
1134*c33e97efSMauro Carvalho Chehab    pages=4 vmalloc N1=4
1135*c33e97efSMauro Carvalho Chehab    0xffffffffa0014000-0xffffffffa0017000   12288 sys_init_module+0xc27/0x1d00 ...
1136*c33e97efSMauro Carvalho Chehab    pages=2 vmalloc N1=2
1137*c33e97efSMauro Carvalho Chehab    0xffffffffa0017000-0xffffffffa0022000   45056 sys_init_module+0xc27/0x1d00 ...
1138*c33e97efSMauro Carvalho Chehab    pages=10 vmalloc N0=10
1139*c33e97efSMauro Carvalho Chehab
1140*c33e97efSMauro Carvalho Chehab
1141*c33e97efSMauro Carvalho Chehabsoftirqs
1142*c33e97efSMauro Carvalho Chehab~~~~~~~~
1143*c33e97efSMauro Carvalho Chehab
1144*c33e97efSMauro Carvalho ChehabProvides counts of softirq handlers serviced since boot time, for each cpu.
1145*c33e97efSMauro Carvalho Chehab
1146*c33e97efSMauro Carvalho Chehab::
1147*c33e97efSMauro Carvalho Chehab
1148*c33e97efSMauro Carvalho Chehab    > cat /proc/softirqs
1149*c33e97efSMauro Carvalho Chehab		    CPU0       CPU1       CPU2       CPU3
1150*c33e97efSMauro Carvalho Chehab	HI:          0          0          0          0
1151*c33e97efSMauro Carvalho Chehab    TIMER:      27166      27120      27097      27034
1152*c33e97efSMauro Carvalho Chehab    NET_TX:          0          0          0         17
1153*c33e97efSMauro Carvalho Chehab    NET_RX:         42          0          0         39
1154*c33e97efSMauro Carvalho Chehab    BLOCK:          0          0        107       1121
1155*c33e97efSMauro Carvalho Chehab    TASKLET:          0          0          0        290
1156*c33e97efSMauro Carvalho Chehab    SCHED:      27035      26983      26971      26746
1157*c33e97efSMauro Carvalho Chehab    HRTIMER:          0          0          0          0
1158*c33e97efSMauro Carvalho Chehab	RCU:       1678       1769       2178       2250
1159*c33e97efSMauro Carvalho Chehab
1160*c33e97efSMauro Carvalho Chehab
1161*c33e97efSMauro Carvalho Chehab1.3 IDE devices in /proc/ide
1162*c33e97efSMauro Carvalho Chehab----------------------------
1163*c33e97efSMauro Carvalho Chehab
1164*c33e97efSMauro Carvalho ChehabThe subdirectory /proc/ide contains information about all IDE devices of which
1165*c33e97efSMauro Carvalho Chehabthe kernel  is  aware.  There is one subdirectory for each IDE controller, the
1166*c33e97efSMauro Carvalho Chehabfile drivers  and a link for each IDE device, pointing to the device directory
1167*c33e97efSMauro Carvalho Chehabin the controller specific subtree.
1168*c33e97efSMauro Carvalho Chehab
1169*c33e97efSMauro Carvalho ChehabThe file  drivers  contains general information about the drivers used for the
1170*c33e97efSMauro Carvalho ChehabIDE devices::
1171*c33e97efSMauro Carvalho Chehab
1172*c33e97efSMauro Carvalho Chehab  > cat /proc/ide/drivers
1173*c33e97efSMauro Carvalho Chehab  ide-cdrom version 4.53
1174*c33e97efSMauro Carvalho Chehab  ide-disk version 1.08
1175*c33e97efSMauro Carvalho Chehab
1176*c33e97efSMauro Carvalho ChehabMore detailed  information  can  be  found  in  the  controller  specific
1177*c33e97efSMauro Carvalho Chehabsubdirectories. These  are  named  ide0,  ide1  and  so  on.  Each  of  these
1178*c33e97efSMauro Carvalho Chehabdirectories contains the files shown in table 1-6.
1179*c33e97efSMauro Carvalho Chehab
1180*c33e97efSMauro Carvalho Chehab
1181*c33e97efSMauro Carvalho Chehab.. table:: Table 1-6: IDE controller info in  /proc/ide/ide?
1182*c33e97efSMauro Carvalho Chehab
1183*c33e97efSMauro Carvalho Chehab ======= =======================================
1184*c33e97efSMauro Carvalho Chehab File    Content
1185*c33e97efSMauro Carvalho Chehab ======= =======================================
1186*c33e97efSMauro Carvalho Chehab channel IDE channel (0 or 1)
1187*c33e97efSMauro Carvalho Chehab config  Configuration (only for PCI/IDE bridge)
1188*c33e97efSMauro Carvalho Chehab mate    Mate name
1189*c33e97efSMauro Carvalho Chehab model   Type/Chipset of IDE controller
1190*c33e97efSMauro Carvalho Chehab ======= =======================================
1191*c33e97efSMauro Carvalho Chehab
1192*c33e97efSMauro Carvalho ChehabEach device  connected  to  a  controller  has  a separate subdirectory in the
1193*c33e97efSMauro Carvalho Chehabcontrollers directory.  The  files  listed in table 1-7 are contained in these
1194*c33e97efSMauro Carvalho Chehabdirectories.
1195*c33e97efSMauro Carvalho Chehab
1196*c33e97efSMauro Carvalho Chehab
1197*c33e97efSMauro Carvalho Chehab.. table:: Table 1-7: IDE device information
1198*c33e97efSMauro Carvalho Chehab
1199*c33e97efSMauro Carvalho Chehab ================ ==========================================
1200*c33e97efSMauro Carvalho Chehab File             Content
1201*c33e97efSMauro Carvalho Chehab ================ ==========================================
1202*c33e97efSMauro Carvalho Chehab cache            The cache
1203*c33e97efSMauro Carvalho Chehab capacity         Capacity of the medium (in 512Byte blocks)
1204*c33e97efSMauro Carvalho Chehab driver           driver and version
1205*c33e97efSMauro Carvalho Chehab geometry         physical and logical geometry
1206*c33e97efSMauro Carvalho Chehab identify         device identify block
1207*c33e97efSMauro Carvalho Chehab media            media type
1208*c33e97efSMauro Carvalho Chehab model            device identifier
1209*c33e97efSMauro Carvalho Chehab settings         device setup
1210*c33e97efSMauro Carvalho Chehab smart_thresholds IDE disk management thresholds
1211*c33e97efSMauro Carvalho Chehab smart_values     IDE disk management values
1212*c33e97efSMauro Carvalho Chehab ================ ==========================================
1213*c33e97efSMauro Carvalho Chehab
1214*c33e97efSMauro Carvalho ChehabThe most  interesting  file is ``settings``. This file contains a nice
1215*c33e97efSMauro Carvalho Chehaboverview of the drive parameters::
1216*c33e97efSMauro Carvalho Chehab
1217*c33e97efSMauro Carvalho Chehab  # cat /proc/ide/ide0/hda/settings
1218*c33e97efSMauro Carvalho Chehab  name                    value           min             max             mode
1219*c33e97efSMauro Carvalho Chehab  ----                    -----           ---             ---             ----
1220*c33e97efSMauro Carvalho Chehab  bios_cyl                526             0               65535           rw
1221*c33e97efSMauro Carvalho Chehab  bios_head               255             0               255             rw
1222*c33e97efSMauro Carvalho Chehab  bios_sect               63              0               63              rw
1223*c33e97efSMauro Carvalho Chehab  breada_readahead        4               0               127             rw
1224*c33e97efSMauro Carvalho Chehab  bswap                   0               0               1               r
1225*c33e97efSMauro Carvalho Chehab  file_readahead          72              0               2097151         rw
1226*c33e97efSMauro Carvalho Chehab  io_32bit                0               0               3               rw
1227*c33e97efSMauro Carvalho Chehab  keepsettings            0               0               1               rw
1228*c33e97efSMauro Carvalho Chehab  max_kb_per_request      122             1               127             rw
1229*c33e97efSMauro Carvalho Chehab  multcount               0               0               8               rw
1230*c33e97efSMauro Carvalho Chehab  nice1                   1               0               1               rw
1231*c33e97efSMauro Carvalho Chehab  nowerr                  0               0               1               rw
1232*c33e97efSMauro Carvalho Chehab  pio_mode                write-only      0               255             w
1233*c33e97efSMauro Carvalho Chehab  slow                    0               0               1               rw
1234*c33e97efSMauro Carvalho Chehab  unmaskirq               0               0               1               rw
1235*c33e97efSMauro Carvalho Chehab  using_dma               0               0               1               rw
1236*c33e97efSMauro Carvalho Chehab
1237*c33e97efSMauro Carvalho Chehab
1238*c33e97efSMauro Carvalho Chehab1.4 Networking info in /proc/net
1239*c33e97efSMauro Carvalho Chehab--------------------------------
1240*c33e97efSMauro Carvalho Chehab
1241*c33e97efSMauro Carvalho ChehabThe subdirectory  /proc/net  follows  the  usual  pattern. Table 1-8 shows the
1242*c33e97efSMauro Carvalho Chehabadditional values  you  get  for  IP  version 6 if you configure the kernel to
1243*c33e97efSMauro Carvalho Chehabsupport this. Table 1-9 lists the files and their meaning.
1244*c33e97efSMauro Carvalho Chehab
1245*c33e97efSMauro Carvalho Chehab
1246*c33e97efSMauro Carvalho Chehab.. table:: Table 1-8: IPv6 info in /proc/net
1247*c33e97efSMauro Carvalho Chehab
1248*c33e97efSMauro Carvalho Chehab ========== =====================================================
1249*c33e97efSMauro Carvalho Chehab File       Content
1250*c33e97efSMauro Carvalho Chehab ========== =====================================================
1251*c33e97efSMauro Carvalho Chehab udp6       UDP sockets (IPv6)
1252*c33e97efSMauro Carvalho Chehab tcp6       TCP sockets (IPv6)
1253*c33e97efSMauro Carvalho Chehab raw6       Raw device statistics (IPv6)
1254*c33e97efSMauro Carvalho Chehab igmp6      IP multicast addresses, which this host joined (IPv6)
1255*c33e97efSMauro Carvalho Chehab if_inet6   List of IPv6 interface addresses
1256*c33e97efSMauro Carvalho Chehab ipv6_route Kernel routing table for IPv6
1257*c33e97efSMauro Carvalho Chehab rt6_stats  Global IPv6 routing tables statistics
1258*c33e97efSMauro Carvalho Chehab sockstat6  Socket statistics (IPv6)
1259*c33e97efSMauro Carvalho Chehab snmp6      Snmp data (IPv6)
1260*c33e97efSMauro Carvalho Chehab ========== =====================================================
1261*c33e97efSMauro Carvalho Chehab
1262*c33e97efSMauro Carvalho Chehab.. table:: Table 1-9: Network info in /proc/net
1263*c33e97efSMauro Carvalho Chehab
1264*c33e97efSMauro Carvalho Chehab ============= ================================================================
1265*c33e97efSMauro Carvalho Chehab File          Content
1266*c33e97efSMauro Carvalho Chehab ============= ================================================================
1267*c33e97efSMauro Carvalho Chehab arp           Kernel  ARP table
1268*c33e97efSMauro Carvalho Chehab dev           network devices with statistics
1269*c33e97efSMauro Carvalho Chehab dev_mcast     the Layer2 multicast groups a device is listening too
1270*c33e97efSMauro Carvalho Chehab               (interface index, label, number of references, number of bound
1271*c33e97efSMauro Carvalho Chehab               addresses).
1272*c33e97efSMauro Carvalho Chehab dev_stat      network device status
1273*c33e97efSMauro Carvalho Chehab ip_fwchains   Firewall chain linkage
1274*c33e97efSMauro Carvalho Chehab ip_fwnames    Firewall chain names
1275*c33e97efSMauro Carvalho Chehab ip_masq       Directory containing the masquerading tables
1276*c33e97efSMauro Carvalho Chehab ip_masquerade Major masquerading table
1277*c33e97efSMauro Carvalho Chehab netstat       Network statistics
1278*c33e97efSMauro Carvalho Chehab raw           raw device statistics
1279*c33e97efSMauro Carvalho Chehab route         Kernel routing table
1280*c33e97efSMauro Carvalho Chehab rpc           Directory containing rpc info
1281*c33e97efSMauro Carvalho Chehab rt_cache      Routing cache
1282*c33e97efSMauro Carvalho Chehab snmp          SNMP data
1283*c33e97efSMauro Carvalho Chehab sockstat      Socket statistics
1284*c33e97efSMauro Carvalho Chehab tcp           TCP  sockets
1285*c33e97efSMauro Carvalho Chehab udp           UDP sockets
1286*c33e97efSMauro Carvalho Chehab unix          UNIX domain sockets
1287*c33e97efSMauro Carvalho Chehab wireless      Wireless interface data (Wavelan etc)
1288*c33e97efSMauro Carvalho Chehab igmp          IP multicast addresses, which this host joined
1289*c33e97efSMauro Carvalho Chehab psched        Global packet scheduler parameters.
1290*c33e97efSMauro Carvalho Chehab netlink       List of PF_NETLINK sockets
1291*c33e97efSMauro Carvalho Chehab ip_mr_vifs    List of multicast virtual interfaces
1292*c33e97efSMauro Carvalho Chehab ip_mr_cache   List of multicast routing cache
1293*c33e97efSMauro Carvalho Chehab ============= ================================================================
1294*c33e97efSMauro Carvalho Chehab
1295*c33e97efSMauro Carvalho ChehabYou can  use  this  information  to see which network devices are available in
1296*c33e97efSMauro Carvalho Chehabyour system and how much traffic was routed over those devices::
1297*c33e97efSMauro Carvalho Chehab
1298*c33e97efSMauro Carvalho Chehab  > cat /proc/net/dev
1299*c33e97efSMauro Carvalho Chehab  Inter-|Receive                                                   |[...
1300*c33e97efSMauro Carvalho Chehab   face |bytes    packets errs drop fifo frame compressed multicast|[...
1301*c33e97efSMauro Carvalho Chehab      lo:  908188   5596     0    0    0     0          0         0 [...
1302*c33e97efSMauro Carvalho Chehab    ppp0:15475140  20721   410    0    0   410          0         0 [...
1303*c33e97efSMauro Carvalho Chehab    eth0:  614530   7085     0    0    0     0          0         1 [...
1304*c33e97efSMauro Carvalho Chehab
1305*c33e97efSMauro Carvalho Chehab  ...] Transmit
1306*c33e97efSMauro Carvalho Chehab  ...] bytes    packets errs drop fifo colls carrier compressed
1307*c33e97efSMauro Carvalho Chehab  ...]  908188     5596    0    0    0     0       0          0
1308*c33e97efSMauro Carvalho Chehab  ...] 1375103    17405    0    0    0     0       0          0
1309*c33e97efSMauro Carvalho Chehab  ...] 1703981     5535    0    0    0     3       0          0
1310*c33e97efSMauro Carvalho Chehab
1311*c33e97efSMauro Carvalho ChehabIn addition, each Channel Bond interface has its own directory.  For
1312*c33e97efSMauro Carvalho Chehabexample, the bond0 device will have a directory called /proc/net/bond0/.
1313*c33e97efSMauro Carvalho ChehabIt will contain information that is specific to that bond, such as the
1314*c33e97efSMauro Carvalho Chehabcurrent slaves of the bond, the link status of the slaves, and how
1315*c33e97efSMauro Carvalho Chehabmany times the slaves link has failed.
1316*c33e97efSMauro Carvalho Chehab
1317*c33e97efSMauro Carvalho Chehab1.5 SCSI info
1318*c33e97efSMauro Carvalho Chehab-------------
1319*c33e97efSMauro Carvalho Chehab
1320*c33e97efSMauro Carvalho ChehabIf you  have  a  SCSI  host adapter in your system, you'll find a subdirectory
1321*c33e97efSMauro Carvalho Chehabnamed after  the driver for this adapter in /proc/scsi. You'll also see a list
1322*c33e97efSMauro Carvalho Chehabof all recognized SCSI devices in /proc/scsi::
1323*c33e97efSMauro Carvalho Chehab
1324*c33e97efSMauro Carvalho Chehab  >cat /proc/scsi/scsi
1325*c33e97efSMauro Carvalho Chehab  Attached devices:
1326*c33e97efSMauro Carvalho Chehab  Host: scsi0 Channel: 00 Id: 00 Lun: 00
1327*c33e97efSMauro Carvalho Chehab    Vendor: IBM      Model: DGHS09U          Rev: 03E0
1328*c33e97efSMauro Carvalho Chehab    Type:   Direct-Access                    ANSI SCSI revision: 03
1329*c33e97efSMauro Carvalho Chehab  Host: scsi0 Channel: 00 Id: 06 Lun: 00
1330*c33e97efSMauro Carvalho Chehab    Vendor: PIONEER  Model: CD-ROM DR-U06S   Rev: 1.04
1331*c33e97efSMauro Carvalho Chehab    Type:   CD-ROM                           ANSI SCSI revision: 02
1332*c33e97efSMauro Carvalho Chehab
1333*c33e97efSMauro Carvalho Chehab
1334*c33e97efSMauro Carvalho ChehabThe directory  named  after  the driver has one file for each adapter found in
1335*c33e97efSMauro Carvalho Chehabthe system.  These  files  contain information about the controller, including
1336*c33e97efSMauro Carvalho Chehabthe used  IRQ  and  the  IO  address range. The amount of information shown is
1337*c33e97efSMauro Carvalho Chehabdependent on  the adapter you use. The example shows the output for an Adaptec
1338*c33e97efSMauro Carvalho ChehabAHA-2940 SCSI adapter::
1339*c33e97efSMauro Carvalho Chehab
1340*c33e97efSMauro Carvalho Chehab  > cat /proc/scsi/aic7xxx/0
1341*c33e97efSMauro Carvalho Chehab
1342*c33e97efSMauro Carvalho Chehab  Adaptec AIC7xxx driver version: 5.1.19/3.2.4
1343*c33e97efSMauro Carvalho Chehab  Compile Options:
1344*c33e97efSMauro Carvalho Chehab    TCQ Enabled By Default : Disabled
1345*c33e97efSMauro Carvalho Chehab    AIC7XXX_PROC_STATS     : Disabled
1346*c33e97efSMauro Carvalho Chehab    AIC7XXX_RESET_DELAY    : 5
1347*c33e97efSMauro Carvalho Chehab  Adapter Configuration:
1348*c33e97efSMauro Carvalho Chehab             SCSI Adapter: Adaptec AHA-294X Ultra SCSI host adapter
1349*c33e97efSMauro Carvalho Chehab                             Ultra Wide Controller
1350*c33e97efSMauro Carvalho Chehab      PCI MMAPed I/O Base: 0xeb001000
1351*c33e97efSMauro Carvalho Chehab   Adapter SEEPROM Config: SEEPROM found and used.
1352*c33e97efSMauro Carvalho Chehab        Adaptec SCSI BIOS: Enabled
1353*c33e97efSMauro Carvalho Chehab                      IRQ: 10
1354*c33e97efSMauro Carvalho Chehab                     SCBs: Active 0, Max Active 2,
1355*c33e97efSMauro Carvalho Chehab                           Allocated 15, HW 16, Page 255
1356*c33e97efSMauro Carvalho Chehab               Interrupts: 160328
1357*c33e97efSMauro Carvalho Chehab        BIOS Control Word: 0x18b6
1358*c33e97efSMauro Carvalho Chehab     Adapter Control Word: 0x005b
1359*c33e97efSMauro Carvalho Chehab     Extended Translation: Enabled
1360*c33e97efSMauro Carvalho Chehab  Disconnect Enable Flags: 0xffff
1361*c33e97efSMauro Carvalho Chehab       Ultra Enable Flags: 0x0001
1362*c33e97efSMauro Carvalho Chehab   Tag Queue Enable Flags: 0x0000
1363*c33e97efSMauro Carvalho Chehab  Ordered Queue Tag Flags: 0x0000
1364*c33e97efSMauro Carvalho Chehab  Default Tag Queue Depth: 8
1365*c33e97efSMauro Carvalho Chehab      Tagged Queue By Device array for aic7xxx host instance 0:
1366*c33e97efSMauro Carvalho Chehab        {255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255}
1367*c33e97efSMauro Carvalho Chehab      Actual queue depth per device for aic7xxx host instance 0:
1368*c33e97efSMauro Carvalho Chehab        {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
1369*c33e97efSMauro Carvalho Chehab  Statistics:
1370*c33e97efSMauro Carvalho Chehab  (scsi0:0:0:0)
1371*c33e97efSMauro Carvalho Chehab    Device using Wide/Sync transfers at 40.0 MByte/sec, offset 8
1372*c33e97efSMauro Carvalho Chehab    Transinfo settings: current(12/8/1/0), goal(12/8/1/0), user(12/15/1/0)
1373*c33e97efSMauro Carvalho Chehab    Total transfers 160151 (74577 reads and 85574 writes)
1374*c33e97efSMauro Carvalho Chehab  (scsi0:0:6:0)
1375*c33e97efSMauro Carvalho Chehab    Device using Narrow/Sync transfers at 5.0 MByte/sec, offset 15
1376*c33e97efSMauro Carvalho Chehab    Transinfo settings: current(50/15/0/0), goal(50/15/0/0), user(50/15/0/0)
1377*c33e97efSMauro Carvalho Chehab    Total transfers 0 (0 reads and 0 writes)
1378*c33e97efSMauro Carvalho Chehab
1379*c33e97efSMauro Carvalho Chehab
1380*c33e97efSMauro Carvalho Chehab1.6 Parallel port info in /proc/parport
1381*c33e97efSMauro Carvalho Chehab---------------------------------------
1382*c33e97efSMauro Carvalho Chehab
1383*c33e97efSMauro Carvalho ChehabThe directory  /proc/parport  contains information about the parallel ports of
1384*c33e97efSMauro Carvalho Chehabyour system.  It  has  one  subdirectory  for  each port, named after the port
1385*c33e97efSMauro Carvalho Chehabnumber (0,1,2,...).
1386*c33e97efSMauro Carvalho Chehab
1387*c33e97efSMauro Carvalho ChehabThese directories contain the four files shown in Table 1-10.
1388*c33e97efSMauro Carvalho Chehab
1389*c33e97efSMauro Carvalho Chehab
1390*c33e97efSMauro Carvalho Chehab.. table:: Table 1-10: Files in /proc/parport
1391*c33e97efSMauro Carvalho Chehab
1392*c33e97efSMauro Carvalho Chehab ========= ====================================================================
1393*c33e97efSMauro Carvalho Chehab File      Content
1394*c33e97efSMauro Carvalho Chehab ========= ====================================================================
1395*c33e97efSMauro Carvalho Chehab autoprobe Any IEEE-1284 device ID information that has been acquired.
1396*c33e97efSMauro Carvalho Chehab devices   list of the device drivers using that port. A + will appear by the
1397*c33e97efSMauro Carvalho Chehab           name of the device currently using the port (it might not appear
1398*c33e97efSMauro Carvalho Chehab           against any).
1399*c33e97efSMauro Carvalho Chehab hardware  Parallel port's base address, IRQ line and DMA channel.
1400*c33e97efSMauro Carvalho Chehab irq       IRQ that parport is using for that port. This is in a separate
1401*c33e97efSMauro Carvalho Chehab           file to allow you to alter it by writing a new value in (IRQ
1402*c33e97efSMauro Carvalho Chehab           number or none).
1403*c33e97efSMauro Carvalho Chehab ========= ====================================================================
1404*c33e97efSMauro Carvalho Chehab
1405*c33e97efSMauro Carvalho Chehab1.7 TTY info in /proc/tty
1406*c33e97efSMauro Carvalho Chehab-------------------------
1407*c33e97efSMauro Carvalho Chehab
1408*c33e97efSMauro Carvalho ChehabInformation about  the  available  and actually used tty's can be found in the
1409*c33e97efSMauro Carvalho Chehabdirectory /proc/tty.You'll  find  entries  for drivers and line disciplines in
1410*c33e97efSMauro Carvalho Chehabthis directory, as shown in Table 1-11.
1411*c33e97efSMauro Carvalho Chehab
1412*c33e97efSMauro Carvalho Chehab
1413*c33e97efSMauro Carvalho Chehab.. table:: Table 1-11: Files in /proc/tty
1414*c33e97efSMauro Carvalho Chehab
1415*c33e97efSMauro Carvalho Chehab ============= ==============================================
1416*c33e97efSMauro Carvalho Chehab File          Content
1417*c33e97efSMauro Carvalho Chehab ============= ==============================================
1418*c33e97efSMauro Carvalho Chehab drivers       list of drivers and their usage
1419*c33e97efSMauro Carvalho Chehab ldiscs        registered line disciplines
1420*c33e97efSMauro Carvalho Chehab driver/serial usage statistic and status of single tty lines
1421*c33e97efSMauro Carvalho Chehab ============= ==============================================
1422*c33e97efSMauro Carvalho Chehab
1423*c33e97efSMauro Carvalho ChehabTo see  which  tty's  are  currently in use, you can simply look into the file
1424*c33e97efSMauro Carvalho Chehab/proc/tty/drivers::
1425*c33e97efSMauro Carvalho Chehab
1426*c33e97efSMauro Carvalho Chehab  > cat /proc/tty/drivers
1427*c33e97efSMauro Carvalho Chehab  pty_slave            /dev/pts      136   0-255 pty:slave
1428*c33e97efSMauro Carvalho Chehab  pty_master           /dev/ptm      128   0-255 pty:master
1429*c33e97efSMauro Carvalho Chehab  pty_slave            /dev/ttyp       3   0-255 pty:slave
1430*c33e97efSMauro Carvalho Chehab  pty_master           /dev/pty        2   0-255 pty:master
1431*c33e97efSMauro Carvalho Chehab  serial               /dev/cua        5   64-67 serial:callout
1432*c33e97efSMauro Carvalho Chehab  serial               /dev/ttyS       4   64-67 serial
1433*c33e97efSMauro Carvalho Chehab  /dev/tty0            /dev/tty0       4       0 system:vtmaster
1434*c33e97efSMauro Carvalho Chehab  /dev/ptmx            /dev/ptmx       5       2 system
1435*c33e97efSMauro Carvalho Chehab  /dev/console         /dev/console    5       1 system:console
1436*c33e97efSMauro Carvalho Chehab  /dev/tty             /dev/tty        5       0 system:/dev/tty
1437*c33e97efSMauro Carvalho Chehab  unknown              /dev/tty        4    1-63 console
1438*c33e97efSMauro Carvalho Chehab
1439*c33e97efSMauro Carvalho Chehab
1440*c33e97efSMauro Carvalho Chehab1.8 Miscellaneous kernel statistics in /proc/stat
1441*c33e97efSMauro Carvalho Chehab-------------------------------------------------
1442*c33e97efSMauro Carvalho Chehab
1443*c33e97efSMauro Carvalho ChehabVarious pieces   of  information about  kernel activity  are  available in the
1444*c33e97efSMauro Carvalho Chehab/proc/stat file.  All  of  the numbers reported  in  this file are  aggregates
1445*c33e97efSMauro Carvalho Chehabsince the system first booted.  For a quick look, simply cat the file::
1446*c33e97efSMauro Carvalho Chehab
1447*c33e97efSMauro Carvalho Chehab  > cat /proc/stat
1448*c33e97efSMauro Carvalho Chehab  cpu  2255 34 2290 22625563 6290 127 456 0 0 0
1449*c33e97efSMauro Carvalho Chehab  cpu0 1132 34 1441 11311718 3675 127 438 0 0 0
1450*c33e97efSMauro Carvalho Chehab  cpu1 1123 0 849 11313845 2614 0 18 0 0 0
1451*c33e97efSMauro Carvalho Chehab  intr 114930548 113199788 3 0 5 263 0 4 [... lots more numbers ...]
1452*c33e97efSMauro Carvalho Chehab  ctxt 1990473
1453*c33e97efSMauro Carvalho Chehab  btime 1062191376
1454*c33e97efSMauro Carvalho Chehab  processes 2915
1455*c33e97efSMauro Carvalho Chehab  procs_running 1
1456*c33e97efSMauro Carvalho Chehab  procs_blocked 0
1457*c33e97efSMauro Carvalho Chehab  softirq 183433 0 21755 12 39 1137 231 21459 2263
1458*c33e97efSMauro Carvalho Chehab
1459*c33e97efSMauro Carvalho ChehabThe very first  "cpu" line aggregates the  numbers in all  of the other "cpuN"
1460*c33e97efSMauro Carvalho Chehablines.  These numbers identify the amount of time the CPU has spent performing
1461*c33e97efSMauro Carvalho Chehabdifferent kinds of work.  Time units are in USER_HZ (typically hundredths of a
1462*c33e97efSMauro Carvalho Chehabsecond).  The meanings of the columns are as follows, from left to right:
1463*c33e97efSMauro Carvalho Chehab
1464*c33e97efSMauro Carvalho Chehab- user: normal processes executing in user mode
1465*c33e97efSMauro Carvalho Chehab- nice: niced processes executing in user mode
1466*c33e97efSMauro Carvalho Chehab- system: processes executing in kernel mode
1467*c33e97efSMauro Carvalho Chehab- idle: twiddling thumbs
1468*c33e97efSMauro Carvalho Chehab- iowait: In a word, iowait stands for waiting for I/O to complete. But there
1469*c33e97efSMauro Carvalho Chehab  are several problems:
1470*c33e97efSMauro Carvalho Chehab
1471*c33e97efSMauro Carvalho Chehab  1. Cpu will not wait for I/O to complete, iowait is the time that a task is
1472*c33e97efSMauro Carvalho Chehab     waiting for I/O to complete. When cpu goes into idle state for
1473*c33e97efSMauro Carvalho Chehab     outstanding task io, another task will be scheduled on this CPU.
1474*c33e97efSMauro Carvalho Chehab  2. In a multi-core CPU, the task waiting for I/O to complete is not running
1475*c33e97efSMauro Carvalho Chehab     on any CPU, so the iowait of each CPU is difficult to calculate.
1476*c33e97efSMauro Carvalho Chehab  3. The value of iowait field in /proc/stat will decrease in certain
1477*c33e97efSMauro Carvalho Chehab     conditions.
1478*c33e97efSMauro Carvalho Chehab
1479*c33e97efSMauro Carvalho Chehab  So, the iowait is not reliable by reading from /proc/stat.
1480*c33e97efSMauro Carvalho Chehab- irq: servicing interrupts
1481*c33e97efSMauro Carvalho Chehab- softirq: servicing softirqs
1482*c33e97efSMauro Carvalho Chehab- steal: involuntary wait
1483*c33e97efSMauro Carvalho Chehab- guest: running a normal guest
1484*c33e97efSMauro Carvalho Chehab- guest_nice: running a niced guest
1485*c33e97efSMauro Carvalho Chehab
1486*c33e97efSMauro Carvalho ChehabThe "intr" line gives counts of interrupts  serviced since boot time, for each
1487*c33e97efSMauro Carvalho Chehabof the  possible system interrupts.   The first  column  is the  total of  all
1488*c33e97efSMauro Carvalho Chehabinterrupts serviced  including  unnumbered  architecture specific  interrupts;
1489*c33e97efSMauro Carvalho Chehabeach  subsequent column is the  total for that particular numbered interrupt.
1490*c33e97efSMauro Carvalho ChehabUnnumbered interrupts are not shown, only summed into the total.
1491*c33e97efSMauro Carvalho Chehab
1492*c33e97efSMauro Carvalho ChehabThe "ctxt" line gives the total number of context switches across all CPUs.
1493*c33e97efSMauro Carvalho Chehab
1494*c33e97efSMauro Carvalho ChehabThe "btime" line gives  the time at which the  system booted, in seconds since
1495*c33e97efSMauro Carvalho Chehabthe Unix epoch.
1496*c33e97efSMauro Carvalho Chehab
1497*c33e97efSMauro Carvalho ChehabThe "processes" line gives the number  of processes and threads created, which
1498*c33e97efSMauro Carvalho Chehabincludes (but  is not limited  to) those  created by  calls to the  fork() and
1499*c33e97efSMauro Carvalho Chehabclone() system calls.
1500*c33e97efSMauro Carvalho Chehab
1501*c33e97efSMauro Carvalho ChehabThe "procs_running" line gives the total number of threads that are
1502*c33e97efSMauro Carvalho Chehabrunning or ready to run (i.e., the total number of runnable threads).
1503*c33e97efSMauro Carvalho Chehab
1504*c33e97efSMauro Carvalho ChehabThe   "procs_blocked" line gives  the  number of  processes currently blocked,
1505*c33e97efSMauro Carvalho Chehabwaiting for I/O to complete.
1506*c33e97efSMauro Carvalho Chehab
1507*c33e97efSMauro Carvalho ChehabThe "softirq" line gives counts of softirqs serviced since boot time, for each
1508*c33e97efSMauro Carvalho Chehabof the possible system softirqs. The first column is the total of all
1509*c33e97efSMauro Carvalho Chehabsoftirqs serviced; each subsequent column is the total for that particular
1510*c33e97efSMauro Carvalho Chehabsoftirq.
1511*c33e97efSMauro Carvalho Chehab
1512*c33e97efSMauro Carvalho Chehab
1513*c33e97efSMauro Carvalho Chehab1.9 Ext4 file system parameters
1514*c33e97efSMauro Carvalho Chehab-------------------------------
1515*c33e97efSMauro Carvalho Chehab
1516*c33e97efSMauro Carvalho ChehabInformation about mounted ext4 file systems can be found in
1517*c33e97efSMauro Carvalho Chehab/proc/fs/ext4.  Each mounted filesystem will have a directory in
1518*c33e97efSMauro Carvalho Chehab/proc/fs/ext4 based on its device name (i.e., /proc/fs/ext4/hdc or
1519*c33e97efSMauro Carvalho Chehab/proc/fs/ext4/dm-0).   The files in each per-device directory are shown
1520*c33e97efSMauro Carvalho Chehabin Table 1-12, below.
1521*c33e97efSMauro Carvalho Chehab
1522*c33e97efSMauro Carvalho Chehab.. table:: Table 1-12: Files in /proc/fs/ext4/<devname>
1523*c33e97efSMauro Carvalho Chehab
1524*c33e97efSMauro Carvalho Chehab ==============  ==========================================================
1525*c33e97efSMauro Carvalho Chehab File            Content
1526*c33e97efSMauro Carvalho Chehab mb_groups       details of multiblock allocator buddy cache of free blocks
1527*c33e97efSMauro Carvalho Chehab ==============  ==========================================================
1528*c33e97efSMauro Carvalho Chehab
1529*c33e97efSMauro Carvalho Chehab2.0 /proc/consoles
1530*c33e97efSMauro Carvalho Chehab------------------
1531*c33e97efSMauro Carvalho ChehabShows registered system console lines.
1532*c33e97efSMauro Carvalho Chehab
1533*c33e97efSMauro Carvalho ChehabTo see which character device lines are currently used for the system console
1534*c33e97efSMauro Carvalho Chehab/dev/console, you may simply look into the file /proc/consoles::
1535*c33e97efSMauro Carvalho Chehab
1536*c33e97efSMauro Carvalho Chehab  > cat /proc/consoles
1537*c33e97efSMauro Carvalho Chehab  tty0                 -WU (ECp)       4:7
1538*c33e97efSMauro Carvalho Chehab  ttyS0                -W- (Ep)        4:64
1539*c33e97efSMauro Carvalho Chehab
1540*c33e97efSMauro Carvalho ChehabThe columns are:
1541*c33e97efSMauro Carvalho Chehab
1542*c33e97efSMauro Carvalho Chehab+--------------------+-------------------------------------------------------+
1543*c33e97efSMauro Carvalho Chehab| device             | name of the device                                    |
1544*c33e97efSMauro Carvalho Chehab+====================+=======================================================+
1545*c33e97efSMauro Carvalho Chehab| operations         | * R = can do read operations                          |
1546*c33e97efSMauro Carvalho Chehab|                    | * W = can do write operations                         |
1547*c33e97efSMauro Carvalho Chehab|                    | * U = can do unblank                                  |
1548*c33e97efSMauro Carvalho Chehab+--------------------+-------------------------------------------------------+
1549*c33e97efSMauro Carvalho Chehab| flags              | * E = it is enabled                                   |
1550*c33e97efSMauro Carvalho Chehab|                    | * C = it is preferred console                         |
1551*c33e97efSMauro Carvalho Chehab|                    | * B = it is primary boot console                      |
1552*c33e97efSMauro Carvalho Chehab|                    | * p = it is used for printk buffer                    |
1553*c33e97efSMauro Carvalho Chehab|                    | * b = it is not a TTY but a Braille device            |
1554*c33e97efSMauro Carvalho Chehab|                    | * a = it is safe to use when cpu is offline           |
1555*c33e97efSMauro Carvalho Chehab+--------------------+-------------------------------------------------------+
1556*c33e97efSMauro Carvalho Chehab| major:minor        | major and minor number of the device separated by a   |
1557*c33e97efSMauro Carvalho Chehab|                    | colon                                                 |
1558*c33e97efSMauro Carvalho Chehab+--------------------+-------------------------------------------------------+
1559*c33e97efSMauro Carvalho Chehab
1560*c33e97efSMauro Carvalho ChehabSummary
1561*c33e97efSMauro Carvalho Chehab-------
1562*c33e97efSMauro Carvalho Chehab
1563*c33e97efSMauro Carvalho ChehabThe /proc file system serves information about the running system. It not only
1564*c33e97efSMauro Carvalho Chehaballows access to process data but also allows you to request the kernel status
1565*c33e97efSMauro Carvalho Chehabby reading files in the hierarchy.
1566*c33e97efSMauro Carvalho Chehab
1567*c33e97efSMauro Carvalho ChehabThe directory  structure  of /proc reflects the types of information and makes
1568*c33e97efSMauro Carvalho Chehabit easy, if not obvious, where to look for specific data.
1569*c33e97efSMauro Carvalho Chehab
1570*c33e97efSMauro Carvalho ChehabChapter 2: Modifying System Parameters
1571*c33e97efSMauro Carvalho Chehab======================================
1572*c33e97efSMauro Carvalho Chehab
1573*c33e97efSMauro Carvalho ChehabIn This Chapter
1574*c33e97efSMauro Carvalho Chehab---------------
1575*c33e97efSMauro Carvalho Chehab
1576*c33e97efSMauro Carvalho Chehab* Modifying kernel parameters by writing into files found in /proc/sys
1577*c33e97efSMauro Carvalho Chehab* Exploring the files which modify certain parameters
1578*c33e97efSMauro Carvalho Chehab* Review of the /proc/sys file tree
1579*c33e97efSMauro Carvalho Chehab
1580*c33e97efSMauro Carvalho Chehab------------------------------------------------------------------------------
1581*c33e97efSMauro Carvalho Chehab
1582*c33e97efSMauro Carvalho ChehabA very  interesting part of /proc is the directory /proc/sys. This is not only
1583*c33e97efSMauro Carvalho Chehaba source  of  information,  it also allows you to change parameters within the
1584*c33e97efSMauro Carvalho Chehabkernel. Be  very  careful  when attempting this. You can optimize your system,
1585*c33e97efSMauro Carvalho Chehabbut you  can  also  cause  it  to  crash.  Never  alter kernel parameters on a
1586*c33e97efSMauro Carvalho Chehabproduction system.  Set  up  a  development machine and test to make sure that
1587*c33e97efSMauro Carvalho Chehabeverything works  the  way  you want it to. You may have no alternative but to
1588*c33e97efSMauro Carvalho Chehabreboot the machine once an error has been made.
1589*c33e97efSMauro Carvalho Chehab
1590*c33e97efSMauro Carvalho ChehabTo change  a  value,  simply  echo  the new value into the file. An example is
1591*c33e97efSMauro Carvalho Chehabgiven below  in the section on the file system data. You need to be root to do
1592*c33e97efSMauro Carvalho Chehabthis. You  can  create  your  own  boot script to perform this every time your
1593*c33e97efSMauro Carvalho Chehabsystem boots.
1594*c33e97efSMauro Carvalho Chehab
1595*c33e97efSMauro Carvalho ChehabThe files  in /proc/sys can be used to fine tune and monitor miscellaneous and
1596*c33e97efSMauro Carvalho Chehabgeneral things  in  the operation of the Linux kernel. Since some of the files
1597*c33e97efSMauro Carvalho Chehabcan inadvertently  disrupt  your  system,  it  is  advisable  to  read  both
1598*c33e97efSMauro Carvalho Chehabdocumentation and  source  before actually making adjustments. In any case, be
1599*c33e97efSMauro Carvalho Chehabvery careful  when  writing  to  any  of these files. The entries in /proc may
1600*c33e97efSMauro Carvalho Chehabchange slightly between the 2.1.* and the 2.2 kernel, so if there is any doubt
1601*c33e97efSMauro Carvalho Chehabreview the kernel documentation in the directory /usr/src/linux/Documentation.
1602*c33e97efSMauro Carvalho ChehabThis chapter  is  heavily  based  on the documentation included in the pre 2.2
1603*c33e97efSMauro Carvalho Chehabkernels, and became part of it in version 2.2.1 of the Linux kernel.
1604*c33e97efSMauro Carvalho Chehab
1605*c33e97efSMauro Carvalho ChehabPlease see: Documentation/admin-guide/sysctl/ directory for descriptions of these
1606*c33e97efSMauro Carvalho Chehabentries.
1607*c33e97efSMauro Carvalho Chehab
1608*c33e97efSMauro Carvalho ChehabSummary
1609*c33e97efSMauro Carvalho Chehab-------
1610*c33e97efSMauro Carvalho Chehab
1611*c33e97efSMauro Carvalho ChehabCertain aspects  of  kernel  behavior  can be modified at runtime, without the
1612*c33e97efSMauro Carvalho Chehabneed to  recompile  the kernel, or even to reboot the system. The files in the
1613*c33e97efSMauro Carvalho Chehab/proc/sys tree  can  not only be read, but also modified. You can use the echo
1614*c33e97efSMauro Carvalho Chehabcommand to write value into these files, thereby changing the default settings
1615*c33e97efSMauro Carvalho Chehabof the kernel.
1616*c33e97efSMauro Carvalho Chehab
1617*c33e97efSMauro Carvalho Chehab
1618*c33e97efSMauro Carvalho ChehabChapter 3: Per-process Parameters
1619*c33e97efSMauro Carvalho Chehab=================================
1620*c33e97efSMauro Carvalho Chehab
1621*c33e97efSMauro Carvalho Chehab3.1 /proc/<pid>/oom_adj & /proc/<pid>/oom_score_adj- Adjust the oom-killer score
1622*c33e97efSMauro Carvalho Chehab--------------------------------------------------------------------------------
1623*c33e97efSMauro Carvalho Chehab
1624*c33e97efSMauro Carvalho ChehabThese file can be used to adjust the badness heuristic used to select which
1625*c33e97efSMauro Carvalho Chehabprocess gets killed in out of memory conditions.
1626*c33e97efSMauro Carvalho Chehab
1627*c33e97efSMauro Carvalho ChehabThe badness heuristic assigns a value to each candidate task ranging from 0
1628*c33e97efSMauro Carvalho Chehab(never kill) to 1000 (always kill) to determine which process is targeted.  The
1629*c33e97efSMauro Carvalho Chehabunits are roughly a proportion along that range of allowed memory the process
1630*c33e97efSMauro Carvalho Chehabmay allocate from based on an estimation of its current memory and swap use.
1631*c33e97efSMauro Carvalho ChehabFor example, if a task is using all allowed memory, its badness score will be
1632*c33e97efSMauro Carvalho Chehab1000.  If it is using half of its allowed memory, its score will be 500.
1633*c33e97efSMauro Carvalho Chehab
1634*c33e97efSMauro Carvalho ChehabThere is an additional factor included in the badness score: the current memory
1635*c33e97efSMauro Carvalho Chehaband swap usage is discounted by 3% for root processes.
1636*c33e97efSMauro Carvalho Chehab
1637*c33e97efSMauro Carvalho ChehabThe amount of "allowed" memory depends on the context in which the oom killer
1638*c33e97efSMauro Carvalho Chehabwas called.  If it is due to the memory assigned to the allocating task's cpuset
1639*c33e97efSMauro Carvalho Chehabbeing exhausted, the allowed memory represents the set of mems assigned to that
1640*c33e97efSMauro Carvalho Chehabcpuset.  If it is due to a mempolicy's node(s) being exhausted, the allowed
1641*c33e97efSMauro Carvalho Chehabmemory represents the set of mempolicy nodes.  If it is due to a memory
1642*c33e97efSMauro Carvalho Chehablimit (or swap limit) being reached, the allowed memory is that configured
1643*c33e97efSMauro Carvalho Chehablimit.  Finally, if it is due to the entire system being out of memory, the
1644*c33e97efSMauro Carvalho Chehaballowed memory represents all allocatable resources.
1645*c33e97efSMauro Carvalho Chehab
1646*c33e97efSMauro Carvalho ChehabThe value of /proc/<pid>/oom_score_adj is added to the badness score before it
1647*c33e97efSMauro Carvalho Chehabis used to determine which task to kill.  Acceptable values range from -1000
1648*c33e97efSMauro Carvalho Chehab(OOM_SCORE_ADJ_MIN) to +1000 (OOM_SCORE_ADJ_MAX).  This allows userspace to
1649*c33e97efSMauro Carvalho Chehabpolarize the preference for oom killing either by always preferring a certain
1650*c33e97efSMauro Carvalho Chehabtask or completely disabling it.  The lowest possible value, -1000, is
1651*c33e97efSMauro Carvalho Chehabequivalent to disabling oom killing entirely for that task since it will always
1652*c33e97efSMauro Carvalho Chehabreport a badness score of 0.
1653*c33e97efSMauro Carvalho Chehab
1654*c33e97efSMauro Carvalho ChehabConsequently, it is very simple for userspace to define the amount of memory to
1655*c33e97efSMauro Carvalho Chehabconsider for each task.  Setting a /proc/<pid>/oom_score_adj value of +500, for
1656*c33e97efSMauro Carvalho Chehabexample, is roughly equivalent to allowing the remainder of tasks sharing the
1657*c33e97efSMauro Carvalho Chehabsame system, cpuset, mempolicy, or memory controller resources to use at least
1658*c33e97efSMauro Carvalho Chehab50% more memory.  A value of -500, on the other hand, would be roughly
1659*c33e97efSMauro Carvalho Chehabequivalent to discounting 50% of the task's allowed memory from being considered
1660*c33e97efSMauro Carvalho Chehabas scoring against the task.
1661*c33e97efSMauro Carvalho Chehab
1662*c33e97efSMauro Carvalho ChehabFor backwards compatibility with previous kernels, /proc/<pid>/oom_adj may also
1663*c33e97efSMauro Carvalho Chehabbe used to tune the badness score.  Its acceptable values range from -16
1664*c33e97efSMauro Carvalho Chehab(OOM_ADJUST_MIN) to +15 (OOM_ADJUST_MAX) and a special value of -17
1665*c33e97efSMauro Carvalho Chehab(OOM_DISABLE) to disable oom killing entirely for that task.  Its value is
1666*c33e97efSMauro Carvalho Chehabscaled linearly with /proc/<pid>/oom_score_adj.
1667*c33e97efSMauro Carvalho Chehab
1668*c33e97efSMauro Carvalho ChehabThe value of /proc/<pid>/oom_score_adj may be reduced no lower than the last
1669*c33e97efSMauro Carvalho Chehabvalue set by a CAP_SYS_RESOURCE process. To reduce the value any lower
1670*c33e97efSMauro Carvalho Chehabrequires CAP_SYS_RESOURCE.
1671*c33e97efSMauro Carvalho Chehab
1672*c33e97efSMauro Carvalho ChehabCaveat: when a parent task is selected, the oom killer will sacrifice any first
1673*c33e97efSMauro Carvalho Chehabgeneration children with separate address spaces instead, if possible.  This
1674*c33e97efSMauro Carvalho Chehabavoids servers and important system daemons from being killed and loses the
1675*c33e97efSMauro Carvalho Chehabminimal amount of work.
1676*c33e97efSMauro Carvalho Chehab
1677*c33e97efSMauro Carvalho Chehab
1678*c33e97efSMauro Carvalho Chehab3.2 /proc/<pid>/oom_score - Display current oom-killer score
1679*c33e97efSMauro Carvalho Chehab-------------------------------------------------------------
1680*c33e97efSMauro Carvalho Chehab
1681*c33e97efSMauro Carvalho ChehabThis file can be used to check the current score used by the oom-killer is for
1682*c33e97efSMauro Carvalho Chehabany given <pid>. Use it together with /proc/<pid>/oom_score_adj to tune which
1683*c33e97efSMauro Carvalho Chehabprocess should be killed in an out-of-memory situation.
1684*c33e97efSMauro Carvalho Chehab
1685*c33e97efSMauro Carvalho Chehab
1686*c33e97efSMauro Carvalho Chehab3.3  /proc/<pid>/io - Display the IO accounting fields
1687*c33e97efSMauro Carvalho Chehab-------------------------------------------------------
1688*c33e97efSMauro Carvalho Chehab
1689*c33e97efSMauro Carvalho ChehabThis file contains IO statistics for each running process
1690*c33e97efSMauro Carvalho Chehab
1691*c33e97efSMauro Carvalho ChehabExample
1692*c33e97efSMauro Carvalho Chehab~~~~~~~
1693*c33e97efSMauro Carvalho Chehab
1694*c33e97efSMauro Carvalho Chehab::
1695*c33e97efSMauro Carvalho Chehab
1696*c33e97efSMauro Carvalho Chehab    test:/tmp # dd if=/dev/zero of=/tmp/test.dat &
1697*c33e97efSMauro Carvalho Chehab    [1] 3828
1698*c33e97efSMauro Carvalho Chehab
1699*c33e97efSMauro Carvalho Chehab    test:/tmp # cat /proc/3828/io
1700*c33e97efSMauro Carvalho Chehab    rchar: 323934931
1701*c33e97efSMauro Carvalho Chehab    wchar: 323929600
1702*c33e97efSMauro Carvalho Chehab    syscr: 632687
1703*c33e97efSMauro Carvalho Chehab    syscw: 632675
1704*c33e97efSMauro Carvalho Chehab    read_bytes: 0
1705*c33e97efSMauro Carvalho Chehab    write_bytes: 323932160
1706*c33e97efSMauro Carvalho Chehab    cancelled_write_bytes: 0
1707*c33e97efSMauro Carvalho Chehab
1708*c33e97efSMauro Carvalho Chehab
1709*c33e97efSMauro Carvalho ChehabDescription
1710*c33e97efSMauro Carvalho Chehab~~~~~~~~~~~
1711*c33e97efSMauro Carvalho Chehab
1712*c33e97efSMauro Carvalho Chehabrchar
1713*c33e97efSMauro Carvalho Chehab^^^^^
1714*c33e97efSMauro Carvalho Chehab
1715*c33e97efSMauro Carvalho ChehabI/O counter: chars read
1716*c33e97efSMauro Carvalho ChehabThe number of bytes which this task has caused to be read from storage. This
1717*c33e97efSMauro Carvalho Chehabis simply the sum of bytes which this process passed to read() and pread().
1718*c33e97efSMauro Carvalho ChehabIt includes things like tty IO and it is unaffected by whether or not actual
1719*c33e97efSMauro Carvalho Chehabphysical disk IO was required (the read might have been satisfied from
1720*c33e97efSMauro Carvalho Chehabpagecache)
1721*c33e97efSMauro Carvalho Chehab
1722*c33e97efSMauro Carvalho Chehab
1723*c33e97efSMauro Carvalho Chehabwchar
1724*c33e97efSMauro Carvalho Chehab^^^^^
1725*c33e97efSMauro Carvalho Chehab
1726*c33e97efSMauro Carvalho ChehabI/O counter: chars written
1727*c33e97efSMauro Carvalho ChehabThe number of bytes which this task has caused, or shall cause to be written
1728*c33e97efSMauro Carvalho Chehabto disk. Similar caveats apply here as with rchar.
1729*c33e97efSMauro Carvalho Chehab
1730*c33e97efSMauro Carvalho Chehab
1731*c33e97efSMauro Carvalho Chehabsyscr
1732*c33e97efSMauro Carvalho Chehab^^^^^
1733*c33e97efSMauro Carvalho Chehab
1734*c33e97efSMauro Carvalho ChehabI/O counter: read syscalls
1735*c33e97efSMauro Carvalho ChehabAttempt to count the number of read I/O operations, i.e. syscalls like read()
1736*c33e97efSMauro Carvalho Chehaband pread().
1737*c33e97efSMauro Carvalho Chehab
1738*c33e97efSMauro Carvalho Chehab
1739*c33e97efSMauro Carvalho Chehabsyscw
1740*c33e97efSMauro Carvalho Chehab^^^^^
1741*c33e97efSMauro Carvalho Chehab
1742*c33e97efSMauro Carvalho ChehabI/O counter: write syscalls
1743*c33e97efSMauro Carvalho ChehabAttempt to count the number of write I/O operations, i.e. syscalls like
1744*c33e97efSMauro Carvalho Chehabwrite() and pwrite().
1745*c33e97efSMauro Carvalho Chehab
1746*c33e97efSMauro Carvalho Chehab
1747*c33e97efSMauro Carvalho Chehabread_bytes
1748*c33e97efSMauro Carvalho Chehab^^^^^^^^^^
1749*c33e97efSMauro Carvalho Chehab
1750*c33e97efSMauro Carvalho ChehabI/O counter: bytes read
1751*c33e97efSMauro Carvalho ChehabAttempt to count the number of bytes which this process really did cause to
1752*c33e97efSMauro Carvalho Chehabbe fetched from the storage layer. Done at the submit_bio() level, so it is
1753*c33e97efSMauro Carvalho Chehabaccurate for block-backed filesystems. <please add status regarding NFS and
1754*c33e97efSMauro Carvalho ChehabCIFS at a later time>
1755*c33e97efSMauro Carvalho Chehab
1756*c33e97efSMauro Carvalho Chehab
1757*c33e97efSMauro Carvalho Chehabwrite_bytes
1758*c33e97efSMauro Carvalho Chehab^^^^^^^^^^^
1759*c33e97efSMauro Carvalho Chehab
1760*c33e97efSMauro Carvalho ChehabI/O counter: bytes written
1761*c33e97efSMauro Carvalho ChehabAttempt to count the number of bytes which this process caused to be sent to
1762*c33e97efSMauro Carvalho Chehabthe storage layer. This is done at page-dirtying time.
1763*c33e97efSMauro Carvalho Chehab
1764*c33e97efSMauro Carvalho Chehab
1765*c33e97efSMauro Carvalho Chehabcancelled_write_bytes
1766*c33e97efSMauro Carvalho Chehab^^^^^^^^^^^^^^^^^^^^^
1767*c33e97efSMauro Carvalho Chehab
1768*c33e97efSMauro Carvalho ChehabThe big inaccuracy here is truncate. If a process writes 1MB to a file and
1769*c33e97efSMauro Carvalho Chehabthen deletes the file, it will in fact perform no writeout. But it will have
1770*c33e97efSMauro Carvalho Chehabbeen accounted as having caused 1MB of write.
1771*c33e97efSMauro Carvalho ChehabIn other words: The number of bytes which this process caused to not happen,
1772*c33e97efSMauro Carvalho Chehabby truncating pagecache. A task can cause "negative" IO too. If this task
1773*c33e97efSMauro Carvalho Chehabtruncates some dirty pagecache, some IO which another task has been accounted
1774*c33e97efSMauro Carvalho Chehabfor (in its write_bytes) will not be happening. We _could_ just subtract that
1775*c33e97efSMauro Carvalho Chehabfrom the truncating task's write_bytes, but there is information loss in doing
1776*c33e97efSMauro Carvalho Chehabthat.
1777*c33e97efSMauro Carvalho Chehab
1778*c33e97efSMauro Carvalho Chehab
1779*c33e97efSMauro Carvalho Chehab.. Note::
1780*c33e97efSMauro Carvalho Chehab
1781*c33e97efSMauro Carvalho Chehab   At its current implementation state, this is a bit racy on 32-bit machines:
1782*c33e97efSMauro Carvalho Chehab   if process A reads process B's /proc/pid/io while process B is updating one
1783*c33e97efSMauro Carvalho Chehab   of those 64-bit counters, process A could see an intermediate result.
1784*c33e97efSMauro Carvalho Chehab
1785*c33e97efSMauro Carvalho Chehab
1786*c33e97efSMauro Carvalho ChehabMore information about this can be found within the taskstats documentation in
1787*c33e97efSMauro Carvalho ChehabDocumentation/accounting.
1788*c33e97efSMauro Carvalho Chehab
1789*c33e97efSMauro Carvalho Chehab3.4 /proc/<pid>/coredump_filter - Core dump filtering settings
1790*c33e97efSMauro Carvalho Chehab---------------------------------------------------------------
1791*c33e97efSMauro Carvalho ChehabWhen a process is dumped, all anonymous memory is written to a core file as
1792*c33e97efSMauro Carvalho Chehablong as the size of the core file isn't limited. But sometimes we don't want
1793*c33e97efSMauro Carvalho Chehabto dump some memory segments, for example, huge shared memory or DAX.
1794*c33e97efSMauro Carvalho ChehabConversely, sometimes we want to save file-backed memory segments into a core
1795*c33e97efSMauro Carvalho Chehabfile, not only the individual files.
1796*c33e97efSMauro Carvalho Chehab
1797*c33e97efSMauro Carvalho Chehab/proc/<pid>/coredump_filter allows you to customize which memory segments
1798*c33e97efSMauro Carvalho Chehabwill be dumped when the <pid> process is dumped. coredump_filter is a bitmask
1799*c33e97efSMauro Carvalho Chehabof memory types. If a bit of the bitmask is set, memory segments of the
1800*c33e97efSMauro Carvalho Chehabcorresponding memory type are dumped, otherwise they are not dumped.
1801*c33e97efSMauro Carvalho Chehab
1802*c33e97efSMauro Carvalho ChehabThe following 9 memory types are supported:
1803*c33e97efSMauro Carvalho Chehab
1804*c33e97efSMauro Carvalho Chehab  - (bit 0) anonymous private memory
1805*c33e97efSMauro Carvalho Chehab  - (bit 1) anonymous shared memory
1806*c33e97efSMauro Carvalho Chehab  - (bit 2) file-backed private memory
1807*c33e97efSMauro Carvalho Chehab  - (bit 3) file-backed shared memory
1808*c33e97efSMauro Carvalho Chehab  - (bit 4) ELF header pages in file-backed private memory areas (it is
1809*c33e97efSMauro Carvalho Chehab    effective only if the bit 2 is cleared)
1810*c33e97efSMauro Carvalho Chehab  - (bit 5) hugetlb private memory
1811*c33e97efSMauro Carvalho Chehab  - (bit 6) hugetlb shared memory
1812*c33e97efSMauro Carvalho Chehab  - (bit 7) DAX private memory
1813*c33e97efSMauro Carvalho Chehab  - (bit 8) DAX shared memory
1814*c33e97efSMauro Carvalho Chehab
1815*c33e97efSMauro Carvalho Chehab  Note that MMIO pages such as frame buffer are never dumped and vDSO pages
1816*c33e97efSMauro Carvalho Chehab  are always dumped regardless of the bitmask status.
1817*c33e97efSMauro Carvalho Chehab
1818*c33e97efSMauro Carvalho Chehab  Note that bits 0-4 don't affect hugetlb or DAX memory. hugetlb memory is
1819*c33e97efSMauro Carvalho Chehab  only affected by bit 5-6, and DAX is only affected by bits 7-8.
1820*c33e97efSMauro Carvalho Chehab
1821*c33e97efSMauro Carvalho ChehabThe default value of coredump_filter is 0x33; this means all anonymous memory
1822*c33e97efSMauro Carvalho Chehabsegments, ELF header pages and hugetlb private memory are dumped.
1823*c33e97efSMauro Carvalho Chehab
1824*c33e97efSMauro Carvalho ChehabIf you don't want to dump all shared memory segments attached to pid 1234,
1825*c33e97efSMauro Carvalho Chehabwrite 0x31 to the process's proc file::
1826*c33e97efSMauro Carvalho Chehab
1827*c33e97efSMauro Carvalho Chehab  $ echo 0x31 > /proc/1234/coredump_filter
1828*c33e97efSMauro Carvalho Chehab
1829*c33e97efSMauro Carvalho ChehabWhen a new process is created, the process inherits the bitmask status from its
1830*c33e97efSMauro Carvalho Chehabparent. It is useful to set up coredump_filter before the program runs.
1831*c33e97efSMauro Carvalho ChehabFor example::
1832*c33e97efSMauro Carvalho Chehab
1833*c33e97efSMauro Carvalho Chehab  $ echo 0x7 > /proc/self/coredump_filter
1834*c33e97efSMauro Carvalho Chehab  $ ./some_program
1835*c33e97efSMauro Carvalho Chehab
1836*c33e97efSMauro Carvalho Chehab3.5	/proc/<pid>/mountinfo - Information about mounts
1837*c33e97efSMauro Carvalho Chehab--------------------------------------------------------
1838*c33e97efSMauro Carvalho Chehab
1839*c33e97efSMauro Carvalho ChehabThis file contains lines of the form::
1840*c33e97efSMauro Carvalho Chehab
1841*c33e97efSMauro Carvalho Chehab    36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue
1842*c33e97efSMauro Carvalho Chehab    (1)(2)(3)   (4)   (5)      (6)      (7)   (8) (9)   (10)         (11)
1843*c33e97efSMauro Carvalho Chehab
1844*c33e97efSMauro Carvalho Chehab    (1) mount ID:  unique identifier of the mount (may be reused after umount)
1845*c33e97efSMauro Carvalho Chehab    (2) parent ID:  ID of parent (or of self for the top of the mount tree)
1846*c33e97efSMauro Carvalho Chehab    (3) major:minor:  value of st_dev for files on filesystem
1847*c33e97efSMauro Carvalho Chehab    (4) root:  root of the mount within the filesystem
1848*c33e97efSMauro Carvalho Chehab    (5) mount point:  mount point relative to the process's root
1849*c33e97efSMauro Carvalho Chehab    (6) mount options:  per mount options
1850*c33e97efSMauro Carvalho Chehab    (7) optional fields:  zero or more fields of the form "tag[:value]"
1851*c33e97efSMauro Carvalho Chehab    (8) separator:  marks the end of the optional fields
1852*c33e97efSMauro Carvalho Chehab    (9) filesystem type:  name of filesystem of the form "type[.subtype]"
1853*c33e97efSMauro Carvalho Chehab    (10) mount source:  filesystem specific information or "none"
1854*c33e97efSMauro Carvalho Chehab    (11) super options:  per super block options
1855*c33e97efSMauro Carvalho Chehab
1856*c33e97efSMauro Carvalho ChehabParsers should ignore all unrecognised optional fields.  Currently the
1857*c33e97efSMauro Carvalho Chehabpossible optional fields are:
1858*c33e97efSMauro Carvalho Chehab
1859*c33e97efSMauro Carvalho Chehab================  ==============================================================
1860*c33e97efSMauro Carvalho Chehabshared:X          mount is shared in peer group X
1861*c33e97efSMauro Carvalho Chehabmaster:X          mount is slave to peer group X
1862*c33e97efSMauro Carvalho Chehabpropagate_from:X  mount is slave and receives propagation from peer group X [#]_
1863*c33e97efSMauro Carvalho Chehabunbindable        mount is unbindable
1864*c33e97efSMauro Carvalho Chehab================  ==============================================================
1865*c33e97efSMauro Carvalho Chehab
1866*c33e97efSMauro Carvalho Chehab.. [#] X is the closest dominant peer group under the process's root.  If
1867*c33e97efSMauro Carvalho Chehab       X is the immediate master of the mount, or if there's no dominant peer
1868*c33e97efSMauro Carvalho Chehab       group under the same root, then only the "master:X" field is present
1869*c33e97efSMauro Carvalho Chehab       and not the "propagate_from:X" field.
1870*c33e97efSMauro Carvalho Chehab
1871*c33e97efSMauro Carvalho ChehabFor more information on mount propagation see:
1872*c33e97efSMauro Carvalho Chehab
1873*c33e97efSMauro Carvalho Chehab  Documentation/filesystems/sharedsubtree.txt
1874*c33e97efSMauro Carvalho Chehab
1875*c33e97efSMauro Carvalho Chehab
1876*c33e97efSMauro Carvalho Chehab3.6	/proc/<pid>/comm  & /proc/<pid>/task/<tid>/comm
1877*c33e97efSMauro Carvalho Chehab--------------------------------------------------------
1878*c33e97efSMauro Carvalho ChehabThese files provide a method to access a tasks comm value. It also allows for
1879*c33e97efSMauro Carvalho Chehaba task to set its own or one of its thread siblings comm value. The comm value
1880*c33e97efSMauro Carvalho Chehabis limited in size compared to the cmdline value, so writing anything longer
1881*c33e97efSMauro Carvalho Chehabthen the kernel's TASK_COMM_LEN (currently 16 chars) will result in a truncated
1882*c33e97efSMauro Carvalho Chehabcomm value.
1883*c33e97efSMauro Carvalho Chehab
1884*c33e97efSMauro Carvalho Chehab
1885*c33e97efSMauro Carvalho Chehab3.7	/proc/<pid>/task/<tid>/children - Information about task children
1886*c33e97efSMauro Carvalho Chehab-------------------------------------------------------------------------
1887*c33e97efSMauro Carvalho ChehabThis file provides a fast way to retrieve first level children pids
1888*c33e97efSMauro Carvalho Chehabof a task pointed by <pid>/<tid> pair. The format is a space separated
1889*c33e97efSMauro Carvalho Chehabstream of pids.
1890*c33e97efSMauro Carvalho Chehab
1891*c33e97efSMauro Carvalho ChehabNote the "first level" here -- if a child has own children they will
1892*c33e97efSMauro Carvalho Chehabnot be listed here, one needs to read /proc/<children-pid>/task/<tid>/children
1893*c33e97efSMauro Carvalho Chehabto obtain the descendants.
1894*c33e97efSMauro Carvalho Chehab
1895*c33e97efSMauro Carvalho ChehabSince this interface is intended to be fast and cheap it doesn't
1896*c33e97efSMauro Carvalho Chehabguarantee to provide precise results and some children might be
1897*c33e97efSMauro Carvalho Chehabskipped, especially if they've exited right after we printed their
1898*c33e97efSMauro Carvalho Chehabpids, so one need to either stop or freeze processes being inspected
1899*c33e97efSMauro Carvalho Chehabif precise results are needed.
1900*c33e97efSMauro Carvalho Chehab
1901*c33e97efSMauro Carvalho Chehab
1902*c33e97efSMauro Carvalho Chehab3.8	/proc/<pid>/fdinfo/<fd> - Information about opened file
1903*c33e97efSMauro Carvalho Chehab---------------------------------------------------------------
1904*c33e97efSMauro Carvalho ChehabThis file provides information associated with an opened file. The regular
1905*c33e97efSMauro Carvalho Chehabfiles have at least three fields -- 'pos', 'flags' and mnt_id. The 'pos'
1906*c33e97efSMauro Carvalho Chehabrepresents the current offset of the opened file in decimal form [see lseek(2)
1907*c33e97efSMauro Carvalho Chehabfor details], 'flags' denotes the octal O_xxx mask the file has been
1908*c33e97efSMauro Carvalho Chehabcreated with [see open(2) for details] and 'mnt_id' represents mount ID of
1909*c33e97efSMauro Carvalho Chehabthe file system containing the opened file [see 3.5 /proc/<pid>/mountinfo
1910*c33e97efSMauro Carvalho Chehabfor details].
1911*c33e97efSMauro Carvalho Chehab
1912*c33e97efSMauro Carvalho ChehabA typical output is::
1913*c33e97efSMauro Carvalho Chehab
1914*c33e97efSMauro Carvalho Chehab	pos:	0
1915*c33e97efSMauro Carvalho Chehab	flags:	0100002
1916*c33e97efSMauro Carvalho Chehab	mnt_id:	19
1917*c33e97efSMauro Carvalho Chehab
1918*c33e97efSMauro Carvalho ChehabAll locks associated with a file descriptor are shown in its fdinfo too::
1919*c33e97efSMauro Carvalho Chehab
1920*c33e97efSMauro Carvalho Chehab    lock:       1: FLOCK  ADVISORY  WRITE 359 00:13:11691 0 EOF
1921*c33e97efSMauro Carvalho Chehab
1922*c33e97efSMauro Carvalho ChehabThe files such as eventfd, fsnotify, signalfd, epoll among the regular pos/flags
1923*c33e97efSMauro Carvalho Chehabpair provide additional information particular to the objects they represent.
1924*c33e97efSMauro Carvalho Chehab
1925*c33e97efSMauro Carvalho ChehabEventfd files
1926*c33e97efSMauro Carvalho Chehab~~~~~~~~~~~~~
1927*c33e97efSMauro Carvalho Chehab
1928*c33e97efSMauro Carvalho Chehab::
1929*c33e97efSMauro Carvalho Chehab
1930*c33e97efSMauro Carvalho Chehab	pos:	0
1931*c33e97efSMauro Carvalho Chehab	flags:	04002
1932*c33e97efSMauro Carvalho Chehab	mnt_id:	9
1933*c33e97efSMauro Carvalho Chehab	eventfd-count:	5a
1934*c33e97efSMauro Carvalho Chehab
1935*c33e97efSMauro Carvalho Chehabwhere 'eventfd-count' is hex value of a counter.
1936*c33e97efSMauro Carvalho Chehab
1937*c33e97efSMauro Carvalho ChehabSignalfd files
1938*c33e97efSMauro Carvalho Chehab~~~~~~~~~~~~~~
1939*c33e97efSMauro Carvalho Chehab
1940*c33e97efSMauro Carvalho Chehab::
1941*c33e97efSMauro Carvalho Chehab
1942*c33e97efSMauro Carvalho Chehab	pos:	0
1943*c33e97efSMauro Carvalho Chehab	flags:	04002
1944*c33e97efSMauro Carvalho Chehab	mnt_id:	9
1945*c33e97efSMauro Carvalho Chehab	sigmask:	0000000000000200
1946*c33e97efSMauro Carvalho Chehab
1947*c33e97efSMauro Carvalho Chehabwhere 'sigmask' is hex value of the signal mask associated
1948*c33e97efSMauro Carvalho Chehabwith a file.
1949*c33e97efSMauro Carvalho Chehab
1950*c33e97efSMauro Carvalho ChehabEpoll files
1951*c33e97efSMauro Carvalho Chehab~~~~~~~~~~~
1952*c33e97efSMauro Carvalho Chehab
1953*c33e97efSMauro Carvalho Chehab::
1954*c33e97efSMauro Carvalho Chehab
1955*c33e97efSMauro Carvalho Chehab	pos:	0
1956*c33e97efSMauro Carvalho Chehab	flags:	02
1957*c33e97efSMauro Carvalho Chehab	mnt_id:	9
1958*c33e97efSMauro Carvalho Chehab	tfd:        5 events:       1d data: ffffffffffffffff pos:0 ino:61af sdev:7
1959*c33e97efSMauro Carvalho Chehab
1960*c33e97efSMauro Carvalho Chehabwhere 'tfd' is a target file descriptor number in decimal form,
1961*c33e97efSMauro Carvalho Chehab'events' is events mask being watched and the 'data' is data
1962*c33e97efSMauro Carvalho Chehabassociated with a target [see epoll(7) for more details].
1963*c33e97efSMauro Carvalho Chehab
1964*c33e97efSMauro Carvalho ChehabThe 'pos' is current offset of the target file in decimal form
1965*c33e97efSMauro Carvalho Chehab[see lseek(2)], 'ino' and 'sdev' are inode and device numbers
1966*c33e97efSMauro Carvalho Chehabwhere target file resides, all in hex format.
1967*c33e97efSMauro Carvalho Chehab
1968*c33e97efSMauro Carvalho ChehabFsnotify files
1969*c33e97efSMauro Carvalho Chehab~~~~~~~~~~~~~~
1970*c33e97efSMauro Carvalho ChehabFor inotify files the format is the following::
1971*c33e97efSMauro Carvalho Chehab
1972*c33e97efSMauro Carvalho Chehab	pos:	0
1973*c33e97efSMauro Carvalho Chehab	flags:	02000000
1974*c33e97efSMauro Carvalho Chehab	inotify wd:3 ino:9e7e sdev:800013 mask:800afce ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:7e9e0000640d1b6d
1975*c33e97efSMauro Carvalho Chehab
1976*c33e97efSMauro Carvalho Chehabwhere 'wd' is a watch descriptor in decimal form, ie a target file
1977*c33e97efSMauro Carvalho Chehabdescriptor number, 'ino' and 'sdev' are inode and device where the
1978*c33e97efSMauro Carvalho Chehabtarget file resides and the 'mask' is the mask of events, all in hex
1979*c33e97efSMauro Carvalho Chehabform [see inotify(7) for more details].
1980*c33e97efSMauro Carvalho Chehab
1981*c33e97efSMauro Carvalho ChehabIf the kernel was built with exportfs support, the path to the target
1982*c33e97efSMauro Carvalho Chehabfile is encoded as a file handle.  The file handle is provided by three
1983*c33e97efSMauro Carvalho Chehabfields 'fhandle-bytes', 'fhandle-type' and 'f_handle', all in hex
1984*c33e97efSMauro Carvalho Chehabformat.
1985*c33e97efSMauro Carvalho Chehab
1986*c33e97efSMauro Carvalho ChehabIf the kernel is built without exportfs support the file handle won't be
1987*c33e97efSMauro Carvalho Chehabprinted out.
1988*c33e97efSMauro Carvalho Chehab
1989*c33e97efSMauro Carvalho ChehabIf there is no inotify mark attached yet the 'inotify' line will be omitted.
1990*c33e97efSMauro Carvalho Chehab
1991*c33e97efSMauro Carvalho ChehabFor fanotify files the format is::
1992*c33e97efSMauro Carvalho Chehab
1993*c33e97efSMauro Carvalho Chehab	pos:	0
1994*c33e97efSMauro Carvalho Chehab	flags:	02
1995*c33e97efSMauro Carvalho Chehab	mnt_id:	9
1996*c33e97efSMauro Carvalho Chehab	fanotify flags:10 event-flags:0
1997*c33e97efSMauro Carvalho Chehab	fanotify mnt_id:12 mflags:40 mask:38 ignored_mask:40000003
1998*c33e97efSMauro Carvalho Chehab	fanotify ino:4f969 sdev:800013 mflags:0 mask:3b ignored_mask:40000000 fhandle-bytes:8 fhandle-type:1 f_handle:69f90400c275b5b4
1999*c33e97efSMauro Carvalho Chehab
2000*c33e97efSMauro Carvalho Chehabwhere fanotify 'flags' and 'event-flags' are values used in fanotify_init
2001*c33e97efSMauro Carvalho Chehabcall, 'mnt_id' is the mount point identifier, 'mflags' is the value of
2002*c33e97efSMauro Carvalho Chehabflags associated with mark which are tracked separately from events
2003*c33e97efSMauro Carvalho Chehabmask. 'ino', 'sdev' are target inode and device, 'mask' is the events
2004*c33e97efSMauro Carvalho Chehabmask and 'ignored_mask' is the mask of events which are to be ignored.
2005*c33e97efSMauro Carvalho ChehabAll in hex format. Incorporation of 'mflags', 'mask' and 'ignored_mask'
2006*c33e97efSMauro Carvalho Chehabdoes provide information about flags and mask used in fanotify_mark
2007*c33e97efSMauro Carvalho Chehabcall [see fsnotify manpage for details].
2008*c33e97efSMauro Carvalho Chehab
2009*c33e97efSMauro Carvalho ChehabWhile the first three lines are mandatory and always printed, the rest is
2010*c33e97efSMauro Carvalho Chehaboptional and may be omitted if no marks created yet.
2011*c33e97efSMauro Carvalho Chehab
2012*c33e97efSMauro Carvalho ChehabTimerfd files
2013*c33e97efSMauro Carvalho Chehab~~~~~~~~~~~~~
2014*c33e97efSMauro Carvalho Chehab
2015*c33e97efSMauro Carvalho Chehab::
2016*c33e97efSMauro Carvalho Chehab
2017*c33e97efSMauro Carvalho Chehab	pos:	0
2018*c33e97efSMauro Carvalho Chehab	flags:	02
2019*c33e97efSMauro Carvalho Chehab	mnt_id:	9
2020*c33e97efSMauro Carvalho Chehab	clockid: 0
2021*c33e97efSMauro Carvalho Chehab	ticks: 0
2022*c33e97efSMauro Carvalho Chehab	settime flags: 01
2023*c33e97efSMauro Carvalho Chehab	it_value: (0, 49406829)
2024*c33e97efSMauro Carvalho Chehab	it_interval: (1, 0)
2025*c33e97efSMauro Carvalho Chehab
2026*c33e97efSMauro Carvalho Chehabwhere 'clockid' is the clock type and 'ticks' is the number of the timer expirations
2027*c33e97efSMauro Carvalho Chehabthat have occurred [see timerfd_create(2) for details]. 'settime flags' are
2028*c33e97efSMauro Carvalho Chehabflags in octal form been used to setup the timer [see timerfd_settime(2) for
2029*c33e97efSMauro Carvalho Chehabdetails]. 'it_value' is remaining time until the timer exiration.
2030*c33e97efSMauro Carvalho Chehab'it_interval' is the interval for the timer. Note the timer might be set up
2031*c33e97efSMauro Carvalho Chehabwith TIMER_ABSTIME option which will be shown in 'settime flags', but 'it_value'
2032*c33e97efSMauro Carvalho Chehabstill exhibits timer's remaining time.
2033*c33e97efSMauro Carvalho Chehab
2034*c33e97efSMauro Carvalho Chehab3.9	/proc/<pid>/map_files - Information about memory mapped files
2035*c33e97efSMauro Carvalho Chehab---------------------------------------------------------------------
2036*c33e97efSMauro Carvalho ChehabThis directory contains symbolic links which represent memory mapped files
2037*c33e97efSMauro Carvalho Chehabthe process is maintaining.  Example output::
2038*c33e97efSMauro Carvalho Chehab
2039*c33e97efSMauro Carvalho Chehab     | lr-------- 1 root root 64 Jan 27 11:24 333c600000-333c620000 -> /usr/lib64/ld-2.18.so
2040*c33e97efSMauro Carvalho Chehab     | lr-------- 1 root root 64 Jan 27 11:24 333c81f000-333c820000 -> /usr/lib64/ld-2.18.so
2041*c33e97efSMauro Carvalho Chehab     | lr-------- 1 root root 64 Jan 27 11:24 333c820000-333c821000 -> /usr/lib64/ld-2.18.so
2042*c33e97efSMauro Carvalho Chehab     | ...
2043*c33e97efSMauro Carvalho Chehab     | lr-------- 1 root root 64 Jan 27 11:24 35d0421000-35d0422000 -> /usr/lib64/libselinux.so.1
2044*c33e97efSMauro Carvalho Chehab     | lr-------- 1 root root 64 Jan 27 11:24 400000-41a000 -> /usr/bin/ls
2045*c33e97efSMauro Carvalho Chehab
2046*c33e97efSMauro Carvalho ChehabThe name of a link represents the virtual memory bounds of a mapping, i.e.
2047*c33e97efSMauro Carvalho Chehabvm_area_struct::vm_start-vm_area_struct::vm_end.
2048*c33e97efSMauro Carvalho Chehab
2049*c33e97efSMauro Carvalho ChehabThe main purpose of the map_files is to retrieve a set of memory mapped
2050*c33e97efSMauro Carvalho Chehabfiles in a fast way instead of parsing /proc/<pid>/maps or
2051*c33e97efSMauro Carvalho Chehab/proc/<pid>/smaps, both of which contain many more records.  At the same
2052*c33e97efSMauro Carvalho Chehabtime one can open(2) mappings from the listings of two processes and
2053*c33e97efSMauro Carvalho Chehabcomparing their inode numbers to figure out which anonymous memory areas
2054*c33e97efSMauro Carvalho Chehabare actually shared.
2055*c33e97efSMauro Carvalho Chehab
2056*c33e97efSMauro Carvalho Chehab3.10	/proc/<pid>/timerslack_ns - Task timerslack value
2057*c33e97efSMauro Carvalho Chehab---------------------------------------------------------
2058*c33e97efSMauro Carvalho ChehabThis file provides the value of the task's timerslack value in nanoseconds.
2059*c33e97efSMauro Carvalho ChehabThis value specifies a amount of time that normal timers may be deferred
2060*c33e97efSMauro Carvalho Chehabin order to coalesce timers and avoid unnecessary wakeups.
2061*c33e97efSMauro Carvalho Chehab
2062*c33e97efSMauro Carvalho ChehabThis allows a task's interactivity vs power consumption trade off to be
2063*c33e97efSMauro Carvalho Chehabadjusted.
2064*c33e97efSMauro Carvalho Chehab
2065*c33e97efSMauro Carvalho ChehabWriting 0 to the file will set the tasks timerslack to the default value.
2066*c33e97efSMauro Carvalho Chehab
2067*c33e97efSMauro Carvalho ChehabValid values are from 0 - ULLONG_MAX
2068*c33e97efSMauro Carvalho Chehab
2069*c33e97efSMauro Carvalho ChehabAn application setting the value must have PTRACE_MODE_ATTACH_FSCREDS level
2070*c33e97efSMauro Carvalho Chehabpermissions on the task specified to change its timerslack_ns value.
2071*c33e97efSMauro Carvalho Chehab
2072*c33e97efSMauro Carvalho Chehab3.11	/proc/<pid>/patch_state - Livepatch patch operation state
2073*c33e97efSMauro Carvalho Chehab-----------------------------------------------------------------
2074*c33e97efSMauro Carvalho ChehabWhen CONFIG_LIVEPATCH is enabled, this file displays the value of the
2075*c33e97efSMauro Carvalho Chehabpatch state for the task.
2076*c33e97efSMauro Carvalho Chehab
2077*c33e97efSMauro Carvalho ChehabA value of '-1' indicates that no patch is in transition.
2078*c33e97efSMauro Carvalho Chehab
2079*c33e97efSMauro Carvalho ChehabA value of '0' indicates that a patch is in transition and the task is
2080*c33e97efSMauro Carvalho Chehabunpatched.  If the patch is being enabled, then the task hasn't been
2081*c33e97efSMauro Carvalho Chehabpatched yet.  If the patch is being disabled, then the task has already
2082*c33e97efSMauro Carvalho Chehabbeen unpatched.
2083*c33e97efSMauro Carvalho Chehab
2084*c33e97efSMauro Carvalho ChehabA value of '1' indicates that a patch is in transition and the task is
2085*c33e97efSMauro Carvalho Chehabpatched.  If the patch is being enabled, then the task has already been
2086*c33e97efSMauro Carvalho Chehabpatched.  If the patch is being disabled, then the task hasn't been
2087*c33e97efSMauro Carvalho Chehabunpatched yet.
2088*c33e97efSMauro Carvalho Chehab
2089*c33e97efSMauro Carvalho Chehab3.12 /proc/<pid>/arch_status - task architecture specific status
2090*c33e97efSMauro Carvalho Chehab-------------------------------------------------------------------
2091*c33e97efSMauro Carvalho ChehabWhen CONFIG_PROC_PID_ARCH_STATUS is enabled, this file displays the
2092*c33e97efSMauro Carvalho Chehabarchitecture specific status of the task.
2093*c33e97efSMauro Carvalho Chehab
2094*c33e97efSMauro Carvalho ChehabExample
2095*c33e97efSMauro Carvalho Chehab~~~~~~~
2096*c33e97efSMauro Carvalho Chehab
2097*c33e97efSMauro Carvalho Chehab::
2098*c33e97efSMauro Carvalho Chehab
2099*c33e97efSMauro Carvalho Chehab $ cat /proc/6753/arch_status
2100*c33e97efSMauro Carvalho Chehab AVX512_elapsed_ms:      8
2101*c33e97efSMauro Carvalho Chehab
2102*c33e97efSMauro Carvalho ChehabDescription
2103*c33e97efSMauro Carvalho Chehab~~~~~~~~~~~
2104*c33e97efSMauro Carvalho Chehab
2105*c33e97efSMauro Carvalho Chehabx86 specific entries:
2106*c33e97efSMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~
2107*c33e97efSMauro Carvalho Chehab
2108*c33e97efSMauro Carvalho ChehabAVX512_elapsed_ms:
2109*c33e97efSMauro Carvalho Chehab^^^^^^^^^^^^^^^^^^
2110*c33e97efSMauro Carvalho Chehab
2111*c33e97efSMauro Carvalho Chehab  If AVX512 is supported on the machine, this entry shows the milliseconds
2112*c33e97efSMauro Carvalho Chehab  elapsed since the last time AVX512 usage was recorded. The recording
2113*c33e97efSMauro Carvalho Chehab  happens on a best effort basis when a task is scheduled out. This means
2114*c33e97efSMauro Carvalho Chehab  that the value depends on two factors:
2115*c33e97efSMauro Carvalho Chehab
2116*c33e97efSMauro Carvalho Chehab    1) The time which the task spent on the CPU without being scheduled
2117*c33e97efSMauro Carvalho Chehab       out. With CPU isolation and a single runnable task this can take
2118*c33e97efSMauro Carvalho Chehab       several seconds.
2119*c33e97efSMauro Carvalho Chehab
2120*c33e97efSMauro Carvalho Chehab    2) The time since the task was scheduled out last. Depending on the
2121*c33e97efSMauro Carvalho Chehab       reason for being scheduled out (time slice exhausted, syscall ...)
2122*c33e97efSMauro Carvalho Chehab       this can be arbitrary long time.
2123*c33e97efSMauro Carvalho Chehab
2124*c33e97efSMauro Carvalho Chehab  As a consequence the value cannot be considered precise and authoritative
2125*c33e97efSMauro Carvalho Chehab  information. The application which uses this information has to be aware
2126*c33e97efSMauro Carvalho Chehab  of the overall scenario on the system in order to determine whether a
2127*c33e97efSMauro Carvalho Chehab  task is a real AVX512 user or not. Precise information can be obtained
2128*c33e97efSMauro Carvalho Chehab  with performance counters.
2129*c33e97efSMauro Carvalho Chehab
2130*c33e97efSMauro Carvalho Chehab  A special value of '-1' indicates that no AVX512 usage was recorded, thus
2131*c33e97efSMauro Carvalho Chehab  the task is unlikely an AVX512 user, but depends on the workload and the
2132*c33e97efSMauro Carvalho Chehab  scheduling scenario, it also could be a false negative mentioned above.
2133*c33e97efSMauro Carvalho Chehab
2134*c33e97efSMauro Carvalho ChehabConfiguring procfs
2135*c33e97efSMauro Carvalho Chehab------------------
2136*c33e97efSMauro Carvalho Chehab
2137*c33e97efSMauro Carvalho Chehab4.1	Mount options
2138*c33e97efSMauro Carvalho Chehab---------------------
2139*c33e97efSMauro Carvalho Chehab
2140*c33e97efSMauro Carvalho ChehabThe following mount options are supported:
2141*c33e97efSMauro Carvalho Chehab
2142*c33e97efSMauro Carvalho Chehab	=========	========================================================
2143*c33e97efSMauro Carvalho Chehab	hidepid=	Set /proc/<pid>/ access mode.
2144*c33e97efSMauro Carvalho Chehab	gid=		Set the group authorized to learn processes information.
2145*c33e97efSMauro Carvalho Chehab	=========	========================================================
2146*c33e97efSMauro Carvalho Chehab
2147*c33e97efSMauro Carvalho Chehabhidepid=0 means classic mode - everybody may access all /proc/<pid>/ directories
2148*c33e97efSMauro Carvalho Chehab(default).
2149*c33e97efSMauro Carvalho Chehab
2150*c33e97efSMauro Carvalho Chehabhidepid=1 means users may not access any /proc/<pid>/ directories but their
2151*c33e97efSMauro Carvalho Chehabown.  Sensitive files like cmdline, sched*, status are now protected against
2152*c33e97efSMauro Carvalho Chehabother users.  This makes it impossible to learn whether any user runs
2153*c33e97efSMauro Carvalho Chehabspecific program (given the program doesn't reveal itself by its behaviour).
2154*c33e97efSMauro Carvalho ChehabAs an additional bonus, as /proc/<pid>/cmdline is unaccessible for other users,
2155*c33e97efSMauro Carvalho Chehabpoorly written programs passing sensitive information via program arguments are
2156*c33e97efSMauro Carvalho Chehabnow protected against local eavesdroppers.
2157*c33e97efSMauro Carvalho Chehab
2158*c33e97efSMauro Carvalho Chehabhidepid=2 means hidepid=1 plus all /proc/<pid>/ will be fully invisible to other
2159*c33e97efSMauro Carvalho Chehabusers.  It doesn't mean that it hides a fact whether a process with a specific
2160*c33e97efSMauro Carvalho Chehabpid value exists (it can be learned by other means, e.g. by "kill -0 $PID"),
2161*c33e97efSMauro Carvalho Chehabbut it hides process' uid and gid, which may be learned by stat()'ing
2162*c33e97efSMauro Carvalho Chehab/proc/<pid>/ otherwise.  It greatly complicates an intruder's task of gathering
2163*c33e97efSMauro Carvalho Chehabinformation about running processes, whether some daemon runs with elevated
2164*c33e97efSMauro Carvalho Chehabprivileges, whether other user runs some sensitive program, whether other users
2165*c33e97efSMauro Carvalho Chehabrun any program at all, etc.
2166*c33e97efSMauro Carvalho Chehab
2167*c33e97efSMauro Carvalho Chehabgid= defines a group authorized to learn processes information otherwise
2168*c33e97efSMauro Carvalho Chehabprohibited by hidepid=.  If you use some daemon like identd which needs to learn
2169*c33e97efSMauro Carvalho Chehabinformation about processes information, just add identd to this group.
2170