Add GTT memory monitoring for AMD GPUs - #515

Open
jibanez-staticduo wants to merge 1 commit into
corecoding:mainfrom
jibanez-staticduo:add-amd-gtt-memory-support
Open

Add GTT memory monitoring for AMD GPUs#515
jibanez-staticduo wants to merge 1 commit into
corecoding:mainfrom
jibanez-staticduo:add-amd-gtt-memory-support

Conversation

@jibanez-staticduo

Copy link
Copy Markdown

Summary

  • Adds GTT (Graphics Translation Table) memory monitoring for AMD GPUs detected via DRM sysfs
  • Reads mem_info_gtt_used and mem_info_gtt_total from /sys/class/drm/cardN/device/ and exposes them as two new GPU sensor fields: GTT Used and GTT Total
  • Errors are silently caught so discrete AMD GPUs or older drivers that don't expose these files are unaffected

Motivation

GTT memory represents system RAM accessible by the GPU. On AMD APUs — such as Strix Halo (Ryzen AI MAX), Rembrandt, and Phoenix — the dedicated VRAM is typically very small (e.g. 512 MiB), while GTT can be tens to hundreds of GiBs of system memory allocated to the GPU.

For workloads like LLM inference (via ROCm/llama.cpp), the GPU primarily uses GTT memory rather than VRAM. Tools like amdgpu_top already report GTT usage, but Vitals currently only shows VRAM — which gives an incomplete picture on these APUs.

Example on an AMD Ryzen AI MAX+ 395 (Strix Halo):

Memory TypeTotalTypical Usage
VRAM (dedicated)512 MiB~455 MiB
GTT (system RAM)124 GiB~63 GiB (running LLMs)

Without GTT monitoring, Vitals only shows the 512 MiB VRAM, missing the 63 GiB actually being used by the GPU.

Changes

  • sensors.js: Added two new FileModule.File reads inside the existing AMD DRM block in _readGpuDrm(), reading mem_info_gtt_used and mem_info_gtt_total. Both are wrapped in .catch() blocks to gracefully handle systems where these files don't exist.

Testing

  • Tested on Fedora 43 with AMD Ryzen AI MAX+ 395 (Strix Halo) / Radeon 8060S
  • GTT values correctly displayed alongside existing VRAM values
  • Verified that the extension loads without errors on systems where GTT sysfs files are present
  • No regressions observed for existing GPU, temperature, or other sensor readings

Made with Cursor

AMD GPUs expose GTT (Graphics Translation Table) memory usage through
sysfs at /sys/class/drm/cardN/device/mem_info_gtt_{used,total}. GTT
represents system RAM that is accessible by the GPU, which is
particularly important on AMD APUs (e.g. Strix Halo, Rembrandt,
Phoenix) where GTT memory can be significantly larger than dedicated
VRAM and is the primary memory pool for GPU workloads such as LLM
inference or graphics rendering.
This patch adds two new GPU sensor fields for AMD cards when detected
via DRM:
- GTT Used: current GTT memory consumption
- GTT Total: total GTT memory available
The reads are wrapped in catch blocks so that AMD discrete GPUs or
older drivers that do not expose these sysfs files will silently
ignore the missing data without affecting existing functionality.
Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jibanez-staticduo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Add GTT memory monitoring for AMD GPUs - #515

Open
jibanez-staticduo wants to merge 1 commit into
corecoding:mainfrom
jibanez-staticduo:add-amd-gtt-memory-support
Open

Add GTT memory monitoring for AMD GPUs#515
jibanez-staticduo wants to merge 1 commit into
corecoding:mainfrom
jibanez-staticduo:add-amd-gtt-memory-support

Conversation

@jibanez-staticduo

Copy link
Copy Markdown

Summary

  • Adds GTT (Graphics Translation Table) memory monitoring for AMD GPUs detected via DRM sysfs
  • Reads mem_info_gtt_used and mem_info_gtt_total from /sys/class/drm/cardN/device/ and exposes them as two new GPU sensor fields: GTT Used and GTT Total
  • Errors are silently caught so discrete AMD GPUs or older drivers that don't expose these files are unaffected

Motivation

GTT memory represents system RAM accessible by the GPU. On AMD APUs — such as Strix Halo (Ryzen AI MAX), Rembrandt, and Phoenix — the dedicated VRAM is typically very small (e.g. 512 MiB), while GTT can be tens to hundreds of GiBs of system memory allocated to the GPU.

For workloads like LLM inference (via ROCm/llama.cpp), the GPU primarily uses GTT memory rather than VRAM. Tools like amdgpu_top already report GTT usage, but Vitals currently only shows VRAM — which gives an incomplete picture on these APUs.

Example on an AMD Ryzen AI MAX+ 395 (Strix Halo):

Memory TypeTotalTypical Usage
VRAM (dedicated)512 MiB~455 MiB
GTT (system RAM)124 GiB~63 GiB (running LLMs)

Without GTT monitoring, Vitals only shows the 512 MiB VRAM, missing the 63 GiB actually being used by the GPU.

Changes

  • sensors.js: Added two new FileModule.File reads inside the existing AMD DRM block in _readGpuDrm(), reading mem_info_gtt_used and mem_info_gtt_total. Both are wrapped in .catch() blocks to gracefully handle systems where these files don't exist.

Testing

  • Tested on Fedora 43 with AMD Ryzen AI MAX+ 395 (Strix Halo) / Radeon 8060S
  • GTT values correctly displayed alongside existing VRAM values
  • Verified that the extension loads without errors on systems where GTT sysfs files are present
  • No regressions observed for existing GPU, temperature, or other sensor readings

Made with Cursor

AMD GPUs expose GTT (Graphics Translation Table) memory usage through
sysfs at /sys/class/drm/cardN/device/mem_info_gtt_{used,total}. GTT
represents system RAM that is accessible by the GPU, which is
particularly important on AMD APUs (e.g. Strix Halo, Rembrandt,
Phoenix) where GTT memory can be significantly larger than dedicated
VRAM and is the primary memory pool for GPU workloads such as LLM
inference or graphics rendering.
This patch adds two new GPU sensor fields for AMD cards when detected
via DRM:
- GTT Used: current GTT memory consumption
- GTT Total: total GTT memory available
The reads are wrapped in catch blocks so that AMD discrete GPUs or
older drivers that do not expose these sysfs files will silently
ignore the missing data without affecting existing functionality.
Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jibanez-staticduo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add GTT memory monitoring for AMD GPUs - #515

Open
jibanez-staticduo wants to merge 1 commit into
corecoding:mainfrom
jibanez-staticduo:add-amd-gtt-memory-support
Open

Add GTT memory monitoring for AMD GPUs#515
jibanez-staticduo wants to merge 1 commit into
corecoding:mainfrom
jibanez-staticduo:add-amd-gtt-memory-support

Conversation

@jibanez-staticduo

Copy link
Copy Markdown

Summary

  • Adds GTT (Graphics Translation Table) memory monitoring for AMD GPUs detected via DRM sysfs
  • Reads mem_info_gtt_used and mem_info_gtt_total from /sys/class/drm/cardN/device/ and exposes them as two new GPU sensor fields: GTT Used and GTT Total
  • Errors are silently caught so discrete AMD GPUs or older drivers that don't expose these files are unaffected

Motivation

GTT memory represents system RAM accessible by the GPU. On AMD APUs — such as Strix Halo (Ryzen AI MAX), Rembrandt, and Phoenix — the dedicated VRAM is typically very small (e.g. 512 MiB), while GTT can be tens to hundreds of GiBs of system memory allocated to the GPU.

For workloads like LLM inference (via ROCm/llama.cpp), the GPU primarily uses GTT memory rather than VRAM. Tools like amdgpu_top already report GTT usage, but Vitals currently only shows VRAM — which gives an incomplete picture on these APUs.

Example on an AMD Ryzen AI MAX+ 395 (Strix Halo):

Memory TypeTotalTypical Usage
VRAM (dedicated)512 MiB~455 MiB
GTT (system RAM)124 GiB~63 GiB (running LLMs)

Without GTT monitoring, Vitals only shows the 512 MiB VRAM, missing the 63 GiB actually being used by the GPU.

Changes

  • sensors.js: Added two new FileModule.File reads inside the existing AMD DRM block in _readGpuDrm(), reading mem_info_gtt_used and mem_info_gtt_total. Both are wrapped in .catch() blocks to gracefully handle systems where these files don't exist.

Testing

  • Tested on Fedora 43 with AMD Ryzen AI MAX+ 395 (Strix Halo) / Radeon 8060S
  • GTT values correctly displayed alongside existing VRAM values
  • Verified that the extension loads without errors on systems where GTT sysfs files are present
  • No regressions observed for existing GPU, temperature, or other sensor readings

Made with Cursor

AMD GPUs expose GTT (Graphics Translation Table) memory usage through
sysfs at /sys/class/drm/cardN/device/mem_info_gtt_{used,total}. GTT
represents system RAM that is accessible by the GPU, which is
particularly important on AMD APUs (e.g. Strix Halo, Rembrandt,
Phoenix) where GTT memory can be significantly larger than dedicated
VRAM and is the primary memory pool for GPU workloads such as LLM
inference or graphics rendering.
This patch adds two new GPU sensor fields for AMD cards when detected
via DRM:
- GTT Used: current GTT memory consumption
- GTT Total: total GTT memory available
The reads are wrapped in catch blocks so that AMD discrete GPUs or
older drivers that do not expose these sysfs files will silently
ignore the missing data without affecting existing functionality.
Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jibanez-staticduo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add GTT memory monitoring for AMD GPUs - #515

Open
jibanez-staticduo wants to merge 1 commit into
corecoding:mainfrom
jibanez-staticduo:add-amd-gtt-memory-support
Open

Add GTT memory monitoring for AMD GPUs#515
jibanez-staticduo wants to merge 1 commit into
corecoding:mainfrom
jibanez-staticduo:add-amd-gtt-memory-support

Conversation

@jibanez-staticduo

Copy link
Copy Markdown

Summary

  • Adds GTT (Graphics Translation Table) memory monitoring for AMD GPUs detected via DRM sysfs
  • Reads mem_info_gtt_used and mem_info_gtt_total from /sys/class/drm/cardN/device/ and exposes them as two new GPU sensor fields: GTT Used and GTT Total
  • Errors are silently caught so discrete AMD GPUs or older drivers that don't expose these files are unaffected

Motivation

GTT memory represents system RAM accessible by the GPU. On AMD APUs — such as Strix Halo (Ryzen AI MAX), Rembrandt, and Phoenix — the dedicated VRAM is typically very small (e.g. 512 MiB), while GTT can be tens to hundreds of GiBs of system memory allocated to the GPU.

For workloads like LLM inference (via ROCm/llama.cpp), the GPU primarily uses GTT memory rather than VRAM. Tools like amdgpu_top already report GTT usage, but Vitals currently only shows VRAM — which gives an incomplete picture on these APUs.

Example on an AMD Ryzen AI MAX+ 395 (Strix Halo):

Memory TypeTotalTypical Usage
VRAM (dedicated)512 MiB~455 MiB
GTT (system RAM)124 GiB~63 GiB (running LLMs)

Without GTT monitoring, Vitals only shows the 512 MiB VRAM, missing the 63 GiB actually being used by the GPU.

Changes

  • sensors.js: Added two new FileModule.File reads inside the existing AMD DRM block in _readGpuDrm(), reading mem_info_gtt_used and mem_info_gtt_total. Both are wrapped in .catch() blocks to gracefully handle systems where these files don't exist.

Testing

  • Tested on Fedora 43 with AMD Ryzen AI MAX+ 395 (Strix Halo) / Radeon 8060S
  • GTT values correctly displayed alongside existing VRAM values
  • Verified that the extension loads without errors on systems where GTT sysfs files are present
  • No regressions observed for existing GPU, temperature, or other sensor readings

Made with Cursor

AMD GPUs expose GTT (Graphics Translation Table) memory usage through
sysfs at /sys/class/drm/cardN/device/mem_info_gtt_{used,total}. GTT
represents system RAM that is accessible by the GPU, which is
particularly important on AMD APUs (e.g. Strix Halo, Rembrandt,
Phoenix) where GTT memory can be significantly larger than dedicated
VRAM and is the primary memory pool for GPU workloads such as LLM
inference or graphics rendering.
This patch adds two new GPU sensor fields for AMD cards when detected
via DRM:
- GTT Used: current GTT memory consumption
- GTT Total: total GTT memory available
The reads are wrapped in catch blocks so that AMD discrete GPUs or
older drivers that do not expose these sysfs files will silently
ignore the missing data without affecting existing functionality.
Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jibanez-staticduo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Add GTT memory monitoring for AMD GPUs - #515

Open
jibanez-staticduo wants to merge 1 commit into
corecoding:mainfrom
jibanez-staticduo:add-amd-gtt-memory-support
Open

Add GTT memory monitoring for AMD GPUs#515
jibanez-staticduo wants to merge 1 commit into
corecoding:mainfrom
jibanez-staticduo:add-amd-gtt-memory-support

Conversation

@jibanez-staticduo

Copy link
Copy Markdown

Summary

  • Adds GTT (Graphics Translation Table) memory monitoring for AMD GPUs detected via DRM sysfs
  • Reads mem_info_gtt_used and mem_info_gtt_total from /sys/class/drm/cardN/device/ and exposes them as two new GPU sensor fields: GTT Used and GTT Total
  • Errors are silently caught so discrete AMD GPUs or older drivers that don't expose these files are unaffected

Motivation

GTT memory represents system RAM accessible by the GPU. On AMD APUs — such as Strix Halo (Ryzen AI MAX), Rembrandt, and Phoenix — the dedicated VRAM is typically very small (e.g. 512 MiB), while GTT can be tens to hundreds of GiBs of system memory allocated to the GPU.

For workloads like LLM inference (via ROCm/llama.cpp), the GPU primarily uses GTT memory rather than VRAM. Tools like amdgpu_top already report GTT usage, but Vitals currently only shows VRAM — which gives an incomplete picture on these APUs.

Example on an AMD Ryzen AI MAX+ 395 (Strix Halo):

Memory TypeTotalTypical Usage
VRAM (dedicated)512 MiB~455 MiB
GTT (system RAM)124 GiB~63 GiB (running LLMs)

Without GTT monitoring, Vitals only shows the 512 MiB VRAM, missing the 63 GiB actually being used by the GPU.

Changes

  • sensors.js: Added two new FileModule.File reads inside the existing AMD DRM block in _readGpuDrm(), reading mem_info_gtt_used and mem_info_gtt_total. Both are wrapped in .catch() blocks to gracefully handle systems where these files don't exist.

Testing

  • Tested on Fedora 43 with AMD Ryzen AI MAX+ 395 (Strix Halo) / Radeon 8060S
  • GTT values correctly displayed alongside existing VRAM values
  • Verified that the extension loads without errors on systems where GTT sysfs files are present
  • No regressions observed for existing GPU, temperature, or other sensor readings

Made with Cursor

AMD GPUs expose GTT (Graphics Translation Table) memory usage through
sysfs at /sys/class/drm/cardN/device/mem_info_gtt_{used,total}. GTT
represents system RAM that is accessible by the GPU, which is
particularly important on AMD APUs (e.g. Strix Halo, Rembrandt,
Phoenix) where GTT memory can be significantly larger than dedicated
VRAM and is the primary memory pool for GPU workloads such as LLM
inference or graphics rendering.
This patch adds two new GPU sensor fields for AMD cards when detected
via DRM:
- GTT Used: current GTT memory consumption
- GTT Total: total GTT memory available
The reads are wrapped in catch blocks so that AMD discrete GPUs or
older drivers that do not expose these sysfs files will silently
ignore the missing data without affecting existing functionality.
Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jibanez-staticduo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add GTT memory monitoring for AMD GPUs - #515

Open
jibanez-staticduo wants to merge 1 commit into
corecoding:mainfrom
jibanez-staticduo:add-amd-gtt-memory-support
Open

Add GTT memory monitoring for AMD GPUs#515
jibanez-staticduo wants to merge 1 commit into
corecoding:mainfrom
jibanez-staticduo:add-amd-gtt-memory-support

Conversation

@jibanez-staticduo

Copy link
Copy Markdown

Summary

  • Adds GTT (Graphics Translation Table) memory monitoring for AMD GPUs detected via DRM sysfs
  • Reads mem_info_gtt_used and mem_info_gtt_total from /sys/class/drm/cardN/device/ and exposes them as two new GPU sensor fields: GTT Used and GTT Total
  • Errors are silently caught so discrete AMD GPUs or older drivers that don't expose these files are unaffected

Motivation

GTT memory represents system RAM accessible by the GPU. On AMD APUs — such as Strix Halo (Ryzen AI MAX), Rembrandt, and Phoenix — the dedicated VRAM is typically very small (e.g. 512 MiB), while GTT can be tens to hundreds of GiBs of system memory allocated to the GPU.

For workloads like LLM inference (via ROCm/llama.cpp), the GPU primarily uses GTT memory rather than VRAM. Tools like amdgpu_top already report GTT usage, but Vitals currently only shows VRAM — which gives an incomplete picture on these APUs.

Example on an AMD Ryzen AI MAX+ 395 (Strix Halo):

Memory TypeTotalTypical Usage
VRAM (dedicated)512 MiB~455 MiB
GTT (system RAM)124 GiB~63 GiB (running LLMs)

Without GTT monitoring, Vitals only shows the 512 MiB VRAM, missing the 63 GiB actually being used by the GPU.

Changes

  • sensors.js: Added two new FileModule.File reads inside the existing AMD DRM block in _readGpuDrm(), reading mem_info_gtt_used and mem_info_gtt_total. Both are wrapped in .catch() blocks to gracefully handle systems where these files don't exist.

Testing

  • Tested on Fedora 43 with AMD Ryzen AI MAX+ 395 (Strix Halo) / Radeon 8060S
  • GTT values correctly displayed alongside existing VRAM values
  • Verified that the extension loads without errors on systems where GTT sysfs files are present
  • No regressions observed for existing GPU, temperature, or other sensor readings

Made with Cursor

AMD GPUs expose GTT (Graphics Translation Table) memory usage through
sysfs at /sys/class/drm/cardN/device/mem_info_gtt_{used,total}. GTT
represents system RAM that is accessible by the GPU, which is
particularly important on AMD APUs (e.g. Strix Halo, Rembrandt,
Phoenix) where GTT memory can be significantly larger than dedicated
VRAM and is the primary memory pool for GPU workloads such as LLM
inference or graphics rendering.
This patch adds two new GPU sensor fields for AMD cards when detected
via DRM:
- GTT Used: current GTT memory consumption
- GTT Total: total GTT memory available
The reads are wrapped in catch blocks so that AMD discrete GPUs or
older drivers that do not expose these sysfs files will silently
ignore the missing data without affecting existing functionality.
Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jibanez-staticduo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add GTT memory monitoring for AMD GPUs - #515

Open
jibanez-staticduo wants to merge 1 commit into
corecoding:mainfrom
jibanez-staticduo:add-amd-gtt-memory-support
Open

Add GTT memory monitoring for AMD GPUs#515
jibanez-staticduo wants to merge 1 commit into
corecoding:mainfrom
jibanez-staticduo:add-amd-gtt-memory-support

Conversation

@jibanez-staticduo

Copy link
Copy Markdown

Summary

  • Adds GTT (Graphics Translation Table) memory monitoring for AMD GPUs detected via DRM sysfs
  • Reads mem_info_gtt_used and mem_info_gtt_total from /sys/class/drm/cardN/device/ and exposes them as two new GPU sensor fields: GTT Used and GTT Total
  • Errors are silently caught so discrete AMD GPUs or older drivers that don't expose these files are unaffected

Motivation

GTT memory represents system RAM accessible by the GPU. On AMD APUs — such as Strix Halo (Ryzen AI MAX), Rembrandt, and Phoenix — the dedicated VRAM is typically very small (e.g. 512 MiB), while GTT can be tens to hundreds of GiBs of system memory allocated to the GPU.

For workloads like LLM inference (via ROCm/llama.cpp), the GPU primarily uses GTT memory rather than VRAM. Tools like amdgpu_top already report GTT usage, but Vitals currently only shows VRAM — which gives an incomplete picture on these APUs.

Example on an AMD Ryzen AI MAX+ 395 (Strix Halo):

Memory TypeTotalTypical Usage
VRAM (dedicated)512 MiB~455 MiB
GTT (system RAM)124 GiB~63 GiB (running LLMs)

Without GTT monitoring, Vitals only shows the 512 MiB VRAM, missing the 63 GiB actually being used by the GPU.

Changes

  • sensors.js: Added two new FileModule.File reads inside the existing AMD DRM block in _readGpuDrm(), reading mem_info_gtt_used and mem_info_gtt_total. Both are wrapped in .catch() blocks to gracefully handle systems where these files don't exist.

Testing

  • Tested on Fedora 43 with AMD Ryzen AI MAX+ 395 (Strix Halo) / Radeon 8060S
  • GTT values correctly displayed alongside existing VRAM values
  • Verified that the extension loads without errors on systems where GTT sysfs files are present
  • No regressions observed for existing GPU, temperature, or other sensor readings

Made with Cursor

AMD GPUs expose GTT (Graphics Translation Table) memory usage through
sysfs at /sys/class/drm/cardN/device/mem_info_gtt_{used,total}. GTT
represents system RAM that is accessible by the GPU, which is
particularly important on AMD APUs (e.g. Strix Halo, Rembrandt,
Phoenix) where GTT memory can be significantly larger than dedicated
VRAM and is the primary memory pool for GPU workloads such as LLM
inference or graphics rendering.
This patch adds two new GPU sensor fields for AMD cards when detected
via DRM:
- GTT Used: current GTT memory consumption
- GTT Total: total GTT memory available
The reads are wrapped in catch blocks so that AMD discrete GPUs or
older drivers that do not expose these sysfs files will silently
ignore the missing data without affecting existing functionality.
Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jibanez-staticduo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Add GTT memory monitoring for AMD GPUs - #515

Open
jibanez-staticduo wants to merge 1 commit into
corecoding:mainfrom
jibanez-staticduo:add-amd-gtt-memory-support
Open

Add GTT memory monitoring for AMD GPUs#515
jibanez-staticduo wants to merge 1 commit into
corecoding:mainfrom
jibanez-staticduo:add-amd-gtt-memory-support

Conversation

@jibanez-staticduo

Copy link
Copy Markdown

Summary

  • Adds GTT (Graphics Translation Table) memory monitoring for AMD GPUs detected via DRM sysfs
  • Reads mem_info_gtt_used and mem_info_gtt_total from /sys/class/drm/cardN/device/ and exposes them as two new GPU sensor fields: GTT Used and GTT Total
  • Errors are silently caught so discrete AMD GPUs or older drivers that don't expose these files are unaffected

Motivation

GTT memory represents system RAM accessible by the GPU. On AMD APUs — such as Strix Halo (Ryzen AI MAX), Rembrandt, and Phoenix — the dedicated VRAM is typically very small (e.g. 512 MiB), while GTT can be tens to hundreds of GiBs of system memory allocated to the GPU.

For workloads like LLM inference (via ROCm/llama.cpp), the GPU primarily uses GTT memory rather than VRAM. Tools like amdgpu_top already report GTT usage, but Vitals currently only shows VRAM — which gives an incomplete picture on these APUs.

Example on an AMD Ryzen AI MAX+ 395 (Strix Halo):

Memory TypeTotalTypical Usage
VRAM (dedicated)512 MiB~455 MiB
GTT (system RAM)124 GiB~63 GiB (running LLMs)

Without GTT monitoring, Vitals only shows the 512 MiB VRAM, missing the 63 GiB actually being used by the GPU.

Changes

  • sensors.js: Added two new FileModule.File reads inside the existing AMD DRM block in _readGpuDrm(), reading mem_info_gtt_used and mem_info_gtt_total. Both are wrapped in .catch() blocks to gracefully handle systems where these files don't exist.

Testing

  • Tested on Fedora 43 with AMD Ryzen AI MAX+ 395 (Strix Halo) / Radeon 8060S
  • GTT values correctly displayed alongside existing VRAM values
  • Verified that the extension loads without errors on systems where GTT sysfs files are present
  • No regressions observed for existing GPU, temperature, or other sensor readings

Made with Cursor

AMD GPUs expose GTT (Graphics Translation Table) memory usage through
sysfs at /sys/class/drm/cardN/device/mem_info_gtt_{used,total}. GTT
represents system RAM that is accessible by the GPU, which is
particularly important on AMD APUs (e.g. Strix Halo, Rembrandt,
Phoenix) where GTT memory can be significantly larger than dedicated
VRAM and is the primary memory pool for GPU workloads such as LLM
inference or graphics rendering.
This patch adds two new GPU sensor fields for AMD cards when detected
via DRM:
- GTT Used: current GTT memory consumption
- GTT Total: total GTT memory available
The reads are wrapped in catch blocks so that AMD discrete GPUs or
older drivers that do not expose these sysfs files will silently
ignore the missing data without affecting existing functionality.
Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jibanez-staticduo