Whamcloud - gitweb
LUDOC-324 lnet: Change LNET to LNet across the entire manual
[doc/manual.git] / SettingUpLustreSystem.xml
1 <?xml version='1.0' encoding='UTF-8'?>
2 <chapter xmlns="http://docbook.org/ns/docbook" xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:lang="en-US" xml:id="settinguplustresystem">
3   <title xml:id="settinguplustresystem.title">Determining Hardware Configuration Requirements and
4     Formatting Options</title>
5   <para>This chapter describes hardware configuration requirements for a Lustre file system
6     including:</para>
7   <itemizedlist>
8     <listitem>
9       <para>
10           <xref linkend="dbdoclet.50438256_49017"/>
11       </para>
12     </listitem>
13     <listitem>
14       <para>
15           <xref linkend="dbdoclet.50438256_31079"/>
16       </para>
17     </listitem>
18     <listitem>
19       <para>
20           <xref linkend="dbdoclet.ldiskfs_mkfs_opts"/>
21       </para>
22     </listitem>
23     <listitem>
24       <para>
25           <xref linkend="dbdoclet.50438256_26456"/>
26       </para>
27     </listitem>
28     <listitem>
29       <para>
30           <xref linkend="dbdoclet.50438256_78272"/>
31       </para>
32     </listitem>
33   </itemizedlist>
34   <section xml:id="dbdoclet.50438256_49017">
35       <title><indexterm><primary>setup</primary></indexterm>
36   <indexterm><primary>setup</primary><secondary>hardware</secondary></indexterm>        
37   <indexterm><primary>design</primary><see>setup</see></indexterm>        
38           Hardware Considerations</title>
39     <para>A Lustre file system can utilize any kind of block storage device such as single disks,
40       software RAID, hardware RAID, or a logical volume manager. In contrast to some networked file
41       systems, the block devices are only attached to the MDS and OSS nodes in a Lustre file system
42       and are not accessed by the clients directly.</para>
43     <para>Since the block devices are accessed by only one or two server nodes, a storage area network (SAN) that is accessible from all the servers is not required. Expensive switches are not needed because point-to-point connections between the servers and the storage arrays normally provide the simplest and best attachments. (If failover capability is desired, the storage must be attached to multiple servers.)</para>
44     <para>For a production environment, it is preferable that the MGS have separate storage to allow future expansion to multiple file systems. However, it is possible to run the MDS and MGS on the same machine and have them share the same storage device.</para>
45     <para>For best performance in a production environment, dedicated clients are required. For a non-production Lustre environment or for testing, a Lustre client and server can run on the same machine. However, dedicated clients are the only supported configuration.</para>
46     <warning><para>Performance and recovery issues can occur if you put a client on an MDS or OSS:</para>
47     <itemizedlist>
48       <listitem>
49         <para>Running the OSS and a client on the same machine can cause issues with low memory and memory pressure. If the client consumes all the memory and then tries to write data to the file system, the OSS will need to allocate pages to receive data from the client but will not be able to perform this operation due to low memory. This can cause the client to hang.</para>
50       </listitem>
51       <listitem>
52         <para>Running the MDS and a client on the same machine can cause recovery and deadlock issues and impact the performance of other Lustre clients.</para>
53       </listitem>
54     </itemizedlist>
55     </warning>
56     <para>Only servers running on 64-bit CPUs are tested and supported. 64-bit CPU clients are
57       typically used for testing to match expected customer usage and avoid limitations due to the 4
58       GB limit for RAM size, 1 GB low-memory limitation, and 16 TB file size limit of 32-bit CPUs.
59       Also, due to kernel API limitations, performing backups of Lustre software release 2.x. file
60       systems on 32-bit clients may cause backup tools to confuse files that have the same 32-bit
61       inode number.</para>
62     <para>The storage attached to the servers typically uses RAID to provide fault tolerance and can
63       optionally be organized with logical volume management (LVM), which is then formatted as a
64       Lustre file system. Lustre OSS and MDS servers read, write and modify data in the format
65       imposed by the file system.</para>
66     <para>The Lustre file system uses journaling file system technology on both the MDTs and OSTs.
67       For a MDT, as much as a 20 percent performance gain can be obtained by placing the journal on
68       a separate device.</para>
69     <para>The MDS can effectively utilize a lot of CPU cycles. A minimum of four processor cores are recommended. More are advisable for files systems with many clients.</para>
70     <note>
71       <para>Lustre clients running on architectures with different endianness are supported. One limitation is that the PAGE_SIZE kernel macro on the client must be as large as the PAGE_SIZE of the server. In particular, ia64 or PPC clients with large pages (up to 64kB pages) can run with x86 servers (4kB pages). If you are running x86 clients with ia64 or PPC servers, you must compile the ia64 kernel with a 4kB PAGE_SIZE (so the server page size is not larger than the client page size). </para>
72     </note>
73     <section remap="h3">
74         <title><indexterm>
75           <primary>setup</primary>
76           <secondary>MDT</secondary>
77         </indexterm> MGT and MDT Storage Hardware Considerations</title>
78       <para>MGT storage requirements are small (less than 100 MB even in the largest Lustre file
79         systems), and the data on an MGT is only accessed on a server/client mount, so disk
80         performance is not a consideration.  However, this data is vital for file system access, so
81         the MGT should be reliable storage, preferably mirrored RAID1.</para>
82       <para>MDS storage is accessed in a database-like access pattern with many seeks and
83         read-and-writes of small amounts of data. High throughput to MDS storage is not important.
84         Storage types that provide much lower seek times, such as high-RPM SAS or SSD drives can be
85         used for the MDT.</para>
86       <para>For maximum performance, the MDT should be configured as RAID1 with an internal journal and two disks from different controllers.</para>
87       <para>If you need a larger MDT, create multiple RAID1 devices from pairs of disks, and then make a RAID0 array of the RAID1 devices. This ensures maximum reliability because multiple disk failures only have a small chance of hitting both disks in the same RAID1 device.</para>
88       <para>Doing the opposite (RAID1 of a pair of RAID0 devices) has a 50% chance that even two disk failures can cause the loss of the whole MDT device. The first failure disables an entire half of the mirror and the second failure has a 50% chance of disabling the remaining mirror.</para>
89       <para condition='l24'>If multiple MDTs are going to be present in the
90       system, each MDT should be specified for the anticipated usage and load.
91       For details on how to add additional MDTs to the filesystem, see
92       <xref linkend="dbdoclet.addingamdt"/>.</para>
93       <warning condition='l24'><para>MDT0 contains the root of the Lustre file
94       system. If MDT0 is unavailable for any reason, the file system cannot be
95       used.</para></warning>
96       <note condition='l24'><para>Using the DNE feature it is possible to
97       dedicate additional MDTs to sub-directories off the file system root
98       directory stored on MDT0, or arbitrarily for lower-level subdirectories.
99       using the <literal>lfs mkdir -i <replaceable>mdt_index</replaceable></literal> command.
100       If an MDT serving a subdirectory becomes unavailable, any subdirectories
101       on that MDT and all directories beneath it will also become inaccessible.
102       Configuring multiple levels of MDTs is an experimental feature for the
103       2.4 release, and is fully functional in the 2.8 release.  This is
104       typically useful for top-level directories to assign different users
105       or projects to separate MDTs, or to distribute other large working sets
106       of files to multiple MDTs.</para></note>
107       <note condition='l28'><para>Starting in the 2.8 release it is possible
108       to spread a single large directory across multiple MDTs using the DNE
109       striped directory feature by specifying multiple stripes (or shards)
110       at creation time using the
111       <literal>lfs mkdir -c <replaceable>stripe_count</replaceable></literal>
112       command, where <replaceable>stripe_count</replaceable> is often the
113       number of MDTs in the filesystem.  Striped directories should typically
114       not be used for all directories in the filesystem, since this incurs
115       extra overhead compared to non-striped directories, but is useful for
116       larger directories (over 50k entries) where many output files are being
117       created at one time.
118       </para></note>
119     </section>
120     <section remap="h3">
121       <title><indexterm><primary>setup</primary><secondary>OST</secondary></indexterm>OST Storage Hardware Considerations</title>
122       <para>The data access pattern for the OSS storage is a streaming I/O
123       pattern that is dependent on the access patterns of applications being
124       used. Each OSS can manage multiple object storage targets (OSTs), one
125       for each volume with I/O traffic load-balanced between servers and
126       targets. An OSS should be configured to have a balance between the
127       network bandwidth and the attached storage bandwidth to prevent
128       bottlenecks in the I/O path. Depending on the server hardware, an OSS
129       typically serves between 2 and 8 targets, with each target between
130       24-48TB, but may be up to 256 terabytes (TBs) in size.</para>
131       <para>Lustre file system capacity is the sum of the capacities provided
132       by the targets. For example, 64 OSSs, each with two 8 TB OSTs,
133       provide a file system with a capacity of nearly 1 PB. If each OST uses
134       ten 1 TB SATA disks (8 data disks plus 2 parity disks in a RAID-6
135       configuration), it may be possible to get 50 MB/sec from each drive,
136       providing up to 400 MB/sec of disk bandwidth per OST. If this system
137       is used as storage backend with a system network, such as the InfiniBand
138       network, that provides a similar bandwidth, then each OSS could provide
139       800 MB/sec of end-to-end I/O throughput. (Although the architectural
140       constraints described here are simple, in practice it takes careful
141       hardware selection, benchmarking and integration to obtain such
142       results.)</para>
143     </section>
144   </section>
145   <section xml:id="dbdoclet.50438256_31079">
146       <title><indexterm><primary>setup</primary><secondary>space</secondary></indexterm>
147           <indexterm><primary>space</primary><secondary>determining requirements</secondary></indexterm>
148           Determining Space Requirements</title>
149     <para>The desired performance characteristics of the backing file systems
150     on the MDT and OSTs are independent of one another. The size of the MDT
151     backing file system depends on the number of inodes needed in the total
152     Lustre file system, while the aggregate OST space depends on the total
153     amount of data stored on the file system. If MGS data is to be stored
154     on the MDT device (co-located MGT and MDT), add 100 MB to the required
155     size estimate for the MDT.</para>
156     <para>Each time a file is created on a Lustre file system, it consumes
157     one inode on the MDT and one OST object over which the file is striped.
158     Normally, each file&apos;s stripe count is based on the system-wide
159     default stripe count.  However, this can be changed for individual files
160     using the <literal>lfs setstripe</literal> option. For more details,
161     see <xref linkend="managingstripingfreespace"/>.</para>
162     <para>In a Lustre ldiskfs file system, all the MDT inodes and OST
163     objects are allocated when the file system is first formatted.  When
164     the file system is in use and a file is created, metadata associated
165     with that file is stored in one of the pre-allocated inodes and does
166     not consume any of the free space used to store file data.  The total
167     number of inodes on a formatted ldiskfs MDT or OST cannot be easily
168     changed. Thus, the number of inodes created at format time should be
169     generous enough to anticipate near term expected usage, with some room
170     for growth without the effort of additional storage.</para>
171     <para>By default, the ldiskfs file system used by Lustre servers to store
172     user-data objects and system data reserves 5% of space that cannot be used
173     by the Lustre file system.  Additionally, a Lustre file system reserves up
174     to 400 MB on each OST, and up to 4GB on each MDT for journal use and a
175     small amount of space outside the journal to store accounting data. This
176     reserved space is unusable for general storage. Thus, at least this much
177     space will be used on each OST before any file object data is saved.</para>
178     <para condition="l24">With a ZFS backing filesystem for the MDT or OST,
179     the space allocation for inodes and file data is dynamic, and inodes are
180     allocated as needed.  A minimum of 2kB of usable space (before mirroring)
181     is needed for each inode, exclusive of other overhead such as directories,
182     internal log files, extended attributes, ACLs, etc.
183     Since the size of extended attributes and ACLs is highly dependent on
184     kernel versions and site-specific policies, it is best to over-estimate
185     the amount of space needed for the desired number of inodes, and any
186     excess space will be utilized to store more inodes.</para>
187     <section>
188       <title><indexterm>
189           <primary>setup</primary>
190           <secondary>MGT</secondary>
191         </indexterm>
192         <indexterm>
193           <primary>space</primary>
194           <secondary>determining MGT requirements</secondary>
195         </indexterm> Determining MGT Space Requirements</title>
196       <para>Less than 100 MB of space is required for the MGT. The size
197       is determined by the number of servers in the Lustre file system
198       cluster(s) that are managed by the MGS.</para>
199     </section>
200     <section xml:id="dbdoclet.50438256_87676">
201         <title><indexterm>
202           <primary>setup</primary>
203           <secondary>MDT</secondary>
204         </indexterm>
205         <indexterm>
206           <primary>space</primary>
207           <secondary>determining MDT requirements</secondary>
208         </indexterm> Determining MDT Space Requirements</title>
209       <para>When calculating the MDT size, the important factor to consider
210       is the number of files to be stored in the file system. This determines
211       the number of inodes needed, which drives the MDT sizing. To be on the
212       safe side, plan for 2 KB per ldiskfs inode on the MDT, which is the
213       default value. Attached storage required for Lustre file system metadata
214       is typically 1-2 percent of the file system capacity depending upon
215       file size.</para>
216       <note condition='l24'><para>Starting in release 2.4, using the DNE
217       remote directory feature it is possible to increase the metadata
218       capacity of a single filesystem by configuring additional MDTs into
219       the filesystem, see <xref linkend="dbdoclet.addingamdt"/> for details.
220       </para></note>
221       <para>For example, if the average file size is 5 MB and you have
222       100 TB of usable OST space, then you can calculate the minimum number
223       of inodes as follows:</para>
224       <informalexample>
225         <para>(100 TB * 1024 GB/TB * 1024 MB/GB) / 5 MB/inode = 20 million inodes</para>
226       </informalexample>
227       <para>For details about formatting options for MDT and OST file systems,
228       see <xref linkend="dbdoclet.ldiskfs_mdt_mkfs"/>.</para>
229       <para>It is recommended that the MDT have at least twice the minimum
230       number of inodes to allow for future expansion and allow for an average
231       file size smaller than expected. Thus, the required space is:</para>
232       <informalexample>
233         <para>2 KB/inode x 20 million inodes x 2 = 80 GB</para>
234       </informalexample>
235       <note>
236         <para>If the average file size is very small, 4 KB for example, the
237         Lustre file system is not very efficient as the MDT will use as much
238         space for each file as the space used on the OST. However, this is not
239         a common configuration for a Lustre environment.</para>
240       </note>
241       <note>
242         <para>If the MDT has too few inodes, this can cause the space on the
243         OSTs to be inaccessible since no new files can be created. Be sure to
244         determine the appropriate size of the MDT needed to support the file
245         system before formatting the file system. It is possible to increase the
246         number of inodes after the file system is formatted, depending on the
247         storage.  For ldiskfs MDT filesystems the <literal>resize2fs</literal>
248         tool can be used if the underlying block device is on a LVM logical
249         volume.  For ZFS new (mirrored) VDEVs can be added to the MDT pool.
250         Inodes will be added approximately in proportion to space added.</para>
251       </note>
252       <note condition='l24'><para>It is also possible to increase the number
253         of inodes available, as well as increasing the aggregate metadata
254         performance, by adding additional MDTs using the DNE remote directory
255         feature available in Lustre release 2.4 and later, see
256         <xref linkend="dbdoclet.addingamdt"/>.</para>
257       </note>
258     </section>
259     <section remap="h3">
260         <title><indexterm>
261           <primary>setup</primary>
262           <secondary>OST</secondary>
263         </indexterm>
264         <indexterm>
265           <primary>space</primary>
266           <secondary>determining OST requirements</secondary>
267         </indexterm> Determining OST Space Requirements</title>
268       <para>For the OST, the amount of space taken by each object depends on
269       the usage pattern of the users/applications running on the system. The
270       Lustre software defaults to a conservative estimate for the average
271       object size (between 64KB per object for 10GB OSTs, and 1MB per object
272       for 16TB and larger OSTs). If you are confident that the average file
273       size for your applications will be larger than this, you can specify a
274       larger average file size (fewer total inodes for a given OST size) to
275       reduce file system overhead and minimize file system check time.
276       See <xref linkend="dbdoclet.ldiskfs_ost_mkfs"/> for more details.</para>
277     </section>
278   </section>
279   <section xml:id="dbdoclet.ldiskfs_mkfs_opts">
280     <title>
281       <indexterm>
282         <primary>ldiskfs</primary>
283         <secondary>formatting options</secondary>
284       </indexterm>
285       <indexterm>
286         <primary>setup</primary>
287         <secondary>ldiskfs</secondary>
288       </indexterm>
289       Setting ldiskfs File System Formatting Options
290     </title>
291     <para>By default, the <literal>mkfs.lustre</literal> utility applies these
292     options to the Lustre backing file system used to store data and metadata
293     in order to enhance Lustre file system performance and scalability. These
294     options include:</para>
295         <itemizedlist>
296             <listitem>
297               <para><literal>flex_bg</literal> - When the flag is set to enable this
298           flexible-block-groups feature, block and inode bitmaps for multiple groups are aggregated
299           to minimize seeking when bitmaps are read or written and to reduce read/modify/write
300           operations on typical RAID storage (with 1 MB RAID stripe widths). This flag is enabled on
301           both OST and MDT file systems. On MDT file systems the <literal>flex_bg</literal> factor
302           is left at the default value of 16. On OSTs, the <literal>flex_bg</literal> factor is set
303           to 256 to allow all of the block or inode bitmaps in a single <literal>flex_bg</literal>
304           to be read or written in a single I/O on typical RAID storage.</para>
305             </listitem>
306             <listitem>
307               <para><literal>huge_file</literal> - Setting this flag allows files on OSTs to be
308           larger than 2 TB in size.</para>
309             </listitem>
310             <listitem>
311               <para><literal>lazy_journal_init</literal> - This extended option is enabled to
312           prevent a full overwrite of the 400 MB journal that is allocated by default in a Lustre
313           file system, which reduces the file system format time.</para>
314             </listitem>
315         </itemizedlist>
316     <para>To override the default formatting options, use arguments to
317         <literal>mkfs.lustre</literal> to pass formatting options to the backing file system:</para>
318     <screen>--mkfsoptions=&apos;backing fs options&apos;</screen>
319     <para>For other <literal>mkfs.lustre</literal> options, see the Linux man page for
320         <literal>mke2fs(8)</literal>.</para>
321     <section xml:id="dbdoclet.ldiskfs_mdt_mkfs">
322       <title><indexterm>
323           <primary>inodes</primary>
324           <secondary>MDS</secondary>
325         </indexterm><indexterm>
326           <primary>setup</primary>
327           <secondary>inodes</secondary>
328         </indexterm>Setting Formatting Options for an ldiskfs MDT</title>
329       <para>The number of inodes on the MDT is determined at format time
330       based on the total size of the file system to be created. The default
331       <emphasis role="italic">bytes-per-inode</emphasis> ratio ("inode ratio")
332       for an MDT is optimized at one inode for every 2048 bytes of file
333       system space. It is recommended that this value not be changed for
334       MDTs.</para>
335       <para>This setting takes into account the space needed for additional
336       ldiskfs filesystem-wide metadata, such as the journal (up to 4 GB),
337       bitmaps, and directories, as well as files that Lustre uses internally
338       to maintain cluster consistency.  There is additional per-file metadata
339       such as file layout for files with a large number of stripes, Access
340       Control Lists (ACLs), and user extended attributes.</para>
341       <para> It is possible to reserve less than the recommended 2048 bytes
342       per inode for an ldiskfs MDT when it is first formatted by adding the
343       <literal>--mkfsoptions="-i bytes-per-inode"</literal> option to
344       <literal>mkfs.lustre</literal>.  Decreasing the inode ratio tunable
345       <literal>bytes-per-inode</literal> will create more inodes for a given
346       MDT size, but will leave less space for extra per-file metadata.  The
347       inode ratio must always be strictly larger than the MDT inode size,
348       which is 512 bytes by default.  It is recommended to use an inode ratio
349       at least 512 bytes larger than the inode size to ensure the MDT does
350       not run out of space.</para>
351       <para>The size of the inode may be changed by adding the
352       <literal>--stripe-count-hint=N</literal> to have
353       <literal>mkfs.lustre</literal> automatically calculate a reasonable
354       inode size based on the default stripe count that will be used by the
355       filesystem, or directly by specifying the
356       <literal>--mkfsoptions="-I inode-size"</literal> option.  Increasing
357       the inode size will provide more space in the inode for a larger Lustre
358       file layout, ACLs, user and system extended attributes, SELinux and
359       other security labels, and other internal metadata.  However, if these
360       features or other in-inode xattrs are not needed, the larger inode size
361       will hurt metadata performance as 2x, 4x, or 8x as much data would be
362       read or written for each MDT inode access.
363       </para>
364     </section>
365     <section xml:id="dbdoclet.ldiskfs_ost_mkfs">
366       <title><indexterm>
367           <primary>inodes</primary>
368           <secondary>OST</secondary>
369         </indexterm>Setting Formatting Options for an ldiskfs OST</title>
370       <para>When formatting an OST file system, it can be beneficial
371       to take local file system usage into account. When doing so, try to
372       reduce the number of inodes on each OST, while keeping enough margin
373       for potential variations in future usage. This helps reduce the format
374       and file system check time and makes more space available for data.</para>
375       <para>The table below shows the default
376       <emphasis role="italic">bytes-per-inode</emphasis> ratio ("inode ratio")
377       used for OSTs of various sizes when they are formatted.</para>
378       <para>
379         <table frame="all" xml:id="settinguplustresystem.tab1">
380           <title>Default Inode Ratios Used for Newly Formatted OSTs</title>
381           <tgroup cols="3">
382             <colspec colname="c1" colwidth="3*"/>
383             <colspec colname="c2" colwidth="2*"/>
384             <colspec colname="c3" colwidth="4*"/>
385             <thead>
386               <row>
387                 <entry>
388                   <para><emphasis role="bold">LUN/OST size</emphasis></para>
389                 </entry>
390                 <entry>
391                   <para><emphasis role="bold">Default Inode ratio</emphasis></para>
392                 </entry>
393                 <entry>
394                   <para><emphasis role="bold">Total inodes</emphasis></para>
395                 </entry>
396               </row>
397             </thead>
398             <tbody>
399               <row>
400                 <entry>
401                   <para> over 10GB </para>
402                 </entry>
403                 <entry>
404                   <para> 1 inode/16KB </para>
405                 </entry>
406                 <entry>
407                   <para> 640 - 655k </para>
408                 </entry>
409               </row>
410               <row>
411                 <entry>
412                   <para> 10GB - 1TB </para>
413                 </entry>
414                 <entry>
415                   <para> 1 inode/68kiB </para>
416                 </entry>
417                 <entry>
418                   <para> 153k - 15.7M </para>
419                 </entry>
420               </row>
421               <row>
422                 <entry>
423                   <para> 1TB - 8TB </para>
424                 </entry>
425                 <entry>
426                   <para> 1 inode/256kB </para>
427                 </entry>
428                 <entry>
429                   <para> 4.2M - 33.6M </para>
430                 </entry>
431               </row>
432               <row>
433                 <entry>
434                   <para> over 8TB </para>
435                 </entry>
436                 <entry>
437                   <para> 1 inode/1MB </para>
438                 </entry>
439                 <entry>
440                   <para> 8.4M - 134M </para>
441                 </entry>
442               </row>
443             </tbody>
444           </tgroup>
445         </table>
446       </para>
447       <para>In environments with few small files, the default inode ratio
448       may result in far too many inodes for the average file size. In this
449       case, performance can be improved by increasing the number of
450       <emphasis role="italic">bytes-per-inode</emphasis>.  To set the inode
451       ratio, use the <literal>--mkfsoptions="-i <replaceable>bytes-per-inode</replaceable>"</literal>
452       argument to <literal>mkfs.lustre</literal> to specify the expected
453       average (mean) size of OST objects.  For example, to create an OST
454       with an expected average object size of 8MB run:
455       <screen>[oss#] mkfs.lustre --ost --mkfsoptions=&quot;-i $((8192 * 1024))&quot; ...</screen>
456       </para>
457       <note>
458         <para>OSTs formatted with ldiskfs are limited to a maximum of
459         320 million to 1 billion objects.  Specifying a very small
460         bytes-per-inode ratio for a large OST that causes this limit to be
461         exceeded can cause either premature out-of-space errors and prevent
462         the full OST space from being used, or will waste space and slow down
463         e2fsck more than necessary.  The default inode ratios are chosen to
464         ensure that the total number of inodes remain below this limit.
465         </para>
466       </note>
467       <note>
468         <para>File system check time on OSTs is affected by a number of
469         variables in addition to the number of inodes, including the size of
470         the file system, the number of allocated blocks, the distribution of
471         allocated blocks on the disk, disk speed, CPU speed, and the amount
472         of RAM on the server. Reasonable file system check times for valid
473         filesystems are 5-30 minutes per TB, but may increase significantly
474         if substantial errors are detected and need to be required.</para>
475       </note>
476       <para>For more details about formatting MDT and OST file systems,
477       see <xref linkend="dbdoclet.ldiskfs_raid_opts"/>.</para>
478     </section>
479     <section remap="h3">
480       <title><indexterm>
481           <primary>setup</primary>
482           <secondary>limits</secondary>
483         </indexterm><indexterm xmlns:xi="http://www.w3.org/2001/XInclude">
484           <primary>wide striping</primary>
485         </indexterm><indexterm xmlns:xi="http://www.w3.org/2001/XInclude">
486           <primary>xattr</primary>
487           <secondary><emphasis role="italic">See</emphasis> wide striping</secondary>
488         </indexterm><indexterm>
489           <primary>large_xattr</primary>
490           <secondary>ea_inode</secondary>
491         </indexterm><indexterm>
492           <primary>wide striping</primary>
493           <secondary>large_xattr</secondary>
494           <tertiary>ea_inode</tertiary>
495         </indexterm>File and File System Limits</title>
496
497          <para><xref linkend="settinguplustresystem.tab2"/> describes
498      current known limits of Lustre.  These limits are imposed by either
499      the Lustre architecture or the Linux virtual file system (VFS) and
500      virtual memory subsystems. In a few cases, a limit is defined within
501      the code and can be changed by re-compiling the Lustre software.
502      Instructions to install from source code are beyond the scope of this
503      document, and can be found elsewhere online. In these cases, the
504      indicated limit was used for testing of the Lustre software. </para>
505
506       <table frame="all" xml:id="settinguplustresystem.tab2">
507         <title>File and file system limits</title>
508         <tgroup cols="3">
509           <colspec colname="c1" colwidth="3*"/>
510           <colspec colname="c2" colwidth="2*"/>
511           <colspec colname="c3" colwidth="4*"/>
512           <thead>
513             <row>
514               <entry>
515                 <para><emphasis role="bold">Limit</emphasis></para>
516               </entry>
517               <entry>
518                 <para><emphasis role="bold">Value</emphasis></para>
519               </entry>
520               <entry>
521                 <para><emphasis role="bold">Description</emphasis></para>
522               </entry>
523             </row>
524           </thead>
525           <tbody>
526             <row>
527               <entry>
528                 <para> Maximum number of MDTs</para>
529               </entry>
530               <entry>
531                 <para condition='l24'>256</para>
532               </entry>
533               <entry>
534                 <para>The Lustre software release 2.3 and earlier allows a
535                 maximum of 1 MDT per file system, but a single MDS can host
536                 multiple MDTs, each one for a separate file system.</para>
537                 <para condition="l24">The Lustre software release 2.4 and later
538                 requires one MDT for the filesystem root. At least 255 more
539                 MDTs can be added to the filesystem and attached into
540                 the namespace with DNE remote or striped directories.</para>
541               </entry>
542             </row>
543             <row>
544               <entry>
545                 <para> Maximum number of OSTs</para>
546               </entry>
547               <entry>
548                 <para> 8150</para>
549               </entry>
550               <entry>
551                 <para>The maximum number of OSTs is a constant that can be
552                 changed at compile time.  Lustre file systems with up to
553                 4000 OSTs have been tested.  Multiple OST file systems can
554                 be configured on a single OSS node.</para>
555               </entry>
556             </row>
557             <row>
558               <entry>
559                 <para> Maximum OST size</para>
560               </entry>
561               <entry>
562                 <para> 128TB (ldiskfs), 256TB (ZFS)</para>
563               </entry>
564               <entry>
565                 <para>This is not a <emphasis>hard</emphasis> limit. Larger
566                 OSTs are possible but today typical production systems do not
567                 typically go beyond the stated limit per OST because Lustre
568                 can add capacity and performance with additional OSTs, and
569                 having more OSTs improves aggregate I/O performance and
570                 minimizes contention.
571                 </para>
572                 <para>
573                 With 32-bit kernels, due to page cache limits, 16TB is the
574                 maximum block device size, which in turn applies to the
575                 size of OST.  It is strongly recommended to run Lustre
576                 clients and servers with 64-bit kernels.</para>
577               </entry>
578             </row>
579             <row>
580               <entry>
581                 <para> Maximum number of clients</para>
582               </entry>
583               <entry>
584                 <para> 131072</para>
585               </entry>
586               <entry>
587                 <para>The maximum number of clients is a constant that can
588                 be changed at compile time. Up to 30000 clients have been
589                 used in production.</para>
590               </entry>
591             </row>
592             <row>
593               <entry>
594                 <para> Maximum size of a file system</para>
595               </entry>
596               <entry>
597                 <para> 512 PB (ldiskfs), 1EB (ZFS)</para>
598               </entry>
599               <entry>
600                 <para>Each OST can have a file system up to the
601                 Maximum OST size limit, and the Maximum number of OSTs
602                 can be combined into a single filesystem.
603                 </para>
604               </entry>
605             </row>
606             <row>
607               <entry>
608                 <para> Maximum stripe count</para>
609               </entry>
610               <entry>
611                 <para> 2000</para>
612               </entry>
613               <entry>
614                 <para>This limit is imposed by the size of the layout that
615                 needs to be stored on disk and sent in RPC requests, but is
616                 not a hard limit of the protocol. The number of OSTs in the
617                 filesystem can exceed the stripe count, but this limits the
618                 number of OSTs across which a single file can be striped.</para>
619               </entry>
620             </row>
621             <row>
622               <entry>
623                 <para> Maximum stripe size</para>
624               </entry>
625               <entry>
626                 <para> &lt; 4 GB</para>
627               </entry>
628               <entry>
629                 <para>The amount of data written to each object before moving
630                 on to next object.</para>
631               </entry>
632             </row>
633             <row>
634               <entry>
635                 <para> Minimum stripe size</para>
636               </entry>
637               <entry>
638                 <para> 64 KB</para>
639               </entry>
640               <entry>
641                 <para>Due to the 64 KB PAGE_SIZE on some 64-bit machines,
642                 the minimum stripe size is set to 64 KB.</para>
643               </entry>
644             </row>
645             <row>
646               <entry>
647                 <para> Maximum object size</para>
648               </entry>
649               <entry>
650                 <para> 16TB (ldiskfs), 256TB (ZFS)</para>
651               </entry>
652               <entry>
653                 <para>The amount of data that can be stored in a single object.
654                 An object corresponds to a stripe. The ldiskfs limit of 16 TB
655                 for a single object applies.  For ZFS the limit is the size of
656                 the underlying OST.  Files can consist of up to 2000 stripes,
657                 each stripe can be up to the maximum object size. </para>
658               </entry>
659             </row>
660             <row>
661               <entry>
662                 <para> Maximum <anchor xml:id="dbdoclet.50438256_marker-1290761" xreflabel=""/>file size</para>
663               </entry>
664               <entry>
665                 <para> 16 TB on 32-bit systems</para>
666                 <para>&#160;</para>
667                 <para> 31.25 PB on 64-bit ldiskfs systems, 8EB on 64-bit ZFS systems</para>
668               </entry>
669               <entry>
670                 <para>Individual files have a hard limit of nearly 16 TB on
671                 32-bit systems imposed by the kernel memory subsystem. On
672                 64-bit systems this limit does not exist.  Hence, files can
673                 be 2^63 bits (8EB) in size if the backing filesystem can
674                 support large enough objects.</para>
675                 <para>A single file can have a maximum of 2000 stripes, which
676                 gives an upper single file limit of 31.25 PB for 64-bit
677                 ldiskfs systems. The actual amount of data that can be stored
678                 in a file depends upon the amount of free space in each OST
679                 on which the file is striped.</para>
680               </entry>
681             </row>
682             <row>
683               <entry>
684                 <para> Maximum number of files or subdirectories in a single directory</para>
685               </entry>
686               <entry>
687                 <para> 10 million files (ldiskfs), 2^48 (ZFS)</para>
688               </entry>
689               <entry>
690                 <para>The Lustre software uses the ldiskfs hashed directory
691                 code, which has a limit of about 10 million files, depending
692                 on the length of the file name. The limit on subdirectories
693                 is the same as the limit on regular files.</para>
694                 <note condition='l28'><para>Starting in the 2.8 release it is
695                 possible to exceed this limit by striping a single directory
696                 over multiple MDTs with the <literal>lfs mkdir -c</literal>
697                 command, which increases the single directory limit by a
698                 factor of the number of directory stripes used.</para></note>
699                 <para>Lustre file systems are tested with ten million files
700                 in a single directory.</para>
701               </entry>
702             </row>
703             <row>
704               <entry>
705                 <para> Maximum number of files in the file system</para>
706               </entry>
707               <entry>
708                 <para> 4 billion (ldiskfs), 256 trillion (ZFS)</para>
709                 <para condition='l24'>up to 256 times the per-MDT limit</para>
710               </entry>
711               <entry>
712                 <para>The ldiskfs filesystem imposes an upper limit of
713                 4 billion inodes per filesystem. By default, the MDT
714                 filesystem is formatted with one inode per 2KB of space,
715                 meaning 512 million inodes per TB of MDT space. This can be
716                 increased initially at the time of MDT filesystem creation.
717                 For more information, see
718                 <xref linkend="settinguplustresystem"/>.</para>
719                 <para condition="l24">The ZFS filesystem
720                 dynamically allocates inodes and does not have a fixed ratio
721                 of inodes per unit of MDT space, but consumes approximately
722                 4KB of space per inode, depending on the configuration.</para>
723                 <para condition="l24">Each additional MDT can hold up to the
724                 above maximum number of additional files, depending on
725                 available space and the distribution directories and files
726                 in the filesystem.</para>
727               </entry>
728             </row>
729             <row>
730               <entry>
731                 <para> Maximum length of a filename</para>
732               </entry>
733               <entry>
734                 <para> 255 bytes (filename)</para>
735               </entry>
736               <entry>
737                 <para>This limit is 255 bytes for a single filename, the
738                 same as the limit in the underlying filesystems.</para>
739               </entry>
740             </row>
741             <row>
742               <entry>
743                 <para> Maximum length of a pathname</para>
744               </entry>
745               <entry>
746                 <para> 4096 bytes (pathname)</para>
747               </entry>
748               <entry>
749                 <para>The Linux VFS imposes a full pathname length of 4096 bytes.</para>
750               </entry>
751             </row>
752             <row>
753               <entry>
754                 <para> Maximum number of open files for a Lustre file system</para>
755               </entry>
756               <entry>
757                 <para> No limit</para>
758               </entry>
759               <entry>
760                 <para>The Lustre software does not impose a maximum for the number of open files,
761                   but the practical limit depends on the amount of RAM on the MDS. No
762                   &quot;tables&quot; for open files exist on the MDS, as they are only linked in a
763                   list to a given client&apos;s export. Each client process probably has a limit of
764                   several thousands of open files which depends on the ulimit.</para>
765               </entry>
766             </row>
767           </tbody>
768         </tgroup>
769       </table>
770       <para>&#160;</para>
771       <note>
772         <para condition="l22">In Lustre software releases prior to version 2.2,
773         the maximum stripe count for a single file was limited to 160 OSTs.
774         In version 2.2, the wide striping feature was added to support files
775         striped over up to 2000 OSTs.  In order to store the large layout for
776         such files in ldiskfs, the <literal>ea_inode</literal> feature must
777         be enabled on the MDT, but no similar tunable is needed for ZFS MDTs.
778         This feature is disabled by default at
779         <literal>mkfs.lustre</literal> time. In order to enable this feature,
780         specify <literal>--mkfsoptions="-O ea_inode"</literal> at MDT format
781         time, or use <literal>tune2fs -O ea_inode</literal> to enable it after
782         the MDT has been formatted.  Using either the deprecated
783         <literal>large_xattr</literal> or preferred <literal>ea_inode</literal>
784         feature name results in <literal>ea_inode</literal> being shown in
785         the file system feature list.</para>
786       </note>
787     </section>
788   </section>
789   <section xml:id="dbdoclet.50438256_26456">
790     <title><indexterm><primary>setup</primary><secondary>memory</secondary></indexterm>Determining Memory Requirements</title>
791     <para>This section describes the memory requirements for each Lustre file system component.</para>
792     <section remap="h3">
793         <title>
794             <indexterm><primary>setup</primary><secondary>memory</secondary><tertiary>client</tertiary></indexterm>
795             Client Memory Requirements</title>
796       <para>A minimum of 2 GB RAM is recommended for clients.</para>
797     </section>
798     <section remap="h3">
799         <title><indexterm><primary>setup</primary><secondary>memory</secondary><tertiary>MDS</tertiary></indexterm>MDS Memory Requirements</title>
800       <para>MDS memory requirements are determined by the following factors:</para>
801       <itemizedlist>
802         <listitem>
803           <para>Number of clients</para>
804         </listitem>
805         <listitem>
806           <para>Size of the directories</para>
807         </listitem>
808         <listitem>
809           <para>Load placed on server</para>
810         </listitem>
811       </itemizedlist>
812       <para>The amount of memory used by the MDS is a function of how many clients are on the system, and how many files they are using in their working set. This is driven, primarily, by the number of locks a client can hold at one time. The number of locks held by clients varies by load and memory availability on the server. Interactive clients can hold in excess of 10,000 locks at times. On the MDS, memory usage is approximately 2 KB per file, including the Lustre distributed lock manager (DLM) lock and kernel data structures for the files currently in use. Having file data in cache can improve metadata performance by a factor of 10x or more compared to reading it from disk.</para>
813       <para>MDS memory requirements include:</para>
814       <itemizedlist>
815         <listitem>
816           <para><emphasis role="bold">File system metadata</emphasis> : A reasonable amount of RAM needs to be available for file system metadata. While no hard limit can be placed on the amount of file system metadata, if more RAM is available, then the disk I/O is needed less often to retrieve the metadata.</para>
817         </listitem>
818         <listitem>
819           <para><emphasis role="bold">Network transport</emphasis> : If you are using TCP or other network transport that uses system memory for send/receive buffers, this memory requirement must also be taken into consideration.</para>
820         </listitem>
821         <listitem>
822           <para><emphasis role="bold">Journal size</emphasis> : By default, the journal size is 400 MB for each Lustre ldiskfs file system. This can pin up to an equal amount of RAM on the MDS node per file system.</para>
823         </listitem>
824         <listitem>
825           <para><emphasis role="bold">Failover configuration</emphasis> : If the MDS node will be used for failover from another node, then the RAM for each journal should be doubled, so the backup server can handle the additional load if the primary server fails.</para>
826         </listitem>
827       </itemizedlist>
828       <section remap="h4">
829         <title><indexterm><primary>setup</primary><secondary>memory</secondary><tertiary>MDS</tertiary></indexterm>Calculating MDS Memory Requirements</title>
830         <para>By default, 400 MB are used for the file system journal. Additional RAM is used for caching file data for the larger working set, which is not actively in use by clients but should be kept &quot;hot&quot; for improved access times. Approximately 1.5 KB per file is needed to keep a file in cache without a lock.</para>
831         <para>For example, for a single MDT on an MDS with 1,000 clients, 16 interactive nodes, and a 2 million file working set (of which 400,000 files are cached on the clients):</para>
832         <informalexample>
833           <para>Operating system overhead = 512 MB</para>
834           <para>File system journal = 400 MB</para>
835           <para>1000 * 4-core clients * 100 files/core * 2kB = 800 MB</para>
836           <para>16 interactive clients * 10,000 files * 2kB = 320 MB</para>
837           <para>1,600,000 file extra working set * 1.5kB/file = 2400 MB</para>
838         </informalexample>
839         <para>Thus, the minimum requirement for a system with this configuration is at least 4 GB of RAM. However, additional memory may significantly improve performance.</para>
840         <para>For directories containing 1 million or more files, more memory may provide a significant benefit. For example, in an environment where clients randomly access one of 10 million files, having extra memory for the cache significantly improves performance.</para>
841       </section>
842     </section>
843     <section remap="h3">
844       <title><indexterm><primary>setup</primary><secondary>memory</secondary><tertiary>OSS</tertiary></indexterm>OSS Memory Requirements</title>
845       <para>When planning the hardware for an OSS node, consider the memory usage of several
846         components in the Lustre file system (i.e., journal, service threads, file system metadata,
847         etc.). Also, consider the effect of the OSS read cache feature, which consumes memory as it
848         caches data on the OSS node.</para>
849       <para>In addition to the MDS memory requirements mentioned in <xref linkend="dbdoclet.50438256_87676"/>, the OSS requirements include:</para>
850       <itemizedlist>
851         <listitem>
852           <para><emphasis role="bold">Service threads</emphasis> : The service threads on the OSS node pre-allocate a 4 MB I/O buffer for each ost_io service thread, so these buffers do not need to be allocated and freed for each I/O request.</para>
853         </listitem>
854         <listitem>
855           <para><emphasis role="bold">OSS read cache</emphasis> : OSS read cache provides read-only
856             caching of data on an OSS, using the regular Linux page cache to store the data. Just
857             like caching from a regular file system in the Linux operating system, OSS read cache
858             uses as much physical memory as is available.</para>
859         </listitem>
860       </itemizedlist>
861       <para>The same calculation applies to files accessed from the OSS as for the MDS, but the load is distributed over many more OSSs nodes, so the amount of memory required for locks, inode cache, etc. listed under MDS is spread out over the OSS nodes.</para>
862       <para>Because of these memory requirements, the following calculations should be taken as determining the absolute minimum RAM required in an OSS node.</para>
863       <section remap="h4">
864         <title><indexterm><primary>setup</primary><secondary>memory</secondary><tertiary>OSS</tertiary></indexterm>Calculating OSS Memory Requirements</title>
865         <para>The minimum recommended RAM size for an OSS with two OSTs is computed below:</para>
866         <informalexample>
867           <para>Ethernet/TCP send/receive buffers (4 MB * 512 threads) = 2048 MB</para>
868           <para>400 MB journal size * 2 OST devices = 800 MB</para>
869           <para>1.5 MB read/write per OST IO thread * 512 threads = 768 MB</para>
870           <para>600 MB file system read cache * 2 OSTs = 1200 MB</para>
871           <para>1000 * 4-core clients * 100 files/core * 2kB = 800MB</para>
872           <para>16 interactive clients * 10,000 files * 2kB = 320MB</para>
873           <para>1,600,000 file extra working set * 1.5kB/file = 2400MB</para>
874           <para> DLM locks + file system metadata TOTAL = 3520MB</para>
875           <para>Per OSS DLM locks + file system metadata = 3520MB/6 OSS = 600MB (approx.)</para>
876           <para>Per OSS RAM minimum requirement = 4096MB (approx.)</para>
877         </informalexample>
878         <para>This consumes about 1,400 MB just for the pre-allocated buffers, and an additional 2 GB for minimal file system and kernel usage. Therefore, for a non-failover configuration, the minimum RAM would be 4 GB for an OSS node with two OSTs. Adding additional memory on the OSS will improve the performance of reading smaller, frequently-accessed files.</para>
879         <para>For a failover configuration, the minimum RAM would be at least 6 GB. For 4 OSTs on each OSS in a failover configuration 10GB of RAM is reasonable. When the OSS is not handling any failed-over OSTs the extra RAM will be used as a read cache.</para>
880         <para>As a reasonable rule of thumb, about 2 GB of base memory plus 1 GB per OST can be used. In failover configurations, about 2 GB per OST is needed.</para>
881       </section>
882     </section>
883   </section>
884   <section xml:id="dbdoclet.50438256_78272">
885     <title><indexterm>
886         <primary>setup</primary>
887         <secondary>network</secondary>
888       </indexterm>Implementing Networks To Be Used by the Lustre File System</title>
889     <para>As a high performance file system, the Lustre file system places heavy loads on networks.
890       Thus, a network interface in each Lustre server and client is commonly dedicated to Lustre
891       file system traffic. This is often a dedicated TCP/IP subnet, although other network hardware
892       can also be used.</para>
893     <para>A typical Lustre file system implementation may include the following:</para>
894     <itemizedlist>
895       <listitem>
896         <para>A high-performance backend network for the Lustre servers, typically an InfiniBand (IB) network.</para>
897       </listitem>
898       <listitem>
899         <para>A larger client network.</para>
900       </listitem>
901       <listitem>
902         <para>Lustre routers to connect the two networks.</para>
903       </listitem>
904     </itemizedlist>
905     <para>Lustre networks and routing are configured and managed by specifying parameters to the
906       Lustre Networking (<literal>lnet</literal>) module in
907         <literal>/etc/modprobe.d/lustre.conf</literal>.</para>
908     <para>To prepare to configure Lustre networking, complete the following steps:</para>
909     <orderedlist>
910       <listitem>
911         <para><emphasis role="bold">Identify all machines that will be running Lustre software and
912             the network interfaces they will use to run Lustre file system traffic. These machines
913             will form the Lustre network .</emphasis></para>
914         <para>A network is a group of nodes that communicate directly with one another. The Lustre
915           software includes Lustre network drivers (LNDs) to support a variety of network types and
916           hardware (see <xref linkend="understandinglustrenetworking"/> for a complete list). The
917           standard rules for specifying networks applies to Lustre networks. For example, two TCP
918           networks on two different subnets (<literal>tcp0</literal> and <literal>tcp1</literal>)
919           are considered to be two different Lustre networks.</para>
920       </listitem>
921       <listitem>
922         <para><emphasis role="bold">If routing is needed, identify the nodes to be used to route traffic between networks.</emphasis></para>
923         <para>If you are using multiple network types, then you will need a router. Any node with
924           appropriate interfaces can route Lustre networking (LNet) traffic between different
925           network hardware types or topologies --the node may be a server, a client, or a standalone
926           router. LNet can route messages between different network types (such as
927           TCP-to-InfiniBand) or across different topologies (such as bridging two InfiniBand or
928           TCP/IP networks). Routing will be configured in <xref linkend="configuringlnet"/>.</para>
929       </listitem>
930       <listitem>
931         <para><emphasis role="bold">Identify the network interfaces to include
932         in or exclude from LNet.</emphasis></para>
933         <para>If not explicitly specified, LNet uses either the first available
934         interface or a pre-defined default for a given network type. Interfaces
935         that LNet should not use (such as an administrative network or
936         IP-over-IB), can be excluded.</para>
937         <para>Network interfaces to be used or excluded will be specified using
938         the lnet kernel module parameters <literal>networks</literal> and
939         <literal>ip2nets</literal> as described in
940         <xref linkend="configuringlnet"/>.</para>
941       </listitem>
942       <listitem>
943         <para><emphasis role="bold">To ease the setup of networks with complex
944         network configurations, determine a cluster-wide module configuration.
945         </emphasis></para>
946         <para>For large clusters, you can configure the networking setup for
947         all nodes by using a single, unified set of parameters in the
948         <literal>lustre.conf</literal> file on each node. Cluster-wide
949         configuration is described in <xref linkend="configuringlnet"/>.</para>
950       </listitem>
951     </orderedlist>
952     <note>
953       <para>We recommend that you use &apos;dotted-quad&apos; notation for IP addresses rather than host names to make it easier to read debug logs and debug configurations with multiple interfaces.</para>
954     </note>
955   </section>
956 </chapter>