Based on kernel version 2.6.25. Page generated on 2008-04-18 21:22 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 ------------------------------------------------------------------------------ 9 Version 1.3 Kernel version 2.2.12 10 Kernel version 2.4.0-test11-pre4 11 ------------------------------------------------------------------------------ 12 13 Table of Contents 14 ----------------- 15 16 0 Preface 17 0.1 Introduction/Credits 18 0.2 Legal Stuff 19 20 1 Collecting System Information 21 1.1 Process-Specific Subdirectories 22 1.2 Kernel data 23 1.3 IDE devices in /proc/ide 24 1.4 Networking info in /proc/net 25 1.5 SCSI info 26 1.6 Parallel port info in /proc/parport 27 1.7 TTY info in /proc/tty 28 1.8 Miscellaneous kernel statistics in /proc/stat 29 30 2 Modifying System Parameters 31 2.1 /proc/sys/fs - File system data 32 2.2 /proc/sys/fs/binfmt_misc - Miscellaneous binary formats 33 2.3 /proc/sys/kernel - general kernel parameters 34 2.4 /proc/sys/vm - The virtual memory subsystem 35 2.5 /proc/sys/dev - Device specific parameters 36 2.6 /proc/sys/sunrpc - Remote procedure calls 37 2.7 /proc/sys/net - Networking stuff 38 2.8 /proc/sys/net/ipv4 - IPV4 settings 39 2.9 Appletalk 40 2.10 IPX 41 2.11 /proc/sys/fs/mqueue - POSIX message queues filesystem 42 2.12 /proc/<pid>/oom_adj - Adjust the oom-killer score 43 2.13 /proc/<pid>/oom_score - Display current oom-killer score 44 2.14 /proc/<pid>/io - Display the IO accounting fields 45 2.15 /proc/<pid>/coredump_filter - Core dump filtering settings 46 47 ------------------------------------------------------------------------------ 48 Preface 49 ------------------------------------------------------------------------------ 50 51 0.1 Introduction/Credits 52 ------------------------ 53 54 This documentation is part of a soon (or so we hope) to be released book on 55 the SuSE Linux distribution. As there is no complete documentation for the 56 /proc file system and we've used many freely available sources to write these 57 chapters, it seems only fair to give the work back to the Linux community. 58 This work is based on the 2.2.* kernel version and the upcoming 2.4.*. I'm 59 afraid it's still far from complete, but we hope it will be useful. As far as 60 we know, it is the first 'all-in-one' document about the /proc file system. It 61 is focused on the Intel x86 hardware, so if you are looking for PPC, ARM, 62 SPARC, AXP, etc., features, you probably won't find what you are looking for. 63 It also only covers IPv4 networking, not IPv6 nor other protocols - sorry. But 64 additions and patches are welcome and will be added to this document if you 65 mail them to Bodo. 66 67 We'd like to thank Alan Cox, Rik van Riel, and Alexey Kuznetsov and a lot of 68 other people for help compiling this documentation. We'd also like to extend a 69 special thank you to Andi Kleen for documentation, which we relied on heavily 70 to create this document, as well as the additional information he provided. 71 Thanks to everybody else who contributed source or docs to the Linux kernel 72 and helped create a great piece of software... :) 73 74 If you have any comments, corrections or additions, please don't hesitate to 75 contact Bodo Bauer at bb[AT]ricochet.net[DOT] We'll be happy to add them to this 76 document. 77 78 The latest version of this document is available online at 79 http://skaro.nightcrawler.com/~bb/Docs/Proc as HTML version. 80 81 If the above direction does not works for you, ypu could try the kernel 82 mailing list at linux-kernel[AT]vger.kernel[DOT]org and/or try to reach me at 83 comandante[AT]zaralinux.com[DOT] 84 85 0.2 Legal Stuff 86 --------------- 87 88 We don't guarantee the correctness of this document, and if you come to us 89 complaining about how you screwed up your system because of incorrect 90 documentation, we won't feel responsible... 91 92 ------------------------------------------------------------------------------ 93 CHAPTER 1: COLLECTING SYSTEM INFORMATION 94 ------------------------------------------------------------------------------ 95 96 ------------------------------------------------------------------------------ 97 In This Chapter 98 ------------------------------------------------------------------------------ 99 * Investigating the properties of the pseudo file system /proc and its 100 ability to provide information on the running Linux system 101 * Examining /proc's structure 102 * Uncovering various information about the kernel and the processes running 103 on the system 104 ------------------------------------------------------------------------------ 105 106 107 The proc file system acts as an interface to internal data structures in the 108 kernel. It can be used to obtain information about the system and to change 109 certain kernel parameters at runtime (sysctl). 110 111 First, we'll take a look at the read-only parts of /proc. In Chapter 2, we 112 show you how you can use /proc/sys to change settings. 113 114 1.1 Process-Specific Subdirectories 115 ----------------------------------- 116 117 The directory /proc contains (among other things) one subdirectory for each 118 process running on the system, which is named after the process ID (PID). 119 120 The link self points to the process reading the file system. Each process 121 subdirectory has the entries listed in Table 1-1. 122 123 124 Table 1-1: Process specific entries in /proc 125 .............................................................................. 126 File Content 127 clear_refs Clears page referenced bits shown in smaps output 128 cmdline Command line arguments 129 cpu Current and last cpu in which it was executed (2.4)(smp) 130 cwd Link to the current working directory 131 environ Values of environment variables 132 exe Link to the executable of this process 133 fd Directory, which contains all file descriptors 134 maps Memory maps to executables and library files (2.4) 135 mem Memory held by this process 136 root Link to the root directory of this process 137 stat Process status 138 statm Process memory status information 139 status Process status in human readable form 140 wchan If CONFIG_KALLSYMS is set, a pre-decoded wchan 141 smaps Extension based on maps, the rss size for each mapped file 142 .............................................................................. 143 144 For example, to get the status information of a process, all you have to do is 145 read the file /proc/PID/status: 146 147 >cat /proc/self/status 148 Name: cat 149 State: R (running) 150 Pid: 5452 151 PPid: 743 152 TracerPid: 0 (2.4) 153 Uid: 501 501 501 501 154 Gid: 100 100 100 100 155 Groups: 100 14 16 156 VmSize: 1112 kB 157 VmLck: 0 kB 158 VmRSS: 348 kB 159 VmData: 24 kB 160 VmStk: 12 kB 161 VmExe: 8 kB 162 VmLib: 1044 kB 163 SigPnd: 0000000000000000 164 SigBlk: 0000000000000000 165 SigIgn: 0000000000000000 166 SigCgt: 0000000000000000 167 CapInh: 00000000fffffeff 168 CapPrm: 0000000000000000 169 CapEff: 0000000000000000 170 171 172 This shows you nearly the same information you would get if you viewed it with 173 the ps command. In fact, ps uses the proc file system to obtain its 174 information. The statm file contains more detailed information about the 175 process memory usage. Its seven fields are explained in Table 1-2. The stat 176 file contains details information about the process itself. Its fields are 177 explained in Table 1-3. 178 179 180 Table 1-2: Contents of the statm files (as of 2.6.8-rc3) 181 .............................................................................. 182 Field Content 183 size total program size (pages) (same as VmSize in status) 184 resident size of memory portions (pages) (same as VmRSS in status) 185 shared number of pages that are shared (i.e. backed by a file) 186 trs number of pages that are 'code' (not including libs; broken, 187 includes data segment) 188 lrs number of pages of library (always 0 on 2.6) 189 drs number of pages of data/stack (including libs; broken, 190 includes library text) 191 dt number of dirty pages (always 0 on 2.6) 192 .............................................................................. 193 194 195 Table 1-3: Contents of the stat files (as of 2.6.22-rc3) 196 .............................................................................. 197 Field Content 198 pid process id 199 tcomm filename of the executable 200 state state (R is running, S is sleeping, D is sleeping in an 201 uninterruptible wait, Z is zombie, T is traced or stopped) 202 ppid process id of the parent process 203 pgrp pgrp of the process 204 sid session id 205 tty_nr tty the process uses 206 tty_pgrp pgrp of the tty 207 flags task flags 208 min_flt number of minor faults 209 cmin_flt number of minor faults with child's 210 maj_flt number of major faults 211 cmaj_flt number of major faults with child's 212 utime user mode jiffies 213 stime kernel mode jiffies 214 cutime user mode jiffies with child's 215 cstime kernel mode jiffies with child's 216 priority priority level 217 nice nice level 218 num_threads number of threads 219 it_real_value (obsolete, always 0) 220 start_time time the process started after system boot 221 vsize virtual memory size 222 rss resident set memory size 223 rsslim current limit in bytes on the rss 224 start_code address above which program text can run 225 end_code address below which program text can run 226 start_stack address of the start of the stack 227 esp current value of ESP 228 eip current value of EIP 229 pending bitmap of pending signals (obsolete) 230 blocked bitmap of blocked signals (obsolete) 231 sigign bitmap of ignored signals (obsolete) 232 sigcatch bitmap of catched signals (obsolete) 233 wchan address where process went to sleep 234 0 (place holder) 235 0 (place holder) 236 exit_signal signal to send to parent thread on exit 237 task_cpu which CPU the task is scheduled on 238 rt_priority realtime priority 239 policy scheduling policy (man sched_setscheduler) 240 blkio_ticks time spent waiting for block IO 241 .............................................................................. 242 243 244 1.2 Kernel data 245 --------------- 246 247 Similar to the process entries, the kernel data files give information about 248 the running kernel. The files used to obtain this information are contained in 249 /proc and are listed in Table 1-4. Not all of these will be present in your 250 system. It depends on the kernel configuration and the loaded modules, which 251 files are there, and which are missing. 252 253 Table 1-4: Kernel info in /proc 254 .............................................................................. 255 File Content 256 apm Advanced power management info 257 buddyinfo Kernel memory allocator information (see text) (2.5) 258 bus Directory containing bus specific information 259 cmdline Kernel command line 260 cpuinfo Info about the CPU 261 devices Available devices (block and character) 262 dma Used DMS channels 263 filesystems Supported filesystems 264 driver Various drivers grouped here, currently rtc (2.4) 265 execdomains Execdomains, related to security (2.4) 266 fb Frame Buffer devices (2.4) 267 fs File system parameters, currently nfs/exports (2.4) 268 ide Directory containing info about the IDE subsystem 269 interrupts Interrupt usage 270 iomem Memory map (2.4) 271 ioports I/O port usage 272 irq Masks for irq to cpu affinity (2.4)(smp?) 273 isapnp ISA PnP (Plug&Play) Info (2.4) 274 kcore Kernel core image (can be ELF or A.OUT(deprecated in 2.4)) 275 kmsg Kernel messages 276 ksyms Kernel symbol table 277 loadavg Load average of last 1, 5 & 15 minutes 278 locks Kernel locks 279 meminfo Memory info 280 misc Miscellaneous 281 modules List of loaded modules 282 mounts Mounted filesystems 283 net Networking info (see text) 284 partitions Table of partitions known to the system 285 pci Deprecated info of PCI bus (new way -> /proc/bus/pci/, 286 decoupled by lspci (2.4) 287 rtc Real time clock 288 scsi SCSI info (see text) 289 slabinfo Slab pool info 290 stat Overall statistics 291 swaps Swap space utilization 292 sys See chapter 2 293 sysvipc Info of SysVIPC Resources (msg, sem, shm) (2.4) 294 tty Info of tty drivers 295 uptime System uptime 296 version Kernel version 297 video bttv info of video resources (2.4) 298 .............................................................................. 299 300 You can, for example, check which interrupts are currently in use and what 301 they are used for by looking in the file /proc/interrupts: 302 303 > cat /proc/interrupts 304 CPU0 305 0: 8728810 XT-PIC timer 306 1: 895 XT-PIC keyboard 307 2: 0 XT-PIC cascade 308 3: 531695 XT-PIC aha152x 309 4: 2014133 XT-PIC serial 310 5: 44401 XT-PIC pcnet_cs 311 8: 2 XT-PIC rtc 312 11: 8 XT-PIC i82365 313 12: 182918 XT-PIC PS/2 Mouse 314 13: 1 XT-PIC fpu 315 14: 1232265 XT-PIC ide0 316 15: 7 XT-PIC ide1 317 NMI: 0 318 319 In 2.4.* a couple of lines where added to this file LOC & ERR (this time is the 320 output of a SMP machine): 321 322 > cat /proc/interrupts 323 324 CPU0 CPU1 325 0: 1243498 1214548 IO-APIC-edge timer 326 1: 8949 8958 IO-APIC-edge keyboard 327 2: 0 0 XT-PIC cascade 328 5: 11286 10161 IO-APIC-edge soundblaster 329 8: 1 0 IO-APIC-edge rtc 330 9: 27422 27407 IO-APIC-edge 3c503 331 12: 113645 113873 IO-APIC-edge PS/2 Mouse 332 13: 0 0 XT-PIC fpu 333 14: 22491 24012 IO-APIC-edge ide0 334 15: 2183 2415 IO-APIC-edge ide1 335 17: 30564 30414 IO-APIC-level eth0 336 18: 177 164 IO-APIC-level bttv 337 NMI: 2457961 2457959 338 LOC: 2457882 2457881 339 ERR: 2155 340 341 NMI is incremented in this case because every timer interrupt generates a NMI 342 (Non Maskable Interrupt) which is used by the NMI Watchdog to detect lockups. 343 344 LOC is the local interrupt counter of the internal APIC of every CPU. 345 346 ERR is incremented in the case of errors in the IO-APIC bus (the bus that 347 connects the CPUs in a SMP system. This means that an error has been detected, 348 the IO-APIC automatically retry the transmission, so it should not be a big 349 problem, but you should read the SMP-FAQ. 350 351 In 2.6.2* /proc/interrupts was expanded again. This time the goal was for 352 /proc/interrupts to display every IRQ vector in use by the system, not 353 just those considered 'most important'. The new vectors are: 354 355 THR -- interrupt raised when a machine check threshold counter 356 (typically counting ECC corrected errors of memory or cache) exceeds 357 a configurable threshold. Only available on some systems. 358 359 TRM -- a thermal event interrupt occurs when a temperature threshold 360 has been exceeded for the CPU. This interrupt may also be generated 361 when the temperature drops back to normal. 362 363 SPU -- a spurious interrupt is some interrupt that was raised then lowered 364 by some IO device before it could be fully processed by the APIC. Hence 365 the APIC sees the interrupt but does not know what device it came from. 366 For this case the APIC will generate the interrupt with a IRQ vector 367 of 0xff. This might also be generated by chipset bugs. 368 369 RES, CAL, TLB -- rescheduling, call and TLB flush interrupts are 370 sent from one CPU to another per the needs of the OS. Typically, 371 their statistics are used by kernel developers and interested users to 372 determine the occurance of interrupt of the given type. 373 374 The above IRQ vectors are displayed only when relevent. For example, 375 the threshold vector does not exist on x86_64 platforms. Others are 376 suppressed when the system is a uniprocessor. As of this writing, only 377 i386 and x86_64 platforms support the new IRQ vector displays. 378 379 Of some interest is the introduction of the /proc/irq directory to 2.4. 380 It could be used to set IRQ to CPU affinity, this means that you can "hook" an 381 IRQ to only one CPU, or to exclude a CPU of handling IRQs. The contents of the 382 irq subdir is one subdir for each IRQ, and one file; prof_cpu_mask 383 384 For example 385 > ls /proc/irq/ 386 0 10 12 14 16 18 2 4 6 8 prof_cpu_mask 387 1 11 13 15 17 19 3 5 7 9 388 > ls /proc/irq/0/ 389 smp_affinity 390 391 The contents of the prof_cpu_mask file and each smp_affinity file for each IRQ 392 is the same by default: 393 394 > cat /proc/irq/0/smp_affinity 395 ffffffff 396 397 It's a bitmask, in which you can specify which CPUs can handle the IRQ, you can 398 set it by doing: 399 400 > echo 1 > /proc/irq/prof_cpu_mask 401 402 This means that only the first CPU will handle the IRQ, but you can also echo 5 403 which means that only the first and fourth CPU can handle the IRQ. 404 405 The way IRQs are routed is handled by the IO-APIC, and it's Round Robin 406 between all the CPUs which are allowed to handle it. As usual the kernel has 407 more info than you and does a better job than you, so the defaults are the 408 best choice for almost everyone. 409 410 There are three more important subdirectories in /proc: net, scsi, and sys. 411 The general rule is that the contents, or even the existence of these 412 directories, depend on your kernel configuration. If SCSI is not enabled, the 413 directory scsi may not exist. The same is true with the net, which is there 414 only when networking support is present in the running kernel. 415 416 The slabinfo file gives information about memory usage at the slab level. 417 Linux uses slab pools for memory management above page level in version 2.2. 418 Commonly used objects have their own slab pool (such as network buffers, 419 directory cache, and so on). 420 421 .............................................................................. 422 423 > cat /proc/buddyinfo 424 425 Node 0, zone DMA 0 4 5 4 4 3 ... 426 Node 0, zone Normal 1 0 0 1 101 8 ... 427 Node 0, zone HighMem 2 0 0 1 1 0 ... 428 429 Memory fragmentation is a problem under some workloads, and buddyinfo is a 430 useful tool for helping diagnose these problems. Buddyinfo will give you a 431 clue as to how big an area you can safely allocate, or why a previous 432 allocation failed. 433 434 Each column represents the number of pages of a certain order which are 435 available. In this case, there are 0 chunks of 2^0*PAGE_SIZE available in 436 ZONE_DMA, 4 chunks of 2^1*PAGE_SIZE in ZONE_DMA, 101 chunks of 2^4*PAGE_SIZE 437 available in ZONE_NORMAL, etc... 438 439 .............................................................................. 440 441 meminfo: 442 443 Provides information about distribution and utilization of memory. This 444 varies by architecture and compile options. The following is from a 445 16GB PIII, which has highmem enabled. You may not have all of these fields. 446 447 > cat /proc/meminfo 448 449 450 MemTotal: 16344972 kB 451 MemFree: 13634064 kB 452 Buffers: 3656 kB 453 Cached: 1195708 kB 454 SwapCached: 0 kB 455 Active: 891636 kB 456 Inactive: 1077224 kB 457 HighTotal: 15597528 kB 458 HighFree: 13629632 kB 459 LowTotal: 747444 kB 460 LowFree: 4432 kB 461 SwapTotal: 0 kB 462 SwapFree: 0 kB 463 Dirty: 968 kB 464 Writeback: 0 kB 465 Mapped: 280372 kB 466 Slab: 684068 kB 467 CommitLimit: 7669796 kB 468 Committed_AS: 100056 kB 469 PageTables: 24448 kB 470 VmallocTotal: 112216 kB 471 VmallocUsed: 428 kB 472 VmallocChunk: 111088 kB 473 474 MemTotal: Total usable ram (i.e. physical ram minus a few reserved 475 bits and the kernel binary code) 476 MemFree: The sum of LowFree+HighFree 477 Buffers: Relatively temporary storage for raw disk blocks 478 shouldn't get tremendously large (20MB or so) 479 Cached: in-memory cache for files read from the disk (the 480 pagecache). Doesn't include SwapCached 481 SwapCached: Memory that once was swapped out, is swapped back in but 482 still also is in the swapfile (if memory is needed it 483 doesn't need to be swapped out AGAIN because it is already 484 in the swapfile. This saves I/O) 485 Active: Memory that has been used more recently and usually not 486 reclaimed unless absolutely necessary. 487 Inactive: Memory which has been less recently used. It is more 488 eligible to be reclaimed for other purposes 489 HighTotal: 490 HighFree: Highmem is all memory above ~860MB of physical memory 491 Highmem areas are for use by userspace programs, or 492 for the pagecache. The kernel must use tricks to access 493 this memory, making it slower to access than lowmem. 494 LowTotal: 495 LowFree: Lowmem is memory which can be used for everything that 496 highmem can be used for, but it is also available for the 497 kernel's use for its own data structures. Among many 498 other things, it is where everything from the Slab is 499 allocated. Bad things happen when you're out of lowmem. 500 SwapTotal: total amount of swap space available 501 SwapFree: Memory which has been evicted from RAM, and is temporarily 502 on the disk 503 Dirty: Memory which is waiting to get written back to the disk 504 Writeback: Memory which is actively being written back to the disk 505 Mapped: files which have been mmaped, such as libraries 506 Slab: in-kernel data structures cache 507 CommitLimit: Based on the overcommit ratio ('vm.overcommit_ratio'), 508 this is the total amount of memory currently available to 509 be allocated on the system. This limit is only adhered to 510 if strict overcommit accounting is enabled (mode 2 in 511 'vm.overcommit_memory'). 512 The CommitLimit is calculated with the following formula: 513 CommitLimit = ('vm.overcommit_ratio' * Physical RAM) + Swap 514 For example, on a system with 1G of physical RAM and 7G 515 of swap with a `vm.overcommit_ratio` of 30 it would 516 yield a CommitLimit of 7.3G. 517 For more details, see the memory overcommit documentation 518 in vm/overcommit-accounting. 519 Committed_AS: The amount of memory presently allocated on the system. 520 The committed memory is a sum of all of the memory which 521 has been allocated by processes, even if it has not been 522 "used" by them as of yet. A process which malloc()'s 1G 523 of memory, but only touches 300M of it will only show up 524 as using 300M of memory even if it has the address space 525 allocated for the entire 1G. This 1G is memory which has 526 been "committed" to by the VM and can be used at any time 527 by the allocating application. With strict overcommit 528 enabled on the system (mode 2 in 'vm.overcommit_memory'), 529 allocations which would exceed the CommitLimit (detailed 530 above) will not be permitted. This is useful if one needs 531 to guarantee that processes will not fail due to lack of 532 memory once that memory has been successfully allocated. 533 PageTables: amount of memory dedicated to the lowest level of page 534 tables. 535 VmallocTotal: total size of vmalloc memory area 536 VmallocUsed: amount of vmalloc area which is used 537 VmallocChunk: largest contigious block of vmalloc area which is free 538 539 540 1.3 IDE devices in /proc/ide 541 ---------------------------- 542 543 The subdirectory /proc/ide contains information about all IDE devices of which 544 the kernel is aware. There is one subdirectory for each IDE controller, the 545 file drivers and a link for each IDE device, pointing to the device directory 546 in the controller specific subtree. 547 548 The file drivers contains general information about the drivers used for the 549 IDE devices: 550 551 > cat /proc/ide/drivers 552 ide-cdrom version 4.53 553 ide-disk version 1.08 554 555 More detailed information can be found in the controller specific 556 subdirectories. These are named ide0, ide1 and so on. Each of these 557 directories contains the files shown in table 1-5. 558 559 560 Table 1-5: IDE controller info in /proc/ide/ide? 561 .............................................................................. 562 File Content 563 channel IDE channel (0 or 1) 564 config Configuration (only for PCI/IDE bridge) 565 mate Mate name 566 model Type/Chipset of IDE controller 567 .............................................................................. 568 569 Each device connected to a controller has a separate subdirectory in the 570 controllers directory. The files listed in table 1-6 are contained in these 571 directories. 572 573 574 Table 1-6: IDE device information 575 .............................................................................. 576 File Content 577 cache The cache 578 capacity Capacity of the medium (in 512Byte blocks) 579 driver driver and version 580 geometry physical and logical geometry 581 identify device identify block 582 media media type 583 model device identifier 584 settings device setup 585 smart_thresholds IDE disk management thresholds 586 smart_values IDE disk management values 587 .............................................................................. 588 589 The most interesting file is settings. This file contains a nice overview of 590 the drive parameters: 591 592 # cat /proc/ide/ide0/hda/settings 593 name value min max mode 594 ---- ----- --- --- ---- 595 bios_cyl 526 0 65535 rw 596 bios_head 255 0 255 rw 597 bios_sect 63 0 63 rw 598 breada_readahead 4 0 127 rw 599 bswap 0 0 1 r 600 file_readahead 72 0 2097151 rw 601 io_32bit 0 0 3 rw 602 keepsettings 0 0 1 rw 603 max_kb_per_request 122 1 127 rw 604 multcount 0 0 8 rw 605 nice1 1 0 1 rw 606 nowerr 0 0 1 rw 607 pio_mode write-only 0 255 w 608 slow 0 0 1 rw 609 unmaskirq 0 0 1 rw 610 using_dma 0 0 1 rw 611 612 613 1.4 Networking info in /proc/net 614 -------------------------------- 615 616 The subdirectory /proc/net follows the usual pattern. Table 1-6 shows the 617 additional values you get for IP version 6 if you configure the kernel to 618 support this. Table 1-7 lists the files and their meaning. 619 620 621 Table 1-6: IPv6 info in /proc/net 622 .............................................................................. 623 File Content 624 udp6 UDP sockets (IPv6) 625 tcp6 TCP sockets (IPv6) 626 raw6 Raw device statistics (IPv6) 627 igmp6 IP multicast addresses, which this host joined (IPv6) 628 if_inet6 List of IPv6 interface addresses 629 ipv6_route Kernel routing table for IPv6 630 rt6_stats Global IPv6 routing tables statistics 631 sockstat6 Socket statistics (IPv6) 632 snmp6 Snmp data (IPv6) 633 .............................................................................. 634 635 636 Table 1-7: Network info in /proc/net 637 .............................................................................. 638 File Content 639 arp Kernel ARP table 640 dev network devices with statistics 641 dev_mcast the Layer2 multicast groups a device is listening too 642 (interface index, label, number of references, number of bound 643 addresses). 644 dev_stat network device status 645 ip_fwchains Firewall chain linkage 646 ip_fwnames Firewall chain names 647 ip_masq Directory containing the masquerading tables 648 ip_masquerade Major masquerading table 649 netstat Network statistics 650 raw raw device statistics 651 route Kernel routing table 652 rpc Directory containing rpc info 653 rt_cache Routing cache 654 snmp SNMP data 655 sockstat Socket statistics 656 tcp TCP sockets 657 tr_rif Token ring RIF routing table 658 udp UDP sockets 659 unix UNIX domain sockets 660 wireless Wireless interface data (Wavelan etc) 661 igmp IP multicast addresses, which this host joined 662 psched Global packet scheduler parameters. 663 netlink List of PF_NETLINK sockets 664 ip_mr_vifs List of multicast virtual interfaces 665 ip_mr_cache List of multicast routing cache 666 .............................................................................. 667 668 You can use this information to see which network devices are available in 669 your system and how much traffic was routed over those devices: 670 671 > cat /proc/net/dev 672 Inter-|Receive |[... 673 face |bytes packets errs drop fifo frame compressed multicast|[... 674 lo: 908188 5596 0 0 0 0 0 0 [... 675 ppp0:15475140 20721 410 0 0 410 0 0 [... 676 eth0: 614530 7085 0 0 0 0 0 1 [... 677 678 ...] Transmit 679 ...] bytes packets errs drop fifo colls carrier compressed 680 ...] 908188 5596 0 0 0 0 0 0 681 ...] 1375103 17405 0 0 0 0 0 0 682 ...] 1703981 5535 0 0 0 3 0 0 683 684 In addition, each Channel Bond interface has it's own directory. For 685 example, the bond0 device will have a directory called /proc/net/bond0/. 686 It will contain information that is specific to that bond, such as the 687 current slaves of the bond, the link status of the slaves, and how 688 many times the slaves link has failed. 689 690 1.5 SCSI info 691 ------------- 692 693 If you have a SCSI host adapter in your system, you'll find a subdirectory 694 named after the driver for this adapter in /proc/scsi. You'll also see a list 695 of all recognized SCSI devices in /proc/scsi: 696 697 >cat /proc/scsi/scsi 698 Attached devices: 699 Host: scsi0 Channel: 00 Id: 00 Lun: 00 700 Vendor: IBM Model: DGHS09U Rev: 03E0 701 Type: Direct-Access ANSI SCSI revision: 03 702 Host: scsi0 Channel: 00 Id: 06 Lun: 00 703 Vendor: PIONEER Model: CD-ROM DR-U06S Rev: 1.04 704 Type: CD-ROM ANSI SCSI revision: 02 705 706 707 The directory named after the driver has one file for each adapter found in 708 the system. These files contain information about the controller, including 709 the used IRQ and the IO address range. The amount of information shown is 710 dependent on the adapter you use. The example shows the output for an Adaptec 711 AHA-2940 SCSI adapter: 712 713 > cat /proc/scsi/aic7xxx/0 714 715 Adaptec AIC7xxx driver version: 5.1.19/3.2.4 716 Compile Options: 717 TCQ Enabled By Default : Disabled 718 AIC7XXX_PROC_STATS : Disabled 719 AIC7XXX_RESET_DELAY : 5 720 Adapter Configuration: 721 SCSI Adapter: Adaptec AHA-294X Ultra SCSI host adapter 722 Ultra Wide Controller 723 PCI MMAPed I/O Base: 0xeb001000 724 Adapter SEEPROM Config: SEEPROM found and used. 725 Adaptec SCSI BIOS: Enabled 726 IRQ: 10 727 SCBs: Active 0, Max Active 2, 728 Allocated 15, HW 16, Page 255 729 Interrupts: 160328 730 BIOS Control Word: 0x18b6 731 Adapter Control Word: 0x005b 732 Extended Translation: Enabled 733 Disconnect Enable Flags: 0xffff 734 Ultra Enable Flags: 0x0001 735 Tag Queue Enable Flags: 0x0000 736 Ordered Queue Tag Flags: 0x0000 737 Default Tag Queue Depth: 8 738 Tagged Queue By Device array for aic7xxx host instance 0: 739 {255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255} 740 Actual queue depth per device for aic7xxx host instance 0: 741 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} 742 Statistics: 743 (scsi0:0:0:0) 744 Device using Wide/Sync transfers at 40.0 MByte/sec, offset 8 745 Transinfo settings: current(12/8/1/0), goal(12/8/1/0), user(12/15/1/0) 746 Total transfers 160151 (74577 reads and 85574 writes) 747 (scsi0:0:6:0) 748 Device using Narrow/Sync transfers at 5.0 MByte/sec, offset 15 749 Transinfo settings: current(50/15/0/0), goal(50/15/0/0), user(50/15/0/0) 750 Total transfers 0 (0 reads and 0 writes) 751 752 753 1.6 Parallel port info in /proc/parport 754 --------------------------------------- 755 756 The directory /proc/parport contains information about the parallel ports of 757 your system. It has one subdirectory for each port, named after the port 758 number (0,1,2,...). 759 760 These directories contain the four files shown in Table 1-8. 761 762 763 Table 1-8: Files in /proc/parport 764 .............................................................................. 765 File Content 766 autoprobe Any IEEE-1284 device ID information that has been acquired. 767 devices list of the device drivers using that port. A + will appear by the 768 name of the device currently using the port (it might not appear 769 against any). 770 hardware Parallel port's base address, IRQ line and DMA channel. 771 irq IRQ that parport is using for that port. This is in a separate 772 file to allow you to alter it by writing a new value in (IRQ 773 number or none). 774 .............................................................................. 775 776 1.7 TTY info in /proc/tty 777 ------------------------- 778 779 Information about the available and actually used tty's can be found in the 780 directory /proc/tty.You'll find entries for drivers and line disciplines in 781 this directory, as shown in Table 1-9. 782 783 784 Table 1-9: Files in /proc/tty 785 .............................................................................. 786 File Content 787 drivers list of drivers and their usage 788 ldiscs registered line disciplines 789 driver/serial usage statistic and status of single tty lines 790 .............................................................................. 791 792 To see which tty's are currently in use, you can simply look into the file 793 /proc/tty/drivers: 794 795 > cat /proc/tty/drivers 796 pty_slave /dev/pts 136 0-255 pty:slave 797 pty_master /dev/ptm 128 0-255 pty:master 798 pty_slave /dev/ttyp 3 0-255 pty:slave 799 pty_master /dev/pty 2 0-255 pty:master 800 serial /dev/cua 5 64-67 serial:callout 801 serial /dev/ttyS 4 64-67 serial 802 /dev/tty0 /dev/tty0 4 0 system:vtmaster 803 /dev/ptmx /dev/ptmx 5 2 system 804 /dev/console /dev/console 5 1 system:console 805 /dev/tty /dev/tty 5 0 system:/dev/tty 806 unknown /dev/tty 4 1-63 console 807 808 809 1.8 Miscellaneous kernel statistics in /proc/stat 810 ------------------------------------------------- 811 812 Various pieces of information about kernel activity are available in the 813 /proc/stat file. All of the numbers reported in this file are aggregates 814 since the system first booted. For a quick look, simply cat the file: 815 816 > cat /proc/stat 817 cpu 2255 34 2290 22625563 6290 127 456 0 818 cpu0 1132 34 1441 11311718 3675 127 438 0 819 cpu1 1123 0 849 11313845 2614 0 18 0 820 intr 114930548 113199788 3 0 5 263 0 4 [... lots more numbers ...] 821 ctxt 1990473 822 btime 1062191376 823 processes 2915 824 procs_running 1 825 procs_blocked 0 826 827 The very first "cpu" line aggregates the numbers in all of the other "cpuN" 828 lines. These numbers identify the amount of time the CPU has spent performing 829 different kinds of work. Time units are in USER_HZ (typically hundredths of a 830 second). The meanings of the columns are as follows, from left to right: 831 832 - user: normal processes executing in user mode 833 - nice: niced processes executing in user mode 834 - system: processes executing in kernel mode 835 - idle: twiddling thumbs 836 - iowait: waiting for I/O to complete 837 - irq: servicing interrupts 838 - softirq: servicing softirqs 839 - steal: involuntary wait 840 841 The "intr" line gives counts of interrupts serviced since boot time, for each 842 of the possible system interrupts. The first column is the total of all 843 interrupts serviced; each subsequent column is the total for that particular 844 interrupt. 845 846 The "ctxt" line gives the total number of context switches across all CPUs. 847 848 The "btime" line gives the time at which the system booted, in seconds since 849 the Unix epoch. 850 851 The "processes" line gives the number of processes and threads created, which 852 includes (but is not limited to) those created by calls to the fork() and 853 clone() system calls. 854 855 The "procs_running" line gives the number of processes currently running on 856 CPUs. 857 858 The "procs_blocked" line gives the number of processes currently blocked, 859 waiting for I/O to complete. 860 861 1.9 Ext4 file system parameters 862 ------------------------------ 863 Ext4 file system have one directory per partition under /proc/fs/ext4/ 864 # ls /proc/fs/ext4/hdc/ 865 group_prealloc max_to_scan mb_groups mb_history min_to_scan order2_req 866 stats stream_req 867 868 mb_groups: 869 This file gives the details of mutiblock allocator buddy cache of free blocks 870 871 mb_history: 872 Multiblock allocation history. 873 874 stats: 875 This file indicate whether the multiblock allocator should start collecting 876 statistics. The statistics are shown during unmount 877 878 group_prealloc: 879 The multiblock allocator normalize the block allocation request to 880 group_prealloc filesystem blocks if we don't have strip value set. 881 The stripe value can be specified at mount time or during mke2fs. 882 883 max_to_scan: 884 How long multiblock allocator can look for a best extent (in found extents) 885 886 min_to_scan: 887 How long multiblock allocator must look for a best extent 888 889 order2_req: 890 Multiblock allocator use 2^N search using buddies only for requests greater 891 than or equal to order2_req. The request size is specfied in file system 892 blocks. A value of 2 indicate only if the requests are greater than or equal 893 to 4 blocks. 894 895 stream_req: 896 Files smaller than stream_req are served by the stream allocator, whose 897 purpose is to pack requests as close each to other as possible to 898 produce smooth I/O traffic. Avalue of 16 indicate that file smaller than 16 899 filesystem block size will use group based preallocation. 900 901 ------------------------------------------------------------------------------ 902 Summary 903 ------------------------------------------------------------------------------ 904 The /proc file system serves information about the running system. It not only 905 allows access to process data but also allows you to request the kernel status 906 by reading files in the hierarchy. 907 908 The directory structure of /proc reflects the types of information and makes 909 it easy, if not obvious, where to look for specific data. 910 ------------------------------------------------------------------------------ 911 912 ------------------------------------------------------------------------------ 913 CHAPTER 2: MODIFYING SYSTEM PARAMETERS 914 ------------------------------------------------------------------------------ 915 916 ------------------------------------------------------------------------------ 917 In This Chapter 918 ------------------------------------------------------------------------------ 919 * Modifying kernel parameters by writing into files found in /proc/sys 920 * Exploring the files which modify certain parameters 921 * Review of the /proc/sys file tree 922 ------------------------------------------------------------------------------ 923 924 925 A very interesting part of /proc is the directory /proc/sys. This is not only 926 a source of information, it also allows you to change parameters within the 927 kernel. Be very careful when attempting this. You can optimize your system, 928 but you can also cause it to crash. Never alter kernel parameters on a 929 production system. Set up a development machine and test to make sure that 930 everything works the way you want it to. You may have no alternative but to 931 reboot the machine once an error has been made. 932 933 To change a value, simply echo the new value into the file. An example is 934 given below in the section on the file system data. You need to be root to do 935 this. You can create your own boot script to perform this every time your 936 system boots. 937 938 The files in /proc/sys can be used to fine tune and monitor miscellaneous and 939 general things in the operation of the Linux kernel. Since some of the files 940 can inadvertently disrupt your system, it is advisable to read both 941 documentation and source before actually making adjustments. In any case, be 942 very careful when writing to any of these files. The entries in /proc may 943 change slightly between the 2.1.* and the 2.2 kernel, so if there is any doubt 944 review the kernel documentation in the directory /usr/src/linux/Documentation. 945 This chapter is heavily based on the documentation included in the pre 2.2 946 kernels, and became part of it in version 2.2.1 of the Linux kernel. 947 948 2.1 /proc/sys/fs - File system data 949 ----------------------------------- 950 951 This subdirectory contains specific file system, file handle, inode, dentry 952 and quota information. 953 954 Currently, these files are in /proc/sys/fs: 955 956 dentry-state 957 ------------ 958 959 Status of the directory cache. Since directory entries are dynamically 960 allocated and deallocated, this file indicates the current status. It holds 961 six values, in which the last two are not used and are always zero. The others 962 are listed in table 2-1. 963 964 965 Table 2-1: Status files of the directory cache 966 .............................................................................. 967 File Content 968 nr_dentry Almost always zero 969 nr_unused Number of unused cache entries 970 age_limit 971 in seconds after the entry may be reclaimed, when memory is short 972 want_pages internally 973 .............................................................................. 974 975 dquot-nr and dquot-max 976 ---------------------- 977 978 The file dquot-max shows the maximum number of cached disk quota entries. 979 980 The file dquot-nr shows the number of allocated disk quota entries and the 981 number of free disk quota entries. 982 983 If the number of available cached disk quotas is very low and you have a large 984 number of simultaneous system users, you might want to raise the limit. 985 986 file-nr and file-max 987 -------------------- 988 989 The kernel allocates file handles dynamically, but doesn't free them again at 990 this time. 991 992 The value in file-max denotes the maximum number of file handles that the 993 Linux kernel will allocate. When you get a lot of error messages about running 994 out of file handles, you might want to raise this limit. The default value is 995 10% of RAM in kilobytes. To change it, just write the new number into the 996 file: 997 998 # cat /proc/sys/fs/file-max 999 4096 1000 # echo 8192 > /proc/sys/fs/file-max 1001 # cat /proc/sys/fs/file-max 1002 8192 1003 1004 1005 This method of revision is useful for all customizable parameters of the 1006 kernel - simply echo the new value to the corresponding file. 1007 1008 Historically, the three values in file-nr denoted the number of allocated file 1009 handles, the number of allocated but unused file handles, and the maximum 1010 number of file handles. Linux 2.6 always reports 0 as the number of free file 1011 handles -- this is not an error, it just means that the number of allocated 1012 file handles exactly matches the number of used file handles. 1013 1014 Attempts to allocate more file descriptors than file-max are reported with 1015 printk, look for "VFS: file-max limit <number> reached". 1016 1017 inode-state and inode-nr 1018 ------------------------ 1019 1020 The file inode-nr contains the first two items from inode-state, so we'll skip 1021 to that file... 1022 1023 inode-state contains two actual numbers and five dummy values. The numbers 1024 are nr_inodes and nr_free_inodes (in order of appearance). 1025 1026 nr_inodes 1027 ~~~~~~~~~ 1028 1029 Denotes the number of inodes the system has allocated. This number will 1030 grow and shrink dynamically. 1031 1032 nr_open 1033 ------- 1034 1035 Denotes the maximum number of file-handles a process can 1036 allocate. Default value is 1024*1024 (1048576) which should be 1037 enough for most machines. Actual limit depends on RLIMIT_NOFILE 1038 resource limit. 1039 1040 nr_free_inodes 1041 -------------- 1042 1043 Represents the number of free inodes. Ie. The number of inuse inodes is 1044 (nr_inodes - nr_free_inodes). 1045 1046 aio-nr and aio-max-nr 1047 --------------------- 1048 1049 aio-nr is the running total of the number of events specified on the 1050 io_setup system call for all currently active aio contexts. If aio-nr 1051 reaches aio-max-nr then io_setup will fail with EAGAIN. Note that 1052 raising aio-max-nr does not result in the pre-allocation or re-sizing 1053 of any kernel data structures. 1054 1055 2.2 /proc/sys/fs/binfmt_misc - Miscellaneous binary formats 1056 ----------------------------------------------------------- 1057 1058 Besides these files, there is the subdirectory /proc/sys/fs/binfmt_misc. This 1059 handles the kernel support for miscellaneous binary formats. 1060 1061 Binfmt_misc provides the ability to register additional binary formats to the 1062 Kernel without compiling an additional module/kernel. Therefore, binfmt_misc 1063 needs to know magic numbers at the beginning or the filename extension of the 1064 binary. 1065 1066 It works by maintaining a linked list of structs that contain a description of 1067 a binary format, including a magic with size (or the filename extension), 1068 offset and mask, and the interpreter name. On request it invokes the given 1069 interpreter with the original program as argument, as binfmt_java and 1070 binfmt_em86 and binfmt_mz do. Since binfmt_misc does not define any default 1071 binary-formats, you have to register an additional binary-format. 1072 1073 There are two general files in binfmt_misc and one file per registered format. 1074 The two general files are register and status. 1075 1076 Registering a new binary format 1077 ------------------------------- 1078 1079 To register a new binary format you have to issue the command 1080 1081 echo :name:type:offset:magic:mask:interpreter: > /proc/sys/fs/binfmt_misc/register 1082 1083 1084 1085 with appropriate name (the name for the /proc-dir entry), offset (defaults to 1086 0, if omitted), magic, mask (which can be omitted, defaults to all 0xff) and 1087 last but not least, the interpreter that is to be invoked (for example and 1088 testing /bin/echo). Type can be M for usual magic matching or E for filename 1089 extension matching (give extension in place of magic). 1090 1091 Check or reset the status of the binary format handler 1092 ------------------------------------------------------ 1093 1094 If you do a cat on the file /proc/sys/fs/binfmt_misc/status, you will get the 1095 current status (enabled/disabled) of binfmt_misc. Change the status by echoing 1096 0 (disables) or 1 (enables) or -1 (caution: this clears all previously 1097 registered binary formats) to status. For example echo 0 > status to disable 1098 binfmt_misc (temporarily). 1099 1100 Status of a single handler 1101 -------------------------- 1102 1103 Each registered handler has an entry in /proc/sys/fs/binfmt_misc. These files 1104 perform the same function as status, but their scope is limited to the actual 1105 binary format. By cating this file, you also receive all related information 1106 about the interpreter/magic of the binfmt. 1107 1108 Example usage of binfmt_misc (emulate binfmt_java) 1109 -------------------------------------------------- 1110 1111 cd /proc/sys/fs/binfmt_misc 1112 echo ':Java:M::\xca\xfe\xba\xbe::/usr/local/java/bin/javawrapper:' > register 1113 echo ':HTML:E::html::/usr/local/java/bin/appletviewer:' > register 1114 echo ':Applet:M::<!--applet::/usr/local/java/bin/appletviewer:' > register 1115 echo ':DEXE:M::\x0eDEX::/usr/bin/dosexec:' > register 1116 1117 1118 These four lines add support for Java executables and Java applets (like 1119 binfmt_java, additionally recognizing the .html extension with no need to put 1120 <!--applet> to every applet file). You have to install the JDK and the 1121 shell-script /usr/local/java/bin/javawrapper too. It works around the 1122 brokenness of the Java filename handling. To add a Java binary, just create a 1123 link to the class-file somewhere in the path. 1124 1125 2.3 /proc/sys/kernel - general kernel parameters 1126 ------------------------------------------------ 1127 1128 This directory reflects general kernel behaviors. As I've said before, the 1129 contents depend on your configuration. Here you'll find the most important 1130 files, along with descriptions of what they mean and how to use them. 1131 1132 acct 1133 ---- 1134 1135 The file contains three values; highwater, lowwater, and frequency. 1136 1137 It exists only when BSD-style process accounting is enabled. These values 1138 control its behavior. If the free space on the file system where the log lives 1139 goes below lowwater percentage, accounting suspends. If it goes above 1140 highwater percentage, accounting resumes. Frequency determines how often you 1141 check the amount of free space (value is in seconds). Default settings are: 4, 1142 2, and 30. That is, suspend accounting if there is less than 2 percent free; 1143 resume it if we have a value of 3 or more percent; consider information about 1144 the amount of free space valid for 30 seconds 1145 1146 ctrl-alt-del 1147 ------------ 1148 1149 When the value in this file is 0, ctrl-alt-del is trapped and sent to the init 1150 program to handle a graceful restart. However, when the value is greater that 1151 zero, Linux's reaction to this key combination will be an immediate reboot, 1152 without syncing its dirty buffers. 1153 1154 [NOTE] 1155 When a program (like dosemu) has the keyboard in raw mode, the 1156 ctrl-alt-del is intercepted by the program before it ever reaches the 1157 kernel tty layer, and it is up to the program to decide what to do with 1158 it. 1159 1160 domainname and hostname 1161 ----------------------- 1162 1163 These files can be controlled to set the NIS domainname and hostname of your 1164 box. For the classic darkstar.frop.org a simple: 1165 1166 # echo "darkstar" > /proc/sys/kernel/hostname 1167 # echo "frop.org" > /proc/sys/kernel/domainname 1168 1169 1170 would suffice to set your hostname and NIS domainname. 1171 1172 osrelease, ostype and version 1173 ----------------------------- 1174 1175 The names make it pretty obvious what these fields contain: 1176 1177 > cat /proc/sys/kernel/osrelease 1178 2.2.12 1179 1180 > cat /proc/sys/kernel/ostype 1181 Linux 1182 1183 > cat /proc/sys/kernel/version 1184 #4 Fri Oct 1 12:41:14 PDT 1999 1185 1186 1187 The files osrelease and ostype should be clear enough. Version needs a little 1188 more clarification. The #4 means that this is the 4th kernel built from this 1189 source base and the date after it indicates the time the kernel was built. The 1190 only way to tune these values is to rebuild the kernel. 1191 1192 panic 1193 ----- 1194 1195 The value in this file represents the number of seconds the kernel waits 1196 before rebooting on a panic. When you use the software watchdog, the 1197 recommended setting is 60. If set to 0, the auto reboot after a kernel panic 1198 is disabled, which is the default setting. 1199 1200 printk 1201 ------ 1202 1203 The four values in printk denote 1204 * console_loglevel, 1205 * default_message_loglevel, 1206 * minimum_console_loglevel and 1207 * default_console_loglevel 1208 respectively. 1209 1210 These values influence printk() behavior when printing or logging error 1211 messages, which come from inside the kernel. See syslog(2) for more 1212 information on the different log levels. 1213 1214 console_loglevel 1215 ---------------- 1216 1217 Messages with a higher priority than this will be printed to the console. 1218 1219 default_message_level 1220 --------------------- 1221 1222 Messages without an explicit priority will be printed with this priority. 1223 1224 minimum_console_loglevel 1225 ------------------------ 1226 1227 Minimum (highest) value to which the console_loglevel can be set. 1228 1229 default_console_loglevel 1230 ------------------------ 1231 1232 Default value for console_loglevel. 1233 1234 sg-big-buff 1235 ----------- 1236 1237 This file shows the size of the generic SCSI (sg) buffer. At this point, you 1238 can't tune it yet, but you can change it at compile time by editing 1239 include/scsi/sg.h and changing the value of SG_BIG_BUFF. 1240 1241 If you use a scanner with SANE (Scanner Access Now Easy) you might want to set 1242 this to a higher value. Refer to the SANE documentation on this issue. 1243 1244 modprobe 1245 -------- 1246 1247 The location where the modprobe binary is located. The kernel uses this 1248 program to load modules on demand. 1249 1250 unknown_nmi_panic