|
|
1.1 ! root 1: .\" Copyright (c) 1983 Regents of the University of California. ! 2: .\" All rights reserved. The Berkeley software License Agreement ! 3: .\" specifies the terms and conditions for redistribution. ! 4: .\" ! 5: .\" @(#)d.t 6.2 (Berkeley) 6/3/86 ! 6: .\" ! 7: .\".ds RH "Data Structure Sizing Rules ! 8: .bp ! 9: .LG ! 10: .B ! 11: .ce ! 12: APPENDIX D. VAX KERNEL DATA STRUCTURE SIZING RULES ! 13: .sp ! 14: .R ! 15: .NL ! 16: .PP ! 17: Certain system data structures are sized at compile time ! 18: according to the maximum number of simultaneous users expected, ! 19: while others are calculated at boot time based on the ! 20: physical resources present, e.g. memory. This appendix lists ! 21: both sets of rules and also includes some hints on changing ! 22: built-in limitations on certain data structures. ! 23: .SH ! 24: Compile time rules ! 25: .PP ! 26: The file \fI/sys/conf\|/param.c\fP contains the definitions of ! 27: almost all data structures sized at compile time. This file ! 28: is copied into the directory of each configured system to allow ! 29: configuration-dependent rules and values to be maintained. ! 30: (Each copy normally depends on the copy in /sys/conf, ! 31: and global modifications cause the file to be recopied unless ! 32: the makefile is modified.) ! 33: The rules implied by its contents are summarized below (here ! 34: MAXUSERS refers to the value defined in the configuration file ! 35: in the ``maxusers'' rule). ! 36: Most limits are computed at compile time and stored in global variables ! 37: for use by other modules; they may generally be patched in the system ! 38: binary image before rebooting to test new values. ! 39: .IP \fBnproc\fP ! 40: .br ! 41: The maximum number of processes which may be running at any time. ! 42: It is referred to in other calculations as NPROC and is defined to be ! 43: .DS ! 44: 20 + 8 * MAXUSERS ! 45: .DE ! 46: .IP \fBntext\fP ! 47: .br ! 48: The maximum number of active shared text segments. ! 49: The constant is intended to allow for network servers and common commands ! 50: that remain in the table. ! 51: It is defined as ! 52: .DS ! 53: 36 + MAXUSERS. ! 54: .DE ! 55: .IP \fBninode\fP ! 56: .br ! 57: The maximum number of files in the file system which may be ! 58: active at any time. This includes files in use by users, as ! 59: well as directory files being read or written by the system ! 60: and files associated with bound sockets in the UNIX IPC domain. ! 61: It is defined as ! 62: .DS ! 63: (NPROC + 16 + MAXUSERS) + 32 ! 64: .DE ! 65: .IP \fBnfile\fP ! 66: .br ! 67: The number of ``file table'' structures. One file ! 68: table structure is used for each open, unshared, file descriptor. ! 69: Multiple file descriptors may reference a single file table ! 70: entry when they are created through a \fIdup\fP call, or as the ! 71: result of a \fIfork\fP. This is defined to be ! 72: .DS ! 73: 16 * (NPROC + 16 + MAXUSERS) / 10 + 32 ! 74: .DE ! 75: .IP \fBncallout\fP ! 76: .br ! 77: The number of ``callout'' structures. One callout ! 78: structure is used per internal system event handled with ! 79: a timeout. Timeouts are used for terminal delays, ! 80: watchdog routines in device drivers, protocol timeout processing, etc. ! 81: This is defined as ! 82: .DS ! 83: 16 + NPROC ! 84: .DE ! 85: .IP \fBnclist\fP ! 86: .br ! 87: The number of ``c-list'' structures. C-list structures are ! 88: used in terminal I/O, and currently each holds 60 characters. ! 89: Their number is defined as ! 90: .DS ! 91: 60 + 12 * MAXUSERS ! 92: .DE ! 93: .IP \fBnmbclusters\fP ! 94: .br ! 95: The maximum number of pages which may be allocated by the network. ! 96: This is defined as 256 (a quarter megabyte of memory) in /sys/h/mbuf.h. ! 97: In practice, the network rarely uses this much memory. It starts off ! 98: by allocating 8 kilobytes of memory, then requesting more as ! 99: required. This value represents an upper bound. ! 100: .IP \fBnquota\fP ! 101: .br ! 102: The number of ``quota'' structures allocated. Quota structures ! 103: are present only when disc quotas are configured in the system. One ! 104: quota structure is kept per user. This is defined to be ! 105: .DS ! 106: (MAXUSERS * 9) / 7 + 3 ! 107: .DE ! 108: .IP \fBndquot\fP ! 109: .br ! 110: The number of ``dquot'' structures allocated. Dquot structures ! 111: are present only when disc quotas are configured in the system. ! 112: One dquot structure is required per user, per active file system quota. ! 113: That is, when a user manipulates a file on a file system on which ! 114: quotas are enabled, the information regarding the user's quotas on ! 115: that file system must be in-core. This information is cached, so ! 116: that not all information must be present in-core all the time. ! 117: This is defined as ! 118: .DS ! 119: NINODE + (MAXUSERS * NMOUNT) / 4 ! 120: .DE ! 121: where NMOUNT is the maximum number of mountable file systems. ! 122: .LP ! 123: In addition to the above values, the system page tables (used to ! 124: map virtual memory in the kernel's address space) are sized at ! 125: compile time by the SYSPTSIZE definition in the file /sys/vax/vmparam.h. ! 126: This is defined to be ! 127: .DS ! 128: 20 + MAXUSERS ! 129: .DE ! 130: pages of page tables. ! 131: Its definition affects ! 132: the size of many data structures allocated at boot time because ! 133: it constrains the amount of virtual memory which may be addressed ! 134: by the running system. This is often the limiting factor ! 135: in the size of the buffer cache, in which case a message is printed ! 136: when the system configures at boot time. ! 137: .SH ! 138: Run-time calculations ! 139: .PP ! 140: The most important data structures sized at run-time are those used in ! 141: the buffer cache. Allocation is done by allocating physical memory ! 142: (and system virtual memory) immediately after the system ! 143: has been started up; look in the file /sys/vax/machdep.c. ! 144: The amount of physical memory which may be allocated to the buffer ! 145: cache is constrained by the size of the system page tables, among ! 146: other things. While the system may calculate ! 147: a large amount of memory to be allocated to the buffer cache, ! 148: if the system page ! 149: table is too small to map this physical ! 150: memory into the virtual address space ! 151: of the system, only as much as can be mapped will be used. ! 152: .PP ! 153: The buffer cache is comprised of a number of ``buffer headers'' ! 154: and a pool of pages attached to these headers. Buffer headers ! 155: are divided into two categories: those used for swapping and ! 156: paging, and those used for normal file I/O. The system tries ! 157: to allocate 10% of the first two megabytes and 5% of the remaining ! 158: available physical memory for the buffer ! 159: cache (where \fIavailable\fP does not count that space occupied by ! 160: the system's text and data segments). If this results in fewer ! 161: than 16 pages of memory allocated, then 16 pages are allocated. ! 162: This value is kept in the initialized variable \fIbufpages\fP ! 163: so that it may be patched in the binary image (to allow tuning ! 164: without recompiling the system), ! 165: or the default may be overridden with a configuration-file option. ! 166: For example, the option \fBoptions BUFPAGES="3200"\fP ! 167: causes 3200 pages (3.2M bytes) to be used by the buffer cache. ! 168: A sufficient number of file I/O buffer headers are then allocated ! 169: to allow each to hold 2 pages each. ! 170: Each buffer maps 8K bytes. ! 171: If the number of buffer pages is larger than can be mapped ! 172: by the buffer headers, the number of pages is reduced. ! 173: The number of buffer headers allocated ! 174: is stored in the global variable \fInbuf\fP, ! 175: which may be patched before the system is booted. ! 176: The system option \fBoptions NBUF="1000"\fP forces the allocation ! 177: of 1000 buffer headers. ! 178: Half as many swap I/O buffer headers as file I/O buffers ! 179: are allocated, ! 180: but no more than 256. ! 181: .SH ! 182: System size limitations ! 183: .PP ! 184: As distributed, the sum of the virtual sizes of the core-resident ! 185: processes is limited to 256M bytes. The size of the text ! 186: segment of a single process is currently limited to 6M bytes. ! 187: It may be increased to no greater than the data segment size limit ! 188: (see below) by redefining MAXTSIZ. ! 189: This may be done with a configuration file option, ! 190: e.g. \fBoptions MAXTSIZ="(10*1024*1024)"\fP ! 191: to set the limit to 10 million bytes. ! 192: Other per-process limits discussed here may be changed with similar options ! 193: with names given in parentheses. ! 194: Soft, user-changeable limits are set to 512K bytes for stack (DFLSSIZ) ! 195: and 6M bytes for the data segment (DFLDSIZ) by default; ! 196: these may be increased up to the hard limit ! 197: with the \fIsetrlimit\fP\|(2) system call. ! 198: The data and stack segment size hard limits are set by a system configuration ! 199: option to one of 17M, 33M or 64M bytes. ! 200: One of these sizes is chosen based on the definition of MAXDSIZ; ! 201: with no option, the limit is 17M bytes; with an option ! 202: \fBoptions MAXDSIZ="(32*1024*1024)"\fP (or any value between 17M and 33M), ! 203: the limit is increased to 33M bytes, and values larger than 33M ! 204: result in a limit of 64M bytes. ! 205: You must be careful in doing this that you have adequate paging space. ! 206: As normally configured , the system has 16M or 32M bytes per paging area, ! 207: depending on disk size. ! 208: The best way to get more space is to provide multiple, thereby ! 209: interleaved, paging areas. ! 210: Increasing the virtual memory limits results in interleaving of ! 211: swap space in larger sections (from 500K bytes to 1M or 2M bytes). ! 212: .PP ! 213: By default, the virtual memory system allocates enough memory ! 214: for system page tables mapping user page tables ! 215: to allow 256 megabytes of simultaneous active virtual memory. ! 216: That is, the sum of the virtual memory sizes of all (completely- or partially-) ! 217: resident processes can not exceed this limit. ! 218: If the limit is exceeded, some process(es) must be swapped out. ! 219: To increase the amount of resident virtual space possible, ! 220: you can alter the constant USRPTSIZE (in ! 221: /sys/vax/vmparam.h). ! 222: Each page of system page tables allows 8 megabytes of user virtual memory. ! 223: .PP ! 224: Because the file system block numbers are stored in ! 225: page table \fIpg_blkno\fP ! 226: entries, the maximum size of a file system is limited to ! 227: 2^24 1024 byte blocks. Thus no file system can be larger than 8 gigabytes. ! 228: .PP ! 229: The number of mountable file systems is set at 20 by the definition ! 230: of NMOUNT in /sys/h/param.h. ! 231: This should be sufficient; if not, the value can be increased up to 255. ! 232: If you have many disks, it makes sense to make some of ! 233: them single file systems, and the paging areas don't count in this total. ! 234: .PP ! 235: The limit to the number of files that a process may have open simultaneously ! 236: is set to 64. ! 237: This limit is set by the NOFILE definition in /sys/h/param.h. ! 238: It may be increased arbitrarily, with the caveat that the user structure ! 239: expands by 5 bytes for each file, and thus UPAGES (/sys/vax/machparam.h) ! 240: must be increased accordingly. ! 241: .PP ! 242: The amount of physical memory is currently limited to 64 Mb ! 243: by the size of the index fields in the core-map (/sys/h/cmap.h). ! 244: The limit may be increased by following instructions in that file ! 245: to enlarge those fields.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.