The translation is temporarily closed for contributions due to maintenance, please come back later.

Source string Read only

(itstool) path: sect1/indexterm
Context English State
Starting with FreeBSD 5, <filename>vinum</filename> has been rewritten in order to fit into the <link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/handbook/geom.html">GEOM architecture</link>, while retaining the original ideas, terminology, and on-disk metadata. This rewrite is called <emphasis>gvinum</emphasis> (for <emphasis> GEOM vinum</emphasis>). While this chapter uses the term <filename>vinum</filename>, any command invocations should be performed with <command>gvinum</command>. The name of the kernel module has changed from the original <filename>vinum.ko</filename> to <filename>geom_vinum.ko</filename>, and all device nodes reside under <filename class="directory">/dev/gvinum</filename> instead of <filename class="directory">/dev/vinum</filename>. As of FreeBSD 6, the original <filename>vinum</filename> implementation is no longer available in the code base.
Access Bottlenecks
Modern systems frequently need to access data in a highly concurrent manner. For example, large FTP or HTTP servers can maintain thousands of concurrent sessions and have multiple 100 Mbit/s connections to the outside world, well beyond the sustained transfer rate of most disks.
Current disk drives can transfer data sequentially at up to 70 MB/s, but this value is of little importance in an environment where many independent processes access a drive, and where they may achieve only a fraction of these values. In such cases, it is more interesting to view the problem from the viewpoint of the disk subsystem. The important parameter is the load that a transfer places on the subsystem, or the time for which a transfer occupies the drives involved in the transfer.
In any disk transfer, the drive must first position the heads, wait for the first sector to pass under the read head, and then perform the transfer. These actions can be considered to be atomic as it does not make any sense to interrupt them.
<anchor xml:id="vinum-latency"/> Consider a typical transfer of about 10 kB: the current generation of high-performance disks can position the heads in an average of 3.5 ms. The fastest drives spin at 15,000 rpm, so the average rotational latency (half a revolution) is 2 ms. At 70 MB/s, the transfer itself takes about 150 μs, almost nothing compared to the positioning time. In such a case, the effective transfer rate drops to a little over 1 MB/s and is clearly highly dependent on the transfer size.
The traditional and obvious solution to this bottleneck is <quote>more spindles</quote>: rather than using one large disk, use several smaller disks with the same aggregate storage space. Each disk is capable of positioning and transferring independently, so the effective throughput increases by a factor close to the number of disks used.
The actual throughput improvement is smaller than the number of disks involved. Although each drive is capable of transferring in parallel, there is no way to ensure that the requests are evenly distributed across the drives. Inevitably the load on one drive will be higher than on another.
<primary>disk concatenation</primary>
<primary>Vinum</primary> <secondary>concatenation</secondary>
The evenness of the load on the disks is strongly dependent on the way the data is shared across the drives. In the following discussion, it is convenient to think of the disk storage as a large number of data sectors which are addressable by number, rather like the pages in a book. The most obvious method is to divide the virtual disk into groups of consecutive sectors the size of the individual physical disks and store them in this manner, rather like taking a large book and tearing it into smaller sections. This method is called <emphasis>concatenation</emphasis> and has the advantage that the disks are not required to have any specific size relationships. It works well when the access to the virtual disk is spread evenly about its address space. When access is concentrated on a smaller area, the improvement is less marked. <xref linkend="vinum-concat"/> illustrates the sequence in which storage units are allocated in a concatenated organization.
Concatenated Organization
_ external ref='vinum-concat' md5='__failed__'
<primary>disk striping</primary>
<primary>Vinum</primary> <secondary>striping</secondary>
<primary><acronym>RAID</acronym></primary>
An alternative mapping is to divide the address space into smaller, equal-sized components and store them sequentially on different devices. For example, the first 256 sectors may be stored on the first disk, the next 256 sectors on the next disk and so on. After filling the last disk, the process repeats until the disks are full. This mapping is called <emphasis>striping</emphasis> or <acronym>RAID-0</acronym>.
<acronym>RAID</acronym> offers various forms of fault tolerance, though <acronym>RAID-0</acronym> is somewhat misleading as it provides no redundancy. Striping requires somewhat more effort to locate the data, and it can cause additional I/O load where a transfer is spread over multiple disks, but it can also provide a more constant load across the disks. <xref linkend="vinum-striped"/> illustrates the sequence in which storage units are allocated in a striped organization.
Striped Organization
_ external ref='vinum-striped' md5='__failed__'
Data Integrity
The final problem with disks is that they are unreliable. Although reliability has increased tremendously over the last few years, disk drives are still the most likely core component of a server to fail. When they do, the results can be catastrophic and replacing a failed disk drive and restoring data can result in server downtime.
<primary>disk mirroring</primary>
<primary>vinum</primary> <secondary>mirroring</secondary>
<primary><acronym>RAID</acronym>-1</primary>
One approach to this problem is <emphasis>mirroring</emphasis>, or <acronym>RAID-1</acronym>, which keeps two copies of the data on different physical hardware. Any write to the volume writes to both disks; a read can be satisfied from either, so if one drive fails, the data is still available on the other drive.
Mirroring has two problems:
It requires twice as much disk storage as a non-redundant solution.
Writes must be performed to both drives, so they take up twice the bandwidth of a non-mirrored volume. Reads do not suffer from a performance penalty and can even be faster.
<primary><acronym>RAID</acronym>-5</primary>
An alternative solution is <emphasis>parity</emphasis>, implemented in <acronym>RAID</acronym> levels 2, 3, 4 and 5. Of these, <acronym>RAID-5</acronym> is the most interesting. As implemented in <filename>vinum</filename>, it is a variant on a striped organization which dedicates one block of each stripe to parity one of the other blocks. As implemented by <filename>vinum</filename>, a <acronym>RAID-5</acronym> plex is similar to a striped plex, except that it implements <acronym>RAID-5</acronym> by including a parity block in each stripe. As required by <acronym>RAID-5</acronym>, the location of this parity block changes from one stripe to the next. The numbers in the data blocks indicate the relative block numbers.

Loading…

No matching activity found.

Browse all component changes

Source information

Source string comment
(itstool) path: sect1/indexterm
Flags
read-only
Source string location
article.translate.xml:168
String age
a year ago
Source string age
a year ago
Translation file
articles/vinum.pot, string 23