プレーンテキストファイルの読み取りパフォーマンスの向上

プレーンテキストファイルの読み取りパフォーマンスの向上

私たちのバイオインフォマティクスアプリケーションには、大容量ファイル(最大900 MB、通常100 MB)があります。これらのファイルには、ゲノムの明確なテキスト表現が含まれており、基本的に文字シーケンスを含む1行のファイルです。

データは場所に基づいて参照されます。例えば、染色体7は位置1から始まり、位置158937463で終わる。通常、約400文字の小さな部分を抽出します(たとえば、4,120,000から4,120,400まで)。

この目的のためにRubyで書かれたユーティリティがあります。https://github.com/sfcarroll/bio-fasta-readファイルを最初から読み取って機能します。

これらの読み取り操作を複数回実行すると、アプリケーションの速度が遅くなります。キャッシュに使用できるオプションを知りたいです。ソースデータは決して変更されませんが、範囲は頻繁に変更されます。私たちは、128 GBのRAMを搭載したシステムでUbuntu Server 14 x64を実行しています。

パフォーマンスを向上させるためのOSレベルの方法はありますか?ファイル全体をメモリにロードするか、リクエストを何らかの方法でキャッシュできますか?

編集する

役に立ついくつかのオプション(何らかの方法でファイルキャッシュに多くのメモリを割り当てるなど)がある場合は、ポインタが非常に便利であると付け加える必要があります。特定の方法で調整する必要がある場合は、専用サーバーを使用してこれらのファイルを読み取ることを検討できます。

編集2 私たちはデュアルSSD(レイド可能)と128GBのRAMを備えたXeon E5-1650 6コアCPUを実行しています。

ベストアンサー1

Linuxカーネルはキャッシュ管理を自動的に実行します。 RAMにロードされたすべてのエントリは、他のプロセスでRAMが必要になり、使用可能なメモリがなくなるまでそのまま残ります。したがって、LinuxカーネルではRAMがいっぱいになっている必要があります。システムには128 GBのRAMがあり、これは100〜1000 MBのファイルを保存するのに十分です。

大容量ファイルをRAMにロードするには、次の手順を実行しますcat

cat huge_file > /dev/null 2>&1

すべての出力はに転送されますが、/dev/nullこれを行うにはシステムRAMを通過する必要があります。これにより、どのようにCached増加するかを確認できます/proc/meminfo

完了したら、catRubyアプリケーションを実行します。 Rubyアプリケーションは、大容量ファイルのキャッシュされたバージョンを読み込みます。

おすすめ記事