GFS 共用ファイルシステムでは、以下の機能は提供していません。
通常ファイル以外のファイルに対するノード間のファイルロック機能
他ファイルシステムとのノード間のデッドロックチェック機能
以下の機能は、Linux カーネルの仕様により、正常に動作しない場合があります。
SEEK_END 指定によるファイルロック情報の設定・獲得機能
write(2), truncate(2), または ftruncate(2) などによるファイルサイズ変更操作の後に、同じファイルに対して SEEK_END 指定のファイルロック情報の設定・獲得を行う場合、同じノードから行ってください。
異なるノードから、同じファイルに対して、ファイルサイズ変更操作と SEEK_END 指定のファイルロック情報の設定・獲得を行った場合、古いファイルサイズをもとにファイルロック操作を行うことがあります。
なお、異なるノードから、ファイルサイズ変更操作と SEEK_END 指定のファイルロック情報の設定・獲得を行いたい場合には、SEEK_END 指定のファイルロック情報の設定・獲得を行う前に、stat(1), stat(2), fstat(2) などにより最新のファイルサイズを獲得することで、上記の問題を回避できます。
任意のプロセス、そのプロセスが生成したスレッド、および、そのプロセスが生成した子プロセス間でのロック獲得操作
同一ファイルに対して、以下の 1, 2, 3 の操作が競合した場合、ファイル操作がハングアップする場合があります。
プロセス(A) が生成したスレッドのロック獲得操作
プロセス(A) のロック獲得操作
1および 2 のロック獲得操作対象ファイルに対する、プロセス(A) が生成したプロセス(B) の close(2) 操作、または、プロセス(B) のプロセス終了操作
または
プロセス(A) が生成したスレッドのロック獲得操作
プロセス(A) が生成した子プロセス(C) のロック獲得操作
1 および 2 のロック獲得操作対象ファイルに対する、プロセス(A) の close(2) 操作、または、プロセス(C) のプロセス終了操作
ファイル操作がハングアップした場合には、ハングアップしているプロセスを、kill(1) によって終了させることで、ファイル操作のハングアップ状態から回復することができます。
GFS 共用ファイルシステム上で大量にファイルロックを設定すると、システム性能に、以下のような影響を及ぼすことがあります。
MDS の使用メモリ量の増加に伴い、メモリ負荷が増加します。
ファイルロック処理により、CPU 負荷が増加します。
ファイルロック待ちプロセスが大量に存在する場合に、以下の操作や事象が発生すると、一時的にネットワーク負荷が増加します。
ファイルロックを解除する。または、
ファイルロック設定プロセスが存在するノードがダウンする。
ファイルロックを大量に設定した状態でダウンリカバリが行われると、ファイルロックのリカバリに時間がかかり、リカバリが失敗する場合があります。