<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.lustre.org/index.php?action=history&amp;feed=atom&amp;title=Lustre_Hardware_Sizing_Guide</id>
	<title>Lustre Hardware Sizing Guide - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.lustre.org/index.php?action=history&amp;feed=atom&amp;title=Lustre_Hardware_Sizing_Guide"/>
	<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=Lustre_Hardware_Sizing_Guide&amp;action=history"/>
	<updated>2026-10-27T12:51:58Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>http://wiki.lustre.org/index.php?title=Lustre_Hardware_Sizing_Guide&amp;diff=5480&amp;oldid=prev</id>
		<title>Elliswilson: Created page with &quot;== Lustre Hardware Sizing Guide ==  This page provides practical guidance for sizing a Lustre filesystem deployment. It covers MDT, OST, memory, and network sizing with worked examples. For filesystem limits, see Lustre Architecture for Admins.  === MDT Sizing ===  The MDT stores all filesystem metadata: directory entries, filenames, permissions, timestamps, file layout information, and extended attributes.  ==== How Much MDT Space Do I Need? ====  &#039;&#039;&#039;Rule of thumb:&#039;...&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=Lustre_Hardware_Sizing_Guide&amp;diff=5480&amp;oldid=prev"/>
		<updated>2026-04-30T18:40:47Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;== Lustre Hardware Sizing Guide ==  This page provides practical guidance for sizing a Lustre filesystem deployment. It covers MDT, OST, memory, and network sizing with worked examples. For filesystem limits, see &lt;a href=&quot;/Lustre_Architecture_for_Admins&quot; title=&quot;Lustre Architecture for Admins&quot;&gt;Lustre Architecture for Admins&lt;/a&gt;.  === MDT Sizing ===  The MDT stores all filesystem metadata: directory entries, filenames, permissions, timestamps, file layout information, and extended attributes.  ==== How Much MDT Space Do I Need? ====  &amp;#039;&amp;#039;&amp;#039;Rule of thumb:&amp;#039;...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Lustre Hardware Sizing Guide ==&lt;br /&gt;
&lt;br /&gt;
This page provides practical guidance for sizing a Lustre filesystem&lt;br /&gt;
deployment. It covers MDT, OST, memory, and network sizing with worked&lt;br /&gt;
examples. For filesystem limits, see [[Lustre Architecture for Admins]].&lt;br /&gt;
&lt;br /&gt;
=== MDT Sizing ===&lt;br /&gt;
&lt;br /&gt;
The MDT stores all filesystem metadata: directory entries, filenames,&lt;br /&gt;
permissions, timestamps, file layout information, and extended&lt;br /&gt;
attributes.&lt;br /&gt;
&lt;br /&gt;
==== How Much MDT Space Do I Need? ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Rule of thumb:&amp;#039;&amp;#039;&amp;#039; Each file consumes approximately &amp;#039;&amp;#039;&amp;#039;2 KiB&amp;#039;&amp;#039;&amp;#039; of&lt;br /&gt;
usable MDT space on ldiskfs (including the inode and directory entry).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Basic formula:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 MDT size = (expected file count) × 2 KiB × safety_factor&lt;br /&gt;
&lt;br /&gt;
A safety factor of &amp;#039;&amp;#039;&amp;#039;2×&amp;#039;&amp;#039;&amp;#039; is recommended to allow for growth and to&lt;br /&gt;
avoid performance degradation as the MDT fills up.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data on MDT (DoM):&amp;#039;&amp;#039;&amp;#039; If you plan to use Data on MDT (storing small&lt;br /&gt;
file data directly on the MDT, available since Lustre 2.11), you need&lt;br /&gt;
significantly more MDT space. A reasonable starting point is &amp;#039;&amp;#039;&amp;#039;5% or&lt;br /&gt;
more&amp;#039;&amp;#039;&amp;#039; of total filesystem capacity, depending on how many small files&lt;br /&gt;
you expect.&lt;br /&gt;
&lt;br /&gt;
==== Worked Examples ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Example 1: Traditional HPC storage&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* 100 TiB total usable OST space&lt;br /&gt;
* Average file size: 5 MiB&lt;br /&gt;
* Expected file count: ~20 million files&lt;br /&gt;
&lt;br /&gt;
 MDT size = 20M × 2 KiB × 2 = 80 GiB&lt;br /&gt;
&lt;br /&gt;
A 100 GiB MDT (RAID1 SSD) would be appropriate.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Example 2: Many small files with DoM&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* 100 TiB total usable OST space&lt;br /&gt;
* Average file size: 64 KiB&lt;br /&gt;
* Expected file count: ~1 billion files&lt;br /&gt;
* DoM stripe size: 64 KiB per file&lt;br /&gt;
&lt;br /&gt;
 Metadata alone: 1B × 2 KiB × 2 = 4 TiB&lt;br /&gt;
 DoM data: 1B × 64 KiB = 64 TiB&lt;br /&gt;
 Total MDT: ~68 TiB (use multiple MDTs with DNE)&lt;br /&gt;
&lt;br /&gt;
This is an extreme case. Most deployments fall somewhere between&lt;br /&gt;
these examples.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Example 3: Research cluster&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* 500 TiB total usable OST space&lt;br /&gt;
* Average file size: 1 GiB&lt;br /&gt;
* Expected file count: ~500,000 files&lt;br /&gt;
&lt;br /&gt;
 MDT size = 500K × 2 KiB × 2 = 2 GiB&lt;br /&gt;
&lt;br /&gt;
Even a small SSD works here, but use at least 20 GiB RAID1 for&lt;br /&gt;
headroom and performance.&lt;br /&gt;
&lt;br /&gt;
==== ldiskfs vs. ZFS for MDT ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! !! ldiskfs !! ZFS&lt;br /&gt;
|-&lt;br /&gt;
| Inode allocation || Fixed at format time || Dynamic (allocates on demand)&lt;br /&gt;
|-&lt;br /&gt;
| Minimum per inode || ~2 KiB || ~4 KiB&lt;br /&gt;
|-&lt;br /&gt;
| Maximum files || 4 billion per MDT || 256 trillion per MDT&lt;br /&gt;
|-&lt;br /&gt;
| Resize || grow only (no shrink) || grow only (add VDEVs)&lt;br /&gt;
|-&lt;br /&gt;
| Recommended RAID || RAID1 or RAID10 || mirror VDEVs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; With ldiskfs, the inode count is fixed at format time.&lt;br /&gt;
Over-provisioning is cheap (SSD space is relatively inexpensive) and&lt;br /&gt;
prevents the painful situation of running out of inodes while having&lt;br /&gt;
plenty of disk space.&lt;br /&gt;
&lt;br /&gt;
==== MDT Storage Hardware ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SSD or NVMe strongly recommended.&amp;#039;&amp;#039;&amp;#039; MDT access patterns are database-like: many small, random reads and writes. Spinning disks will bottleneck metadata performance.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RAID1 (mirror)&amp;#039;&amp;#039;&amp;#039; for a single MDT. For larger MDTs, use RAID10 (ldiskfs) or mirrored ZFS VDEVs.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Do not use RAID5/RAID6&amp;#039;&amp;#039;&amp;#039; for the MDT — the write penalty for small random I/O is severe.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Do not use RAID1-of-RAID0&amp;#039;&amp;#039;&amp;#039; (RAID01) — a two-disk failure has a 50% chance of destroying the entire MDT. Use RAID10 instead.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Dedicated controller&amp;#039;&amp;#039;&amp;#039; recommended — do not share with OSTs.&lt;br /&gt;
&lt;br /&gt;
=== OST Sizing ===&lt;br /&gt;
&lt;br /&gt;
OSTs store the actual file data. Each file&amp;#039;s data is striped across&lt;br /&gt;
one or more OSTs in chunks (default 4 MiB).&lt;br /&gt;
&lt;br /&gt;
==== How Many OSTs? ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Capacity planning:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Number of OSTs = total capacity / capacity per OST&lt;br /&gt;
&lt;br /&gt;
Typical OST sizes range from 24 TiB to 48 TiB. Maximum is 1024 TiB.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Throughput planning:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Number of OSTs = required aggregate bandwidth / bandwidth per OST&lt;br /&gt;
&lt;br /&gt;
A single HDD-based OST can typically sustain 1–3 GB/s, depending on&lt;br /&gt;
RAID configuration and spindle count. NVMe-based OSTs can sustain&lt;br /&gt;
significantly more.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Rule of thumb:&amp;#039;&amp;#039;&amp;#039; Each OSS typically serves &amp;#039;&amp;#039;&amp;#039;2 to 8 OSTs&amp;#039;&amp;#039;&amp;#039;. Size&lt;br /&gt;
your OSS count so that network bandwidth matches storage bandwidth.&lt;br /&gt;
&lt;br /&gt;
==== OST Storage Hardware ====&lt;br /&gt;
&lt;br /&gt;
* Streaming I/O pattern — high throughput is more important than IOPS.&lt;br /&gt;
* RAID6 is common for HDD-based OSTs (good balance of capacity and protection).&lt;br /&gt;
* For ZFS: RAIDZ2 (similar to RAID6) is recommended.&lt;br /&gt;
* dRAID is available in ZFS for improved rebuild times.&lt;br /&gt;
* One OST per block device or ZFS dataset. Do not partition.&lt;br /&gt;
&lt;br /&gt;
=== Memory Sizing ===&lt;br /&gt;
&lt;br /&gt;
==== MDS Memory ====&lt;br /&gt;
&lt;br /&gt;
MDS memory is critical for performance. The MDS caches metadata&lt;br /&gt;
(inodes, directory entries, lock state) in RAM.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Sizing formula:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 MDS RAM = OS overhead (4 GB)&lt;br /&gt;
         + journal cache (4 GB)&lt;br /&gt;
         + client lock memory (clients × cores × files_per_core × 2 KB)&lt;br /&gt;
         + working set cache (working_set_files × 1.5 KB)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Worked example:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* 1024 compute nodes, 32 cores each, 256 files/core open concurrently&lt;br /&gt;
* 12 interactive/login nodes, 100K files each&lt;br /&gt;
* 20 million file working set&lt;br /&gt;
&lt;br /&gt;
 OS + journal:        4 + 4 = 8 GB&lt;br /&gt;
 Compute clients: 1024 × 32 × 256 × 2 KB = 16 GB&lt;br /&gt;
 Interactive:      12 × 100K × 2 KB = 2.4 GB&lt;br /&gt;
 Working set:      20M × 1.5 KB = 30 GB&lt;br /&gt;
 Total: ~60 GB minimum&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;For active-active DNE failover:&amp;#039;&amp;#039;&amp;#039; Double the client lock memory&lt;br /&gt;
since one MDS may serve two MDTs — &amp;#039;&amp;#039;&amp;#039;96 GB&amp;#039;&amp;#039;&amp;#039; in this example.&lt;br /&gt;
&lt;br /&gt;
==== OSS Memory ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Rule of thumb:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;24 GB base + 4 GB per OST&amp;#039;&amp;#039;&amp;#039; (non-failover)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;24 GB base + 8 GB per OST&amp;#039;&amp;#039;&amp;#039; (HA failover — one OSS may need to serve its partner&amp;#039;s OSTs)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Configuration !! OSTs per OSS !! Recommended RAM&lt;br /&gt;
|-&lt;br /&gt;
| 4 OSTs, no failover || 4 || 40 GB&lt;br /&gt;
|-&lt;br /&gt;
| 8 OSTs, no failover || 8 || 56 GB&lt;br /&gt;
|-&lt;br /&gt;
| 4 OSTs, HA failover || 4 (8 during failover) || 56 GB&lt;br /&gt;
|-&lt;br /&gt;
| 8 OSTs, HA failover || 8 (16 during failover) || 88 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Client Memory ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Minimum: 2 GB.&amp;#039;&amp;#039;&amp;#039; Clients with more RAM can cache more data locally,&lt;br /&gt;
improving read performance. No special sizing formula needed.&lt;br /&gt;
&lt;br /&gt;
=== Network Sizing ===&lt;br /&gt;
&lt;br /&gt;
==== Fabric Selection ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Fabric !! Bandwidth !! Latency !! LNet Driver !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1 GbE || 125 MB/s || ~50 μs || ksocklnd || Testing only — too slow for production&lt;br /&gt;
|-&lt;br /&gt;
| 10 GbE || 1.2 GB/s || ~20 μs || ksocklnd || Small clusters, archival&lt;br /&gt;
|-&lt;br /&gt;
| 25 GbE || 3 GB/s || ~15 μs || ksocklnd || Mid-range clusters&lt;br /&gt;
|-&lt;br /&gt;
| 100 GbE || 12 GB/s || ~10 μs || ksocklnd || Large clusters&lt;br /&gt;
|-&lt;br /&gt;
| InfiniBand HDR (200 Gb/s) || 24 GB/s || ~1 μs || ko2iblnd || High-performance HPC&lt;br /&gt;
|-&lt;br /&gt;
| InfiniBand NDR (400 Gb/s) || 48 GB/s || ~1 μs || ko2iblnd || Latest generation HPC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Key principle:&amp;#039;&amp;#039;&amp;#039; Balance network bandwidth with storage bandwidth.&lt;br /&gt;
There is no benefit in having 200 Gb/s InfiniBand if your OSTs can&lt;br /&gt;
only sustain 2 GB/s each.&lt;br /&gt;
&lt;br /&gt;
==== LNet Configuration ====&lt;br /&gt;
&lt;br /&gt;
* Default: LNet uses the first TCP interface. For most setups, create &amp;lt;code&amp;gt;/etc/lnet.conf&amp;lt;/code&amp;gt; to specify the correct interface.&lt;br /&gt;
* All Lustre nodes communicate on &amp;#039;&amp;#039;&amp;#039;TCP port 988&amp;#039;&amp;#039;&amp;#039;. Ensure this port is open.&lt;br /&gt;
* For multi-network environments, LNet supports routing between different subnets or fabric types. See [[LNet Router Config Guide]].&lt;br /&gt;
* For bandwidth aggregation, see [[Multi-Rail LNet]].&lt;br /&gt;
&lt;br /&gt;
=== Putting It Together: Example Configurations ===&lt;br /&gt;
&lt;br /&gt;
==== Small: Research Lab (5 nodes) ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Role !! Count !! Hardware !! Storage&lt;br /&gt;
|-&lt;br /&gt;
| Combined MGS/MDS || 1 || 4+ cores, 32 GB RAM || 100 GB SSD (RAID1)&lt;br /&gt;
|-&lt;br /&gt;
| OSS || 2 || 4+ cores, 32 GB RAM each || 2× 24 TB HDD (RAID6) per OSS = 4 OSTs total&lt;br /&gt;
|-&lt;br /&gt;
| Client || 2 || 2+ GB RAM || —&lt;br /&gt;
|-&lt;br /&gt;
| Network || colspan=&amp;quot;3&amp;quot; | 10 or 25 GbE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Total capacity:&amp;#039;&amp;#039;&amp;#039; ~96 TB usable. Suitable for a small team.&lt;br /&gt;
&lt;br /&gt;
==== Medium: Department Cluster (50 nodes) ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Role !! Count !! Hardware !! Storage&lt;br /&gt;
|-&lt;br /&gt;
| Combined MGS/MDS || 1 (with HA pair) || 8+ cores, 64 GB RAM || 500 GB NVMe (RAID1)&lt;br /&gt;
|-&lt;br /&gt;
| OSS || 4 (2 HA pairs) || 8+ cores, 56 GB RAM each || 4× 48 TB HDD (RAID6) per OSS = 16 OSTs total&lt;br /&gt;
|-&lt;br /&gt;
| Client || 44 || 4+ GB RAM || —&lt;br /&gt;
|-&lt;br /&gt;
| Network || colspan=&amp;quot;3&amp;quot; | 25 GbE or InfiniBand HDR100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Total capacity:&amp;#039;&amp;#039;&amp;#039; ~770 TB usable. HA configured for MDS and OSS&lt;br /&gt;
failover.&lt;br /&gt;
&lt;br /&gt;
==== Large: HPC Center (1000+ nodes) ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Role !! Count !! Hardware !! Storage&lt;br /&gt;
|-&lt;br /&gt;
| MGS || 1 (with HA pair) || 4+ cores, 16 GB RAM || 10 GB SSD (RAID1)&lt;br /&gt;
|-&lt;br /&gt;
| MDS || 2–4 (DNE, HA pairs) || 16+ cores, 96 GB RAM each || 2–4 TB NVMe (RAID1) per MDT&lt;br /&gt;
|-&lt;br /&gt;
| OSS || 50+ (HA pairs) || 8+ cores, 88 GB RAM each || 8× 48 TB (RAID6 or RAIDZ2) per OSS&lt;br /&gt;
|-&lt;br /&gt;
| Client || 1000+ || 4+ GB RAM || —&lt;br /&gt;
|-&lt;br /&gt;
| LNet routers || 2–4 (if multi-fabric) || 8+ cores, 32 GB RAM || —&lt;br /&gt;
|-&lt;br /&gt;
| Network || colspan=&amp;quot;3&amp;quot; | InfiniBand HDR/NDR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Total capacity:&amp;#039;&amp;#039;&amp;#039; 10+ PB usable. DNE for metadata scaling.&lt;br /&gt;
Separate MGS for independent management.&lt;br /&gt;
&lt;br /&gt;
=== Next Steps ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Set up your first filesystem:&amp;#039;&amp;#039;&amp;#039; [[Lustre Quick Start Guide]]&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Choose your deployment pattern:&amp;#039;&amp;#039;&amp;#039; [[Lustre Deployment Patterns]]&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Understand the architecture:&amp;#039;&amp;#039;&amp;#039; [[Lustre Architecture for Admins]]&lt;/div&gt;</summary>
		<author><name>Elliswilson</name></author>
	</entry>
</feed>