About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / filesystems / proc.txt




Custom Search

Based on kernel version 2.6.34. Page generated on 2010-05-31 16:02 EST.

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

Information is copyright its respective author. All material is available from the Linux Kernel Source distributed under a GPL License. This page is provided as a free service by mjmwired.net.