タグ付けされた質問 「shared-memory」

3
システムメモリ上…特に「tmpfs」、「shm」、「hugepages…」の違い
最近、さまざまなLinuxカーネルメモリベースのファイルシステムについて興味があります。 Note:私の知る限り、タイトルで提示されていることをよりよく理解することと比較すると、以下の質問は多かれ少なかれオプションであると見なされるべきです。それらに答えることで違いを理解するのに役立つと信じているため、以下に質問しますが、私の理解は明らかに制限されているため、他の人がよりよく知っている可能性があります。タイトルに記載されている3つのファイルシステムの違いについての理解を深める答えを受け入れる用意があります。 最終的には、使用可能なファイルシステムをマウントしたいと思いますがhugepages,、いくつかの軽い研究(および、さらに軽い調整)により、a rewritable hugepage mountはオプションではないと信じるようになりました。私は間違っていますか?ここでプレイしているメカニズムは何ですか? に関しても hugepages: uname -a 3.13.3-1-MANJARO \ #1 SMP PREEMPT \ x86_64 GNU/Linux tail -n8 /proc/meminfo HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 8223772 kB DirectMap2M: 16924672 kB DirectMap1G: 2097152 kB (/ proc / meminfoおよび/ proc / cpuinfoのフルテキストバージョンです) 上記で何が起こっていますか?既に割り当てていますhugepages?かDirectMapメモリページとhugepages? アップデートは …

1
「memfd」を「ファイルを所有するプロセス」に説明されていると考えるのは間違っていますか?
https://dvdhrm.wordpress.com/2014/06/10/memfd_create2/ 理論的には、次のmemfd_create()ような新しいsyscallを導入せずに[ ]動作を実現できます。 int fd = open("/tmp", O_RDWR | O_TMPFILE | O_EXCL, S_IRWXU); (ここでtmpfsをより移植可能に保証するには、「/dev/shm」の代わりに「/tmp」を使用できます)。 したがって、最も重要な質問は、なぜ地獄には第三の方法が必要なのかということです。 [...] バッキングメモリは、ファイルを所有するプロセスに割り当てられ、mount-quotasの影響を受けません。 ^この文の最初の部分は信頼できないと思うのは正しいですか? memfd_create()コードは、文字通り「として実装されているカーネル内部でなければならない[A] TMPFSにリンクされていないファイル・リビング」。コードをトレースすると、LSMチェックを実装していない点が異なることを理解しています。また、ブログ投稿で説明しているように、「シール」をサポートするためにmemfdsも作成されています。ただし、me​​mfdsが原則としてtmpfileとは異なる方法で説明されることは非常に懐疑的です。 具体的には、OOM-killerがノッキングを起こすと、memfdsが保持しているメモリを考慮しないと思います。これは、RAMの最大50%(tmpfsのsize =オプションの値)になります。カーネルは内部tmpfsに異なる値を設定しないため、デフォルトサイズの50%を使用します。 したがって、一般に、大きなmemfdを保持するプロセスを期待できるが、他の重要なメモリ割り当てはOOMで強制終了されないでしょう。あれは正しいですか?


2
LinuxはSHMMAXのデフォルト値をどこに設定しますか?
私はこれらの値がどこに設定されているのか、そしてそれらがデフォルトで何になっているのか疑問に思っていますか?鉱山は現在18446744073692774399です。目に見える場所に設定していません。 $ cat /proc/sys/kernel/shmmax 18446744073692774399 $ sysctl kernel.shmmax kernel.shmmax = 18446744073692774399

1
一時ディレクトリとして `/ run / shm`(以前は` / dev / shm`)を使用します
/run/shm(以前は/dev/shm)にディレクトリを作成し、それをアプリケーションの一時ディレクトリのように使用することは良い習慣ですか? 背景:ファイルとディレクトリを使って多くのことを行うプログラムのブラックボックステストを書いています。すべてのテストで、多くのファイルとディレクトリを作成してからプログラムを実行し、次に予想されるファイルとディレクトリのセットを作成してから、diffを実行して比較します。現在、約40のテストがあり、実行に2秒以上かかっています。スピードアップを期待して、ある種のramdisk上のディレクトリでテストを実行したいと思います。 ram diskについて調べたところ、ディレクトリを作成して一時ディレクトリのように使用しても大丈夫であるとの回答で質問に遭遇しました/dev/shm。しかし、さらに調べてみると、直接使用するのは誤りであるとdebianのwikiページに出くわしました/dev/shm。shm_*関数を使用する必要があります。残念ながら、shm_*関数はシェルスクリプトで使用できないようです。 今私は混乱しています。一時ディレクトリのように/run/shm(以前は/dev/shm)使用しても大丈夫ですか?

1
MMAPについて
ここでMMAPに関するドキュメントを調べていて、これを使用して実装しようとしました その実装について、いくつか疑問があります。 MMAPはファイルのマッピングを提供し、物理メモリ内のその場所のポインターを返しますか、それともマッピングテーブルのアドレスを返しますか?そして、そのファイルにもスペースを割り当ててロックしますか? ファイルがメモリ内のその場所に保存されたら、munmapが呼び出されるまでファイルはそのまま残りますか? ファイルはメモリに移動されますか、それともリダイレクトとして機能する単なるマッピングテーブルであり、ファイルは実際には仮想メモリ(ディスク)にありますか? メモリに移動されたと仮定すると、他のプロセスがアドレスを持っている場合、そのスペースにアクセスしてデータを読み取ることができますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.