このトピックでは、ossfs 1.91.2の更新について説明します。
新機能
直接読み取りモード
ossfsを使用してバケット内のオブジェクトを読み取ると、ossfsはバケットからオブジェクトを自動的にダウンロードし、オブジェクトをファイルとしてローカルディスクに書き込み、ローカルディスクからファイルを返します。 ossfsでは、ディスク書き込みは非同期です。つまり、ossfsは最初にダウンロードしたファイルをメモリ内のページキャッシュに書き込み、次にダーティページのコンテンツをローカルディスクに非同期にフラッシュします。 ファイルを読み取り、キャッシュヒットを経験すると、ファイルはキャッシュから直接提供されます。
デフォルトでは、ossfsは、使用可能なディスク領域が占有されるまで、ローカルディスク上のすべてのプリフェッチされたデータを保持します。
メモリサイズが十分である場合、ダウンロードされたすべてのデータがページキャッシュに書き込まれます。 読み取りパフォーマンスは、ディスク帯域幅ではなく、マシンのネットワーク帯域幅のみによって異なります。
メモリサイズがファイル全体を保持するのに十分でない場合、ファイルはローカルディスクに書き込まれ、読み取り要求を処理するためにディスクから提供される。 その結果、読み取りパフォーマンスはディスク帯域幅とネットワーク帯域幅によって異なります。 これらのうち、前者は主要な性能制約である。
デフォルトの読み取りモードでは、大きなファイルを読み取るパフォーマンスはディスク帯域幅によって制限されます。 このパフォーマンスの制限に対処するため、ossfsは直接読み取りモードをサポートしています。
直接読み取りモードでは、ossfsはデータをメモリバッファにダウンロードし、バッファからの読み取り要求を処理します。 直接読み取りモードでは、ディスクがデータ読み取りプロセスから削除されるため、ネットワーク帯域幅を活用するシーケンシャル読み取りパフォーマンスが向上します。
直接読み取りモードでは、ossfsはダウンロードしたデータをチャンクで管理します。 各チャンクのサイズはデフォルトで4 MBで、direct_read_chunk_sizeパラメーターを使用して変更できます。 ossfsは、現在のチャンクの前のチャンクから、現在のチャンクの後の次のdirect_read_prefetch_chunksまでの範囲のデータをメモリに保持します。 次の読み取り動作のオフセットがこの範囲を超える場合、ossfsは既にダウンロードされたデータを破棄し、新しいオフセットからデータのプリフェッチを開始します。
直接読み出しモードは、順次読み出しにのみ適している。 次のシナリオでは適用されません。
ランダム読み取り: ossfsは、現在のオフセットウィンドウでのみデータを保持します。 ランダム読み取りのオフセットがウィンドウ内に収まらない場合、データは複数回ダウンロードされ、リリースされます。これにより、不要なネットワークリソースが消費され、読み取りパフォーマンスが低下します。 したがって、直接読み出しモードは、多数のランダム読み出し動作が実行されるシナリオには適していない。
書き込み: ossfsは引き続き最初にローカルディスクにデータを書き込みます。 ファイルの直接読み取り操作中にファイルの書き込み要求が発生すると、ossfsは自動的にデフォルトの読み取りモードに切り替わります。このモードでは、ファイルが最初にローカルディスクにダウンロードされます。 直接読み取り操作中のファイルへの書き込み操作は、他のファイルを直接読み取りモードから終了させません。
直接読み取りモードに関連するパラメーターを次の表に示します。
パラメーター | 説明 | デフォルト値 |
direct_read | 直接読み取りモードを有効にするかどうかを指定します。 直接読み取りモードを有効にするには、コマンドラインで-odirect_readを指定します。 | disabled |
direct_read_chunk_size | 各プリフェッチタスクによってプリフェッチされるデータのサイズ (MB単位) 。 | 4 |
direct_read_prefetch_chunks | プリフェッチするチャンクの数。 | 32 |
direct_read_prefetch_limit | プリフェッチできるデータの最大サイズ (MB単位) 。 | 1024 |
direct_read_prefetch_thread | プリフェッチを実行するスレッドの数。 | 64 |
パフォーマンステスト
ossfsを使用してOSSバケットをローカルファイルシステムにマウントし、パフォーマンステストのためにシーケンシャル読み取りを実行します。 テスト結果は次のとおりです。
マシン仕様
メモリ: 32 GB
ディスク帯域幅: 130 Mbit/s
内部帯域幅: Mbit/s
マウントコマンド
ossfsをデフォルトの読み取りモードでマウントする:
ossfs [bucket name] [mountpoint] -ourl=[endpoint] -oparallel_count=32 -omultipart_size=16直接読み取りモードでossfsをマウントする:
ossfs [bucket name] [mountpoint] -ourl=[endpoint] -odirect_read -odirect_read_chunk_size=8 -odirect_read_prefetch_chunks=64
Script
dd if=testfile of=/dev/null bs=1M status=progress次の表にテスト結果を示します。
ファイルサイズ
デフォルト読み取りモード
直接読み取りモード
1 GB
646メガバイト/秒
592メガバイト/秒
5 GB
630メガバイト/秒
611メガバイト/秒
10 GB
260メガバイト/秒
574メガバイト/秒