diff options
Diffstat (limited to 'Documentation/filesystems/proc.txt')
-rw-r--r-- | Documentation/filesystems/proc.txt | 2559 |
1 files changed, 1447 insertions, 1112 deletions
diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt index d842f7ed6..a17c05b0f 100644 --- a/Documentation/filesystems/proc.txt +++ b/Documentation/filesystems/proc.txt @@ -1,1379 +1,1714 @@ - ------------------------------------------------------------------------ - - T H E /proc F I L E S Y S T E M - ------------------------------------------------------------------------ -/proc/sys Terrehon Bowden <terrehon@wpi.com> January 27 1999 - Bodo Bauer <bb@ricochet.net> ------------------------------------------------------------------------ -Version 1.1 Kernel version 2.2 ------------------------------------------------------------------------ -Contents - -1 Introduction/Credits - -1.1 Legal Issues - -2 The /proc file system - -2.1 Process specific subdirectories -2.2 Kernel data -2.3 IDE devices in /proc/ide -2.4 Networking info in /proc/net -2.5 SCSI info -2.6 Parallel port info in /proc/parport -2.7 TTY info in /proc/tty - -3 Reading and modifying kernel parameters - -3.1 /proc/sys/debug and /proc/sys/proc -3.2 /proc/fs - File system data -3.3 /proc/fs/binfmt_misc - Miscellaneous binary formats -3.4 /proc/sys/kernel - General kernel parameters -3.5 /proc/sys/vm - The virtual memory subsystem -3.6 /proc/sys/dev - Device specific parameters -3.7 /proc/sys/sunrpc - Remote procedure calls -3.8 /proc/sys/net - Networking stuff -3.9 /proc/sys/net/ipv4 - IPV4 settings=20 -3.10 Appletalk -3.11 IPX - ------------------------------------------------------------------------ - -1 Introduction/Credits - -This documentation is part of a soon to be released book published by -IDG Books on the SuSE Linux distribution. As there is no complete -documentation for the /proc file system and we've used many freely -available sources to write this chapter, it seems only fair to give -the work back to the Linux community. This work is based on the -2.1.132 and 2.2.0-pre-kernel versions. I'm afraid it's still far from -complete, but we hope it will be useful. As far as we know, it is the -first 'all-in-one' document about the /proc file system. It is -focused on the Intel x86 hardware, so if you are looking for PPC, ARM, -SPARC, APX, etc., features, you probably won't find what you are -looking for. It also only covers IPv4 networking, not IPv6 nor other -protocols - sorry. - -We'd like to thank Alan Cox, Rik van Riel, and Alexey Kuznetsov. We'd -also like to extend a special thank you to Andi Kleen for -documentation, which we relied on heavily to create this document, as -well as the additional information he provided. Thanks to everybody -else who contributed source or docs to the Linux kernel and helped -create a great piece of software... :) - -If you have any comments, corrections or additions, please don't -hesitate to contact Bodo Bauer at bb@ricochet.net. We'll be happy to -add them to this document. - -The latest version of this document is available online at -http://www.suse.com/~bb/Docs/proc.html in HTML, ASCII, and as -Postscript file. - -1.1 Legal Stuff - -We don't guarantee the correctness of this document, and if you come -to us complaining about how you screwed up your system because of -incorrect documentation, we won't feel responsible... - ------------------------------------------------------------------------ - -2 The /proc file system - -The proc file system acts as an interface to internal data structures -in the kernel. It can be used to obtain information about the system -and to change certain kernel parameters at runtime. It contains -(among other things) one subdirectory for each process running on the -system which is named after the process id (PID) of the process. The -link self points to the process reading the file system. - -2.1 Process specific subdirectories - -Each process subdirectory has the in table 1.1 listed entries. - - _________________________________________________ - cmdline Command line arguments - environ Values of environment variables - fd Directory, which contains all file descriptors - mem Memory held by this process - stat Process status - status Process status in human readable form - cwd Link to the current working directory - exe Link to the executable of this process - maps Memory maps - root Link to the root directory of this process - statm Process memory status information - _________________________________________________ - Table 1.1: Process specific entries in /proc - -For example, to get the status information of a process, all you have -to do is read the file /proc/PID/status: - -> cat /proc/self/status -Name: cat -State: R (running) -Pid: 5633 -PPid: 5609 -Uid: 501 501 501 501 -Gid: 100 100 100 100 -Groups: 100 16 -VmSize: 804 kB -VmLck: 0 kB -VmRSS: 344 kB -VmData: 68 kB -VmStk: 20 kB -VmExe: 12 kB -VmLib: 660 kB -SigPnd: 0000000000000000 -SigBlk: 0000000000000000 -SigIgn: 0000000000000000 -SigCgt: 0000000000000000 -CapInh: 00000000fffffeff -CapPrm: 0000000000000000 -CapEff: 0000000000000000 - -This shows you almost the same information as you would get if you -viewed it with the ps command. In fact, ps uses the proc file system -to obtain its information. - -The statm file contains more detailed information about the process -memory usage. It contains seven values with the following meanings: - -size total program size -resident size of in memory portions -shared number of the pages that are shared -trs number of pages that are 'code' -drs number of pages of data/stack -lrs number of pages of library -dt number of dirty pages - -The ratio text/data/library is approximate only by heuristics. - -2.2 Kernel data - -Similar to the process entries, these are files which give information -about the running kernel. The files used to obtain this information -are contained in /proc and are listed in table 1.2. Not all of these -will be present in your system. It depends on the kernel configuration -and the loaded modules, which files are there, and which are missing. - - ________________________________________________ - apm Advanced power management info - cmdline Kernel command line - cpuinfo Info about the CPU - devices Available devices (block and character) - dma Used DMS channels - filesystems Supported filesystems - interrupts Interrupt usage - ioports I/O port usage - kcore Kernel core image - kmsg Kernel messages - ksyms Kernel symbol table - loadavg Load average - locks Kernel locks - meminfo Memory info - misc Miscellaneous - modules List of loaded modules - mounts Mounted filesystems - partitions Table of partitions known to the system - rtc Real time clock - slabinfo Slab pool info - stat Overall statistics - swaps Swap space utilization - uptime System uptime - version Kernel version - ________________________________________________ - Table 1.2: Kernel info in /proc - -You can, for example, check which interrupts are currently in use and -what they are used for by looking in the file /proc/interrupts: - -> cat /proc/interrupts - CPU0 - 0: 8728810 XT-PIC timer - 1: 895 XT-PIC keyboard - 2: 0 XT-PIC cascade - 3: 531695 XT-PIC aha152x - 4: 2014133 XT-PIC serial - 5: 44401 XT-PIC pcnet_cs - 8: 2 XT-PIC rtc - 11: 8 XT-PIC i82365 - 12: 182918 XT-PIC PS/2 Mouse - 13: 1 XT-PIC fpu - 14: 1232265 XT-PIC ide0 - 15: 7 XT-PIC ide1 -NMI: 0 - -There three more important subdirectories in /proc: net, scsi and -sys. The general rule is that the contents, or even the existence of -these directories, depends on your kernel configuration. If SCSI is -not enabled, the directory scsi may not exist. The same is true with -the net, which is only there when networking support is present in the -running kernel. - -The slabinfo file gives information about memory usage on the slab -level. Linux uses slab pools for memory management above page level -in version 2.2. Commonly used objects have their own slab pool (like -network buffers, directory cache, etc.). - -2.3 IDE devices in /proc/ide - -This subdirectory contains information about all IDE devices that the -kernel is aware of. There is one subdirectory for each device -(i.e. hard disk) containing the following files: - - cache The cache - capacity Capacity of the medium - driver Driver and version - geometry Physical and logical geometry - identify Device identify block - media Media type - model Device identifier - settings Device setup - smart_thresholds IDE disk management thresholds - smart_values IDE disk management values - -2.4 Networking info in /proc/net - -This directory follows the usual pattern. Table 1.3 lists the files -and their meaning. - - ____________________________________________________ - arp Kernel ARP table - dev network devices with statistics - dev_mcast Lists the Layer2 multicast groups a - device is listening to (interface index, - label, number of references, number of - bound addresses). - dev_stat network device status - ip_fwchains Firewall chain linkage - ip_fwnames Firewall chains - ip_masq Directory containing the masquerading - tables. - ip_masquerade Major masquerading table - netstat Network statistics - raw Raw device statistics - route Kernel routing table - rpc Directory containing rpc info - rt_cache Routing cache - snmp SNMP data - sockstat Socket statistics - tcp TCP sockets - tr_rif Token ring RIF routing table - udp UDP sockets - unix UNIX domain sockets - wireless Wireless interface data (Wavelan etc) - igmp IP multicast addresses, which this host joined - psched Global packet scheduler parameters. - netlink List of PF_NETLINK sockets. - ip_mr_vifs List of multicast virtual interfaces. - ip_mr_cache List of multicast routing cache. - udp6 UDP sockets (IPv6) - tcp6 TCP sockets (IPv6) - raw6 Raw device statistics (IPv6) - igmp6 IP multicast addresses, which this host joineed (IPv6) - if_inet6 List of IPv6 interface addresses. - ipv6_route Kernel routing table for IPv6 - rt6_stats global IPv6 routing tables statistics. - sockstat6 Socket statistics (IPv6) - snmp6 Snmp data (IPv6) - ____________________________________________________ - Table 1.3: Network info in /proc/net - -You can use this information to see which network devices are -available in your system and how much traffic was routed over those -devices: - -> cat /proc/net/dev -Inter-|Receive |[... - face |bytes packets errs drop fifo frame compressed multicast|[... - lo: 908188 5596 0 0 0 0 0 0 [... - ppp0:15475140 20721 410 0 0 410 0 0 [... - eth0: 614530 7085 0 0 0 0 0 1 [... - -...] Transmit -...] bytes packets errs drop fifo colls carrier compressed -...] 908188 5596 0 0 0 0 0 0 -...] 1375103 17405 0 0 0 0 0 0 -...] 1703981 5535 0 0 0 3 0 0 - -2.5 SCSI info - -If you have a SCSI host adapter in your system, you'll find a -subdirectory named after the driver for this adapter in /proc/scsi. -You'll also see a list of all recognized SCSI devices in /proc/scsi: - ->cat /proc/scsi/scsi -Attached devices: -Host: scsi0 Channel: 00 Id: 00 Lun: 00 - Vendor: QUANTUM Model: XP34550W Rev: LXY4 - Type: Direct-Access ANSI SCSI revision: 02 -Host: scsi0 Channel: 00 Id: 01 Lun: 00 - Vendor: SEAGATE Model: ST34501W Rev: 0018 - Type: Direct-Access ANSI SCSI revision: 02 -Host: scsi0 Channel: 00 Id: 02 Lun: 00 - Vendor: SEAGATE Model: ST34501W Rev: 0017 - Type: Direct-Access ANSI SCSI revision: 02 -Host: scsi0 Channel: 00 Id: 04 Lun: 00 - Vendor: ARCHIVE Model: Python 04106-XXX Rev: 703b - Type: Sequential-Access ANSI SCSI revision: 02 - -The directory named after the driver has one file for each adapter -found in the system. These files contain information about -the controller, including the used IRQ and the IO address range: - ->cat /proc/scsi/ncr53c8xx/0 -General information: - Chip NCR53C875, device id 0xf, revision id 0x4 - IO port address 0xec00, IRQ number 11 - Synchronous period factor 12, max commands per lun 4 - -2.6 Parallel port info in /proc/parport - -The directory /proc/parport contains information about the parallel -ports of your system. It has one subdirectory for each port, named -after the port number (0,1,2,...). - -This directory contains four files: - - autoprobe Autoprobe results of this port - devices Connected device modules - hardware Hardware info (port type, io-port, DMA, IRQ, etc.) - irq Used interrupt, if any - -2.7 TTY info in /proc/tty - -Information about the available and the actually used tty's can be -found in /proc/tty. You'll find entries for drivers and line -disciplines in this directory, as shown in the table below: - - drivers List of drivers and their usage - ldiscs Registered line disciplines - driver/serial Usage statistic and status of single tty lines - -To see which tty's are currently in use, you can simply look into the -file /proc/tty/drivers: - ->cat /proc/tty/drivers -pty_slave /dev/pts 136 0-255 pty:slave -pty_master /dev/ptm 128 0-255 pty:master -pty_slave /dev/ttyp 3 0-255 pty:slave -pty_master /dev/pty 2 0-255 pty:master -serial /dev/cua 5 64-67 serial:callout -serial /dev/ttyS 4 64-67 serial -/dev/tty0 /dev/tty0 4 0 system:vtmaster -/dev/ptmx /dev/ptmx 5 2 system -/dev/console /dev/console 5 1 system:console -/dev/tty /dev/tty 5 0 system:/dev/tty -unknown /dev/tty 4 1-63 console - ------------------------------------------------------------------------ - -3 Reading and modifying kernel parameters - -A very interesting part of /proc is the directory /proc/sys. This not -only provides information, it also allows you to change parameters -within the kernel. Be very careful when trying this. You can optimize -your system, but you also can crash it. Never play around with kernel -parameters on a production system. Set up a development machine and -test to make sure that everything works the way you want it to. You -may have no alternative but to reboot the machine once an error has -been made. - -To change a value, simply echo the new value into the file. An example -is given below in the section on the file system data. You need to be -root to do this. You can create your own boot script to get this done -every time your system boots. - -The files in /proc/sys can be used to tune and monitor miscellaneous -and general things in the operation of the Linux kernel. Since some -of the files can inadvertently disrupt your system, it is advisable to -read both documentation and source before actually making -adjustments. In any case, be very careful when writing to any of these -files. The entries in /proc may change slightly between the 2.1.* and -the 2.2 kernel, so review the kernel documentation if there is any -doubt. You'll find the documentation in the directory -/usr/src/linux/Documentation/sys. This chapter is heavily based on the -documentation included in the pre 2.2 kernels. Thanks to Rick van Riel -for providing this information. - -3.1 /proc/sys/debug and /proc/sys/proc - -These two subdirectories are empty. - -3.2 /proc/fs - File system data - -This subdirectory contains specific file system, file handle, inode, -dentry and quota information. +------------------------------------------------------------------------------ + T H E /proc F I L E S Y S T E M +------------------------------------------------------------------------------ +/proc/sys Terrehon Bowden <terrehon@pacbell.net> October 7 1999 + Bodo Bauer <bb@ricochet.net> +------------------------------------------------------------------------------ +Version 1.2 Kernel version 2.2.12 +------------------------------------------------------------------------------ + +Table of Contents +----------------- + + 0 Preface + 0.1 Introduction/Credits + 0.2 Legal Stuff + + 1 Collecting System Information + 1.1 Process-Specific Subdirectories + 1.2 Kernel data + 1.3 IDE devices in /proc/ide + 1.4 Networking info in /proc/net + 1.5 SCSI info + 1.6 Parallel port info in /proc/parport + 1.7 TTY info in /proc/tty + + 2 Modifying System Parameters + 2.1 /proc/sys/fs - File system data + 2.2 /proc/sys/fs/binfmt_misc - Miscellaneous binary formats + 2.3 /proc/sys/kernel - general kernel parameters + 2.4 /proc/sys/vm - The virtual memory subsystem + 2.5 /proc/sys/dev - Device specific parameters + 2.6 /proc/sys/sunrpc - Remote procedure calls + 2.7 /proc/sys/net - Networking stuff + 2.8 /proc/sys/net/ipv4 - IPV4 settings + 2.9 Appletalk + 2.10 IPX + +------------------------------------------------------------------------------ +Preface +------------------------------------------------------------------------------ + +0.1 Introduction/Credits +------------------------ + +This documentation is part of a soon (or so we hope) to be released book on +the SuSE Linux distribution. As there is no complete documentation for the +/proc file system and we've used many freely available sources to write these +chapters, it seems only fair to give the work back to the Linux community. +This work is based on the 2.2.* kernel version. I'm afraid it's still far from +complete, but we hope it will be useful. As far as we know, it is the first +'all-in-one' document about the /proc file system. It is focused on the Intel +x86 hardware, so if you are looking for PPC, ARM, SPARC, APX, etc., features, +you probably won't find what you are looking for. It also only covers IPv4 +networking, not IPv6 nor other protocols - sorry. But additions and patches +are welcome and will be added to this document if you mail them to Bodo. + +We'd like to thank Alan Cox, Rik van Riel, and Alexey Kuznetsov and a lot of +other people for help compiling this documentation. We'd also like to extend a +special thank you to Andi Kleen for documentation, which we relied on heavily +to create this document, as well as the additional information he provided. +Thanks to everybody else who contributed source or docs to the Linux kernel +and helped create a great piece of software... :) + +If you have any comments, corrections or additions, please don't hesitate to +contact Bodo Bauer at bb@ricochet.net. We'll be happy to add them to this +document. + +The latest version of this document is available online at +http://skaro.nightcrawler.com/~bb/Docs/Proc as HTML version. + +0.2 Legal Stuff +--------------- + +We don't guarantee the correctness of this document, and if you come to us +complaining about how you screwed up your system because of incorrect +documentation, we won't feel responsible... + +------------------------------------------------------------------------------ +CHAPTER 1: COLLECTING SYSTEM INFORMATION +------------------------------------------------------------------------------ + +------------------------------------------------------------------------------ +In This Chapter +------------------------------------------------------------------------------ +* Investigating the properties of the pseudo file system /proc and its + ability to provide information on the running Linux system +* Examining /proc's structure +* Uncovering various information about the kernel and the processes running + on the system +------------------------------------------------------------------------------ + + +The proc file system acts as an interface to internal data structures in the +kernel. It can be used to obtain information about the system and to change +certain kernel parameters at runtime. + +First, we'll take a look at the read-only parts of /proc. In Chapter 2, we +show you how you can use /proc/sys to change settings. + +1.1 Process-Specific Subdirectories +----------------------------------- + +The directory /proc contains (among other things) one subdirectory for each +process running on the system, which is named after the process ID (PID). + +The link self points to the process reading the file system. Each process +subdirectory has the entries listed in Table 1-1. + + +Table 1-1: Process specific entries in /proc +.............................................................................. + File Content + cmdline Command line arguments + environ Values of environment variables + fd Directory, which contains all file descriptors + mem Memory held by this process + stat Process status + status Process status in human readable form + cwd Link to the current working directory + exe Link to the executable of this process + maps Memory maps + root Link to the root directory of this process + statm Process memory status information +.............................................................................. + +For example, to get the status information of a process, all you have to do is +read the file /proc/PID/status: + + >cat /proc/self/status + Name: cat + State: R (running) + Pid: 5452 + PPid: 743 + Uid: 501 501 501 501 + Gid: 100 100 100 100 + Groups: 100 14 16 + VmSize: 1112 kB + VmLck: 0 kB + VmRSS: 348 kB + VmData: 24 kB + VmStk: 12 kB + VmExe: 8 kB + VmLib: 1044 kB + SigPnd: 0000000000000000 + SigBlk: 0000000000000000 + SigIgn: 0000000000000000 + SigCgt: 0000000000000000 + CapInh: 00000000fffffeff + CapPrm: 0000000000000000 + CapEff: 0000000000000000 + + +This shows you nearly the same information you would get if you viewed it with +the ps command. In fact, ps uses the proc file system to obtain its +information. The statm file contains more detailed information about the +process memory usage. Its seven fields are explained in Table 1-2. + + +Table 1-2: Contents of the statm files +.............................................................................. + File Content + size total program size + resident size of memory portions + shared number of pages that are shared + trs number of pages that are 'code' + drs number of pages of data/stack + lrs number of pages of library + dt number of dirty pages +.............................................................................. + +1.2 Kernel data +--------------- + +Similar to the process entries, the kernel data files give information about +the running kernel. The files used to obtain this information are contained in +/proc and are listed in Table 1-3. Not all of these will be present in your +system. It depends on the kernel configuration and the loaded modules, which +files are there, and which are missing. + +Table 1-3: Kernel info in /proc +.............................................................................. + File Content + apm Advanced power management info + bus Directory containing bus specific information + cmdline Kernel command line + cpuinfo Info about the CPU + devices Available devices (block and character) + dma Used DMS channels + filesystems Supported filesystems + ide Directory containing info about the IDE subsystem + interrupts Interrupt usage + ioports I/O port usage + kcore Kernel core image + kmsg Kernel messages + ksyms Kernel symbol table + loadavg Load average + locks Kernel locks + meminfo Memory info + misc Miscellaneous + modules List of loaded modules + mounts Mounted filesystems + net Networking info (see text) + partitions Table of partitions known to the system + rtc Real time clock + scsi SCSI info (see text) + slabinfo Slab pool info + stat Overall statistics + swaps Swap space utilization + sys See chapter 2 + uptime System uptime + version Kernel version +.............................................................................. + +You can, for example, check which interrupts are currently in use and what +they are used for by looking in the file /proc/interrupts: + + > cat /proc/interrupts + CPU0 + 0: 8728810 XT-PIC timer + 1: 895 XT-PIC keyboard + 2: 0 XT-PIC cascade + 3: 531695 XT-PIC aha152x + 4: 2014133 XT-PIC serial + 5: 44401 XT-PIC pcnet_cs + 8: 2 XT-PIC rtc + 11: 8 XT-PIC i82365 + 12: 182918 XT-PIC PS/2 Mouse + 13: 1 XT-PIC fpu + 14: 1232265 XT-PIC ide0 + 15: 7 XT-PIC ide1 + NMI: 0 + + +There are three more important subdirectories in /proc: net, scsi, and sys. +The general rule is that the contents, or even the existence of these +directories, depend on your kernel configuration. If SCSI is not enabled, the +directory scsi may not exist. The same is true with the net, which is there +only when networking support is present in the running kernel. + +The slabinfo file gives information about memory usage at the slab level. +Linux uses slab pools for memory management above page level in version 2.2. +Commonly used objects have their own slab pool (such as network buffers, +directory cache, and so on). + +1.3 IDE devices in /proc/ide +---------------------------- + +The subdirectory /proc/ide contains information about all IDE devices of which +the kernel is aware. There is one subdirectory for each IDE controller, the +file drivers and a link for each IDE device, pointing to the device directory +in the controller specific subtree. + +The file drivers contains general information about the drivers used for the +IDE devices: + + > cat /proc/ide/drivers + ide-cdrom version 4.53 + ide-disk version 1.08 + + +More detailed information can be found in the controller specific +subdirectories. These are named ide0, ide1 and so on. Each of these +directories contains the files shown in table 1-4. + + +Table 1-4: IDE controller info in /proc/ide/ide? +.............................................................................. + File Content + channel IDE channel (0 or 1) + config Configuration (only for PCI/IDE bridge) + mate Mate name + model Type/Chipset of IDE controller +.............................................................................. + +Each device connected to a controller has a separate subdirectory in the +controllers directory. The files listed in table 1-5 are contained in these +directories. + + +Table 1-5: IDE device information +.............................................................................. + File Content + cache The cache + capacity Capacity of the medium (in 512Byte blocks) + driver driver and version + geometry physical and logical geometry + identify device identify block + media media type + model device identifier + settings device setup + smart_thresholds IDE disk management thresholds + smart_values IDE disk management values +.............................................................................. + +The most interesting file is settings. This file contains a nice overview of +the drive parameters: + + # cat /proc/ide/ide0/hda/settings + name value min max mode + ---- ----- --- --- ---- + bios_cyl 526 0 65535 rw + bios_head 255 0 255 rw + bios_sect 63 0 63 rw + breada_readahead 4 0 127 rw + bswap 0 0 1 r + file_readahead 72 0 2097151 rw + io_32bit 0 0 3 rw + keepsettings 0 0 1 rw + max_kb_per_request 122 1 127 rw + multcount 0 0 8 rw + nice1 1 0 1 rw + nowerr 0 0 1 rw + pio_mode write-only 0 255 w + slow 0 0 1 rw + unmaskirq 0 0 1 rw + using_dma 0 0 1 rw + + +1.4 Networking info in /proc/net +-------------------------------- + +The subdirectory /proc/net follows the usual pattern. Table 1-6 shows the +additional values you get for IP version 6 if you configure the kernel to +support this. Table 1-7 lists the files and their meaning. + + +Table 1-6: IPv6 info in /proc/net +.............................................................................. + File Content + udp6 UDP sockets (IPv6) + tcp6 TCP sockets (IPv6) + raw6 Raw device statistics (IPv6) + igmp6 IP multicast addresses, which this host joined (IPv6) + if_inet6 List of IPv6 interface addresses + ipv6_route Kernel routing table for IPv6 + rt6_stats Global IPv6 routing tables statistics + sockstat6 Socket statistics (IPv6) + snmp6 Snmp data (IPv6) +.............................................................................. + + +Table 1-7: Network info in /proc/net +.............................................................................. + File Content + arp Kernel ARP table + dev network devices with statistics + dev_mcast the Layer2 multicast groups a device is listening too + (interface index, label, number of references, number of bound + addresses). + dev_stat network device status + ip_fwchains Firewall chain linkage + ip_fwnames Firewall chain names + ip_masq Directory containing the masquerading tables + ip_masquerade Major masquerading table + netstat Network statistics + raw raw device statistics + route Kernel routing table + rpc Directory containing rpc info + rt_cache Routing cache + snmp SNMP data + sockstat Socket statistics + tcp TCP sockets + tr_rif Token ring RIF routing table + udp UDP sockets + unix UNIX domain sockets + wireless Wireless interface data (Wavelan etc) + igmp IP multicast addresses, which this host joined + psched Global packet scheduler parameters. + netlink List of PF_NETLINK sockets + ip_mr_vifs List of multicast virtual interfaces + ip_mr_cache List of multicast routing cache +.............................................................................. + +You can use this information to see which network devices are available in +your system and how much traffic was routed over those devices: + + > cat /proc/net/dev + Inter-|Receive |[... + face |bytes packets errs drop fifo frame compressed multicast|[... + lo: 908188 5596 0 0 0 0 0 0 [... + ppp0:15475140 20721 410 0 0 410 0 0 [... + eth0: 614530 7085 0 0 0 0 0 1 [... + + ...] Transmit + ...] bytes packets errs drop fifo colls carrier compressed + ...] 908188 5596 0 0 0 0 0 0 + ...] 1375103 17405 0 0 0 0 0 0 + ...] 1703981 5535 0 0 0 3 0 0 + + +1.5 SCSI info +------------- + +If you have a SCSI host adapter in your system, you'll find a subdirectory +named after the driver for this adapter in /proc/scsi. You'll also see a list +of all recognized SCSI devices in /proc/scsi: + + >cat /proc/scsi/scsi + Attached devices: + Host: scsi0 Channel: 00 Id: 00 Lun: 00 + Vendor: IBM Model: DGHS09U Rev: 03E0 + Type: Direct-Access ANSI SCSI revision: 03 + Host: scsi0 Channel: 00 Id: 06 Lun: 00 + Vendor: PIONEER Model: CD-ROM DR-U06S Rev: 1.04 + Type: CD-ROM ANSI SCSI revision: 02 + + +The directory named after the driver has one file for each adapter found in +the system. These files contain information about the controller, including +the used IRQ and the IO address range. The amount of information shown is +dependent on the adapter you use. The example shows the output for an Adaptec +AHA-2940 SCSI adapter: + + > cat /proc/scsi/aic7xxx/0 + + Adaptec AIC7xxx driver version: 5.1.19/3.2.4 + Compile Options: + TCQ Enabled By Default : Disabled + AIC7XXX_PROC_STATS : Disabled + AIC7XXX_RESET_DELAY : 5 + Adapter Configuration: + SCSI Adapter: Adaptec AHA-294X Ultra SCSI host adapter + Ultra Wide Controller + PCI MMAPed I/O Base: 0xeb001000 + Adapter SEEPROM Config: SEEPROM found and used. + Adaptec SCSI BIOS: Enabled + IRQ: 10 + SCBs: Active 0, Max Active 2, + Allocated 15, HW 16, Page 255 + Interrupts: 160328 + BIOS Control Word: 0x18b6 + Adapter Control Word: 0x005b + Extended Translation: Enabled + Disconnect Enable Flags: 0xffff + Ultra Enable Flags: 0x0001 + Tag Queue Enable Flags: 0x0000 + Ordered Queue Tag Flags: 0x0000 + Default Tag Queue Depth: 8 + Tagged Queue By Device array for aic7xxx host instance 0: + {255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255} + Actual queue depth per device for aic7xxx host instance 0: + {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} + Statistics: + (scsi0:0:0:0) + Device using Wide/Sync transfers at 40.0 MByte/sec, offset 8 + Transinfo settings: current(12/8/1/0), goal(12/8/1/0), user(12/15/1/0) + Total transfers 160151 (74577 reads and 85574 writes) + (scsi0:0:6:0) + Device using Narrow/Sync transfers at 5.0 MByte/sec, offset 15 + Transinfo settings: current(50/15/0/0), goal(50/15/0/0), user(50/15/0/0) + Total transfers 0 (0 reads and 0 writes) + + +1.6 Parallel port info in /proc/parport +--------------------------------------- + +The directory /proc/parport contains information about the parallel ports of +your system. It has one subdirectory for each port, named after the port +number (0,1,2,...). + +These directories contain the four files shown in Table 1-8. + + +Table 1-8: Files in /proc/parport +.............................................................................. + File Content + autoprobe Any IEEE-1284 device ID information that has been acquired. + devices list of the device drivers using that port. A + will appear by the + name of the device currently using the port (it might not appear + against any). + hardware Parallel port's base address, IRQ line and DMA channel. + irq IRQ that parport is using for that port. This is in a separate + file to allow you to alter it by writing a new value in (IRQ + number or none). +.............................................................................. + +1.7 TTY info in /proc/tty +------------------------- + +Information about the available and actually used tty's can be found in the +directory /proc/tty.You'll find entries for drivers and line disciplines in +this directory, as shown in Table 1-9. + + +Table 1-9: Files in /proc/tty +.............................................................................. + File Content + drivers list of drivers and their usage + ldiscs registered line disciplines + driver/serial usage statistic and status of single tty lines +.............................................................................. + +To see which tty's are currently in use, you can simply look into the file +/proc/tty/drivers: + + > cat /proc/tty/drivers + pty_slave /dev/pts 136 0-255 pty:slave + pty_master /dev/ptm 128 0-255 pty:master + pty_slave /dev/ttyp 3 0-255 pty:slave + pty_master /dev/pty 2 0-255 pty:master + serial /dev/cua 5 64-67 serial:callout + serial /dev/ttyS 4 64-67 serial + /dev/tty0 /dev/tty0 4 0 system:vtmaster + /dev/ptmx /dev/ptmx 5 2 system + /dev/console /dev/console 5 1 system:console + /dev/tty /dev/tty 5 0 system:/dev/tty + unknown /dev/tty 4 1-63 console + + +------------------------------------------------------------------------------ +Summary +------------------------------------------------------------------------------ +The /proc file system serves information about the running system. It not only +allows access to process data but also allows you to request the kernel status +by reading files in the hierarchy. + +The directory structure of /proc reflects the types of information and makes +it easy, if not obvious, where to look for specific data. +------------------------------------------------------------------------------ + +------------------------------------------------------------------------------ +CHAPTER 2: MODIFYING SYSTEM PARAMETERS +------------------------------------------------------------------------------ + +------------------------------------------------------------------------------ +In This Chapter +------------------------------------------------------------------------------ +* Modifying kernel parameters by writing into files found in /proc/sys +* Exploring the files which modify certain parameters +* Review of the /proc/sys file tree +------------------------------------------------------------------------------ + + +A very interesting part of /proc is the directory /proc/sys. This is not only +a source of information, it also allows you to change parameters within the +kernel. Be very careful when attempting this. You can optimize your system, +but you can also cause it to crash. Never alter kernel parameters on a +production system. Set up a development machine and test to make sure that +everything works the way you want it to. You may have no alternative but to +reboot the machine once an error has been made. + +To change a value, simply echo the new value into the file. An example is +given below in the section on the file system data. You need to be root to do +this. You can create your own boot script to perform this every time your +system boots. + +The files in /proc/sys can be used to fine tune and monitor miscellaneous and +general things in the operation of the Linux kernel. Since some of the files +can inadvertently disrupt your system, it is advisable to read both +documentation and source before actually making adjustments. In any case, be +very careful when writing to any of these files. The entries in /proc may +change slightly between the 2.1.* and the 2.2 kernel, so if there is any doubt +review the kernel documentation in the directory /usr/src/linux/Documentation. +This chapter is heavily based on the documentation included in the pre 2.2 +kernels, and became part of it in version 2.2.1 of the Linux kernel. + +2.1 /proc/sys/fs - File system data +----------------------------------- + +This subdirectory contains specific file system, file handle, inode, dentry +and quota information. Currently, these files are in /proc/sys/fs: dentry-state - Status of the directory cache. Since directory entries are - dynamically allocated and deallocated, this file gives information - about the current status. It holds six values, in which the last - two are not used and are always zero. The other four mean: +------------ + +Status of the directory cache. Since directory entries are dynamically +allocated and deallocated, this file indicates the current status. It holds +six values, in which the last two are not used and are always zero. The others +are listed in table 2-1. + - nr_dentry Seems to be zero all the time - nr_unused Number of unused cache entries - age_limit Age in seconds after the entry may be - reclaimed, when memory is short - want_pages internal +Table 2-1: Status files of the directory cache +.............................................................................. + File Content + nr_dentry Almost always zero + nr_unused Number of unused cache entries + age_limit + in seconds after the entry may be reclaimed, when memory is short + want_pages internally +.............................................................................. dquot-nr and dquot-max - The file dquot-max shows the maximum number of cached disk quota - entries. +---------------------- - The file dquot-nr shows the number of allocated disk quota - entries and the number of free disk quota entries. +The file dquot-max shows the maximum number of cached disk quota entries. - If the number of free cached disk quotas is very low and you have - a large number of simultaneous system users, you might want - to raise the limit. +The file dquot-nr shows the number of allocated disk quota entries and the +number of free disk quota entries. + +If the number of available cached disk quotas is very low and you have a large +number of simultaneous system users, you might want to raise the limit. file-nr and file-max - The kernel allocates file handles dynamically, but as yet - doesn't free them again. - - The value in file-max denotes the maximum number of file handles - that the Linux kernel will allocate. When you get a lot of error - messages about running out of file handles, you might want to raise - this limit. The default value is 4096. To change it, just write the - new number into the file: - - # cat /proc/sys/fs/file-max - 4096 - # echo 8192 > /proc/sys/fs/file-max - # cat /proc/sys/fs/file-max - 8192 - - This method of revision is useful for all customizable parameters - of the kernel - simply echo the new value to the corresponding - file. - - The three values in file-nr denote the number of allocated file - handles, the number of used file handles, and the maximum number of - file handles. When the allocated file handles come close to the - maximum, but the number of actually used ones is far behind, you've - encountered a peak in your usage of file handles and you don't need - to increase the maximum. - - However, there is still a per process limit of open files, which - unfortunatly can't be changed that easily. It is set to 1024 by - default. To change this you have to edit the files limits.h and - fs.h in the directory /usr/src/linux/include/linux. Change the - definition of NR_OPEN and recompile the kernel. +-------------------- + +The kernel allocates file handles dynamically, but doesn't free them again at +this time. + +The value in file-max denotes the maximum number of file handles that the +Linux kernel will allocate. When you get a lot of error messages about running +out of file handles, you might want to raise this limit. The default value is +4096. To change it, just write the new number into the file: + + # cat /proc/sys/fs/file-max + 4096 + # echo 8192 > /proc/sys/fs/file-max + # cat /proc/sys/fs/file-max + 8192 + + +This method of revision is useful for all customizable parameters of the +kernel - simply echo the new value to the corresponding file. + +The three values in file-nr denote the number of allocated file handles, the +number of used file handles, and the maximum number of file handles. When the +allocated file handles come close to the maximum, but the number of actually +used ones is far behind, you've encountered a peak in your usage of file +handles and you don't need to increase the maximum. + +However, there is still a per process limit of open files, which unfortunately +can't be changed that easily. It is set to 1024 by default. To change this you +have to edit the files limits.h and fs.h in the kernel source tree. Finally, +change the definition of NR_OPEN and recompile the kernel. inode-state, inode-nr and inode-max - As with file handles, the kernel allocates the inode structures - dynamically, but can't free them yet. +----------------------------------- + +As with file handles, the kernel allocates the inode structures dynamically, +but can't free them yet. + +The value in inode-max denotes the maximum number of inode handlers. This +value should be 3 to 4 times larger than the value in file-max, since stdin, +stdout, and network sockets also need an inode struct to handle them. If you +regularly run out of inodes, you should increase this value. - The value in inode-max denotes the maximum number of inode - handlers. This value should be 3 to 4 times larger than the value - in file-max, since stdin, stdout, and network sockets also need an - inode struct to handle them. If you regularly run out of inodes, - you should increase this value. +The file inode-nr contains the first two items from inode-state, so we'll skip +to that file... - The file inode-nr contains the first two items from inode-state, so - we'll skip to that file... +inode-state contains three actual numbers and four dummy values. The numbers +are nr_inodes, nr_free_inodes, and preshrink (in order of appearance). - inode-state contains three actual numbers and four dummy values. The - actual numbers are (in order of appearance) nr_inodes, nr_free_inodes, - and preshrink. +nr_inodes +~~~~~~~~~ - nr_inodes - Denotes the number of inodes the system has allocated. This can - be slightly more than inode-max because Linux allocates them one - pageful at a time. +Denotes the number of inodes the system has allocated. This can be slightly +more than inode-max because Linux allocates them one pageful at a time. + +nr_free_inodes +-------------- + +Represents the number of free inodes and preshrink is nonzero when nr_inodes +is greater than inode-max and the system needs to prune the inode list instead +of allocating more. - nr_free_inodes - Represents the number of free inodes and pre shrink is nonzero - when the nr_inodes > inode-max and the system needs to prune the - inode list instead of allocating more. super-nr and super-max - Again, super block structures are allocated by the kernel, - but not freed. The file super-max contains the maximum number of - super block handlers, where super-nr shows the number of - currently allocated ones. +---------------------- - Every mounted file system needs a super block, so if you plan to - mount lots of file systems, you may want to increase these - numbers. +Again, super block structures are allocated by the kernel, but not freed. The +file super-max contains the maximum number of super block handlers, where +super-nr shows the number of currently allocated ones. -3.3 /proc/fs/binfmt_misc - Miscellaneous binary formats +Every mounted file system needs a super block, so if you plan to mount lots of +file systems, you may want to increase these numbers. -Besides these files, there is the subdirectory -/proc/sys/fs/binfmt_misc. This handles the kernel support for -miscellaneous binary formats. +2.2 /proc/sys/fs/binfmt_misc - Miscellaneous binary formats +----------------------------------------------------------- -Binfmt_misc provides the ability to register additional binary formats -to the Kernel without compiling an additional module/kernel. Therefore -binfmt_misc needs to know magic numbers at the beginning or the -filename extension of the binary. +Besides these files, there is the subdirectory /proc/sys/fs/binfmt_misc. This +handles the kernel support for miscellaneous binary formats. -It works by maintaining a linked list of structs, that contain a -description of a binary format, including a magic with size (or the -filename extension), offset and mask, and the interpreter name. On -request it invokes the given interpreter with the original program as -argument, as binfmt_java and binfmt_em86 and binfmt_mz do. -Since binfmt_misc does not define any default binary-formats, you have to -register an additional binary-format. +Binfmt_misc provides the ability to register additional binary formats to the +Kernel without compiling an additional module/kernel. Therefore, binfmt_misc +needs to know magic numbers at the beginning or the filename extension of the +binary. -There are two general files in binfmt_misc and one file per registered -format. The two general files are register and status. +It works by maintaining a linked list of structs that contain a description of +a binary format, including a magic with size (or the filename extension), +offset and mask, and the interpreter name. On request it invokes the given +interpreter with the original program as argument, as binfmt_java and +binfmt_em86 and binfmt_mz do. Since binfmt_misc does not define any default +binary-formats, you have to register an additional binary-format. + +There are two general files in binfmt_misc and one file per registered format. +The two general files are register and status. Registering a new binary format +------------------------------- + +To register a new binary format you have to issue the command -echo :name:type:offset:magic:mask:interpreter: > /proc/sys/fs/binfmt_misc/register + echo :name:type:offset:magic:mask:interpreter: > /proc/sys/fs/binfmt_misc/register -with appropriate name (the name for the /proc-dir entry), offset -(defaults to 0, if omitted), magic and mask (which can be omitted, -defaults to all 0xff) and last but not least, the interpreter that is -to be invoked (for example and testing '/bin/echo'). Type can be M for -usual magic matching or E for filename extension matching (give -extension in place of magic). -To check or reset the status of the binary format handler: -If you do a cat on the file /proc/sys/fs/binfmt_misc/status, you will -get the current status (enabled/disabled) of binfmt_misc. Change the -status by echoing 0 (disables) or 1 (enables) or -1 (caution: this -clears all previously registered binary formats) to status. For -example echo 0 > status to disable binfmt_misc (temporarily). +with appropriate name (the name for the /proc-dir entry), offset (defaults to +0, if omitted), magic, mask (which can be omitted, defaults to all 0xff) and +last but not least, the interpreter that is to be invoked (for example and +testing /bin/echo). Type can be M for usual magic matching or E for filename +extension matching (give extension in place of magic). + +Check or reset the status of the binary format handler +------------------------------------------------------ + +If you do a cat on the file /proc/sys/fs/binfmt_misc/status, you will get the +current status (enabled/disabled) of binfmt_misc. Change the status by echoing +0 (disables) or 1 (enables) or -1 (caution: this clears all previously +registered binary formats) to status. For example echo 0 > status to disable +binfmt_misc (temporarily). Status of a single handler +-------------------------- -Each registered handler has an entry in /proc/sys/fs/binfmt_misc. -These files perform the same function as status, but their scope is -limited to the actual binary format. By cating this file, you also -receive all related information about the interpreter/magic of the -binfmt. +Each registered handler has an entry in /proc/sys/fs/binfmt_misc. These files +perform the same function as status, but their scope is limited to the actual +binary format. By cating this file, you also receive all related information +about the interpreter/magic of the binfmt. Example usage of binfmt_misc (emulate binfmt_java) +-------------------------------------------------- -cd /proc/sys/fs/binfmt_misc -echo ':Java:M::\xca\xfe\xba\xbe::/usr/local/java/bin/javawrapper:' > register -echo ':HTML:E::html::/usr/local/java/bin/appletviewer:' > register -echo ':Applet:M::<!--applet::/usr/local/java/bin/appletviewer:' > register -echo ':DEXE:M::\x0eDEX::/usr/bin/dosexec:' > register + cd /proc/sys/fs/binfmt_misc + echo ':Java:M::\xca\xfe\xba\xbe::/usr/local/java/bin/javawrapper:' > register + echo ':HTML:E::html::/usr/local/java/bin/appletviewer:' > register + echo ':Applet:M::<!--applet::/usr/local/java/bin/appletviewer:' > register + echo ':DEXE:M::\x0eDEX::/usr/bin/dosexec:' > register -These three lines add support for Java executables and Java applets -(like binfmt_java, additionally recognizing the .html extension with -no need to put <!--applet> to every applet file). You have to install -the JDK and the shell-script /usr/local/java/bin/javawrapper too. It -works around the brokenness of the Java filename handling. To add a -Java binary, just create a link to the class-file somewhere in the -path. -3.4 /proc/sys/kernel - general kernel parameters +These four lines add support for Java executables and Java applets (like +binfmt_java, additionally recognizing the .html extension with no need to put +<!--applet> to every applet file). You have to install the JDK and the +shell-script /usr/local/java/bin/javawrapper too. It works around the +brokenness of the Java filename handling. To add a Java binary, just create a +link to the class-file somewhere in the path. -This directory reflects general kernel behaviors. As I've said before, -the contents are depend on your configuration. I'll list the most -important files, along with descriptions of what they mean and how to -use them. +2.3 /proc/sys/kernel - general kernel parameters +------------------------------------------------ + +This directory reflects general kernel behaviors. As I've said before, the +contents depend on your configuration. Here you'll find the most important +files, along with descriptions of what they mean and how to use them. acct - The file contains three values; highwater, lowwater, and - frequency. - - It exists only when BSD-style process accounting is enabled. These - values control its behavior. If the free space on the file system - where the log lives goes below lowwater%, accounting suspends. If - it goes above highwater%, accounting resumes. Frequency determines - how often you check the amount of free space (value is in - seconds). Default settings are: 4, 2, and 30. That is, suspend - accounting if there left <= 2% free; resume it if we have a value - >=3%; consider information about the amount of free space valid - for 30 seconds +---- + +The file contains three values; highwater, lowwater, and frequency. + +It exists only when BSD-style process accounting is enabled. These values +control its behavior. If the free space on the file system where the log lives +goes below lowwater percentage, accounting suspends. If it goes above +highwater percentage, accounting resumes. Frequency determines how often you +check the amount of free space (value is in seconds). Default settings are: 4, +2, and 30. That is, suspend accounting if there is less than 2 percent free; +resume it if we have a value of 3 or more percent; consider information about +the amount of free space valid for 30 seconds ctrl-alt-del - When the value in this file is 0, ctrl-alt-del is trapped and sent - to the init(1) program to handle a graceful restart. However, when - the value is > 0, Linux's reaction to this key combination will be - an immediate reboot, without syncing its dirty buffers. +------------ + +When the value in this file is 0, ctrl-alt-del is trapped and sent to the init +program to handle a graceful restart. However, when the value is greater that +zero, Linux's reaction to this key combination will be an immediate reboot, +without syncing its dirty buffers. - Note: when a program (like dosemu) has the keyboard in raw mode, - the ctrl-alt-del is intercepted by the program before it ever - reaches the kernel tty layer, and it is up to the program to decide - what to do with it. +[NOTE] + When a program (like dosemu) has the keyboard in raw mode, the + ctrl-alt-del is intercepted by the program before it ever reaches the + kernel tty layer, and it is up to the program to decide what to do with + it. domainname and hostname - These files can be controlled to set the NIS domainname and - hostname of your box. For the classic darkstar.frop.org a simple: +----------------------- + +These files can be controlled to set the NIS domainname and hostname of your +box. For the classic darkstar.frop.org a simple: + + # echo "darkstar" > /proc/sys/kernel/hostname + # echo "frop.org" > /proc/sys/kernel/domainname - # echo "darkstar" > /proc/sys/kernel/hostname - # echo "frop.org" > /proc/sys/kernel/domainname - would suffice to set your hostname and NIS domainname. +would suffice to set your hostname and NIS domainname. osrelease, ostype and version +----------------------------- - The names make it pretty obvious what these fields contain: - - >cat /proc/sys/kernel/osrelease - 2.1.131 - >cat /proc/sys/kernel/ostype - Linux - >cat /proc/sys/kernel/version - #8 Mon Jan 25 19:45:02 PST 1999 - - The files osrelease and ostype should be clear enough. Version - needs a little more clarification however. The #8 means that this - is the 8th kernel built from this source base and the date behind - it indicates the time the kernel was built. The only way to tune - these values is to rebuild the kernel. - -panic - The value in this file represents the number of seconds the kernel - waits before rebooting on a panic. When you use the software - watchdog, the recommended setting is 60. If set to 0, the auto - reboot after a kernel panic is disabled, this is the default - setting. +The names make it pretty obvious what these fields contain: + + > cat /proc/sys/kernel/osrelease + 2.2.12 + + > cat /proc/sys/kernel/ostype + Linux + + > cat /proc/sys/kernel/version + #4 Fri Oct 1 12:41:14 PDT 1999 + + +The files osrelease and ostype should be clear enough. Version needs a little +more clarification. The #4 means that this is the 4th kernel built from this +source base and the date after it indicates the time the kernel was built. The +only way to tune these values is to rebuild the kernel. + +panic +----- + +The value in this file represents the number of seconds the kernel waits +before rebooting on a panic. When you use the software watchdog, the +recommended setting is 60. If set to 0, the auto reboot after a kernel panic +is disabled, which is the default setting. printk - The four values in printk denote console_loglevel, - default_message_loglevel, minimum_console_level, and - default_console_loglevel respectively. +------ + +The four values in printk denote +* console_loglevel, +* default_message_loglevel, +* minimum_console_level and +* default_console_loglevel +respectively. + +These values influence printk() behavior when printing or logging error +messages, which come from inside the kernel. See syslog(2) for more +information on the different log levels. + +console_loglevel +---------------- - These values influence printk() behavior when printing or logging - error messages, which come from inside the kernel. See syslog(2) - for more information on the different log levels. +Messages with a higher priority than this will be printed to the console. - console_loglevel - Messages with a higher priority than this will be printed to - the console. +default_message_level +--------------------- - default_message_level - Messages without an explicit priority will be printed with - this priority. +Messages without an explicit priority will be printed with this priority. - minimum_console_loglevel - Minimum (highest) value to which the console_loglevel can be set. +minimum_console_loglevel +------------------------ - default_console_loglevel - Default value for console_loglevel. +Minimum (highest) value to which the console_loglevel can be set. + +default_console_loglevel +------------------------ + +Default value for console_loglevel. sg-big-buff - This file shows the size of the generic SCSI (sg) buffer. At this - point, you can't tune it yet, but you can change it at compile time - by editing include/scsi/sg.h and changing the value of - SG_BIG_BUFF. +----------- - If you use a scanner with SANE (Scanner Access now easy) you - might want to set this to a higher value. Look into the SANE - documentation on this issue. +This file shows the size of the generic SCSI (sg) buffer. At this point, you +can't tune it yet, but you can change it at compile time by editing +include/scsi/sg.h and changing the value of SG_BIG_BUFF. + +If you use a scanner with SANE (Scanner Access Now Easy) you might want to set +this to a higher value. Refer to the SANE documentation on this issue. modprobe - The location where the modprobe binary is located. The kernel - uses this program to load modules on demand. +-------- + +The location where the modprobe binary is located. The kernel uses this +program to load modules on demand. -3.5 /proc/sys/vm - The virtual memory subsystem +2.4 /proc/sys/vm - The virtual memory subsystem +----------------------------------------------- -The files in this directory can be used to tune the operation of the -virtual memory (VM) subsystem of the Linux kernel. In addition, one of -the files (bdflush) has a little influence on disk usage. +The files in this directory can be used to tune the operation of the virtual +memory (VM) subsystem of the Linux kernel. In addition, one of the files +(bdflush) has some influence on disk usage. bdflush - This file controls the operation of the bdflush kernel daemon. It - currently contains 9 integer values, 6 of which are actually used - by the kernel: - - nfract Percentage of buffer cache dirty to - activate bdflush - ndirty Maximum number of dirty blocks to - write out per-wake-cycle - nrefill Number of clean buffers to try to obtain - each time we call refill - nref_dirt Dirty buffer threshold for activating bdflush - when trying to refill buffers. - dummy unused - age_buffer Time for normal buffer to age before you flush it - age_super Time for superblock to age before you flush it - dummy unused - dummy unused - - nfract - This parameter governs the maximum number of dirty buffers - in the buffer cache. Dirty means that the contents of the - buffer still have to be written to disk (as opposed to a - clean buffer, which can just be forgotten about). Setting - this to a high value means that Linux can delay disk writes - for a long time, but it also means that it will have to do a - lot of I/O at once when memory becomes short. A low value - will spread out disk I/O more evenly. - - ndirty - Ndirty gives the maximum number of dirty buffers that - bdflush can write to the disk at one time. A high value will - mean delayed, bursty I/O, while a small value can lead to - memory shortage when bdflush isn't woken up often enough. - - nrefill - This the number of buffers that bdflush will add to the list - of free buffers when refill_freelist() is called. It is - necessary to allocate free buffers beforehand, since the - buffers are often different sizes than the memory pages - and some bookkeeping needs to be done beforehand. The - higher the number, the more memory will be wasted and the - less often refill_freelist() will need to run. - - nref_dirt - When refill_freelist() comes across more than nref_dirt - dirty buffers, it will wake up bdflush. - - age_buffer and age_super - Finally, the age_buffer and age_super parameters govern the - maximum time Linux waits before writing out a dirty buffer - to disk. The value is expressed in jiffies (clockticks), the - number of jiffies per second is 100. Age_buffer is the - maximum age for data blocks, while age_super is for - filesystems meta data. +------- + +This file controls the operation of the bdflush kernel daemon. It currently +contains nine integer values, six of which are actually used by the kernel. +They are listed in table 2-2. + + +Table 2-2: Parameters in /proc/sys/vm/bdflush +.............................................................................. + Value Meaning + nfract Percentage of buffer cache dirty to activate bdflush + ndirty Maximum number of dirty blocks to write out per wake-cycle + nrefill Number of clean buffers to try to obtain each time we call refill + nref_dirt buffer threshold for activating bdflush when trying to refill + buffers. + dummy Unused + age_buffer Time for normal buffer to age before we flush it + age_super Time for superblock to age before we flush it + dummy Unused + dummy Unused +.............................................................................. + +nfract +------ + +This parameter governs the maximum number of dirty buffers in the buffer +cache. Dirty means that the contents of the buffer still have to be written to +disk (as opposed to a clean buffer, which can just be forgotten about). +Setting this to a higher value means that Linux can delay disk writes for a +long time, but it also means that it will have to do a lot of I/O at once when +memory becomes short. A lower value will spread out disk I/O more evenly. + +ndirty +------ + +Ndirty gives the maximum number of dirty buffers that bdflush can write to the +disk at one time. A high value will mean delayed, bursty I/O, while a small +value can lead to memory shortage when bdflush isn't woken up often enough. + +nrefill +------- + +This is the number of buffers that bdflush will add to the list of free +buffers when refill_freelist() is called. It is necessary to allocate free +buffers beforehand, since the buffers are often different sizes than the +memory pages and some bookkeeping needs to be done beforehand. The higher the +number, the more memory will be wasted and the less often refill_freelist() +will need to run. + +nref_dirt +--------- + +When refill_freelist() comes across more than nref_dirt dirty buffers, it will +wake up bdflush. + +age_buffer and age_super +------------------------ + +Finally, the age_buffer and age_super parameters govern the maximum time Linux +waits before writing out a dirty buffer to disk. The value is expressed in +jiffies (clockticks), the number of jiffies per second is 100. Age_buffer is +the maximum age for data blocks, while age_super is for filesystems meta data. buffermem - The three values in this file control how much memory should be - used for buffer memory. The percentage is calculated as a - percentage of total system memory. +--------- + +The three values in this file control how much memory should be used for +buffer memory. The percentage is calculated as a percentage of total system +memory. + +The values are: + +min_percent +----------- + +This is the minimum percentage of memory that should be spent on buffer +memory. - The values are: +borrow_percent +-------------- - min_percent - This is the minimum percentage of memory that should be - spent on buffer memory. +When Linux is short on memory, and the buffer cache uses more than it has been +allotted, the memory management (MM) subsystem will prune the buffer cache +more heavily than other memory to compensate. - borrow_percent - When Linux is short on memory, and the buffer cache uses more - than it has been allotted, the memory mangement (MM) subsystem - will prune the buffer cache more heavily than other memory to - compensate. +max_percent +----------- - max_percent - This is the maximum amount of memory that can be used for - buffer memory. +This is the maximum amount of memory that can be used for buffer memory. freepages - This file contains three values: min, low and high: +--------- - min - When the number of free pages in the system reaches this number, - only the kernel can allocate more memory. +This file contains three values: min, low and high: - low - If the number of free pages gets below this point, the kernel - starts swapping aggressively. +min +--- +When the number of free pages in the system reaches this number, only the +kernel can allocate more memory. - high - The kernel tries to keep up to this amount of memory free; if - memory comes below this point, the kernel gently starts swapping - in the hopes that it never has to do really aggressive swapping. +low +--- +If the number of free pages falls below this point, the kernel starts swapping +aggressively. + +high +---- +The kernel tries to keep up to this amount of memory free; if memory falls +below this point, the kernel starts gently swapping in the hopes that it never +has to do really aggressive swapping. kswapd - Kswapd is the kernel swap out daemon. That is, kswapd is that piece - of the kernel that frees memory when it gets fragmented or - full. Since every system is different, you'll probably want some - control over this piece of the system. +------ + +Kswapd is the kernel swap out daemon. That is, kswapd is that piece of the +kernel that frees memory when it gets fragmented or full. Since every system +is different, you'll probably want some control over this piece of the system. + +The file contains three numbers: + +tries_base +---------- - The file contains three numbers: +The maximum number of pages kswapd tries to free in one round is calculated +from this number. Usually this number will be divided by 4 or 8 (see +mm/vmscan.c), so it isn't as big as it looks. - tries_base - The maximum number of pages kswapd tries to free in one round is - calculated from this number. Usually this number will be divided - by 4 or 8 (see mm/vmscan.c), so it isn't as big as it looks. +When you need to increase the bandwidth to/from swap, you'll want to increase +this number. - When you need to increase the bandwidth to/from swap, you'll want - to increase this number. +tries_min +--------- - tries_min - This is the minimum number of times kswapd tries to free a page - each time it is called. Basically it's just there to make sure - that kswapd frees some pages even when it's being called with - minimum priority. +This is the minimum number of times kswapd tries to free a page each time it +is called. Basically it's just there to make sure that kswapd frees some pages +even when it's being called with minimum priority. +swap_cluster +------------ - swap_cluster - This is probably the greatest influence on system - performance. swap_cluster is the number of pages kswapd writes in - one turn. You'll want this value to be large so that kswapd does - its I/O in large chunks and the disk doesn't have to seek as - often., but you don't want it to be too large since that would - flood the request queue. +This is probably the greatest influence on system performance. + +swap_cluster is the number of pages kswapd writes in one turn. You'll want +this value to be large so that kswapd does its I/O in large chunks and the +disk doesn't have to seek as often, but you don't want it to be too large +since that would flood the request queue. overcommit_memory - This file contains one value. The following algorithm is used to - decide if there's enough memory: if the value of overcommit_memory - is positive, then there's always enough memory. This is a useful - feature, since programs often malloc() huge amounts of memory 'just - in case', while they only use a small part of it. Leaving this - value at 0 will lead to the failure of such a huge malloc(), when - in fact the system has enough memory for the program to run. - - On the other hand, enabling this feature can cause you to run out - of memory and thrash the system to death, so large and/or important - servers will want to set this value to 0. +----------------- + +This file contains one value. The following algorithm is used to decide if +there's enough memory: if the value of overcommit_memory is positive, then +there's always enough memory. This is a useful feature, since programs often +malloc() huge amounts of memory 'just in case', while they only use a small +part of it. Leaving this value at 0 will lead to the failure of such a huge +malloc(), when in fact the system has enough memory for the program to run. + +On the other hand, enabling this feature can cause you to run out of memory +and thrash the system to death, so large and/or important servers will want to +set this value to 0. pagecache - This file does exactly the same as buffermem, only this file - controls the amount of memory allowed for memory mapping and - generic caching of files. +--------- + +This file does exactly the same job as buffermem, only this file controls the +amount of memory allowed for memory mapping and generic caching of files. - You don't want the minimum level to be too low, otherwise your - system might thrash when memory is tight or fragmentation is - high. +You don't want the minimum level to be too low, otherwise your system might +thrash when memory is tight or fragmentation is high. pagetable_cache - The kernel keeps a number of page tables in a per-processor cache - (this helps a lot on SMP systems). The cache size for each - processor will be between the low and the high value. +--------------- - On a low-memory, single CPU system, you can safely set these values - to 0 so you don't waste memory. It is used on SMP systems so that - the system can perform fast pagetable allocations without having to - aquire the kernel memory lock. +The kernel keeps a number of page tables in a per-processor cache (this helps +a lot on SMP systems). The cache size for each processor will be between the +low and the high value. - For large systems, the settings are probably fine. For normal - systems they won't hurt a bit. For small systems (<16MB ram) it - might be advantageous to set both values to 0. +On a low-memory, single CPU system, you can safely set these values to 0 so +you don't waste memory. It is used on SMP systems so that the system can +perform fast pagetable allocations without having to aquire the kernel memory +lock. + +For large systems, the settings are probably fine. For normal systems they +won't hurt a bit. For small systems ( less than 16MB ram) it might be +advantageous to set both values to 0. swapctl - This file contains no less than 8 variables. All of these values - are used by kswapd. - - The first four variables sc_max_page_age, sc_page_advance, - sc_page_decline and sc_page_initial_age are used to keep track of - Linux's page aging. Page aging is a bookkeeping method to track - which pages of memory are often used, and which pages can be - swapped out without consequences. - - When a page is swapped in, it starts at sc_page_initial_age - (default 3) and when the page is scanned by kswapd, its age is - adjusted according to the following scheme: - - o If the page was used since the last time we scanned, its age - is increased by sc_page_advance (default 3) up to a - maximum of sc_max_page_age (default 20). - - o Else (meaning it wasn't used) its age is decreased by - sc_page_decline (default 1). - - When a page reaches age 0, it's ready to be swapped out. - - The next four variables sc_age_cluster_fract, sc_age_cluster_min, - sc_pageout_weight and sc_bufferout_weight, can be used to control - kswapd's aggressiveness in swapping out pages. - - Sc_age_cluster_fract is used to calculate how many pages from a - process are to be scanned by kswapd. The formula used is - - sc_age_cluster_fract - -------------------- * resident set size - 1024 =20 - - So if you want kswapd to scan the whole process, - sc_age_cluster_fract needs to have a value of 1024. The minimum - number of pages kswapd will scan is represented by - sc_age_cluster_min, this is done so kswapd will also scan small - processes. - - The values of sc_pageout_weight and sc_bufferout_weight are used - to control how many tries kswapd will make in order to swap out - one page/buffer. These values can be used to fine-tune the ratio - between user pages and buffer/cache memory. When you find that - your Linux system is swapping out too many process pages in order - to satisfy buffer memory demands, you might want to either - increase sc_bufferout_weight, or decrease the value of - sc_pageout_weight. - -3.6 /proc/sys/dev - Device specific parameters - -Currently there is only support for CDROM drives, but other drivers may -wish to register themselves in here in the future. The cdrom/ directory -contains several files that either control or supply information about -the CDROM subsystem. - ->cat /proc/sys/dev/cdrom/info -CD-ROM information, Id: cdrom.c 3.04 1999/09/12 - -drive name: hdd hdc hdb hda -drive speed: 32 24 10 0 -drive # of slots: 1 1 1 1 -Can close tray: 1 1 1 1 -Can open tray: 1 1 1 1 -Can lock tray: 1 1 1 1 -Can change speed: 1 1 1 1 -Can select disk: 0 0 0 0 -Can read multisession: 1 1 1 1 -Can read MCN: 1 1 1 1 -Reports media changed: 1 1 1 1 -Can play audio: 1 1 1 1 -Can write CD-R: 0 1 0 0 -Can write CD-RW: 0 1 0 0 -Can read DVD: 0 0 0 1 -Can write DVD-R: 0 0 0 0 -Can write DVD-RAM: 0 0 0 0 - -You see four drives and their lists of features. These are all ATAPI -drives - SCSI drives will be numbered sr0, sr1, and so forth. - -The remaining files all set options in the driver. - -autoclose - Close the drive tray when the drive is accessed. - -autoeject - Eject the tray when the drive is umounted. - -check_media - Verify the media type when opening the device. This is generally - meant for audio CD's. - -debug - Print debugging messages. - -lock - Lock the tray when the drive is in use. - - -3.7 /proc/sys/sunrpc - Remote procedure calls - -This directory contains four files, which enable or disable debugging -for the RPC functions NFS, NFS-daemon, RPC and NLM. The default values -are 0. They can be set to one, to turn debugging on. (The default -value is 0 for each) - -3.8 /proc/sys/net - Networking stuff - -The interface to the networking parts of the kernel is located in -/proc/sys/net. The table below shows all possible subdirectories. You -may see only some of them, depending on the configuration of your -kernel: - -+-------------------------------------------------------------+ -| core General parameter |appletalk Appletalk protocol | -| unix Unix domain sockets |netrom NET/ROM | -| 802 E802 protocol |ax25 AX25 | -| ethernet Ethernet protocol |rose X.25 PLP layer | -| ipv4 IP version 4 |x25 X.25 protocol | -| ipx IPX |token-ring IBM token ring | -| bridge Bridging |decnet DEC net | -| ipv6 IP version 6 | | -+-------------------------------------------------------------+ - -We will concentrate on IP networking here. As AX15, X.25, and DEC Net -are only minor players in the Linux world, we'll skip them in this -chapter. You'll find some short info to Appletalk and IPX further down -in section 3.10 and 3.11. Please look in the online documentation and -the kernel source to get a detailed view of the parameters for those -protocols. In this section we'll discuss the subdirectories printed in -bold letters in the table above. As default values are suitable for -most needs, there is no need to change these values. +------- + +This file contains no less than 8 variables. All of these values are used by +kswapd. + +The first four variables +* sc_max_page_age, +* sc_page_advance, +* sc_page_decline and +* sc_page_initial_age +are used to keep track of Linux's page aging. Page aging is a bookkeeping +method to track which pages of memory are often used, and which pages can be +swapped out without consequences. + +When a page is swapped in, it starts at sc_page_initial_age (default 3) and +when the page is scanned by kswapd, its age is adjusted according to the +following scheme: + +* If the page was used since the last time we scanned, its age is increased + by sc_page_advance (default 3). Where the maximum value is given by + sc_max_page_age (default 20). +* Otherwise (meaning it wasn't used) its age is decreased by sc_page_decline + (default 1). + +When a page reaches age 0, it's ready to be swapped out. + +The variables sc_age_cluster_fract, sc_age_cluster_min, sc_pageout_weight and +sc_bufferout_weight, can be used to control kswapd's aggressiveness in +swapping out pages. + +Sc_age_cluster_fract is used to calculate how many pages from a process are to +be scanned by kswapd. The formula used is + +(sc_age_cluster_fract divided by 1024) times resident set size + +So if you want kswapd to scan the whole process, sc_age_cluster_fract needs to +have a value of 1024. The minimum number of pages kswapd will scan is +represented by sc_age_cluster_min, which is done so that kswapd will also scan +small processes. + +The values of sc_pageout_weight and sc_bufferout_weight are used to control +how many tries kswapd will make in order to swap out one page/buffer. These +values can be used to fine-tune the ratio between user pages and buffer/cache +memory. When you find that your Linux system is swapping out too many process +pages in order to satisfy buffer memory demands, you may want to either +increase sc_bufferout_weight, or decrease the value of sc_pageout_weight. + +2.5 /proc/sys/dev - Device specific parameters +---------------------------------------------- + +Currently there is only support for CDROM drives, and for those, there is only +one read-only file containing information about the CD-ROM drives attached to +the system: + + >cat /proc/sys/dev/cdrom/info + CD-ROM information, Id: cdrom.c 2.55 1999/04/25 + + drive name: sr0 hdb + drive speed: 32 40 + drive # of slots: 1 0 + Can close tray: 1 1 + Can open tray: 1 1 + Can lock tray: 1 1 + Can change speed: 1 1 + Can select disk: 0 1 + Can read multisession: 1 1 + Can read MCN: 1 1 + Reports media changed: 1 1 + Can play audio: 1 1 + + +You see two drives, sr0 and hdb, along with a list of their features. + +2.6 /proc/sys/sunrpc - Remote procedure calls +--------------------------------------------- + +This directory contains four files, which enable or disable debugging for the +RPC functions NFS, NFS-daemon, RPC and NLM. The default values are 0. They can +be set to one to turn debugging on. (The default value is 0 for each) + +2.7 /proc/sys/net - Networking stuff +------------------------------------ + +The interface to the networking parts of the kernel is located in +/proc/sys/net. Table 2-3 shows all possible subdirectories. You may see only +some of them, depending on your kernel's configuration. + + +Table 2-3: Subdirectories in /proc/sys/net +.............................................................................. + Directory Content Directory Content + core General parameter appletalk Appletalk protocol + unix Unix domain sockets netrom NET/ROM + 802 E802 protocol ax25 AX25 + ethernet Ethernet protocol rose X.25 PLP layer + ipv4 IP version 4 x25 X.25 protocol + ipx IPX token-ring IBM token ring + bridge Bridging decnet DEC net + ipv6 IP version 6 +.............................................................................. + +We will concentrate on IP networking here. Since AX15, X.25, and DEC Net are +only minor players in the Linux world, we'll skip them in this chapter. You'll +find some short info on Appletalk and IPX further on in this chapter. Review +the online documentation and the kernel source to get a detailed view of the +parameters for those protocols. In this section we'll discuss the +subdirectories printed in bold letters in the table above. As default values +are suitable for most needs, there is no need to change these values. /proc/sys/net/core - Network core options +----------------------------------------- rmem_default - The default setting of the socket receive buffer in bytes. +------------ + +The default setting of the socket receive buffer in bytes. rmem_max - The maximum receive socket buffer size in bytes. +-------- + +The maximum receive socket buffer size in bytes. wmem_default - The default setting (in bytes) of the socket send buffer. +------------ + +The default setting (in bytes) of the socket send buffer. wmem_max - The maximum send socket buffer size in bytes. +-------- + +The maximum send socket buffer size in bytes. message_burst and message_cost - These parameters are used to limit the warning messages written to - the kernel log from the networking code. They enforce a rate limit - to make a denial-of-service attack impossible. The higher the - message_cost factor is, the less messages will be - written. Message_burst controls when messages will be dropped. The - default settings limit warning messages to one every five seconds. +------------------------------ + +These parameters are used to limit the warning messages written to the kernel +log from the networking code. They enforce a rate limit to make a +denial-of-service attack impossible. A higher message_cost factor, results in +fewer messages that will be written. Message_burst controls when messages will +be dropped. The default settings limit warning messages to one every five +seconds. netdev_max_backlog - Maximal number of packets, queued on INPUT side, when the interface - receives packets faster than kernel can process them. +------------------ + +Maximum number of packets, queued on the INPUT side, when the interface +receives packets faster than kernel can process them. optmem_max - Maximum ancillary buffer size allowed per socket. Ancillary data is - a sequence of struct cmsghdr structures with appended data. +---------- + +Maximum ancillary buffer size allowed per socket. Ancillary data is a sequence +of struct cmsghdr structures with appended data. -/proc/sys/net/unix - Parameters for UNIX domain sockets +/proc/sys/net/unix - Parameters for Unix domain sockets +------------------------------------------------------- -There are only two files in this subdirectory. They control the delays -for deleting and destroying socket descriptors. +There are only two files in this subdirectory. They control the delays for +deleting and destroying socket descriptors. -3.9 /proc/sys/net/ipv4 - IPV4 settings +2.8 /proc/sys/net/ipv4 - IPV4 settings +-------------------------------------- -IP version 4 is still the most used protocol in Unix networking. It -will be replaced by IP version 6 in the next couple of years, but for -the moment it's the de facto standard for the internet and is used in -most networking environments around the world. Because of the -importance of this protocol, we'll have a deeper look into the subtree -controlling the behavior of the IPv4 subsystem of the Linux kernel. +IP version 4 is still the most used protocol in Unix networking. It will be +replaced by IP version 6 in the next couple of years, but for the moment it's +the de facto standard for the internet and is used in most networking +environments around the world. Because of the importance of this protocol, +we'll have a deeper look into the subtree controlling the behavior of the IPv4 +subsystem of the Linux kernel. -Let's start with the entries in /proc/sys/net/ipv4 itself. +Let's start with the entries in /proc/sys/net/ipv4. ICMP settings +------------- icmp_echo_ignore_all and icmp_echo_ignore_broadcasts - Turn on (1) or off (0), if the kernel should ignore all ICMP ECHO - requests, or just those to broadcast and multicast addresses. +---------------------------------------------------- - Please note that if you accept ICMP echo requests with a - broadcast/multicast destination address your network may be used - as an exploder for denial of service packet flooding attacks to - other hosts. +Turn on (1) or off (0), if the kernel should ignore all ICMP ECHO requests, or +just those to broadcast and multicast addresses. -icmp_destunreach_rate, icmp_echoreply_rate, -icmp_paramprob_rate and icmp_timeexeed_rate - Sets limits for sending ICMP packets to specific targets. A value of - zero disables all limiting. Any positive value sets the maximum - package rate in hundredths of a second (on Intel systems). +Please note that if you accept ICMP echo requests with a broadcast/multi\-cast +destination address your network may be used as an exploder for denial of +service packet flooding attacks to other hosts. + +icmp_destunreach_rate, icmp_echoreply_rate, icmp_paramprob_rate and icmp_timeexeed_rate +--------------------------------------------------------------------------------------- + +Sets limits for sending ICMP packets to specific targets. A value of zero +disables all limiting. Any positive value sets the maximum package rate in +hundredth of a second (on Intel systems). IP settings +----------- ip_autoconfig - This file contains one, if the host got its IP configuration by - RARP, BOOTP, DHCP or a similar mechanism. Otherwise it is zero. +------------- + +This file contains the number one if the host received its IP configuration by +RARP, BOOTP, DHCP or a similar mechanism. Otherwise it is zero. ip_default_ttl - TTL (Time To Live) for IPv4 interfaces. This is simply the - maximum number of hops a packet may travel. +-------------- + +TTL (Time To Live) for IPv4 interfaces. This is simply the maximum number of +hops a packet may travel. ip_dynaddr - Enable dynamic socket address rewriting on interface address change. This - is useful for dialup interface with changing IP addresses. +---------- + +Enable dynamic socket address rewriting on interface address change. This is +useful for dialup interface with changing IP addresses. ip_forward - Enable or disable forwarding of IP packages between interfaces. A - change of this value resets all other parameters to their default - values. They differ if the kernel is configured as host or router. +---------- + +Enable or disable forwarding of IP packages between interfaces. Changing this +value resets all other parameters to their default values. They differ if the +kernel is configured as host or router. ip_local_port_range - Range of ports used by TCP and UDP to choose the local - port. Contains two numbers, the first number is the lowest port, - the second number the highest local port. Default is 1024-4999. - Should be changed to 32768-61000 for high-usage systems. +------------------- + +Range of ports used by TCP and UDP to choose the local port. Contains two +numbers, the first number is the lowest port, the second number the highest +local port. Default is 1024-4999. Should be changed to 32768-61000 for +high-usage systems. ip_no_pmtu_disc - Global switch to turn path MTU discovery off. It can also be set - on a per socket basis by the applications or on a per route - basis. +--------------- + +Global switch to turn path MTU discovery off. It can also be set on a per +socket basis by the applications or on a per route basis. ip_masq_debug - Enable/disable debugging of IP masquerading. +------------- +Enable/disable debugging of IP masquerading. IP fragmentation settings +------------------------- ipfrag_high_trash and ipfrag_low_trash - Maximum memory used to reassemble IP fragments. When - ipfrag_high_thresh bytes of memory is allocated for this purpose, - the fragment handler will toss packets until ipfrag_low_thresh is - reached. +-------------------------------------- +Maximum memory used to reassemble IP fragments. When ipfrag_high_thresh bytes +of memory is allocated for this purpose, the fragment handler will toss +packets until ipfrag_low_thresh is reached. ipfrag_time - Time in seconds to keep an IP fragment in memory. +----------- + +Time in seconds to keep an IP fragment in memory. TCP settings +------------ tcp_retrans_collapse - Bug-to-bug compatibility with some broken printers. On retransmit - try to send bigger packets to work around bugs in certain TCP - stacks. Can be turned off by setting it to zero. +-------------------- + +Bug-to-bug compatibility with some broken printers. On retransmit, try to send +larger packets to work around bugs in certain TCP stacks. Can be turned off by +setting it to zero. tcp_keepalive_probes - Number of keep alive probes TCP sends out, until it decides that the - connection is broken. +-------------------- + +Number of keep alive probes TCP sends out, until it decides that the +connection is broken. tcp_keepalive_time - How often TCP sends out keep alive messages, when keep alive is - enabled. The default is 2 hours. +------------------ + +How often TCP sends out keep alive messages, when keep alive is enabled. The +default is 2 hours. tcp_syn_retries - Number of times initial SYNs for a TCP connection attempt will be - retransmitted. Should not be higher than 255. This is only the - timeout for outgoing connections, for incoming connections the - number of retransmits is defined by tcp_retries1. +--------------- + +Number of times initial SYNs for a TCP connection attempt will be +retransmitted. Should not be higher than 255. This is only the timeout for +outgoing connections, for incoming connections the number of retransmits is +defined by tcp_retries1. tcp_sack - Enable select acknowledgments after RFC2018. +-------- + +Enable select acknowledgments after RFC2018. tcp_timestamps - Enable timestamps as defined in RFC1323. +-------------- + +Enable timestamps as defined in RFC1323. tcp_stdurg - Enable the strict RFC793 interpretation of the TCP urgent pointer - field. The default is to use the BSD compatible interpretation - of the urgent pointer pointing to the first byte after the urgent - data. The RFC793 interpretation is to have it point to the last - byte of urgent data. Enabling this option may lead to - interoperatibility problems. Disabled by default. +---------- + +Enable the strict RFC793 interpretation of the TCP urgent pointer field. The +default is to use the BSD compatible interpretation of the urgent pointer +pointing to the first byte after the urgent data. The RFC793 interpretation is +to have it point to the last byte of urgent data. Enabling this option may +lead to interoperatibility problems. Disabled by default. tcp_syncookies - Only valid when the kernel was compiled with - CONFIG_SYNCOOKIES. Send out syncookies when the syn backlog queue - of a socket overflows. This is to prevent against the common 'syn - flood attack'. Disabled by default. +-------------- + +Only valid when the kernel was compiled with CONFIG_SYNCOOKIES. Send out +syncookies when the syn backlog queue of a socket overflows. This is to ward +off the common 'syn flood attack'. Disabled by default. - Note that the concept of a socket backlog is abandoned, this - means the peer may not receive reliable error messages from an - over loaded server with syncookies enabled. +Note that the concept of a socket backlog is abandoned. This means the peer +may not receive reliable error messages from an over loaded server with +syncookies enabled. tcp_window_scaling - Enable window scaling as defined in RFC1323. +------------------ + +Enable window scaling as defined in RFC1323. tcp_fin_timeout - How many seconds to wait for a final FIN before the socket is - always closed. This is strictly a violation of the TCP - specification, but required to prevent denial-of-service attacks. +--------------- + +The length of time in seconds it takes to receive a final FIN before the +socket is always closed. This is strictly a violation of the TCP +specification, but required to prevent denial-of-service attacks. tcp_max_ka_probes - How many keepalive probes are sent per slow timer run. Shouldn't be - set too high to prevent bursts. +----------------- + +Indicates how many keep alive probes are sent per slow timer run. Should not +be set too high to prevent bursts. tcp_max_syn_backlog - Length of the per socket backlog queue. Since Linux 2.2 the backlog - specified in listen(2) only specifies the length of the backlog - queue of already established sockets. When more connection requests - arrive Linux starts to drop packets. When syncookies are enabled - the packets are still answered and the maximum queue is effectively - ignored. +------------------- + +Length of the per socket backlog queue. Since Linux 2.2 the backlog specified +in listen(2) only specifies the length of the backlog queue of already +established sockets. When more connection requests arrive Linux starts to drop +packets. When syncookies are enabled the packets are still answered and the +maximum queue is effectively ignored. tcp_retries1 - Defines how often an answer to a TCP connection request is - retransmitted before giving up. +------------ + +Defines how often an answer to a TCP connection request is retransmitted +before giving up. tcp_retries2 - Defines how often a TCP packet is retransmitted before giving up. +------------ -Interface specific settings +Defines how often a TCP packet is retransmitted before giving up. -In the directory /proc/sys/net/ipv4/conf you'll find one subdirectory -for each interface the system knows about and one directory calls -all. Changes in the all subdirectory affect all interfaces, where -changes in the other subdirectories affect only one interface. +Interface specific settings +--------------------------- -All directories have the same entries: +In the directory /proc/sys/net/ipv4/conf you'll find one subdirectory for each +interface the system knows about and one directory calls all. Changes in the +all subdirectory affect all interfaces, whereas changes in the other +subdirectories affect only one interface. All directories have the same +entries: accept_redirects - This switch decides if the kernel accepts ICMP redirect messages - or not. The default is 'yes', if the kernel is configured for a - regular host; and 'no' for a router configuration. +---------------- + +This switch decides if the kernel accepts ICMP redirect messages or not. The +default is 'yes' if the kernel is configured for a regular host and 'no' for a +router configuration. accept_source_route - Should source routed packages be accepted or declined. The - default is dependent on the kernel configuration. It's 'yes' for - routers and 'no' for hosts. +------------------- + +Should source routed packages be accepted or declined. The default is +dependent on the kernel configuration. It's 'yes' for routers and 'no' for +hosts. bootp_relay - Accept packets with source address 0.b.c.d destined not to this - host as local ones. It is supposed that BOOTP relay daemon will - catch and forward such packets. +~~~~~~~~~~~ + +Accept packets with source address 0.b.c.d with destinations not to this host +as local ones. It is supposed that a BOOTP relay daemon will catch and forward +such packets. - The default is 'no', as this feature is not implemented yet - (kernel version 2.2.0-pre?). +The default is 0, since this feature is not implemented yet (kernel version +2.2.12). forwarding - Enable or disable IP forwarding on this interface. +---------- + +Enable or disable IP forwarding on this interface. log_martians - Log packets with source addresses with no known route to kernel log. +------------ + +Log packets with source addresses with no known route to kernel log. mc_forwarding - Do multicast routing. The kernel needs to be compiled with - CONFIG_MROUTE and a multicast routing daemon is required. +------------- + +Do multicast routing. The kernel needs to be compiled with CONFIG_MROUTE and a +multicast routing daemon is required. proxy_arp - Do (1) or don't (0) do proxy ARP. +--------- + +Does (1) or does not (0) perform proxy ARP. rp_filter - Integer value deciding if source validation should be made. - 1 means yes, 0 means no. Disabled by default, but - local/broadcast address spoofing is always on. +--------- - If you set this to 1 on a router that is the only connection - for a network to the net , it evidently prevents spoofing attacks - against your internal networks (external addresses can still be - spoofed), without the need for additional firewall rules. +Integer value determines if a source validation should be made. 1 means yes, 0 +means no. Disabled by default, but local/broadcast address spoofing is always +on. + +If you set this to 1 on a router that is the only connection for a network to +the net, it will prevent spoofing attacks against your internal networks +(external addresses can still be spoofed), without the need for additional +firewall rules. secure_redirects - Accept ICMP redirect messages only for gateways, listed in - default gateway list. Enabled by default. +---------------- + +Accept ICMP redirect messages only for gateways, listed in default gateway +list. Enabled by default. shared_media - If it is not set the kernel does not assume that different subnets - on this device can communicate directly. Default setting is 'yes'. +------------ + +If it is not set the kernel does not assume that different subnets on this +device can communicate directly. Default setting is 'yes'. send_redirects - Determines if or if not to send ICMP redirects to other hosts. +-------------- +Determines whether to send ICMP redirects to other hosts. Routing settings +---------------- -The directory /proc/sys/net/ipv4/route contains several file to -control routing issues. +The directory /proc/sys/net/ipv4/route contains several file to control +routing issues. error_burst and error_cost - These parameters are used to limit the warning messages written to - the kernel log from the routing code. The higher the error_cost - factor is, the fewer messages will be written. Error_burst controls - when messages will be dropped. The default settings limit warning - messages to one every five seconds. +-------------------------- + +These parameters are used to limit the warning messages written to the kernel +log from the routing code. The higher the error_cost factor is, the fewer +messages will be written. Error_burst controls when messages will be dropped. +The default settings limit warning messages to one every five seconds. flush - Writing to this file results in a flush of the routing cache. +----- + +Writing to this file results in a flush of the routing cache. gc_elastic, gc_interval, gc_min_interval, gc_tresh, gc_timeout - Values to control the frequency and behavior of the garbage - collection algorithm for the routing cache. +-------------------------------------------------------------- + +Values to control the frequency and behavior of the garbage collection +algorithm for the routing cache. max_size - Maximum size of the routing cache. Old entries will be purged - once the cache has this size. +-------- + +Maximum size of the routing cache. Old entries will be purged once the cache +reached has this size. max_delay, min_delay - Delays for flushing the routing cache. +-------------------- + +Delays for flushing the routing cache. redirect_load, redirect_number - Factors which determine if more ICPM redirects should be sent to - a specific host. No redirects will be sent once the load limit or - the maximum number of redirects has been reached. +------------------------------ + +Factors which determine if more ICPM redirects should be sent to a specific +host. No redirects will be sent once the load limit or the maximum number of +redirects has been reached. redirect_silence +---------------- - Timeout for redirects. After this period redirects will be sent - again, even if this has been stopped, because the load or number - limit has been reached. +Timeout for redirects. After this period redirects will be sent again, even if +this has been stopped, because the load or number limit has been reached. Network Neighbor handling +------------------------- -Settings about how to handle connections with direct neighbors (nodes -attached to the same link) can be found in the directory -/proc/sys/net/ipv4/neigh. +Settings about how to handle connections with direct neighbors (nodes attached +to the same link) can be found in the directory /proc/sys/net/ipv4/neigh. -As we saw it in the conf directory, there is a default subdirectory -which holds the default values, and one directory for each -interface. The contents of the directories are identical, with the -single exception that the default settings contain additional options -to set garbage collection parameters. +As we saw it in the conf directory, there is a default subdirectory which +holds the default values, and one directory for each interface. The contents +of the directories are identical, with the single exception that the default +settings contain additional options to set garbage collection parameters. In the interface directories you'll find the following entries: base_reachable_time - A base value used for computing the random reachable time value - as specified in RFC2461. +------------------- + +A base value used for computing the random reachable time value as specified +in RFC2461. retrans_time - The time, expressed in jiffies (1/100 sec), between retransmitted - Neighbor Solicitation messages. Used for address resolution and to - determine if a neighbor is unreachable. +------------ + +The time, expressed in jiffies (1/100 sec), between retransmitted Neighbor +Solicitation messages. Used for address resolution and to determine if a +neighbor is unreachable. unres_qlen - Maximum queue length for a pending arp request - how many packets - are accepted from other layers while the arp address is still - resolved. +---------- + +Maximum queue length for a pending arp request - the number of packets which +are accepted from other layers while the ARP address is still resolved. anycast_delay - Maximum for random delay of answers to neighbor solicitation - messages in jiffies (1/100 sec). Not yet implemented (Linux does - not have anycast support yet). +------------- + +Maximum for random delay of answers to neighbor solicitation messages in +jiffies (1/100 sec). Not yet implemented (Linux does not have anycast support +yet). ucast_solicit - Maximum number of retries for unicast solicitation. +------------- + +Maximum number of retries for unicast solicitation. mcast_solicit - Maximum number of retries for multicast solicitation. +------------- + +Maximum number of retries for multicast solicitation. delay_first_probe_time - Delay for the first time probe if the neighbor is reachable. (see - gc_stale_time). +---------------------- + +Delay for the first time probe if the neighbor is reachable. (see +gc_stale_time) locktime - An ARP/neighbor entry is only replaced with a new one if the old - is at least locktime old. This prevents ARP cache thrashing. +-------- + +An ARP/neighbor entry is only replaced with a new one if the old is at least +locktime old. This prevents ARP cache thrashing. proxy_delay - Maximum time (real time is random [0..proxytime]) before - answering to an arp request for which we have an proxy arp entry. - In some cases, this is used to prevent network flooding. +----------- + +Maximum time (real time is random [0..proxytime]) before answering to an ARP +request for which we have an proxy ARP entry. In some cases, this is used to +prevent network flooding. proxy_qlen - Maximum queue length of the delayed proxy arp timer (see - proxy_delay). +---------- + +Maximum queue length of the delayed proxy arp timer. (see proxy_delay). app_solcit - Determines the number of requests to send to the user level arp - daemon. 0 to turn off. +---------- + +Determines the number of requests to send to the user level ARP daemon. Use 0 +to turn off. gc_stale_time - Determines how often to check for stale ARP entries. After an ARP - entry is stale it will be resolved again (useful when an IP address - migrates to another machine). When ucast_solicit is > 0 it first - tries to send an ARP packet directly to the known host, when that - fails and mcast_solicit is > 0, an ARP request is broadcasted. +------------- -3.10 Appletalk +Determines how often to check for stale ARP entries. After an ARP entry is +stale it will be resolved again (which is useful when an IP address migrates +to another machine). When ucast_solicit is greater than 0 it first tries to +send an ARP packet directly to the known host When that fails and +mcast_solicit is greater than 0, an ARP request is broadcasted. -The /proc/sys/net/appletalk directory holds the Appletalk -configuration data when Appletalk is loaded. The configurable -parameters are: +2.9 Appletalk +------------- + +The /proc/sys/net/appletalk directory holds the Appletalk configuration data +when Appletalk is loaded. The configurable parameters are: aarp-expiry-time - The amount of time we keep an AARP entry before expiring - it. Used to age out old hosts. +---------------- + +The amount of time we keep an ARP entry before expiring it. Used to age out +old hosts. aarp-resolve-time - The amount of time we will spend trying to resolve an Appletalk - address. +----------------- + +The amount of time we will spend trying to resolve an Appletalk address. aarp-retransmit-limit - The number of times we will retransmit a query before giving up. +--------------------- + +The number of times we will retransmit a query before giving up. aarp-tick-time - Controls the rate at which expiries are checked. - - -The directory /proc/net/appletalk holds the list of active appletalk -sockets on a machine. - -The fields indicate the DDP type, the local address (in network:node -format) the remote address, the size of the transmit pending queue, -the size of the received queue (bytes waiting for applications to -read) the state and the uid owning the socket. - -/proc/net/atalk_iface lists all the interfaces configured for -appletalk.It shows the name of the interface, its appletalk address, -the network range on that ad- dress (or network number for phase 1 -networks), and the status of the interface. - -/proc/net/atalk_route lists each known network route. It lists the -target (network) that the route leads to, the router (may be directly -connected), the route flags, and the device the route is via. - -3.11 IPX - -The IPX protocol has no tunable values in /proc/sys/net. - -The IPX protocol does, however, provide /proc/net/ipx. This lists each -IPX socket giving the local and remote addresses in Novell format -(that is network:node:port). In accordance with the strange Novell -tradition, everything but the port is in hex. Not_Connected is -displayed for sockets that are not tied to a specific remote -address. The Tx and Rx queue sizes indicate the number of bytes -pending for transmit and receive. The state indicates the state the -socket is in and the uid is the owning uid of the socket. - -The /proc/net/ipx_interface file lists all IPX interfaces. For each -interface it gives the network number, the node number, and indicates -if the network is the primary network. It also indicates which device it is bound to (or -Internal for internal networks) and the Frame Type if -appropriate. Linux supports 802.3, 802.2, 802.2 SNAP and DIX (Blue -Book) ethernet framing for IPX. - -The /proc/net/ipx_route table holds a list of IPX routes. For each -route it gives the destination network, the router node (or Directly) -and the network address of the router (or Connected) for internal -networks. +-------------- + +Controls the rate at which expires are checked. + +The directory /proc/net/appletalk holds the list of active Appletalk sockets +on a machine. + +The fields indicate the DDP type, the local address (in network:node format) +the remote address, the size of the transmit pending queue, the size of the +received queue (bytes waiting for applications to read) the state and the uid +owning the socket. + +/proc/net/atalk_iface lists all the interfaces configured for appletalk.It +shows the name of the interface, its Appletalk address, the network range on +that address (or network number for phase 1 networks), and the status of the +interface. + +/proc/net/atalk_route lists each known network route. It lists the target +(network) that the route leads to, the router (may be directly connected), the +route flags, and the device the route is using. + +2.10 IPX +-------- + +The IPX protocol has no tunable values in proc/sys/net. + +The IPX protocol does, however, provide proc/net/ipx. This lists each IPX +socket giving the local and remote addresses in Novell format (that is +network:node:port). In accordance with the strange Novell tradition, +everything but the port is in hex. Not_Connected is displayed for sockets that +are not tied to a specific remote address. The Tx and Rx queue sizes indicate +the number of bytes pending for transmission and reception. The state +indicates the state the socket is in and the uid is the owning uid of the +socket. + +The /proc/net/ipx_interface file lists all IPX interfaces. For each interface +it gives the network number, the node number, and indicates if the network is +the primary network. It also indicates which device it is bound to (or +Internal for internal networks) and the Frame Type if appropriate. Linux +supports 802.3, 802.2, 802.2 SNAP and DIX (Blue Book) ethernet framing for +IPX. + +The /proc/net/ipx_route table holds a list of IPX routes. For each route it +gives the destination network, the router node (or Directly) and the network +address of the router (or Connected) for internal networks. + +------------------------------------------------------------------------------ +Summary +------------------------------------------------------------------------------ +Certain aspects of kernel behavior can be modified at runtime, without the +need to recompile the kernel, or even to reboot the system. The files in the +/proc/sys tree can not only be read, but also modified. You can use the echo +command to write value into these files, thereby changing the default settings +of the kernel. +------------------------------------------------------------------------------ + + + + + + + |