大量の共有メモリを割り当てる必要のあるコードがあり、早急に早期チェックを実施して、十分な空きがあるかどうかを判断したいと考えています。私は、あなたに共有メモリに関する情報を与えると思われるさまざまな方法を見つけましたが、すべてに問題があるようです。ここで私はこれまで試したものです:私のワークステーションで利用可能な(未使用の)共有メモリの量を調べる方法は?
ipcs -lm
が、これは不合理である18014398442373116キロバイトの最大総共有メモリ、(〜16エクサバイト)を返します。
ipcs -m
上記のセグメントをすべて追加すると、約128MBになります。合理的だと思う。
def /dev/shm
これは、(私はRAMの64Gを持っている)合理的なようだ32Gの合計サイズを示しているが、使用量が「IPCS -m」で噛み合わないだけで9メガバイトを示しています。
free OR /proc/meminfo
は、私のマシンでは、これらは、(より「IPCS -m」に沿って)使用する共有メモリのおよそ140メガバイトを示すが、他のマシンには、これらのマシン上で、「人の自由に並ぶように見えるとしません。 'は、共有された値が廃止され、無視する必要があることを指定します。
私はかなり基本的なものが欠けているように感じます。どんな助けでも大歓迎です。
EDIT:このコードは、状況についてもう少し詳しく知るために、私たちのコードが計算ノード上で実行される唯一のものでなければならないスーパーコンピュータ上で動作します。他にメモリの大部分を割り当てるべきではないので、前払いのチェックは妥当ではないようだ。我々が通常実行する状況は、メモリが前のジョブから完全にクリーンアップされていない計算ノードです。既存のセグメントを探すことはできますが、十分なヘッドルームがあれば、ノードがクリーンでない場合でもユーザーが実行できるようにしたいと考えています。
RAMの量は無関係です。共有メモリは仮想メモリであり、実際のメモリではありません。 – Barmar
私は、共有メモリの物理的なブロックが別個に存在しないことを認識していますが、スワップを使用しても、私のマシンには16エクサバイトのものはありません。 RAMについての私のコメントは、私が/ dev/shmが通常物理RAMのサイズの半分であることを読んだからです。関係ないかもしれませんが、私は理解していないのでここにいるので、完全性のために含めました。 – rpmcnally