Lustreのトレンドとホットな機能紹介

Whamcloud/DDN Storage
井原修一

1Lustreについて• Lustreは20年以上の歴史を持つオープンソースの並列ファイルシステム
o 超大規模HPCでのスケーラビリティ, 性能および堅牢性
o 最新のハードウェアの迅速な適応

o Top100およびTop500のスパコンの多くがLustreを採用• 継続的なコミュニティo LUG (Lustre User Group) 2006年から年1回米国で開催
o LAD (Lustre Administrators & Developers)• 2011年から年1回フランスで開催• JLUGを2011年に発起
o 年1回、日本国内のLustreユーザの情報共有の場

本年で11回目• コマーシャルHPCやHPC以外でも数多くの利用実績

Eric Barton@1st JLUG, 2011o スケラービリティ、性能を維持しながらユニークな機能を提供
o 最新のLustreロードマップ(LAD21, Andreas Dilger)• https://www.eofs.eu/_media/events/lad21/lad2021-lustre_2.15_and_beyonddilger.pdf

本日はLustreのトレンドとホットな機能を紹介© 2021 DDN

Japan Lustre + Storage Survey 2021
• 調査の背景と目的
o 本家LUGでは定期的に(年1回) Lustreの動向調査を実施
o 日本国内のデータを把握したい
o 国内Lustreコミュニティおよびユーザとの情報共有• 調査内容o Lustreが使われているインダストリーの動向
o Lustreのストレージ規模、タイプ、場所など

o Lustreに満足している・または今後望む機能
o その他Lustreを運用するにあたっての素朴な質問等© 2021 DDN

Q2: ストレージシステムの主な使用目的は何ですか？（複数回答可)
回答数： 58

Powered by

スキップ数： 0

Q4: 現在検討されているストレージシステムがあれば下記のどちらですか？
（複数回答可)回答数： 57

Powered by

スキップ数： 1

Q12: Lustreで満足している点は以下のどちらに当たりますか(2つまで選択可能)
回答数： 41

Powered by

スキップ数： 17

Q14: 今後検討利用しているLinuxディストリビューションをお選びください（複数回答可）回答数： 44

Powered by

スキップ数： 14

Q15: Lustreの機能で追加もしくは強化してほしい点を下記からお選びください(複数回答可)回答数： 43

Powered by

スキップ数： 15

Japan Lustre + Storage Survey 2021 まとめ
全アンケート結果 https://www.jlug.info/survey
本日のランチ休憩時間に結果のスライドショーをお届けします。
ご回答いただきました皆様、ご協力をありがとうございました。
アンケート結果を少しでも今後のLustre開発に役立てるよう、Lustreコミュニティにフィードバックしていきます。

© 2021 DDN

ホット(になりそう)な機能紹介

本日ご紹介する機能
LAD21(Lustre Administrator Developer) Summitから• シングルストリームDirect I/O 性能向上(Lustre-2.15)• Lustreクライアント WBC(ライトバックキャッシュ, Lustre-2.16+)
https://www.eofs.eu/events/lad21© 2021 DDN

シングルストリーム パフォーマンス
• シングルストリーム
o 標準のPOSIXインターフェースを使ったシングルユーザプロセスからの入出力o 例) dd if=file of=/mnt/lustre/file bs=64M• シングルストリームが重要な理由
o NVMe, PMEM(Optane Persistent Memory)など高速なデバイスの普及
o 多くのツール、ユーティリティがシングルプロセスで実行o 他のI/O性能を測定する上で基礎の基礎• シングルストリームには多くのコアな部分が含まれる• シングストリームから複数ストリームへとスケール© 2021 DDN

シングルストリーム性能: 改善前
Lustre-2.15以前 (2.12, 2.14...)
4500
4000

4 GiB/s

3500

MiB/s

3000
2500

Direct I/O

2000
1500
1000

500
0
Buffered Write© 2021 DDN

Buffered Read

DIO Write

DIO ReadDirect I/O• I/Oサイズが小さい場合o 性能は良くない• Writeにとってsync()のコストは非常に大きい• ReadではReadaheadは利用できない(クライアントのキャッシュを利用しない)• I/Oサイズが大きい場合
o アプリケーションが大きなデータを扱う場合、write(), read()回数は削減
o キャッシュ処理がないので、アプリケーションは通常Buffered IOよりも高速性能は良さそう
しかし、、LustreのDirect I/OはIOサイズに応じてスケールしない(しなかった)© 2021 DDN

LustreにおけるDirect I/O問題点• Direct I/O RPCの発行は逐次処理で、RPC sync()後、次のRPCを発行
o 例: 16MB I/O, Lustreの1RPCサイズが4MBの場合

4MB RPC生成-> 送信 -> sync()完了待ち -> 4MB RPC生成-> 送信 -> sync()完了待ち(Readも同様)• Write(or Read)の経過時間はRPC生成 + 送信 + sync + RPC生成 + 送信 + sync … = n*(RPC生成+ 送信 + sync)
n: RPC数• 全く並列化されてない!

© 2021 DDN

Lustre-2.15におけるDirect I/Oの改善• 並列化されたDirect I/Oo RPC生成 -> 送信 -> RPC生成 -> 送信 … -> 全てのデータ送信後sync(), 完了待ち。
o 例) 16MB I/O, 4MB RPCサイズ、4つのRPCを送信

rpc … rpc … rpc … rpc
sync ………..
sync ………..
sync ………..
sync ………..
o Time = n*(RPC生成 + 送信) + sync*1 (sync()は並列で同時に)o AIO(Async I/O)と似ている• Direct I/Oコードの効率化
o これまでの逐次sync()で多くの非効率な部分が隠れていた
o Direct I/Oに不要なコードの多くの部分がBuffered I/Oと共有• ページキャッシュのステート管理は非常にコスト増© 2021 DDN

改善後の性能結果
Lustre-2.14とLustre-2.15での性能比較(O_DIRECT, Xtersize=256M)
18000
16000
14000

2.14
2.15

12000

MiB/s

10000

10x8000
6000
4000
2000

0
Buffered Write© 2021 DDN

Buffered Read

DIO Write

DIO ReadDirect I/O まとめ• Lustre-2.15での性能向上

o 並列化とコードの最適化にて10倍の性能向上(1.6GB/sec -> 16GB/sec)• IOサイズが大きいDirect I/Oでは優位に

o 今後さらなるチューニング、高速化
o Buffered I/Oの高速化(Lustre-2.16以降)• ユースケースo アプリケーションの高速化必要な部分をO_DIRECTへ• ページキャッシュのオーバヘッドを削減

o Direct I/Oが有効な(サポートしている)アプリケーションの利用• GPUDirect Storage• MPI FileUtilso© 2021 DDN

MPIで並列化されたユーティティ(cp, rm, sync, tar等)

Lustre クライアントWBC(Write Back Cache)はじめに：Untar Speed$ time tar xfz /mnt/lustre/testdir/linux-5.15.7.tar.gz
Untar Speed
454035

TIme (sec)3025• シングルクライアントのメタデータ性
能は高い• 並列化することで高速化可能
しかし、複雑性増。すべてが適応可能ではない。

20151050tmpfs© 2021 DDN

Local SSD(ext4)

Lustre(tar)

Lustre(dtar, 8process)dtar : (mpifileutils) https://github.com/hpc/mpifileutils

LustreおけるSSD/NVMe/RAMの活用• PCC(Persistent Client Cache)o クライアントのローカルストレージを透過的なキャッシュで利用• DoM(Data on MDT)o MDTのSSD/NVMeにデータも配置同一の名前空間
o RPCの削減と小さなファイルの高速化• OST Read Cache
ClientClientClientClientClientCliento OSSのRAMにOSTからReadしたものを保持• SSD OST pool
Persistent Client CacheOSS Read Cacheo SSDのOSTをグルーピングし特定のAttach/Detach
ディレクトリに割り当て
OSS
OSS• その他RAMにおけるWrite/Readのバッファ
OST
OST
Data onOSTOSTo LDLMロックによってデータ一貫性の維持
OST
OST
Dataon
OST
OST
MDT
OSTs
OSTs
OSTs
OSTs
o ページ単位のキャッシュ管理
MDT
Quick OST Pool Based on SSD

メタデータの高速化も必要!
© 2021 DDN

OST Pool Based on HDD

Lustre WBCのデザイン(1)• WBCは事前のポシリーに基づきディレクトリ毎決定
o UID/GID/ProjectID/ファイル名などユーザ定義のルールが設定可能• projid={100 200}&gid={1000},uid={500}• fname={*.local_dir}o ディレクトリの排他的なクライアントアクセスは保護• Lustreファイルシステムとしての一貫性は堅持
o キャッシュディレクトリの”root” inodeは排他的LDLM lockを保持• キャッシュされたすべてのデータ/メタデータ• ディレクトリ内におけるすべてのローカルな変更はキャッシュo データキャッシュはページキャッシュ、メタデータ(inode/dentries)もメモリ内のキャッシュo MDS/OSSへのRPCを劇的に削減© 2021 DDN

Lustre WBCのデザイン(2)VFS• WBCのMemFSを実装しキャッシュを管理
oRamFS/Tmpfsに類似• 永続性をサポートしLustreによって管理

oMemFS• キャッシュされたデータをメタデータを保持• VFS内のinode/dentry/ページキャッシュを活用• データとメタデータがフラッシュされるタイミング
リモートクライアントがキャッシュ対象にアクセスo ローカルクライアントのメモリ閾値超o 定期的な自動フラッシュ
o アプリケーションがsync()もしくはfsync()を実行o• MemFSからMDTへの高速なフラッシュ
Bulk RPCを活用しメタデータをバッチでフラッシュo フラッシュもしくは“ ”degrade“はファイルシステム全体ではなくサブディレクトリ単位o© 2021 DDNDentry Cache

Inode Cache
Page Cache

Cache Policy of WBC

MemFS

PCC interface of WBC
LDLM

Data & Metadata FlushMDC

LDLM Lock Reclaim
MDS/OSSPCC onLocal FS

Lustre Write Back Cache まとめ• LustreWBCで劇的なメタデータ性能向上
o ネットワーク往復のレイテンシーを排除
o バッチによるメタデータアップデート

Untar Speed• WBCの実装

45

o ファイルシステム単位ではなく、小さい40

TIme (sec)3530

1/6に短縮2520単位(UID, Dir, 等)でのキャッシュ設定
o 永続性Tmpfs/Memfs + Lustreで管理
o キャッシュは一貫性は保持• LDLMロックにより安全なデータアクセス

15o 柔軟なキャッシュフラッシュポリシー

tmpfsと同等

1050tmpfs© 2021 DDN

Local SSD(ext4)

Lustre(tar)

Lustre(dtar,8process)

LustrteWBC(tar)

現在プロトタイプ実装中
Lustre-2.16以降をお楽しみに最後に：Multipassで作るLustre環境• Multipass

https://multipass.run/o Canonical社が開発しているVM管理ソフト(Linux, MacOS, Windows)o

最初のLustre ARMクライアント, 2013

• Lustre on M1 Macbook
manzana:~ ihara$ multipass launch --name mds0 --cpus 2 --disk 30G --mem 2G
manzana:~ ihara$ multipass exec mds0 -- /bin/bash
ubuntu@mds0:~$ uname -r
5.4.0-91-generic

Ubuntu20.04にLustre Serverを構築する方法
https://wiki.whamcloud.com/display/PUB/Build+Lustre+MASTER+with+Ldiskfs+on+Ubuntu+20.04.1+from+Git

ubuntu@mds0:~$ sudo sh -c "mkdir /mnt/mdt0; mkdir /mnt/ost0; mkdir /mnt/ost1"
ubuntu@mds0:~$ sudo mount -t lustre /tmp/mdt0 /mnt/mdt0 -o loop
ubuntu@mds0:~$ sudo mount -t lustre /tmp/ost0 /mnt/ost0 -o loop
ubuntu@mds0:~$ sudo mount -t lustre /tmp/ost1 /mnt/ost1 -o loop
ubuntu@mds0:~$ sudo mkdir /mnt/lustre
ubuntu@mds0:~$ df -h /mnt/lustre/Filesystem
Size Used Avail Use% Mounted on
192.168.64.11@tcp:/lustre 3.5G 2.5M 3.3G
1% /mnt/lustre© 2021 DDN