Whamcloud - gitweb
LUDOC-11 misc: remove pre-2.5 conditional text
[doc/manual.git] / UnderstandingLustre.xml
1 <?xml version='1.0' encoding='utf-8'?>
2 <chapter xmlns="http://docbook.org/ns/docbook"
3 xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:lang="en-US"
4 xml:id="understandinglustre">
5   <title xml:id="understandinglustre.title">Understanding Lustre
6   Architecture</title>
7   <para>This chapter describes the Lustre architecture and features of the
8   Lustre file system. It includes the following sections:</para>
9   <itemizedlist>
10     <listitem>
11       <para>
12         <xref linkend="understandinglustre.whatislustre" />
13       </para>
14     </listitem>
15     <listitem>
16       <para>
17         <xref linkend="understandinglustre.components" />
18       </para>
19     </listitem>
20     <listitem>
21       <para>
22         <xref linkend="understandinglustre.storageio" />
23       </para>
24     </listitem>
25   </itemizedlist>
26   <section xml:id="understandinglustre.whatislustre">
27     <title>
28     <indexterm>
29       <primary>Lustre</primary>
30     </indexterm>What a Lustre File System Is (and What It Isn't)</title>
31     <para>The Lustre architecture is a storage architecture for clusters. The
32     central component of the Lustre architecture is the Lustre file system,
33     which is supported on the Linux operating system and provides a POSIX
34     <superscript>*</superscript>standard-compliant UNIX file system
35     interface.</para>
36     <para>The Lustre storage architecture is used for many different kinds of
37     clusters. It is best known for powering many of the largest
38     high-performance computing (HPC) clusters worldwide, with tens of thousands
39     of client systems, petabytes (PiB) of storage and hundreds of gigabytes per
40     second (GB/sec) of I/O throughput. Many HPC sites use a Lustre file system
41     as a site-wide global file system, serving dozens of clusters.</para>
42     <para>The ability of a Lustre file system to scale capacity and performance
43     for any need reduces the need to deploy many separate file systems, such as
44     one for each compute cluster. Storage management is simplified by avoiding
45     the need to copy data between compute clusters. In addition to aggregating
46     storage capacity of many servers, the I/O throughput is also aggregated and
47     scales with additional servers. Moreover, throughput and/or capacity can be
48     easily increased by adding servers dynamically.</para>
49     <para>While a Lustre file system can function in many work environments, it
50     is not necessarily the best choice for all applications. It is best suited
51     for uses that exceed the capacity that a single server can provide, though
52     in some use cases, a Lustre file system can perform better with a single
53     server than other file systems due to its strong locking and data
54     coherency.</para>
55     <para>A Lustre file system is currently not particularly well suited for
56     "peer-to-peer" usage models where clients and servers are running on the
57     same node, each sharing a small amount of storage, due to the lack of data
58     replication at the Lustre software level. In such uses, if one
59     client/server fails, then the data stored on that node will not be
60     accessible until the node is restarted.</para>
61     <section remap="h3">
62       <title>
63       <indexterm>
64         <primary>Lustre</primary>
65         <secondary>features</secondary>
66       </indexterm>Lustre Features</title>
67       <para>Lustre file systems run on a variety of vendor's kernels. For more
68       details, see the Lustre Test Matrix
69       <xref xmlns:xlink="http://www.w3.org/1999/xlink"
70       linkend="dbdoclet.50438261_99193" />.</para>
71       <para>A Lustre installation can be scaled up or down with respect to the
72       number of client nodes, disk storage and bandwidth. Scalability and
73       performance are dependent on available disk and network bandwidth and the
74       processing power of the servers in the system. A Lustre file system can
75       be deployed in a wide variety of configurations that can be scaled well
76       beyond the size and performance observed in production systems to
77       date.</para>
78       <para>
79       <xref linkend="understandinglustre.tab1" /> shows some of the
80       scalability and performance characteristics of a Lustre file system.
81       For a full list of Lustre file and filesystem limits see
82       <xref linkend="settinguplustresystem.tab2"/>.</para>
83       <table frame="all" xml:id="understandinglustre.tab1">
84         <title>Lustre File System Scalability and Performance</title>
85         <tgroup cols="3">
86           <colspec colname="c1" colwidth="1*" />
87           <colspec colname="c2" colwidth="2*" />
88           <colspec colname="c3" colwidth="3*" />
89           <thead>
90             <row>
91               <entry>
92                 <para>
93                   <emphasis role="bold">Feature</emphasis>
94                 </para>
95               </entry>
96               <entry>
97                 <para>
98                   <emphasis role="bold">Current Practical Range</emphasis>
99                 </para>
100               </entry>
101               <entry>
102                 <para>
103                   <emphasis role="bold">Known Production Usage</emphasis>
104                 </para>
105               </entry>
106             </row>
107           </thead>
108           <tbody>
109             <row>
110               <entry>
111                 <para>
112                   <emphasis role="bold">Client Scalability</emphasis>
113                 </para>
114               </entry>
115               <entry>
116                 <para>100-100000</para>
117               </entry>
118               <entry>
119                 <para>50000+ clients, many in the 10000 to 20000 range</para>
120               </entry>
121             </row>
122             <row>
123               <entry>
124                 <para>
125                   <emphasis role="bold">Client Performance</emphasis>
126                 </para>
127               </entry>
128               <entry>
129                 <para>
130                   <emphasis>Single client:</emphasis>
131                 </para>
132                 <para>I/O 90% of network bandwidth</para>
133                 <para>
134                   <emphasis>Aggregate:</emphasis>
135                 </para>
136                 <para>10 TB/sec I/O</para>
137               </entry>
138               <entry>
139                 <para>
140                   <emphasis>Single client:</emphasis>
141                 </para>
142                 <para>4.5 GB/sec I/O (FDR IB, OPA1),
143                 1000 metadata ops/sec</para>
144                 <para>
145                   <emphasis>Aggregate:</emphasis>
146                 </para>
147                 <para>2.5 TB/sec I/O </para>
148               </entry>
149             </row>
150             <row>
151               <entry>
152                 <para>
153                   <emphasis role="bold">OSS Scalability</emphasis>
154                 </para>
155               </entry>
156               <entry>
157                 <para>
158                   <emphasis>Single OSS:</emphasis>
159                 </para>
160                 <para>1-32 OSTs per OSS</para>
161                 <para>
162                   <emphasis>Single OST:</emphasis>
163                 </para>
164                 <para>300M objects, 256TiB per OST (ldiskfs)</para>
165                 <para>500M objects, 256TiB per OST (ZFS)</para>
166                 <para>
167                   <emphasis>OSS count:</emphasis>
168                 </para>
169                 <para>1000 OSSs, with up to 4000 OSTs</para>
170               </entry>
171               <entry>
172                 <para>
173                   <emphasis>Single OSS:</emphasis>
174                 </para>
175                 <para>32x 8TiB OSTs per OSS (ldiskfs),</para>
176                 <para>8x 32TiB OSTs per OSS (ldiskfs)</para>
177                 <para>1x 72TiB OST per OSS (ZFS)</para>
178                 <para>
179                   <emphasis>OSS count:</emphasis>
180                 </para>
181                 <para>450 OSSs with 1000 4TiB OSTs</para>
182                 <para>192 OSSs with 1344 8TiB OSTs</para>
183                 <para>768 OSSs with 768 72TiB OSTs</para>
184               </entry>
185             </row>
186             <row>
187               <entry>
188                 <para>
189                   <emphasis role="bold">OSS Performance</emphasis>
190                 </para>
191               </entry>
192               <entry>
193                 <para>
194                   <emphasis>Single OSS:</emphasis>
195                 </para>
196                 <para>15 GB/sec</para>
197                 <para>
198                   <emphasis>Aggregate:</emphasis>
199                 </para>
200                 <para>10 TB/sec</para>
201               </entry>
202               <entry>
203                 <para>
204                   <emphasis>Single OSS:</emphasis>
205                 </para>
206                 <para>10 GB/sec</para>
207                 <para>
208                   <emphasis>Aggregate:</emphasis>
209                 </para>
210                 <para>2.5 TB/sec</para>
211               </entry>
212             </row>
213             <row>
214               <entry>
215                 <para>
216                   <emphasis role="bold">MDS Scalability</emphasis>
217                 </para>
218               </entry>
219               <entry>
220                 <para>
221                   <emphasis>Single MDS:</emphasis>
222                 </para>
223                 <para>1-4 MDTs per MDS</para>
224                 <para>
225                   <emphasis>Single MDT:</emphasis>
226                 </para>
227                 <para>4 billion files, 8TiB per MDT (ldiskfs)</para>
228                 <para>64 billion files, 64TiB per MDT (ZFS)</para>
229                 <para>
230                   <emphasis>MDS count:</emphasis>
231                 </para>
232                 <para>256 MDSs, with up to 256 MDTs</para>
233               </entry>
234               <entry>
235                 <para>
236                   <emphasis>Single MDS:</emphasis>
237                 </para>
238                 <para>3 billion files</para>
239                 <para>
240                   <emphasis>MDS count:</emphasis>
241                 </para>
242                 <para>7 MDS with 7 2TiB MDTs in production</para>
243                 <para>256 MDS with 256 64GiB MDTs in testing</para>
244               </entry>
245             </row>
246             <row>
247               <entry>
248                 <para>
249                   <emphasis role="bold">MDS Performance</emphasis>
250                 </para>
251               </entry>
252               <entry>
253                 <para>50000/s create operations,</para>
254                 <para>200000/s metadata stat operations</para>
255               </entry>
256               <entry>
257                 <para>15000/s create operations,</para>
258                 <para>50000/s metadata stat operations</para>
259               </entry>
260             </row>
261             <row>
262               <entry>
263                 <para>
264                   <emphasis role="bold">File system Scalability</emphasis>
265                 </para>
266               </entry>
267               <entry>
268                 <para>
269                   <emphasis>Single File:</emphasis>
270                 </para>
271                 <para>32 PiB max file size (ldiskfs)</para>
272                 <para>2^63 bytes (ZFS)</para>
273                 <para>
274                   <emphasis>Aggregate:</emphasis>
275                 </para>
276                 <para>512 PiB space, 1 trillion files</para>
277               </entry>
278               <entry>
279                 <para>
280                   <emphasis>Single File:</emphasis>
281                 </para>
282                 <para>multi-TiB max file size</para>
283                 <para>
284                   <emphasis>Aggregate:</emphasis>
285                 </para>
286                 <para>55 PiB space, 8 billion files</para>
287               </entry>
288             </row>
289           </tbody>
290         </tgroup>
291       </table>
292       <para>Other Lustre software features are:</para>
293       <itemizedlist>
294         <listitem>
295           <para>
296           <emphasis role="bold">Performance-enhanced ext4 file
297           system:</emphasis>The Lustre file system uses an improved version of
298           the ext4 journaling file system to store data and metadata. This
299           version, called
300           <emphasis role="italic">
301             <literal>ldiskfs</literal>
302           </emphasis>, has been enhanced to improve performance and provide
303           additional functionality needed by the Lustre file system.</para>
304         </listitem>
305         <listitem>
306           <para>It is also possible to use ZFS as the backing filesystem for
307           Lustre for the MDT, OST, and MGS storage. This allows Lustre to
308           leverage the scalability and data integrity features of ZFS for
309           individual storage targets.</para>
310         </listitem>
311         <listitem>
312           <para>
313           <emphasis role="bold">POSIX standard compliance:</emphasis>The full
314           POSIX test suite passes in an identical manner to a local ext4 file
315           system, with limited exceptions on Lustre clients. In a cluster, most
316           operations are atomic so that clients never see stale data or
317           metadata. The Lustre software supports mmap() file I/O.</para>
318         </listitem>
319         <listitem>
320           <para>
321           <emphasis role="bold">High-performance heterogeneous
322           networking:</emphasis>The Lustre software supports a variety of high
323           performance, low latency networks and permits Remote Direct Memory
324           Access (RDMA) for InfiniBand
325           <superscript>*</superscript>(utilizing OpenFabrics Enterprise
326           Distribution (OFED<superscript>*</superscript>), Intel OmniPath®,
327           and other advanced networks for fast
328           and efficient network transport. Multiple RDMA networks can be
329           bridged using Lustre routing for maximum performance. The Lustre
330           software also includes integrated network diagnostics.</para>
331         </listitem>
332         <listitem>
333           <para>
334           <emphasis role="bold">High-availability:</emphasis>The Lustre file
335           system supports active/active failover using shared storage
336           partitions for OSS targets (OSTs), and for MDS targets (MDTs).
337           The Lustre file system can work
338           with a variety of high availability (HA) managers to allow automated
339           failover and has no single point of failure (NSPF). This allows
340           application transparent recovery. Multiple mount protection (MMP)
341           provides integrated protection from errors in highly-available
342           systems that would otherwise cause file system corruption.</para>
343         </listitem>
344         <listitem>
345           <para>It is possible to configure active/active failover of multiple
346             MDTs. This allows scaling the metadata performance of Lustre
347             filesystems with the addition of MDT storage devices and MDS nodes.
348           </para>
349         </listitem>
350         <listitem>
351           <para>
352           <emphasis role="bold">Security:</emphasis>By default TCP connections
353           are only allowed from privileged ports. UNIX group membership is
354           verified on the MDS.</para>
355         </listitem>
356         <listitem>
357           <para>
358           <emphasis role="bold">Access control list (ACL), extended
359           attributes:</emphasis>the Lustre security model follows that of a
360           UNIX file system, enhanced with POSIX ACLs. Noteworthy additional
361           features include root squash.</para>
362         </listitem>
363         <listitem>
364           <para>
365           <emphasis role="bold">Interoperability:</emphasis>The Lustre file
366           system runs on a variety of CPU architectures and mixed-endian
367           clusters and is interoperable between successive major Lustre
368           software releases.</para>
369         </listitem>
370         <listitem>
371           <para>
372           <emphasis role="bold">Object-based architecture:</emphasis>Clients
373           are isolated from the on-disk file structure enabling upgrading of
374           the storage architecture without affecting the client.</para>
375         </listitem>
376         <listitem>
377           <para>
378           <emphasis role="bold">Byte-granular file and fine-grained metadata
379           locking:</emphasis>Many clients can read and modify the same file or
380           directory concurrently. The Lustre distributed lock manager (LDLM)
381           ensures that files are coherent between all clients and servers in
382           the file system. The MDT LDLM manages locks on inode permissions and
383           pathnames. Each OST has its own LDLM for locks on file stripes stored
384           thereon, which scales the locking performance as the file system
385           grows.</para>
386         </listitem>
387         <listitem>
388           <para>
389           <emphasis role="bold">Quotas:</emphasis>User and group quotas are
390           available for a Lustre file system.</para>
391         </listitem>
392         <listitem>
393           <para>
394           <emphasis role="bold">Capacity growth:</emphasis>The size of a Lustre
395           file system and aggregate cluster bandwidth can be increased without
396           interruption by adding new OSTs and MDTs to the cluster.</para>
397         </listitem>
398         <listitem>
399           <para>
400           <emphasis role="bold">Controlled file layout:</emphasis>The layout of
401           files across OSTs can be configured on a per file, per directory, or
402           per file system basis. This allows file I/O to be tuned to specific
403           application requirements within a single file system. The Lustre file
404           system uses RAID-0 striping and balances space usage across
405           OSTs.</para>
406         </listitem>
407         <listitem>
408           <para>
409           <emphasis role="bold">Network data integrity protection:</emphasis>A
410           checksum of all data sent from the client to the OSS protects against
411           corruption during data transfer.</para>
412         </listitem>
413         <listitem>
414           <para>
415           <emphasis role="bold">MPI I/O:</emphasis>The Lustre architecture has
416           a dedicated MPI ADIO layer that optimizes parallel I/O to match the
417           underlying file system architecture.</para>
418         </listitem>
419         <listitem>
420           <para>
421           <emphasis role="bold">NFS and CIFS export:</emphasis>Lustre files can
422           be re-exported using NFS (via Linux knfsd or Ganesha) or CIFS (via
423           Samba), enabling them to be shared with non-Linux clients such as
424           Microsoft<superscript>*</superscript>Windows,
425           <superscript>*</superscript>Apple
426           <superscript>*</superscript>Mac OS X
427           <superscript>*</superscript>, and others.</para>
428         </listitem>
429         <listitem>
430           <para>
431           <emphasis role="bold">Disaster recovery tool:</emphasis>The Lustre
432           file system provides an online distributed file system check (LFSCK)
433           that can restore consistency between storage components in case of a
434           major file system error. A Lustre file system can operate even in the
435           presence of file system inconsistencies, and LFSCK can run while the
436           filesystem is in use, so LFSCK is not required to complete before
437           returning the file system to production.</para>
438         </listitem>
439         <listitem>
440           <para>
441           <emphasis role="bold">Performance monitoring:</emphasis>The Lustre
442           file system offers a variety of mechanisms to examine performance and
443           tuning.</para>
444         </listitem>
445         <listitem>
446           <para>
447           <emphasis role="bold">Open source:</emphasis>The Lustre software is
448           licensed under the GPL 2.0 license for use with the Linux operating
449           system.</para>
450         </listitem>
451       </itemizedlist>
452     </section>
453   </section>
454   <section xml:id="understandinglustre.components">
455     <title>
456     <indexterm>
457       <primary>Lustre</primary>
458       <secondary>components</secondary>
459     </indexterm>Lustre Components</title>
460     <para>An installation of the Lustre software includes a management server
461     (MGS) and one or more Lustre file systems interconnected with Lustre
462     networking (LNet).</para>
463     <para>A basic configuration of Lustre file system components is shown in
464     <xref linkend="understandinglustre.fig.cluster" />.</para>
465     <figure xml:id="understandinglustre.fig.cluster">
466       <title>Lustre file system components in a basic cluster</title>
467       <mediaobject>
468         <imageobject>
469           <imagedata scalefit="1" width="100%"
470           fileref="./figures/Basic_Cluster.png" />
471         </imageobject>
472         <textobject>
473           <phrase>Lustre file system components in a basic cluster</phrase>
474         </textobject>
475       </mediaobject>
476     </figure>
477     <section remap="h3">
478       <title>
479       <indexterm>
480         <primary>Lustre</primary>
481         <secondary>MGS</secondary>
482       </indexterm>Management Server (MGS)</title>
483       <para>The MGS stores configuration information for all the Lustre file
484       systems in a cluster and provides this information to other Lustre
485       components. Each Lustre target contacts the MGS to provide information,
486       and Lustre clients contact the MGS to retrieve information.</para>
487       <para>It is preferable that the MGS have its own storage space so that it
488       can be managed independently. However, the MGS can be co-located and
489       share storage space with an MDS as shown in
490       <xref linkend="understandinglustre.fig.cluster" />.</para>
491     </section>
492     <section remap="h3">
493       <title>Lustre File System Components</title>
494       <para>Each Lustre file system consists of the following
495       components:</para>
496       <itemizedlist>
497         <listitem>
498           <para>
499           <emphasis role="bold">Metadata Servers (MDS)</emphasis>- The MDS makes
500           metadata stored in one or more MDTs available to Lustre clients. Each
501           MDS manages the names and directories in the Lustre file system(s)
502           and provides network request handling for one or more local
503           MDTs.</para>
504         </listitem>
505         <listitem>
506           <para>
507           <emphasis role="bold">Metadata Targets (MDT</emphasis>) - Each
508           filesystem has at least one MDT. The
509           MDT stores metadata (such as filenames, directories, permissions and
510           file layout) on storage attached to an MDS. Each file system has one
511           MDT. An MDT on a shared storage target can be available to multiple
512           MDSs, although only one can access it at a time. If an active MDS
513           fails, a standby MDS can serve the MDT and make it available to
514           clients. This is referred to as MDS failover.</para>
515           <para>Multiple MDTs are supported in the Distributed Namespace
516           Environment (DNE).
517           In addition to the primary MDT that holds the filesystem root, it
518           is possible to add additional MDS nodes, each with their own MDTs,
519           to hold sub-directory trees of the filesystem.</para>
520           <para condition="l28">Since Lustre software release 2.8, DNE also
521           allows the filesystem to distribute files of a single directory over
522           multiple MDT nodes. A directory which is distributed across multiple
523           MDTs is known as a <emphasis>striped directory</emphasis>.</para>
524         </listitem>
525         <listitem>
526           <para>
527           <emphasis role="bold">Object Storage Servers (OSS)</emphasis>: The
528           OSS provides file I/O service and network request handling for one or
529           more local OSTs. Typically, an OSS serves between two and eight OSTs,
530           up to 16 TiB each. A typical configuration is an MDT on a dedicated
531           node, two or more OSTs on each OSS node, and a client on each of a
532           large number of compute nodes.</para>
533         </listitem>
534         <listitem>
535           <para>
536           <emphasis role="bold">Object Storage Target (OST)</emphasis>: User
537           file data is stored in one or more objects, each object on a separate
538           OST in a Lustre file system. The number of objects per file is
539           configurable by the user and can be tuned to optimize performance for
540           a given workload.</para>
541         </listitem>
542         <listitem>
543           <para>
544           <emphasis role="bold">Lustre clients</emphasis>: Lustre clients are
545           computational, visualization or desktop nodes that are running Lustre
546           client software, allowing them to mount the Lustre file
547           system.</para>
548         </listitem>
549       </itemizedlist>
550       <para>The Lustre client software provides an interface between the Linux
551       virtual file system and the Lustre servers. The client software includes
552       a management client (MGC), a metadata client (MDC), and multiple object
553       storage clients (OSCs), one corresponding to each OST in the file
554       system.</para>
555       <para>A logical object volume (LOV) aggregates the OSCs to provide
556       transparent access across all the OSTs. Thus, a client with the Lustre
557       file system mounted sees a single, coherent, synchronized namespace.
558       Several clients can write to different parts of the same file
559       simultaneously, while, at the same time, other clients can read from the
560       file.</para>
561       <para>A logical metadata volume (LMV) aggregates the MDCs to provide
562       transparent access across all the MDTs in a similar manner as the LOV
563       does for file access.  This allows the client to see the directory tree
564       on multiple MDTs as a single coherent namespace, and striped directories
565       are merged on the clients to form a single visible directory to users
566       and applications.
567       </para>
568       <para>
569       <xref linkend="understandinglustre.tab.storagerequire" />provides the
570       requirements for attached storage for each Lustre file system component
571       and describes desirable characteristics of the hardware used.</para>
572       <table frame="all" xml:id="understandinglustre.tab.storagerequire">
573         <title>
574         <indexterm>
575           <primary>Lustre</primary>
576           <secondary>requirements</secondary>
577         </indexterm>Storage and hardware requirements for Lustre file system
578         components</title>
579         <tgroup cols="3">
580           <colspec colname="c1" colwidth="1*" />
581           <colspec colname="c2" colwidth="3*" />
582           <colspec colname="c3" colwidth="3*" />
583           <thead>
584             <row>
585               <entry>
586                 <para>
587                   <emphasis role="bold" />
588                 </para>
589               </entry>
590               <entry>
591                 <para>
592                   <emphasis role="bold">Required attached storage</emphasis>
593                 </para>
594               </entry>
595               <entry>
596                 <para>
597                   <emphasis role="bold">Desirable hardware
598                   characteristics</emphasis>
599                 </para>
600               </entry>
601             </row>
602           </thead>
603           <tbody>
604             <row>
605               <entry>
606                 <para>
607                   <emphasis role="bold">MDSs</emphasis>
608                 </para>
609               </entry>
610               <entry>
611                 <para>1-2% of file system capacity</para>
612               </entry>
613               <entry>
614                 <para>Adequate CPU power, plenty of memory, fast disk
615                 storage.</para>
616               </entry>
617             </row>
618             <row>
619               <entry>
620                 <para>
621                   <emphasis role="bold">OSSs</emphasis>
622                 </para>
623               </entry>
624               <entry>
625                 <para>1-128 TiB per OST, 1-8 OSTs per OSS</para>
626               </entry>
627               <entry>
628                 <para>Good bus bandwidth. Recommended that storage be balanced
629                 evenly across OSSs and matched to network bandwidth.</para>
630               </entry>
631             </row>
632             <row>
633               <entry>
634                 <para>
635                   <emphasis role="bold">Clients</emphasis>
636                 </para>
637               </entry>
638               <entry>
639                 <para>No local storage needed</para>
640               </entry>
641               <entry>
642                 <para>Low latency, high bandwidth network.</para>
643               </entry>
644             </row>
645           </tbody>
646         </tgroup>
647       </table>
648       <para>For additional hardware requirements and considerations, see
649       <xref linkend="settinguplustresystem" />.</para>
650     </section>
651     <section remap="h3">
652       <title>
653       <indexterm>
654         <primary>Lustre</primary>
655         <secondary>LNet</secondary>
656       </indexterm>Lustre Networking (LNet)</title>
657       <para>Lustre Networking (LNet) is a custom networking API that provides
658       the communication infrastructure that handles metadata and file I/O data
659       for the Lustre file system servers and clients. For more information
660       about LNet, see
661       <xref linkend="understandinglustrenetworking" />.</para>
662     </section>
663     <section remap="h3">
664       <title>
665       <indexterm>
666         <primary>Lustre</primary>
667         <secondary>cluster</secondary>
668       </indexterm>Lustre Cluster</title>
669       <para>At scale, a Lustre file system cluster can include hundreds of OSSs
670       and thousands of clients (see
671       <xref linkend="understandinglustre.fig.lustrescale" />). More than one
672       type of network can be used in a Lustre cluster. Shared storage between
673       OSSs enables failover capability. For more details about OSS failover,
674       see
675       <xref linkend="understandingfailover" />.</para>
676       <figure xml:id="understandinglustre.fig.lustrescale">
677         <title>
678         <indexterm>
679           <primary>Lustre</primary>
680           <secondary>at scale</secondary>
681         </indexterm>Lustre cluster at scale</title>
682         <mediaobject>
683           <imageobject>
684             <imagedata scalefit="1" width="100%"
685             fileref="./figures/Scaled_Cluster.png" />
686           </imageobject>
687           <textobject>
688             <phrase>Lustre file system cluster at scale</phrase>
689           </textobject>
690         </mediaobject>
691       </figure>
692     </section>
693   </section>
694   <section xml:id="understandinglustre.storageio">
695     <title>
696     <indexterm>
697       <primary>Lustre</primary>
698       <secondary>storage</secondary>
699     </indexterm>
700     <indexterm>
701       <primary>Lustre</primary>
702       <secondary>I/O</secondary>
703     </indexterm>Lustre File System Storage and I/O</title>
704     <para>Lustre uses file identifiers (FIDs) to replace UNIX inode numbers
705       for identifying files or objects.  A FID is a 128-bit identifier that
706       contains a unique 64-bit sequence number, a 32-bit object ID (OID), and
707       a 32-bit version number. The sequence number is unique across all Lustre
708       targets in a file system (OSTs and MDTs). This allows Lustre to identify
709       files on multiple MDTs independent of the underlying filesystem type.
710     </para>
711     <para>The LFSCK file system consistency checking tool verifies the
712     consistency of file objects between MDTs and OSTs. It includes the
713     following functionality:
714     <itemizedlist>
715       <listitem>
716         <para>Verifies the FID-in-dirent for each file and regenerates the
717         FID-in-dirent if it is invalid or missing.</para>
718       </listitem>
719       <listitem>
720         <para>Verifies the linkEA entry for each and regenerates the linkEA
721         if it is invalid or missing. The
722         <emphasis role="italic">linkEA</emphasis> consists of the file name and
723         parent FID. It is stored as an extended attribute in the file
724         itself. Thus, the linkEA can be used to reconstruct the full path name
725         of a file.</para>
726       </listitem>
727     </itemizedlist></para>
728     <para>Information about where file data is located on the OST(s) is stored
729     as an extended attribute called layout EA in an MDT object identified by
730     the FID for the file (see
731     <xref xmlns:xlink="http://www.w3.org/1999/xlink"
732     linkend="Fig1.3_LayoutEAonMDT" />). If the file is a regular file (not a
733     directory or symbol link), the MDT object points to 1-to-N OST object(s) on
734     the OST(s) that contain the file data. If the MDT file points to one
735     object, all the file data is stored in that object. If the MDT file points
736     to more than one object, the file data is
737     <emphasis role="italic">striped</emphasis> across the objects using RAID 0,
738     and each object is stored on a different OST. (For more information about
739     how striping is implemented in a Lustre file system, see
740     <xref linkend="dbdoclet.50438250_89922" />.</para>
741     <figure xml:id="Fig1.3_LayoutEAonMDT">
742       <title>Layout EA on MDT pointing to file data on OSTs</title>
743       <mediaobject>
744         <imageobject>
745           <imagedata scalefit="1" width="80%"
746           fileref="./figures/Metadata_File.png" />
747         </imageobject>
748         <textobject>
749           <phrase>Layout EA on MDT pointing to file data on OSTs</phrase>
750         </textobject>
751       </mediaobject>
752     </figure>
753     <para>When a client wants to read from or write to a file, it first fetches
754     the layout EA from the MDT object for the file. The client then uses this
755     information to perform I/O on the file, directly interacting with the OSS
756     nodes where the objects are stored.
757     <?oxy_custom_start type="oxy_content_highlight" color="255,255,0"?>
758     This process is illustrated in
759     <xref xmlns:xlink="http://www.w3.org/1999/xlink"
760     linkend="Fig1.4_ClientReqstgData" /><?oxy_custom_end?>
761     .</para>
762     <figure xml:id="Fig1.4_ClientReqstgData">
763       <title>Lustre client requesting file data</title>
764       <mediaobject>
765         <imageobject>
766           <imagedata scalefit="1" width="75%"
767           fileref="./figures/File_Write.png" />
768         </imageobject>
769         <textobject>
770           <phrase>Lustre client requesting file data</phrase>
771         </textobject>
772       </mediaobject>
773     </figure>
774     <para>The available bandwidth of a Lustre file system is determined as
775     follows:</para>
776     <itemizedlist>
777       <listitem>
778         <para>The
779         <emphasis>network bandwidth</emphasis> equals the aggregated bandwidth
780         of the OSSs to the targets.</para>
781       </listitem>
782       <listitem>
783         <para>The
784         <emphasis>disk bandwidth</emphasis> equals the sum of the disk
785         bandwidths of the storage targets (OSTs) up to the limit of the network
786         bandwidth.</para>
787       </listitem>
788       <listitem>
789         <para>The
790         <emphasis>aggregate bandwidth</emphasis> equals the minimum of the disk
791         bandwidth and the network bandwidth.</para>
792       </listitem>
793       <listitem>
794         <para>The
795         <emphasis>available file system space</emphasis> equals the sum of the
796         available space of all the OSTs.</para>
797       </listitem>
798     </itemizedlist>
799     <section xml:id="dbdoclet.50438250_89922">
800       <title>
801       <indexterm>
802         <primary>Lustre</primary>
803         <secondary>striping</secondary>
804       </indexterm>
805       <indexterm>
806         <primary>striping</primary>
807         <secondary>overview</secondary>
808       </indexterm>Lustre File System and Striping</title>
809       <para>One of the main factors leading to the high performance of Lustre
810       file systems is the ability to stripe data across multiple OSTs in a
811       round-robin fashion. Users can optionally configure for each file the
812       number of stripes, stripe size, and OSTs that are used.</para>
813       <para>Striping can be used to improve performance when the aggregate
814       bandwidth to a single file exceeds the bandwidth of a single OST. The
815       ability to stripe is also useful when a single OST does not have enough
816       free space to hold an entire file. For more information about benefits
817       and drawbacks of file striping, see
818       <xref linkend="dbdoclet.50438209_48033" />.</para>
819       <para>Striping allows segments or 'chunks' of data in a file to be stored
820       on different OSTs, as shown in
821       <xref linkend="understandinglustre.fig.filestripe" />. In the Lustre file
822       system, a RAID 0 pattern is used in which data is "striped" across a
823       certain number of objects. The number of objects in a single file is
824       called the
825       <literal>stripe_count</literal>.</para>
826       <para>Each object contains a chunk of data from the file. When the chunk
827       of data being written to a particular object exceeds the
828       <literal>stripe_size</literal>, the next chunk of data in the file is
829       stored on the next object.</para>
830       <para>Default values for
831       <literal>stripe_count</literal> and
832       <literal>stripe_size</literal> are set for the file system. The default
833       value for
834       <literal>stripe_count</literal> is 1 stripe for file and the default value
835       for
836       <literal>stripe_size</literal> is 1MB. The user may change these values on
837       a per directory or per file basis. For more details, see
838       <xref linkend="dbdoclet.50438209_78664" />.</para>
839       <para>
840       <xref linkend="understandinglustre.fig.filestripe" />, the
841       <literal>stripe_size</literal> for File C is larger than the
842       <literal>stripe_size</literal> for File A, allowing more data to be stored
843       in a single stripe for File C. The
844       <literal>stripe_count</literal> for File A is 3, resulting in data striped
845       across three objects, while the
846       <literal>stripe_count</literal> for File B and File C is 1.</para>
847       <para>No space is reserved on the OST for unwritten data. File A in
848       <xref linkend="understandinglustre.fig.filestripe" />.</para>
849       <figure xml:id="understandinglustre.fig.filestripe">
850         <title>File striping on a
851         Lustre file system</title>
852         <mediaobject>
853           <imageobject>
854             <imagedata scalefit="1" width="100%"
855             fileref="./figures/File_Striping.png" />
856           </imageobject>
857           <textobject>
858             <phrase>File striping pattern across three OSTs for three different
859             data files. The file is sparse and missing chunk 6.</phrase>
860           </textobject>
861         </mediaobject>
862       </figure>
863       <para>The maximum file size is not limited by the size of a single
864       target. In a Lustre file system, files can be striped across multiple
865       objects (up to 2000), and each object can be up to 16 TiB in size with
866       ldiskfs, or up to 256PiB with ZFS. This leads to a maximum file size of
867       31.25 PiB for ldiskfs or 8EiB with ZFS. Note that a Lustre file system can
868       support files up to 2^63 bytes (8EiB), limited only by the space available
869       on the OSTs.</para>
870       <para>Although a single file can only be striped over 2000 objects,
871       Lustre file systems can have thousands of OSTs. The I/O bandwidth to
872       access a single file is the aggregated I/O bandwidth to the objects in a
873       file, which can be as much as a bandwidth of up to 2000 servers. On
874       systems with more than 2000 OSTs, clients can do I/O using multiple files
875       to utilize the full file system bandwidth.</para>
876       <para>For more information about striping, see
877       <xref linkend="managingstripingfreespace" />.</para>
878     </section>
879   </section>
880 </chapter>