私は4GBのRAMを備えたかなり古いサーバーを使用しており、ほぼ同じファイルを1日中処理していますが、3GBのRAMは "自由"。
ラムドライブを実行しようとしたことがある人なら誰でも、速度の点ですごいであることがわかります。このシステムのメモリ使用量は通常1GB/4GBを超えることはないので、何か良いものにその余分なメモリを使用する方法があるかどうか知りたいです。
より具体的には、ここでは「ハック」を探していません。ラムドライブを作成してそこにファイルを手動でコピーする必要なく、RAMからファイルを提供するファイルシステムコールが必要です。または、少なくとも私のためにこれを行うスクリプト。
ここで可能なアプリケーションは次のとおりです。
何か案は?
編集:
vmtouch は、ジョブに適したツールのようです。
ハイライト:
EDIT:質問で尋ねられた使用法は vmtouch Hompage の例5にリストされています
Example 5
Daemonise and lock all files in a directory into physical memory:
vmtouch -dl /var/www/htdocs/critical/
vmtouchVirtual Memory Toucherユーティリティ を使用してこれを実行することもできます。
このツールを使用すると、Linuxシステムのファイルシステムキャッシュを制御できます。 VMキャッシュサブシステムで特定のファイルまたはディレクトリを強制またはロックするか、それを使用してファイル/ディレクトリのどの部分がVM内に含まれているかを確認するために使用できます。
How much of the /bin/ directory is currently in cache?
$ vmtouch /bin/
Files: 92
Directories: 1
Resident Pages: 348/1307 1M/5M 26.6%
Elapsed: 0.003426 seconds
または...
Let's bring the rest of big-dataset.txt into memory...
$ vmtouch -vt big-dataset.txt
big-dataset.txt
[OOo oOOOOOOO] 6887/42116
[OOOOOOOOo oOOOOOOO] 10631/42116
[OOOOOOOOOOOOOOo oOOOOOOO] 15351/42116
[OOOOOOOOOOOOOOOOOOOOOo oOOOOOOO] 19719/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOo oOOOOOOO] 24183/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo oOOOOOOO] 28615/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo oOOOOOOO] 31415/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo oOOOOOOO] 36775/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo oOOOOOOO] 39431/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO] 42116/42116
Files: 1
Directories: 0
Touched Pages: 42116 (164M)
Elapsed: 12.107 seconds
物をファイルシステムのキャッシュに入れるための貧乏人のトリックは、単にそれを猫にしてそれを/ dev/nullにリダイレクトすることです。
Linuxは、可能な限り多くのディスクをメモリにキャッシュしますIOメモリ内のキャッシュです。これが、キャッシュとバッファメモリの統計です。適切なものを保存するよりも、おそらくより良い仕事をします。
ただし、データをメモリに保存することを主張する場合は、tmpfsまたはramfsを使用してRAMドライブを作成できます。違いは、tmpfsはブロックデバイスが使用しているメモリのみを使用するため、ramfsは要求したすべてのメモリを割り当てるということです。私の記憶は少し錆びていますが、できるはずです:
# mount -t ramfs ram /mnt/ram
または
# mount -t tmpfs tmp /mnt/tmp
次に、データをディレクトリにコピーします。明らかに、マシンの電源を切るか、そのパーティションをアンマウントすると、データは失われます。
2.6カーネルのスワッピングとページキャッシング機能についていくつかの詳細を読んだ後、「fcoretools」を見つけました。これは2つのツールで構成されます。
(他の誰かがこれを面白いと思った場合は、ここに投稿します)
他のツールを使用しなくてもかなり役立つ2つのカーネル設定があります。
linuxカーネルにスワップをどの程度積極的に使用するかを指示します。ウィキペディアの記事を引用:
Swappinessは、システムページキャッシュからページをドロップするのではなく、ランタイムメモリをスワップアウトする間のバランスを変更するLinuxカーネルのプロパティです。 Swappinessは、0から100までの値に設定できます。低い値は、カーネルがスワップをできるだけ避けようとすることを意味し、高い値は代わりにカーネルが積極的にスワップ領域を使用しようとするようにします。デフォルト値は60であり、ほとんどのデスクトップシステムでは、100に設定すると全体的なパフォーマンスに影響を与える可能性がありますが、低い値(0でも)を設定すると対話性が向上します(応答の待ち時間が減少します)。
vm.txt からの引用:
カーネルがディレクトリとiノードオブジェクトのキャッシュに使用されるメモリを再利用する傾向を制御します。
Vfs_cache_pressure = 100のデフォルト値では、カーネルはページキャッシュとスワップキャッシュの再利用に関して「公平な」レートでデントリーとiノードを再利用しようとします。 vfs_cache_pressureを減らすと、カーネルはdentryキャッシュとiノードキャッシュを保持することを優先します。 ...
swappiness
を高く(100のように)設定すると、カーネルはスワップする必要のないものをすべて移動し、RAMをキャッシュファイル用に解放します。そしてvfs_cache_pressure
を低く設定して(0ではなく50としましょう!)、アプリケーションデータをRAMに保持するのではなく、ファイルをキャッシュします。
(私は大規模なJavaプロジェクトで作業しており、実行するたびに、RAMを大量に消費し、ディスクキャッシュをフラッシュしたので、次回はプロジェクトはすべてコンパイルされて、ディスクからすべて読み込まれました。これら2つの設定を調整することで、ソースとコンパイル済み出力をRAMにキャッシュしておくことができ、プロセスを大幅に高速化できます。)
3 GBのRAMが空いているディスクからファイルを実際に提供しているのではないかと、私は大いに疑問に思っています。 Linuxファイルキャッシングは非常に優れています。
ディスクIOが表示されている場合は、ログ設定を調べます。クラッシュ時に最新のログ情報が利用できることを保証するために、多くのログはバッファなしとして設定されます。高速である必要があるシステムでは、バッファ付きログIOを使用するか、リモートログサーバーを使用します。
ファイルをmmap
sするだけで実行を継続するプログラムを使用できる場合があります。
十分なメモリがある場合は、キャットするファイルをcatなどで読み込むだけです。 Linuxはそれを維持するのに良い仕事をします。
http://www.coker.com.au/memlockd/ はこれを行います
あなたは本当にそれを必要としませんが、Linuxはあなたが自分で使っているファイルをキャッシュするのにかなり良い仕事をします。
使用できるramfsシステムはさまざまです(たとえば、ramfs、tmpfs)。ただし、一般に、ファイルが実際に頻繁に読み取られている場合は、ファイルシステムキャッシュ内にあります。ファイルの作業セットが無料のRAMよりも大きい場合、ファイルはそのRAMから消去されます。ただし、作業セットが無料のRAMよりも大きい場合、すべてをRAMディスクに収めることはできません。
シェルで「free」コマンドの出力を確認します。「Cached」の下の最後の列の値は、ファイルシステムキャッシュに使用されている空きRAMの量です。
正確には何が尋ねられたのではありませんが、私は使用します
bASE_DIRECTORY -type f -exec cat {}>/dev/null \;を見つけます。
スナップショットから作成されたAWSボリューム内のファイルの初期化をトリガーします。一部のファイルを読みたいだけの場合は、ddを使用するという公式の推奨事項よりも焦点が絞られています。
後者の質問については、プロセッサが並列にデータをフェッチできるように、RAMが異なるメモリチャネルに配置されていることを確認してください。
これはアプリケーションレベルで解決する方が良いと思います。たとえば、おそらくこれに特化したWebサーバーがあるか、Apacheで mod_cache を検討します。 Webコンテンツをより速く提供するなど、特定の目標がある場合、このようなことから改善を得ることができると思います。
しかし、あなたの質問は本質的に一般的です。Linuxメモリーサブシステムは、RAMの最も一般的な使用法を提供するように設計されています。特定のタイプのパフォーマンスをターゲットにする場合は、/ proc/sys/vmですべてを検索することを検討してください。
Fcoretoolsパッケージは興味深いです。そのアプリケーションに関する記事に興味があります... このリンク は、アプリケーションで使用される実際のシステムコールについて話します。
私はちょうどdd if/dev/yourrootpartition of =/dev/null\bs = 1Mcount = howmuchmemoryyouwanttofillを試しました
それはあなたが望むコントロールを私に与えませんが、少なくとも無駄なメモリを使用しようとします
デスクトップコンピューター(ubuntuなど)は、起動時にメモリにプリロードファイル(少なくとも一般的な共有ライブラリ)を既に使用しています。これは、FF、OO、KDE、GNOME(evolution bloat-mailerを使用)などのさまざまなbloarwareの起動と起動時間を短縮するために使用されます。
ツールの名前はreadaheadhttp://packages.ubuntu.com/dapper/admin/readahead
対応するsyscallもあります:readahead(2)http://linux.die.net/man/2/readahead
プリロードデーモンのプロジェクトもあります: http://linux.die.net/man/8/preload
私はランダムな文字のfind/-name文字列を使用します