Annotation of 43BSDReno/share/doc/smm/14.fastfs/3.t, revision 1.1.1.1

1.1       root        1: .\" Copyright (c) 1986 The Regents of the University of California.
                      2: .\" All rights reserved.
                      3: .\"
                      4: .\" Redistribution and use in source and binary forms are permitted
                      5: .\" provided that the above copyright notice and this paragraph are
                      6: .\" duplicated in all such forms and that any documentation,
                      7: .\" advertising materials, and other materials related to such
                      8: .\" distribution and use acknowledge that the software was developed
                      9: .\" by the University of California, Berkeley.  The name of the
                     10: .\" University may not be used to endorse or promote products derived
                     11: .\" from this software without specific prior written permission.
                     12: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
                     13: .\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
                     14: .\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                     15: .\"
                     16: .\"    @(#)3.t 6.2 (Berkeley) 3/7/89
                     17: .\"
                     18: .ds RH New file system
                     19: .NH
                     20: New file system organization
                     21: .PP
                     22: In the new file system organization (as in the
                     23: old file system organization),
                     24: each disk drive contains one or more file systems.
                     25: A file system is described by its super-block,
                     26: located at the beginning of the file system's disk partition.
                     27: Because the super-block contains critical data,
                     28: it is replicated to protect against catastrophic loss.
                     29: This is done when the file system is created;
                     30: since the super-block data does not change,
                     31: the copies need not be referenced unless a head crash
                     32: or other hard disk error causes the default super-block
                     33: to be unusable.
                     34: .PP
                     35: To insure that it is possible to create files as large as
                     36: $2 sup 32$ bytes with only two levels of indirection,
                     37: the minimum size of a file system block is 4096 bytes.
                     38: The size of file system blocks can be any power of two
                     39: greater than or equal to 4096.
                     40: The block size of a file system is recorded in the 
                     41: file system's super-block
                     42: so it is possible for file systems with different block sizes
                     43: to be simultaneously accessible on the same system.
                     44: The block size must be decided at the time that
                     45: the file system is created;
                     46: it cannot be subsequently changed without rebuilding the file system.
                     47: .PP
                     48: The new file system organization divides a disk partition
                     49: into one or more areas called
                     50: .I "cylinder groups".
                     51: A cylinder group is comprised of one or more consecutive
                     52: cylinders on a disk.
                     53: Associated with each cylinder group is some bookkeeping information
                     54: that includes a redundant copy of the super-block,
                     55: space for inodes,
                     56: a bit map describing available blocks in the cylinder group,
                     57: and summary information describing the usage of data blocks
                     58: within the cylinder group.
                     59: The bit map of available blocks in the cylinder group replaces
                     60: the traditional file system's free list.
                     61: For each cylinder group a static number of inodes
                     62: is allocated at file system creation time.
                     63: The default policy is to allocate one inode for each 2048
                     64: bytes of space in the cylinder group, expecting this
                     65: to be far more than will ever be needed. 
                     66: .PP
                     67: All the cylinder group bookkeeping information could be
                     68: placed at the beginning of each cylinder group.
                     69: However if this approach were used,
                     70: all the redundant information would be on the top platter.
                     71: A single hardware failure that destroyed the top platter
                     72: could cause the loss of all redundant copies of the super-block.
                     73: Thus the cylinder group bookkeeping information
                     74: begins at a varying offset from the beginning of the cylinder group.
                     75: The offset for each successive cylinder group is calculated to be
                     76: about one track further from the beginning of the cylinder group
                     77: than the preceding cylinder group.
                     78: In this way the redundant
                     79: information spirals down into the pack so that any single track, cylinder,
                     80: or platter can be lost without losing all copies of the super-block.
                     81: Except for the first cylinder group,
                     82: the space between the beginning of the cylinder group
                     83: and the beginning of the cylinder group information
                     84: is used for data blocks.\(dg
                     85: .FS
                     86: \(dg While it appears that the first cylinder group could be laid
                     87: out with its super-block at the ``known'' location,
                     88: this would not work for file systems
                     89: with blocks sizes of 16 kilobytes or greater.
                     90: This is because of a requirement that the first 8 kilobytes of the disk
                     91: be reserved for a bootstrap program and a separate requirement that
                     92: the cylinder group information begin on a file system block boundary.
                     93: To start the cylinder group on a file system block boundary,
                     94: file systems with block sizes larger than 8 kilobytes 
                     95: would have to leave an empty space between the end of
                     96: the boot block and the beginning of the cylinder group.
                     97: Without knowing the size of the file system blocks,
                     98: the system would not know what roundup function to use
                     99: to find the beginning of the first cylinder group.
                    100: .FE
                    101: .NH 2
                    102: Optimizing storage utilization
                    103: .PP
                    104: Data is laid out so that larger blocks can be transferred
                    105: in a single disk transaction, greatly increasing file system throughput.
                    106: As an example, consider a file in the new file system
                    107: composed of 4096 byte data blocks.
                    108: In the old file system this file would be composed of 1024 byte blocks.
                    109: By increasing the block size, disk accesses in the new file
                    110: system may transfer up to four times as much information per
                    111: disk transaction.
                    112: In large files, several
                    113: 4096 byte blocks may be allocated from the same cylinder so that
                    114: even larger data transfers are possible before requiring a seek.
                    115: .PP
                    116: The main problem with 
                    117: larger blocks is that most UNIX
                    118: file systems are composed of many small files.
                    119: A uniformly large block size wastes space.
                    120: Table 1 shows the effect of file system
                    121: block size on the amount of wasted space in the file system.
                    122: The files measured to obtain these figures reside on
                    123: one of our time sharing
                    124: systems that has roughly 1.2 gigabytes of on-line storage.
                    125: The measurements are based on the active user file systems containing
                    126: about 920 megabytes of formatted space.
                    127: .KF
                    128: .DS B
                    129: .TS
                    130: box;
                    131: l|l|l
                    132: a|n|l.
                    133: Space used     % waste Organization
                    134: _
                    135: 775.2 Mb       0.0     Data only, no separation between files
                    136: 807.8 Mb       4.2     Data only, each file starts on 512 byte boundary
                    137: 828.7 Mb       6.9     Data + inodes, 512 byte block UNIX file system
                    138: 866.5 Mb       11.8    Data + inodes, 1024 byte block UNIX file system
                    139: 948.5 Mb       22.4    Data + inodes, 2048 byte block UNIX file system
                    140: 1128.3 Mb      45.6    Data + inodes, 4096 byte block UNIX file system
                    141: .TE
                    142: Table 1 \- Amount of wasted space as a function of block size.
                    143: .DE
                    144: .KE
                    145: The space wasted is calculated to be the percentage of space
                    146: on the disk not containing user data.
                    147: As the block size on the disk
                    148: increases, the waste rises quickly, to an intolerable
                    149: 45.6% waste with 4096 byte file system blocks.
                    150: .PP
                    151: To be able to use large blocks without undue waste,
                    152: small files must be stored in a more efficient way.
                    153: The new file system accomplishes this goal by allowing the division
                    154: of a single file system block into one or more
                    155: .I "fragments".
                    156: The file system fragment size is specified
                    157: at the time that the file system is created;
                    158: each file system block can optionally be broken into
                    159: 2, 4, or 8 fragments, each of which is addressable.
                    160: The lower bound on the size of these fragments is constrained
                    161: by the disk sector size,
                    162: typically 512 bytes.
                    163: The block map associated with each cylinder group
                    164: records the space available in a cylinder group
                    165: at the fragment level;
                    166: to determine if a block is available, aligned fragments are examined.
                    167: Figure 1 shows a piece of a map from a 4096/1024 file system.
                    168: .KF
                    169: .DS B
                    170: .TS
                    171: box;
                    172: l|c c c c.
                    173: Bits in map    XXXX    XXOO    OOXX    OOOO
                    174: Fragment numbers       0-3     4-7     8-11    12-15
                    175: Block numbers  0       1       2       3
                    176: .TE
                    177: Figure 1 \- Example layout of blocks and fragments in a 4096/1024 file system.
                    178: .DE
                    179: .KE
                    180: Each bit in the map records the status of a fragment;
                    181: an ``X'' shows that the fragment is in use,
                    182: while a ``O'' shows that the fragment is available for allocation.
                    183: In this example,
                    184: fragments 0\-5, 10, and 11 are in use,
                    185: while fragments 6\-9, and 12\-15 are free.
                    186: Fragments of adjoining blocks cannot be used as a full block,
                    187: even if they are large enough.
                    188: In this example,
                    189: fragments 6\-9 cannot be allocated as a full block;
                    190: only fragments 12\-15 can be coalesced into a full block.
                    191: .PP
                    192: On a file system with a block size of 4096 bytes
                    193: and a fragment size of 1024 bytes,
                    194: a file is represented by zero or more 4096 byte blocks of data,
                    195: and possibly a single fragmented block.
                    196: If a file system block must be fragmented to obtain
                    197: space for a small amount of data,
                    198: the remaining fragments of the block are made
                    199: available for allocation to other files.
                    200: As an example consider an 11000 byte file stored on
                    201: a 4096/1024 byte file system.
                    202: This file would uses two full size blocks and one
                    203: three fragment portion of another block.
                    204: If no block with three aligned fragments is
                    205: available at the time the file is created,
                    206: a full size block is split yielding the necessary
                    207: fragments and a single unused fragment.
                    208: This remaining fragment can be allocated to another file as needed.
                    209: .PP
                    210: Space is allocated to a file when a program does a \fIwrite\fP
                    211: system call.
                    212: Each time data is written to a file, the system checks to see if
                    213: the size of the file has increased*.
                    214: .FS
                    215: * A program may be overwriting data in the middle of an existing file
                    216: in which case space would already have been allocated.
                    217: .FE
                    218: If the file needs to be expanded to hold the new data,
                    219: one of three conditions exists:
                    220: .IP 1)
                    221: There is enough space left in an already allocated
                    222: block or fragment to hold the new data.
                    223: The new data is written into the available space.
                    224: .IP 2)
                    225: The file contains no fragmented blocks (and the last
                    226: block in the file
                    227: contains insufficient space to hold the new data).
                    228: If space exists in a block already allocated,
                    229: the space is filled with new data.
                    230: If the remainder of the new data contains more than
                    231: a full block of data, a full block is allocated and
                    232: the first full block of new data is written there.
                    233: This process is repeated until less than a full block
                    234: of new data remains.
                    235: If the remaining new data to be written will
                    236: fit in less than a full block,
                    237: a block with the necessary fragments is located,
                    238: otherwise a full block is located.
                    239: The remaining new data is written into the located space.
                    240: .IP 3)
                    241: The file contains one or more fragments (and the 
                    242: fragments contain insufficient space to hold the new data).
                    243: If the size of the new data plus the size of the data
                    244: already in the fragments exceeds the size of a full block,
                    245: a new block is allocated.
                    246: The contents of the fragments are copied
                    247: to the beginning of the block
                    248: and the remainder of the block is filled with new data.
                    249: The process then continues as in (2) above.
                    250: Otherwise, if the new data to be written will
                    251: fit in less than a full block,
                    252: a block with the necessary fragments is located,
                    253: otherwise a full block is located.
                    254: The contents of the existing fragments
                    255: appended with the new data
                    256: are written into the allocated space.
                    257: .PP
                    258: The problem with expanding a file one fragment at a
                    259: a time is that data may be copied many times as a 
                    260: fragmented block expands to a full block.
                    261: Fragment reallocation can be minimized
                    262: if the user program writes a full block at a time,
                    263: except for a partial block at the end of the file.
                    264: Since file systems with different block sizes may reside on
                    265: the same system,
                    266: the file system interface has been extended to provide
                    267: application programs the optimal size for a read or write.
                    268: For files the optimal size is the block size of the file system
                    269: on which the file is being accessed.
                    270: For other objects, such as pipes and sockets,
                    271: the optimal size is the underlying buffer size.
                    272: This feature is used by the Standard
                    273: Input/Output Library,
                    274: a package used by most user programs.
                    275: This feature is also used by
                    276: certain system utilities such as archivers and loaders
                    277: that do their own input and output management
                    278: and need the highest possible file system bandwidth.
                    279: .PP
                    280: The amount of wasted space in the 4096/1024 byte new file system
                    281: organization is empirically observed to be about the same as in the
                    282: 1024 byte old file system organization.
                    283: A file system with 4096 byte blocks and 512 byte fragments
                    284: has about the same amount of wasted space as the 512 byte
                    285: block UNIX file system.
                    286: The new file system uses less space
                    287: than the 512 byte or 1024 byte
                    288: file systems for indexing information for
                    289: large files and the same amount of space
                    290: for small files.
                    291: These savings are offset by the need to use
                    292: more space for keeping track of available free blocks.
                    293: The net result is about the same disk utilization
                    294: when a new file system's fragment size
                    295: equals an old file system's block size.
                    296: .PP
                    297: In order for the layout policies to be effective,
                    298: a file system cannot be kept completely full.
                    299: For each file system there is a parameter, termed
                    300: the free space reserve, that
                    301: gives the minimum acceptable percentage of file system
                    302: blocks that should be free.
                    303: If the number of free blocks drops below this level
                    304: only the system administrator can continue to allocate blocks.
                    305: The value of this parameter may be changed at any time,
                    306: even when the file system is mounted and active.
                    307: The transfer rates that appear in section 4 were measured on file
                    308: systems kept less than 90% full (a reserve of 10%).
                    309: If the number of free blocks falls to zero,
                    310: the file system throughput tends to be cut in half,
                    311: because of the inability of the file system to localize
                    312: blocks in a file.
                    313: If a file system's performance degrades because
                    314: of overfilling, it may be restored by removing
                    315: files until the amount of free space once again
                    316: reaches the minimum acceptable level.
                    317: Access rates for files created during periods of little
                    318: free space may be restored by moving their data once enough
                    319: space is available.
                    320: The free space reserve must be added to the
                    321: percentage of waste when comparing the organizations given
                    322: in Table 1.
                    323: Thus, the percentage of waste in
                    324: an old 1024 byte UNIX file system is roughly
                    325: comparable to a new 4096/512 byte file system
                    326: with the free space reserve set at 5%.
                    327: (Compare 11.8% wasted with the old file system
                    328: to 6.9% waste + 5% reserved space in the
                    329: new file system.)
                    330: .NH 2 
                    331: File system parameterization
                    332: .PP
                    333: Except for the initial creation of the free list,
                    334: the old file system ignores the parameters of the underlying hardware.
                    335: It has no information about either the physical characteristics
                    336: of the mass storage device,
                    337: or the hardware that interacts with it.
                    338: A goal of the new file system is to parameterize the 
                    339: processor capabilities and
                    340: mass storage characteristics
                    341: so that blocks can be allocated in an
                    342: optimum configuration-dependent way. 
                    343: Parameters used include the speed of the processor,
                    344: the hardware support for mass storage transfers,
                    345: and the characteristics of the mass storage devices.
                    346: Disk technology is constantly improving and
                    347: a given installation can have several different disk technologies
                    348: running on a single processor.
                    349: Each file system is parameterized so that it can be
                    350: adapted to the characteristics of the disk on which
                    351: it is placed.
                    352: .PP
                    353: For mass storage devices such as disks,
                    354: the new file system tries to allocate new blocks
                    355: on the same cylinder as the previous block in the same file. 
                    356: Optimally, these new blocks will also be 
                    357: rotationally well positioned.
                    358: The distance between ``rotationally optimal'' blocks varies greatly;
                    359: it can be a consecutive block
                    360: or a rotationally delayed block
                    361: depending on system characteristics.
                    362: On a processor with an input/output channel that does not require
                    363: any processor intervention between mass storage transfer requests,
                    364: two consecutive disk blocks can often be accessed
                    365: without suffering lost time because of an intervening disk revolution.
                    366: For processors without input/output channels,
                    367: the main processor must field an interrupt and
                    368: prepare for a new disk transfer.
                    369: The expected time to service this interrupt and
                    370: schedule a new disk transfer depends on the
                    371: speed of the main processor.
                    372: .PP
                    373: The physical characteristics of each disk include
                    374: the number of blocks per track and the rate at which
                    375: the disk spins.
                    376: The allocation routines use this information to calculate
                    377: the number of milliseconds required to skip over a block.
                    378: The characteristics of the processor include
                    379: the expected time to service an interrupt and schedule a
                    380: new disk transfer.
                    381: Given a block allocated to a file,
                    382: the allocation routines calculate the number of blocks to
                    383: skip over so that the next block in the file will
                    384: come into position under the disk head in the expected
                    385: amount of time that it takes to start a new
                    386: disk transfer operation.
                    387: For programs that sequentially access large amounts of data,
                    388: this strategy minimizes the amount of time spent waiting for
                    389: the disk to position itself.
                    390: .PP
                    391: To ease the calculation of finding rotationally optimal blocks,
                    392: the cylinder group summary information includes
                    393: a count of the available blocks in a cylinder
                    394: group at different rotational positions.
                    395: Eight rotational positions are distinguished,
                    396: so the resolution of the
                    397: summary information is 2 milliseconds for a typical 3600
                    398: revolution per minute drive.
                    399: The super-block contains a vector of lists called
                    400: .I "rotational layout tables".
                    401: The vector is indexed by rotational position.
                    402: Each component of the vector
                    403: lists the index into the block map for every data block contained
                    404: in its rotational position.
                    405: When looking for an allocatable block,
                    406: the system first looks through the summary counts for a rotational
                    407: position with a non-zero block count.
                    408: It then uses the index of the rotational position to find the appropriate
                    409: list to use to index through
                    410: only the relevant parts of the block map to find a free block.
                    411: .PP
                    412: The parameter that defines the
                    413: minimum number of milliseconds between the completion of a data
                    414: transfer and the initiation of
                    415: another data transfer on the same cylinder
                    416: can be changed at any time,
                    417: even when the file system is mounted and active.
                    418: If a file system is parameterized to lay out blocks with
                    419: a rotational separation of 2 milliseconds,
                    420: and the disk pack is then moved to a system that has a
                    421: processor requiring 4 milliseconds to schedule a disk operation,
                    422: the throughput will drop precipitously because of lost disk revolutions
                    423: on nearly every block.
                    424: If the eventual target machine is known, 
                    425: the file system can be parameterized for it
                    426: even though it is initially created on a different processor.
                    427: Even if the move is not known in advance,
                    428: the rotational layout delay can be reconfigured after the disk is moved
                    429: so that all further allocation is done based on the
                    430: characteristics of the new host.
                    431: .NH 2
                    432: Layout policies
                    433: .PP
                    434: The file system layout policies are divided into two distinct parts.
                    435: At the top level are global policies that use file system
                    436: wide summary information to make decisions regarding
                    437: the placement of new inodes and data blocks.
                    438: These routines are responsible for deciding the
                    439: placement of new directories and files.
                    440: They also calculate rotationally optimal block layouts,
                    441: and decide when to force a long seek to a new cylinder group
                    442: because there are insufficient blocks left
                    443: in the current cylinder group to do reasonable layouts.
                    444: Below the global policy routines are
                    445: the local allocation routines that use a locally optimal scheme to
                    446: lay out data blocks.
                    447: .PP
                    448: Two methods for improving file system performance are to increase
                    449: the locality of reference to minimize seek latency 
                    450: as described by [Trivedi80], and
                    451: to improve the layout of data to make larger transfers possible
                    452: as described by [Nevalainen77].
                    453: The global layout policies try to improve performance
                    454: by clustering related information.
                    455: They cannot attempt to localize all data references,
                    456: but must also try to spread unrelated data
                    457: among different cylinder groups.
                    458: If too much localization is attempted,
                    459: the local cylinder group may run out of space
                    460: forcing the data to be scattered to non-local cylinder groups.
                    461: Taken to an extreme,
                    462: total localization can result in a single huge cluster of data
                    463: resembling the old file system.
                    464: The global policies try to balance the two conflicting
                    465: goals of localizing data that is concurrently accessed
                    466: while spreading out unrelated data.
                    467: .PP
                    468: One allocatable resource is inodes.
                    469: Inodes are used to describe both files and directories.
                    470: Inodes of files in the same directory are frequently accessed together.
                    471: For example, the ``list directory'' command often accesses 
                    472: the inode for each file in a directory.
                    473: The layout policy tries to place all the inodes of
                    474: files in a directory in the same cylinder group.
                    475: To ensure that files are distributed throughout the disk,
                    476: a different policy is used for directory allocation.
                    477: A new directory is placed in a cylinder group that has a greater
                    478: than average number of free inodes,
                    479: and the smallest number of directories already in it.
                    480: The intent of this policy is to allow the inode clustering policy
                    481: to succeed most of the time.
                    482: The allocation of inodes within a cylinder group is done using a
                    483: next free strategy.
                    484: Although this allocates the inodes randomly within a cylinder group,
                    485: all the inodes for a particular cylinder group can be read with
                    486: 8 to 16 disk transfers.
                    487: (At most 16 disk transfers are required because a cylinder
                    488: group may have no more than 2048 inodes.)
                    489: This puts a small and constant upper bound on the number of
                    490: disk transfers required to access the inodes
                    491: for all the files in a directory.
                    492: In contrast, the old file system typically requires
                    493: one disk transfer to fetch the inode for each file in a directory.
                    494: .PP
                    495: The other major resource is data blocks.
                    496: Since data blocks for a file are typically accessed together,
                    497: the policy routines try to place all data
                    498: blocks for a file in the same cylinder group,
                    499: preferably at rotationally optimal positions in the same cylinder.
                    500: The problem with allocating all the data blocks
                    501: in the same cylinder group is that large files will
                    502: quickly use up available space in the cylinder group,
                    503: forcing a spill over to other areas.
                    504: Further, using all the space in a cylinder group
                    505: causes future allocations for any file in the cylinder group
                    506: to also spill to other areas.
                    507: Ideally none of the cylinder groups should ever become completely full.
                    508: The heuristic solution chosen is to
                    509: redirect block allocation
                    510: to a different cylinder group
                    511: when a file exceeds 48 kilobytes,
                    512: and at every megabyte thereafter.*
                    513: .FS
                    514: * The first spill over point at 48 kilobytes is the point
                    515: at which a file on a 4096 byte block file system first
                    516: requires a single indirect block.  This appears to be
                    517: a natural first point at which to redirect block allocation.
                    518: The other spillover points are chosen with the intent of
                    519: forcing block allocation to be redirected when a
                    520: file has used about 25% of the data blocks in a cylinder group.
                    521: In observing the new file system in day to day use, the heuristics appear
                    522: to work well in minimizing the number of completely filled
                    523: cylinder groups.
                    524: .FE
                    525: The newly chosen cylinder group is selected from those cylinder
                    526: groups that have a greater than average number of free blocks left.
                    527: Although big files tend to be spread out over the disk,
                    528: a megabyte of data is typically accessible before
                    529: a long seek must be performed,
                    530: and the cost of one long seek per megabyte is small.
                    531: .PP
                    532: The global policy routines call local allocation routines with 
                    533: requests for specific blocks.
                    534: The local allocation routines will
                    535: always allocate the requested block 
                    536: if it is free, otherwise it
                    537: allocates a free block of the requested size that is
                    538: rotationally closest to the requested block.
                    539: If the global layout policies had complete information,
                    540: they could always request unused blocks and
                    541: the allocation routines would be reduced to simple bookkeeping.
                    542: However, maintaining complete information is costly;
                    543: thus the implementation of the global layout policy 
                    544: uses heuristics that employ only partial information.
                    545: .PP
                    546: If a requested block is not available, the local allocator uses
                    547: a four level allocation strategy:
                    548: .IP 1)
                    549: Use the next available block rotationally closest
                    550: to the requested block on the same cylinder.  It is assumed
                    551: here that head switching time is zero.  On disk 
                    552: controllers where this is not the case, it may be possible
                    553: to incorporate the time required to switch between disk platters
                    554: when constructing the rotational layout tables.  This, however,
                    555: has not yet been tried.
                    556: .IP 2)
                    557: If there are no blocks available on the same cylinder,
                    558: use a block within the same cylinder group.
                    559: .IP 3)
                    560: If that cylinder group is entirely full, 
                    561: quadratically hash the cylinder group number to choose
                    562: another cylinder group to look for a free block.
                    563: .IP 4)
                    564: Finally if the hash fails, apply an exhaustive search
                    565: to all cylinder groups.
                    566: .PP
                    567: Quadratic hash is used because of its speed in finding
                    568: unused slots in nearly full hash tables [Knuth75].
                    569: File systems that are parameterized to maintain at least
                    570: 10% free space rarely use this strategy.
                    571: File systems that are run without maintaining any free
                    572: space typically have so few free blocks that almost any
                    573: allocation is random;
                    574: the most important characteristic of
                    575: the strategy used under such conditions is that the strategy be fast.
                    576: .ds RH Performance
                    577: .sp 2
                    578: .ne 1i

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.