
合計 64 GB の RAM を搭載したサーバーがあり、アプリケーションは通常、その使用可能な RAM の最大 30 GB を使用します。これらのアプリケーションの 1 つは、多数のフラット ファイルを処理するため、ディスク I/O の待機など、スループットの問題が発生しています。考えられる解決策を模索しているときに、RAM ディスクのアイデアが浮かびました。RAM ディスクの問題は、その固有の不安定性です。
RAMディスク、RAID 1構成、論理ミラーボリュームをグループ化するための個別のドキュメントを見つけました。物理的なディスクですが、これらのディスク レプリケーション ソリューションのいずれかが RAM ディスクで使用できるかどうかを示すドキュメントは見つかりません。さらに重要なのは、RAM ディスクを読み取り/書き込み可能にし、物理ディスクが RAM ディスクを「シャドウイング」して書き込みに追いつくという考え方であるため、RAM ディスクをすべての読み取り/書き込みの「プライマリ」ディスクにする必要があるということです。
注目すべきは、のようにこれは、OS でファイルを RAM キャッシュするだけを避けるためですが、スタンドアロンの RAM ディスクと同じパフォーマンスが得られるなら、うまくいくかもしれません。特定のファイルは長期間アクセスされないことが多いため、当初はこれを避けていましたが、オンデマンドで読み取り/書き込み速度が必要になります。
答え1
なお、OS でファイルを RAM キャッシュするだけは避けたいのですが、スタンドアロンの RAM ディスクと同じパフォーマンスが得られるなら、それはうまくいくかもしれません。特定のファイルは長期間アクセスされないことが多いですが、オンデマンドで読み取り/書き込み速度が必要なため、当初はこれを避けていました。
使用できるvmtouch
あなたの問題を解決するために。これは、特定のファイルやディレクトリ全体、さらにはその下にあるすべてのものをページ キャッシュに固定して、長期間アクセスされていない場合でも削除されないようにするユーティリティです (これが、ページ キャッシュに単純に依存しない最初の理由です)。これには、RAM ディスクと同じ量のメモリが必要ですが、実際にはそれよりも少ない量です。ページ キャッシュは引き続き使用しますが、すべてに RAM ディスクを使用する場合と同様のパフォーマンスが得られます (MD ドライバーが関係しないため、実際には優れたパフォーマンスが得られます)。
答え2
これをハックして組み合わせることもできますが、これは悪いアイデアであり、信頼性と保守性に関して複数の問題が発生する可能性があります。
RAM ディスクと物理ディスクの RAID1 は、RAID1 機能の一部として両方のコピーが同期していることを保証するため、物理ディスクのパフォーマンスに制限されると思います。
読み取りに関しては、MD ドライバーが読み取りを異なるデバイス間で分散できるため、いくらかの利点がある可能性があります。
これを作成するための可能な手順:
- サポートしたい配列のサイズを持つ空のファイルを作成します。
losetup
ファイルからブロックデバイスを作成するために使用します。mdadm
新しく作成されたブロック デバイスと対応するハード ディスク パーティションを使用してアレイを作成するために使用します。- 新しい MD アレイ上にファイルシステムを作成します。
私はこれを自分で試したことがないので、これはそれがどのように行われるかについての理論的な例にすぎません。
答え3
まず、RAMディスクはほぼ一度もないLinuxでは正解です。ブロックデバイスなので、読み取りはブロック層、ファイルシステム、通常のVFS層を通過することになります。そしてデータは RAM ディスクに保存されるだけでなく、RAM にもキャッシュされます。このデータの重複と、関係する追加レイヤーの数のため、Linux に tmpfs が存在しています。tmpfs ファイルシステムは、ブロック レイヤーを使用する代わりに、ページ キャッシュに直接データを保存するため、余分な複雑さはすべて省略されます。また、保存されているデータの量に基づいてサイズが自動的に決定され (サイズを事前に定義する必要はありません)、スワップ領域を活用することもできます。ramdisk が必要だと思う場合は、99% の確率で tmpfs を使用するべきです。
さて、実際の解決策についてですが...
もしすべてのデータがRAMに収まるのであれば、以下のツールを使ってRAMにピン留めする方がずっと良いでしょう。vmtouchまたは、アプリケーションですべてのファイルを mmap してから、マップされたすべての領域で mlock を呼び出すことによっても実現できます。
データがすべて RAM に収まらない場合は、次の 2 つの現実的な選択肢があります。
- 圧縮されたデータをディスクに保存します。理想的には、BTRFS、F2FS、ZFSなどの透過的な圧縮を提供するファイルシステムを使用します。適度に高速なCPUがあれば、通常はこれで十分です。減らす大きなファイルの読み取りに必要な時間が短縮されますが、CPU 時間が少し長くなります。改善は通常、データの圧縮率に比例しますが、多くの場合、30% 以上の改善が簡単に得られます。
- より高速なストレージへの投資を検討してください。既存のストレージを置き換えるだけの十分な量でも、その後使用できる少量でも構いません。キャッシュ既存のストレージを機能的に高速化します。
答え4
永続性が必要な場合、RAMDISK は適切なソリューションではありません。
従来の RAID1 (ミラーリング) アレイに組み込むために、高速 (つまり、エンタープライズ グレードで、停電保護機能付き) NVMe ディスクのペアを購入することを強くお勧めします。