GEMバッファに割り当てられたメモリ量を確認できますか?

GEMバッファに割り当てられたメモリ量を確認できますか?

私の/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>/mapsGEM / 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ベースの重複排除が必要な場合があります。

おすすめ記事