私の/proc/meminfo
プログラムには約500MBが割り当てられていますShmem
。より具体的な数字を知りたいです。ここで説明を見つけました。
https://lists.kernelnewbies.org/pipermail/kernelnewbies/2013-July/008628.html
これには、tmpfsメモリ、SysV共有メモリ(ipc / shm.cから)、POSIX共有メモリ(/ dev / shm [tmpfs]の下)、共有匿名マップ(/ dev / zeroのmmapとMAP_SHARED:参照)が含まれます。 drivers/char/mem.c から shmem_zero_setup() 呼び出し: mm/shmem.c を介したページ割り当て。
2->開発者のコメントによると、NR_SHMEMにはtmpfsとGEMページが含まれています。 GEMページとは何ですか?
はい、グラフィカル実行マネージャはshmemを使用してGPUと共有されるオブジェクトを保存します。 drivers/gpu/drm/ で shmem_read_mapping_page*() を使用するをご覧ください。
私は薬です
- 経由でユーザーに表示されるtmpfsには50MBがあります
df -h -t tmpfs
。 - sysvipc共有メモリ内の40MB(10,000ページ、4096バイト)
ipcs -mu
、。
500MBの用途についてもう少し積極的に説明したい!総GEMクォータを表示する方法はありますか? (または他の可能な貢献者)。
Intelグラフィックハードウェアでグラフィックデスクトップを実行しているので、いくつかのGEMを割り当ててほしいです。私のカーネルバージョンは4.18.16-200.fc28.x86_64
(Fedora Workstation 28)です。
ベストアンサー1
これはフローチャートに次のように表示されます。「drm mmオブジェクト」または「i915」。/proc/<pid>/maps
GEM / DRMを使用しているプロセスのPIDを見ると、次のようになります。
awk '/(drm mm object)|i915/ { hypidx = index($1, "-"); from = substr($1, 1, hypidx - 1); to = substr($1, hypidx + 1); sum += strtonum("0x" to) - strtonum("0x" from) } END { print sum }' /proc/${PID}/maps
割り当てられたGEMバッファの合計サイズが表示されます。合計は、rootユーザーとして「drm mm object」または「i915」を1回以上入力することによって計算できます。
find /proc -maxdepth 2 -name maps |
xargs grep -E -l "(drm mm object)|i915" |
xargs awk '/(drm mm object)|i915/ { hypidx = index($1, "-"); sum += strtonum("0x" substr($1, hypidx + 1)) - strtonum("0x" substr($1, 1, hypidx - 1)) } END { print sum }'
(-maxdepth 2
スレッドマップを見るのを避ける必要があります)。いくつかの追加のinodeベースの重複排除が必要な場合があります。