Add ee_alloc_context (NativeAOT) - #104851

Merged
noahfalk merged 5 commits into
dotnet:mainfrom
noahfalk:combined_limit_nativeaot
Oct 16, 2024
Merged

Add ee_alloc_context (NativeAOT)#104851
noahfalk merged 5 commits into
dotnet:mainfrom
noahfalk:combined_limit_nativeaot

Conversation

@noahfalk

@noahfalknoahfalk commented Jul 13, 2024

Copy link
Copy Markdown
Member

This change is some preparatory refactoring for the randomized allocation sampling feature. We need to add more state onto allocation context but we don't want to do a breaking change of the GC interface. The new state only needs to be visible to the EE but we want it physically near the existing alloc context state for good cache locality. To accomplish this we created a new ee_alloc_context struct which contains an instance of gc_alloc_context within it.

The new field ee_alloc_context::combined_limit should be used by fast allocation helpers to determine when to go down the slow path. Most of the time combined_limit has the same value as alloc_limit, but periodically we need to emit an allocation sampling event on an object that is somewhere in the middle of an AC. Using combined_limit rather than alloc_limit as the slow path trigger allows us to keep all the sampling event logic in the slow path.

There is another PR for CoreCLR making the same change: #104849

@jkotas

Copy link
Copy Markdown
Member

In a future PR we will add a field called combined_limit

I think you can add it in this PR. Adding the extra field is going to touch a lot of the same lines as this PR.

@jkotas

Copy link
Copy Markdown
Member

(Also, same comment as #104851 (comment).)

@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch 2 times, most recently from 8d9bb20 to 01933faCompareJuly 14, 2024 07:59
Comment threadsrc/coreclr/nativeaot/Runtime/thread.inl Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/thread.cpp Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/thread.inl Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/gcenv.ee.cpp Outdated
@noahfalk

Copy link
Copy Markdown
MemberAuthor

@jkotas@MichalStrehovsky - I've applied the feedback from the CoreCLR issue to this one as well. Is anything else needed before you can signoff?

@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/coreclr/nativeaot/Runtime/DebugHeader.cpp
@jkotas

jkotas commented Jul 29, 2024

Copy link
Copy Markdown
Member

nativeaot-outerloop (Build windows-x64 Release NativeAOT_Checked timeouts look like infrastructure issues, but they do not go away with reruns. Either the Helix queues are overloaded, or there is a bug that makes the tests run a lot slower.

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me otherwise

Comment threadsrc/coreclr/nativeaot/Runtime/thread.h
Comment threadsrc/coreclr/nativeaot/Runtime/thread.h
@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch from 57dd3f5 to bc70bf5CompareJuly 30, 2024 10:16
@noahfalk

Copy link
Copy Markdown
MemberAuthor

I've updated for the feedback so far. Everything is addressed except NativeAOT SOS which has to be handled out-of-band. Looking at the time I think I may need to call it quits on this for .NET 9 and instead treat it as .NET 10 on a slower cadence. At this point I don't think I have more time available right now to do a staged checkin, revalidate testing after the ongoing changes, and continue to have time in reserve to respond to potential post-checkin issues.

noahfalkand others added 4 commits October 14, 2024 21:43
This change is some preparatory refactoring for the randomized allocation sampling feature. We need to add more state onto allocation context but we don't want to do a breaking change of the GC interface. The new state only needs to be visible to the EE but we want it physically near the existing alloc context state for good cache locality. To accomplish this we created a new ee_alloc_context struct which contains an instance of gc_alloc_context within it.
The new ee_alloc_context::combined_limit should be used by fast allocation helpers to determine when to go down the slow path. Most of the time combined_limit has the same value as alloc_limit, but periodically we need to emit an allocation sampling event on an object that is somewhere in the middle of an AC. Using combined_limit rather than alloc_limit as the slow path trigger allows us to keep all the sampling event logic in the slow path.
- removed unnecessary UpdateCombinedLimit() in thread detach
- updated comment for workaround on 96081
- swapped to updating combined_limit inside GcEnumAllocContexts() instead of in RestartEE()
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch from bc70bf5 to 36ecf6dCompareOctober 15, 2024 04:58
@noahfalk
noahfalk merged commit 588bc45 into dotnet:mainOct 16, 2024
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Nov 15, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@noahfalk@jkotas@mikem8361
, '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 ee_alloc_context (NativeAOT) - #104851

Merged
noahfalk merged 5 commits into
dotnet:mainfrom
noahfalk:combined_limit_nativeaot
Oct 16, 2024
Merged

Add ee_alloc_context (NativeAOT)#104851
noahfalk merged 5 commits into
dotnet:mainfrom
noahfalk:combined_limit_nativeaot

Conversation

@noahfalk

@noahfalknoahfalk commented Jul 13, 2024

Copy link
Copy Markdown
Member

This change is some preparatory refactoring for the randomized allocation sampling feature. We need to add more state onto allocation context but we don't want to do a breaking change of the GC interface. The new state only needs to be visible to the EE but we want it physically near the existing alloc context state for good cache locality. To accomplish this we created a new ee_alloc_context struct which contains an instance of gc_alloc_context within it.

The new field ee_alloc_context::combined_limit should be used by fast allocation helpers to determine when to go down the slow path. Most of the time combined_limit has the same value as alloc_limit, but periodically we need to emit an allocation sampling event on an object that is somewhere in the middle of an AC. Using combined_limit rather than alloc_limit as the slow path trigger allows us to keep all the sampling event logic in the slow path.

There is another PR for CoreCLR making the same change: #104849

@jkotas

Copy link
Copy Markdown
Member

In a future PR we will add a field called combined_limit

I think you can add it in this PR. Adding the extra field is going to touch a lot of the same lines as this PR.

@jkotas

Copy link
Copy Markdown
Member

(Also, same comment as #104851 (comment).)

@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch 2 times, most recently from 8d9bb20 to 01933faCompareJuly 14, 2024 07:59
Comment threadsrc/coreclr/nativeaot/Runtime/thread.inl Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/thread.cpp Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/thread.inl Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/gcenv.ee.cpp Outdated
@noahfalk

Copy link
Copy Markdown
MemberAuthor

@jkotas@MichalStrehovsky - I've applied the feedback from the CoreCLR issue to this one as well. Is anything else needed before you can signoff?

@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/coreclr/nativeaot/Runtime/DebugHeader.cpp
@jkotas

jkotas commented Jul 29, 2024

Copy link
Copy Markdown
Member

nativeaot-outerloop (Build windows-x64 Release NativeAOT_Checked timeouts look like infrastructure issues, but they do not go away with reruns. Either the Helix queues are overloaded, or there is a bug that makes the tests run a lot slower.

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me otherwise

Comment threadsrc/coreclr/nativeaot/Runtime/thread.h
Comment threadsrc/coreclr/nativeaot/Runtime/thread.h
@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch from 57dd3f5 to bc70bf5CompareJuly 30, 2024 10:16
@noahfalk

Copy link
Copy Markdown
MemberAuthor

I've updated for the feedback so far. Everything is addressed except NativeAOT SOS which has to be handled out-of-band. Looking at the time I think I may need to call it quits on this for .NET 9 and instead treat it as .NET 10 on a slower cadence. At this point I don't think I have more time available right now to do a staged checkin, revalidate testing after the ongoing changes, and continue to have time in reserve to respond to potential post-checkin issues.

noahfalkand others added 4 commits October 14, 2024 21:43
This change is some preparatory refactoring for the randomized allocation sampling feature. We need to add more state onto allocation context but we don't want to do a breaking change of the GC interface. The new state only needs to be visible to the EE but we want it physically near the existing alloc context state for good cache locality. To accomplish this we created a new ee_alloc_context struct which contains an instance of gc_alloc_context within it.
The new ee_alloc_context::combined_limit should be used by fast allocation helpers to determine when to go down the slow path. Most of the time combined_limit has the same value as alloc_limit, but periodically we need to emit an allocation sampling event on an object that is somewhere in the middle of an AC. Using combined_limit rather than alloc_limit as the slow path trigger allows us to keep all the sampling event logic in the slow path.
- removed unnecessary UpdateCombinedLimit() in thread detach
- updated comment for workaround on 96081
- swapped to updating combined_limit inside GcEnumAllocContexts() instead of in RestartEE()
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch from bc70bf5 to 36ecf6dCompareOctober 15, 2024 04:58
@noahfalk
noahfalk merged commit 588bc45 into dotnet:mainOct 16, 2024
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Nov 15, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@noahfalk@jkotas@mikem8361
, '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 ee_alloc_context (NativeAOT) - #104851

Merged
noahfalk merged 5 commits into
dotnet:mainfrom
noahfalk:combined_limit_nativeaot
Oct 16, 2024
Merged

Add ee_alloc_context (NativeAOT)#104851
noahfalk merged 5 commits into
dotnet:mainfrom
noahfalk:combined_limit_nativeaot

Conversation

@noahfalk

@noahfalknoahfalk commented Jul 13, 2024

Copy link
Copy Markdown
Member

This change is some preparatory refactoring for the randomized allocation sampling feature. We need to add more state onto allocation context but we don't want to do a breaking change of the GC interface. The new state only needs to be visible to the EE but we want it physically near the existing alloc context state for good cache locality. To accomplish this we created a new ee_alloc_context struct which contains an instance of gc_alloc_context within it.

The new field ee_alloc_context::combined_limit should be used by fast allocation helpers to determine when to go down the slow path. Most of the time combined_limit has the same value as alloc_limit, but periodically we need to emit an allocation sampling event on an object that is somewhere in the middle of an AC. Using combined_limit rather than alloc_limit as the slow path trigger allows us to keep all the sampling event logic in the slow path.

There is another PR for CoreCLR making the same change: #104849

@jkotas

Copy link
Copy Markdown
Member

In a future PR we will add a field called combined_limit

I think you can add it in this PR. Adding the extra field is going to touch a lot of the same lines as this PR.

@jkotas

Copy link
Copy Markdown
Member

(Also, same comment as #104851 (comment).)

@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch 2 times, most recently from 8d9bb20 to 01933faCompareJuly 14, 2024 07:59
Comment threadsrc/coreclr/nativeaot/Runtime/thread.inl Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/thread.cpp Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/thread.inl Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/gcenv.ee.cpp Outdated
@noahfalk

Copy link
Copy Markdown
MemberAuthor

@jkotas@MichalStrehovsky - I've applied the feedback from the CoreCLR issue to this one as well. Is anything else needed before you can signoff?

@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/coreclr/nativeaot/Runtime/DebugHeader.cpp
@jkotas

jkotas commented Jul 29, 2024

Copy link
Copy Markdown
Member

nativeaot-outerloop (Build windows-x64 Release NativeAOT_Checked timeouts look like infrastructure issues, but they do not go away with reruns. Either the Helix queues are overloaded, or there is a bug that makes the tests run a lot slower.

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me otherwise

Comment threadsrc/coreclr/nativeaot/Runtime/thread.h
Comment threadsrc/coreclr/nativeaot/Runtime/thread.h
@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch from 57dd3f5 to bc70bf5CompareJuly 30, 2024 10:16
@noahfalk

Copy link
Copy Markdown
MemberAuthor

I've updated for the feedback so far. Everything is addressed except NativeAOT SOS which has to be handled out-of-band. Looking at the time I think I may need to call it quits on this for .NET 9 and instead treat it as .NET 10 on a slower cadence. At this point I don't think I have more time available right now to do a staged checkin, revalidate testing after the ongoing changes, and continue to have time in reserve to respond to potential post-checkin issues.

noahfalkand others added 4 commits October 14, 2024 21:43
This change is some preparatory refactoring for the randomized allocation sampling feature. We need to add more state onto allocation context but we don't want to do a breaking change of the GC interface. The new state only needs to be visible to the EE but we want it physically near the existing alloc context state for good cache locality. To accomplish this we created a new ee_alloc_context struct which contains an instance of gc_alloc_context within it.
The new ee_alloc_context::combined_limit should be used by fast allocation helpers to determine when to go down the slow path. Most of the time combined_limit has the same value as alloc_limit, but periodically we need to emit an allocation sampling event on an object that is somewhere in the middle of an AC. Using combined_limit rather than alloc_limit as the slow path trigger allows us to keep all the sampling event logic in the slow path.
- removed unnecessary UpdateCombinedLimit() in thread detach
- updated comment for workaround on 96081
- swapped to updating combined_limit inside GcEnumAllocContexts() instead of in RestartEE()
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch from bc70bf5 to 36ecf6dCompareOctober 15, 2024 04:58
@noahfalk
noahfalk merged commit 588bc45 into dotnet:mainOct 16, 2024
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Nov 15, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@noahfalk@jkotas@mikem8361
, '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 ee_alloc_context (NativeAOT) - #104851

Merged
noahfalk merged 5 commits into
dotnet:mainfrom
noahfalk:combined_limit_nativeaot
Oct 16, 2024
Merged

Add ee_alloc_context (NativeAOT)#104851
noahfalk merged 5 commits into
dotnet:mainfrom
noahfalk:combined_limit_nativeaot

Conversation

@noahfalk

@noahfalknoahfalk commented Jul 13, 2024

Copy link
Copy Markdown
Member

This change is some preparatory refactoring for the randomized allocation sampling feature. We need to add more state onto allocation context but we don't want to do a breaking change of the GC interface. The new state only needs to be visible to the EE but we want it physically near the existing alloc context state for good cache locality. To accomplish this we created a new ee_alloc_context struct which contains an instance of gc_alloc_context within it.

The new field ee_alloc_context::combined_limit should be used by fast allocation helpers to determine when to go down the slow path. Most of the time combined_limit has the same value as alloc_limit, but periodically we need to emit an allocation sampling event on an object that is somewhere in the middle of an AC. Using combined_limit rather than alloc_limit as the slow path trigger allows us to keep all the sampling event logic in the slow path.

There is another PR for CoreCLR making the same change: #104849

@jkotas

Copy link
Copy Markdown
Member

In a future PR we will add a field called combined_limit

I think you can add it in this PR. Adding the extra field is going to touch a lot of the same lines as this PR.

@jkotas

Copy link
Copy Markdown
Member

(Also, same comment as #104851 (comment).)

@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch 2 times, most recently from 8d9bb20 to 01933faCompareJuly 14, 2024 07:59
Comment threadsrc/coreclr/nativeaot/Runtime/thread.inl Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/thread.cpp Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/thread.inl Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/gcenv.ee.cpp Outdated
@noahfalk

Copy link
Copy Markdown
MemberAuthor

@jkotas@MichalStrehovsky - I've applied the feedback from the CoreCLR issue to this one as well. Is anything else needed before you can signoff?

@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/coreclr/nativeaot/Runtime/DebugHeader.cpp
@jkotas

jkotas commented Jul 29, 2024

Copy link
Copy Markdown
Member

nativeaot-outerloop (Build windows-x64 Release NativeAOT_Checked timeouts look like infrastructure issues, but they do not go away with reruns. Either the Helix queues are overloaded, or there is a bug that makes the tests run a lot slower.

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me otherwise

Comment threadsrc/coreclr/nativeaot/Runtime/thread.h
Comment threadsrc/coreclr/nativeaot/Runtime/thread.h
@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch from 57dd3f5 to bc70bf5CompareJuly 30, 2024 10:16
@noahfalk

Copy link
Copy Markdown
MemberAuthor

I've updated for the feedback so far. Everything is addressed except NativeAOT SOS which has to be handled out-of-band. Looking at the time I think I may need to call it quits on this for .NET 9 and instead treat it as .NET 10 on a slower cadence. At this point I don't think I have more time available right now to do a staged checkin, revalidate testing after the ongoing changes, and continue to have time in reserve to respond to potential post-checkin issues.

noahfalkand others added 4 commits October 14, 2024 21:43
This change is some preparatory refactoring for the randomized allocation sampling feature. We need to add more state onto allocation context but we don't want to do a breaking change of the GC interface. The new state only needs to be visible to the EE but we want it physically near the existing alloc context state for good cache locality. To accomplish this we created a new ee_alloc_context struct which contains an instance of gc_alloc_context within it.
The new ee_alloc_context::combined_limit should be used by fast allocation helpers to determine when to go down the slow path. Most of the time combined_limit has the same value as alloc_limit, but periodically we need to emit an allocation sampling event on an object that is somewhere in the middle of an AC. Using combined_limit rather than alloc_limit as the slow path trigger allows us to keep all the sampling event logic in the slow path.
- removed unnecessary UpdateCombinedLimit() in thread detach
- updated comment for workaround on 96081
- swapped to updating combined_limit inside GcEnumAllocContexts() instead of in RestartEE()
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch from bc70bf5 to 36ecf6dCompareOctober 15, 2024 04:58
@noahfalk
noahfalk merged commit 588bc45 into dotnet:mainOct 16, 2024
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Nov 15, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@noahfalk@jkotas@mikem8361
, '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 ee_alloc_context (NativeAOT) - #104851

Merged
noahfalk merged 5 commits into
dotnet:mainfrom
noahfalk:combined_limit_nativeaot
Oct 16, 2024
Merged

Add ee_alloc_context (NativeAOT)#104851
noahfalk merged 5 commits into
dotnet:mainfrom
noahfalk:combined_limit_nativeaot

Conversation

@noahfalk

@noahfalknoahfalk commented Jul 13, 2024

Copy link
Copy Markdown
Member

This change is some preparatory refactoring for the randomized allocation sampling feature. We need to add more state onto allocation context but we don't want to do a breaking change of the GC interface. The new state only needs to be visible to the EE but we want it physically near the existing alloc context state for good cache locality. To accomplish this we created a new ee_alloc_context struct which contains an instance of gc_alloc_context within it.

The new field ee_alloc_context::combined_limit should be used by fast allocation helpers to determine when to go down the slow path. Most of the time combined_limit has the same value as alloc_limit, but periodically we need to emit an allocation sampling event on an object that is somewhere in the middle of an AC. Using combined_limit rather than alloc_limit as the slow path trigger allows us to keep all the sampling event logic in the slow path.

There is another PR for CoreCLR making the same change: #104849

@jkotas

Copy link
Copy Markdown
Member

In a future PR we will add a field called combined_limit

I think you can add it in this PR. Adding the extra field is going to touch a lot of the same lines as this PR.

@jkotas

Copy link
Copy Markdown
Member

(Also, same comment as #104851 (comment).)

@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch 2 times, most recently from 8d9bb20 to 01933faCompareJuly 14, 2024 07:59
Comment threadsrc/coreclr/nativeaot/Runtime/thread.inl Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/thread.cpp Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/thread.inl Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/gcenv.ee.cpp Outdated
@noahfalk

Copy link
Copy Markdown
MemberAuthor

@jkotas@MichalStrehovsky - I've applied the feedback from the CoreCLR issue to this one as well. Is anything else needed before you can signoff?

@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/coreclr/nativeaot/Runtime/DebugHeader.cpp
@jkotas

jkotas commented Jul 29, 2024

Copy link
Copy Markdown
Member

nativeaot-outerloop (Build windows-x64 Release NativeAOT_Checked timeouts look like infrastructure issues, but they do not go away with reruns. Either the Helix queues are overloaded, or there is a bug that makes the tests run a lot slower.

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me otherwise

Comment threadsrc/coreclr/nativeaot/Runtime/thread.h
Comment threadsrc/coreclr/nativeaot/Runtime/thread.h
@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch from 57dd3f5 to bc70bf5CompareJuly 30, 2024 10:16
@noahfalk

Copy link
Copy Markdown
MemberAuthor

I've updated for the feedback so far. Everything is addressed except NativeAOT SOS which has to be handled out-of-band. Looking at the time I think I may need to call it quits on this for .NET 9 and instead treat it as .NET 10 on a slower cadence. At this point I don't think I have more time available right now to do a staged checkin, revalidate testing after the ongoing changes, and continue to have time in reserve to respond to potential post-checkin issues.

noahfalkand others added 4 commits October 14, 2024 21:43
This change is some preparatory refactoring for the randomized allocation sampling feature. We need to add more state onto allocation context but we don't want to do a breaking change of the GC interface. The new state only needs to be visible to the EE but we want it physically near the existing alloc context state for good cache locality. To accomplish this we created a new ee_alloc_context struct which contains an instance of gc_alloc_context within it.
The new ee_alloc_context::combined_limit should be used by fast allocation helpers to determine when to go down the slow path. Most of the time combined_limit has the same value as alloc_limit, but periodically we need to emit an allocation sampling event on an object that is somewhere in the middle of an AC. Using combined_limit rather than alloc_limit as the slow path trigger allows us to keep all the sampling event logic in the slow path.
- removed unnecessary UpdateCombinedLimit() in thread detach
- updated comment for workaround on 96081
- swapped to updating combined_limit inside GcEnumAllocContexts() instead of in RestartEE()
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch from bc70bf5 to 36ecf6dCompareOctober 15, 2024 04:58
@noahfalk
noahfalk merged commit 588bc45 into dotnet:mainOct 16, 2024
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Nov 15, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@noahfalk@jkotas@mikem8361
, '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 ee_alloc_context (NativeAOT) - #104851

Merged
noahfalk merged 5 commits into
dotnet:mainfrom
noahfalk:combined_limit_nativeaot
Oct 16, 2024
Merged

Add ee_alloc_context (NativeAOT)#104851
noahfalk merged 5 commits into
dotnet:mainfrom
noahfalk:combined_limit_nativeaot

Conversation

@noahfalk

@noahfalknoahfalk commented Jul 13, 2024

Copy link
Copy Markdown
Member

This change is some preparatory refactoring for the randomized allocation sampling feature. We need to add more state onto allocation context but we don't want to do a breaking change of the GC interface. The new state only needs to be visible to the EE but we want it physically near the existing alloc context state for good cache locality. To accomplish this we created a new ee_alloc_context struct which contains an instance of gc_alloc_context within it.

The new field ee_alloc_context::combined_limit should be used by fast allocation helpers to determine when to go down the slow path. Most of the time combined_limit has the same value as alloc_limit, but periodically we need to emit an allocation sampling event on an object that is somewhere in the middle of an AC. Using combined_limit rather than alloc_limit as the slow path trigger allows us to keep all the sampling event logic in the slow path.

There is another PR for CoreCLR making the same change: #104849

@jkotas

Copy link
Copy Markdown
Member

In a future PR we will add a field called combined_limit

I think you can add it in this PR. Adding the extra field is going to touch a lot of the same lines as this PR.

@jkotas

Copy link
Copy Markdown
Member

(Also, same comment as #104851 (comment).)

@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch 2 times, most recently from 8d9bb20 to 01933faCompareJuly 14, 2024 07:59
Comment threadsrc/coreclr/nativeaot/Runtime/thread.inl Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/thread.cpp Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/thread.inl Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/gcenv.ee.cpp Outdated
@noahfalk

Copy link
Copy Markdown
MemberAuthor

@jkotas@MichalStrehovsky - I've applied the feedback from the CoreCLR issue to this one as well. Is anything else needed before you can signoff?

@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/coreclr/nativeaot/Runtime/DebugHeader.cpp
@jkotas

jkotas commented Jul 29, 2024

Copy link
Copy Markdown
Member

nativeaot-outerloop (Build windows-x64 Release NativeAOT_Checked timeouts look like infrastructure issues, but they do not go away with reruns. Either the Helix queues are overloaded, or there is a bug that makes the tests run a lot slower.

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me otherwise

Comment threadsrc/coreclr/nativeaot/Runtime/thread.h
Comment threadsrc/coreclr/nativeaot/Runtime/thread.h
@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch from 57dd3f5 to bc70bf5CompareJuly 30, 2024 10:16
@noahfalk

Copy link
Copy Markdown
MemberAuthor

I've updated for the feedback so far. Everything is addressed except NativeAOT SOS which has to be handled out-of-band. Looking at the time I think I may need to call it quits on this for .NET 9 and instead treat it as .NET 10 on a slower cadence. At this point I don't think I have more time available right now to do a staged checkin, revalidate testing after the ongoing changes, and continue to have time in reserve to respond to potential post-checkin issues.

noahfalkand others added 4 commits October 14, 2024 21:43
This change is some preparatory refactoring for the randomized allocation sampling feature. We need to add more state onto allocation context but we don't want to do a breaking change of the GC interface. The new state only needs to be visible to the EE but we want it physically near the existing alloc context state for good cache locality. To accomplish this we created a new ee_alloc_context struct which contains an instance of gc_alloc_context within it.
The new ee_alloc_context::combined_limit should be used by fast allocation helpers to determine when to go down the slow path. Most of the time combined_limit has the same value as alloc_limit, but periodically we need to emit an allocation sampling event on an object that is somewhere in the middle of an AC. Using combined_limit rather than alloc_limit as the slow path trigger allows us to keep all the sampling event logic in the slow path.
- removed unnecessary UpdateCombinedLimit() in thread detach
- updated comment for workaround on 96081
- swapped to updating combined_limit inside GcEnumAllocContexts() instead of in RestartEE()
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch from bc70bf5 to 36ecf6dCompareOctober 15, 2024 04:58
@noahfalk
noahfalk merged commit 588bc45 into dotnet:mainOct 16, 2024
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Nov 15, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@noahfalk@jkotas@mikem8361
, '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 ee_alloc_context (NativeAOT) - #104851

Merged
noahfalk merged 5 commits into
dotnet:mainfrom
noahfalk:combined_limit_nativeaot
Oct 16, 2024
Merged

Add ee_alloc_context (NativeAOT)#104851
noahfalk merged 5 commits into
dotnet:mainfrom
noahfalk:combined_limit_nativeaot

Conversation

@noahfalk

@noahfalknoahfalk commented Jul 13, 2024

Copy link
Copy Markdown
Member

This change is some preparatory refactoring for the randomized allocation sampling feature. We need to add more state onto allocation context but we don't want to do a breaking change of the GC interface. The new state only needs to be visible to the EE but we want it physically near the existing alloc context state for good cache locality. To accomplish this we created a new ee_alloc_context struct which contains an instance of gc_alloc_context within it.

The new field ee_alloc_context::combined_limit should be used by fast allocation helpers to determine when to go down the slow path. Most of the time combined_limit has the same value as alloc_limit, but periodically we need to emit an allocation sampling event on an object that is somewhere in the middle of an AC. Using combined_limit rather than alloc_limit as the slow path trigger allows us to keep all the sampling event logic in the slow path.

There is another PR for CoreCLR making the same change: #104849

@jkotas

Copy link
Copy Markdown
Member

In a future PR we will add a field called combined_limit

I think you can add it in this PR. Adding the extra field is going to touch a lot of the same lines as this PR.

@jkotas

Copy link
Copy Markdown
Member

(Also, same comment as #104851 (comment).)

@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch 2 times, most recently from 8d9bb20 to 01933faCompareJuly 14, 2024 07:59
Comment threadsrc/coreclr/nativeaot/Runtime/thread.inl Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/thread.cpp Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/thread.inl Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/gcenv.ee.cpp Outdated
@noahfalk

Copy link
Copy Markdown
MemberAuthor

@jkotas@MichalStrehovsky - I've applied the feedback from the CoreCLR issue to this one as well. Is anything else needed before you can signoff?

@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/coreclr/nativeaot/Runtime/DebugHeader.cpp
@jkotas

jkotas commented Jul 29, 2024

Copy link
Copy Markdown
Member

nativeaot-outerloop (Build windows-x64 Release NativeAOT_Checked timeouts look like infrastructure issues, but they do not go away with reruns. Either the Helix queues are overloaded, or there is a bug that makes the tests run a lot slower.

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me otherwise

Comment threadsrc/coreclr/nativeaot/Runtime/thread.h
Comment threadsrc/coreclr/nativeaot/Runtime/thread.h
@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch from 57dd3f5 to bc70bf5CompareJuly 30, 2024 10:16
@noahfalk

Copy link
Copy Markdown
MemberAuthor

I've updated for the feedback so far. Everything is addressed except NativeAOT SOS which has to be handled out-of-band. Looking at the time I think I may need to call it quits on this for .NET 9 and instead treat it as .NET 10 on a slower cadence. At this point I don't think I have more time available right now to do a staged checkin, revalidate testing after the ongoing changes, and continue to have time in reserve to respond to potential post-checkin issues.

noahfalkand others added 4 commits October 14, 2024 21:43
This change is some preparatory refactoring for the randomized allocation sampling feature. We need to add more state onto allocation context but we don't want to do a breaking change of the GC interface. The new state only needs to be visible to the EE but we want it physically near the existing alloc context state for good cache locality. To accomplish this we created a new ee_alloc_context struct which contains an instance of gc_alloc_context within it.
The new ee_alloc_context::combined_limit should be used by fast allocation helpers to determine when to go down the slow path. Most of the time combined_limit has the same value as alloc_limit, but periodically we need to emit an allocation sampling event on an object that is somewhere in the middle of an AC. Using combined_limit rather than alloc_limit as the slow path trigger allows us to keep all the sampling event logic in the slow path.
- removed unnecessary UpdateCombinedLimit() in thread detach
- updated comment for workaround on 96081
- swapped to updating combined_limit inside GcEnumAllocContexts() instead of in RestartEE()
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch from bc70bf5 to 36ecf6dCompareOctober 15, 2024 04:58
@noahfalk
noahfalk merged commit 588bc45 into dotnet:mainOct 16, 2024
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Nov 15, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@noahfalk@jkotas@mikem8361
, '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 ee_alloc_context (NativeAOT) - #104851

Merged
noahfalk merged 5 commits into
dotnet:mainfrom
noahfalk:combined_limit_nativeaot
Oct 16, 2024
Merged

Add ee_alloc_context (NativeAOT)#104851
noahfalk merged 5 commits into
dotnet:mainfrom
noahfalk:combined_limit_nativeaot

Conversation

@noahfalk

@noahfalknoahfalk commented Jul 13, 2024

Copy link
Copy Markdown
Member

This change is some preparatory refactoring for the randomized allocation sampling feature. We need to add more state onto allocation context but we don't want to do a breaking change of the GC interface. The new state only needs to be visible to the EE but we want it physically near the existing alloc context state for good cache locality. To accomplish this we created a new ee_alloc_context struct which contains an instance of gc_alloc_context within it.

The new field ee_alloc_context::combined_limit should be used by fast allocation helpers to determine when to go down the slow path. Most of the time combined_limit has the same value as alloc_limit, but periodically we need to emit an allocation sampling event on an object that is somewhere in the middle of an AC. Using combined_limit rather than alloc_limit as the slow path trigger allows us to keep all the sampling event logic in the slow path.

There is another PR for CoreCLR making the same change: #104849

@jkotas

Copy link
Copy Markdown
Member

In a future PR we will add a field called combined_limit

I think you can add it in this PR. Adding the extra field is going to touch a lot of the same lines as this PR.

@jkotas

Copy link
Copy Markdown
Member

(Also, same comment as #104851 (comment).)

@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch 2 times, most recently from 8d9bb20 to 01933faCompareJuly 14, 2024 07:59
Comment threadsrc/coreclr/nativeaot/Runtime/thread.inl Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/thread.cpp Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/thread.inl Outdated
Comment threadsrc/coreclr/nativeaot/Runtime/gcenv.ee.cpp Outdated
@noahfalk

Copy link
Copy Markdown
MemberAuthor

@jkotas@MichalStrehovsky - I've applied the feedback from the CoreCLR issue to this one as well. Is anything else needed before you can signoff?

@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/coreclr/nativeaot/Runtime/DebugHeader.cpp
@jkotas

jkotas commented Jul 29, 2024

Copy link
Copy Markdown
Member

nativeaot-outerloop (Build windows-x64 Release NativeAOT_Checked timeouts look like infrastructure issues, but they do not go away with reruns. Either the Helix queues are overloaded, or there is a bug that makes the tests run a lot slower.

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me otherwise

Comment threadsrc/coreclr/nativeaot/Runtime/thread.h
Comment threadsrc/coreclr/nativeaot/Runtime/thread.h
@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch from 57dd3f5 to bc70bf5CompareJuly 30, 2024 10:16
@noahfalk

Copy link
Copy Markdown
MemberAuthor

I've updated for the feedback so far. Everything is addressed except NativeAOT SOS which has to be handled out-of-band. Looking at the time I think I may need to call it quits on this for .NET 9 and instead treat it as .NET 10 on a slower cadence. At this point I don't think I have more time available right now to do a staged checkin, revalidate testing after the ongoing changes, and continue to have time in reserve to respond to potential post-checkin issues.

noahfalkand others added 4 commits October 14, 2024 21:43
This change is some preparatory refactoring for the randomized allocation sampling feature. We need to add more state onto allocation context but we don't want to do a breaking change of the GC interface. The new state only needs to be visible to the EE but we want it physically near the existing alloc context state for good cache locality. To accomplish this we created a new ee_alloc_context struct which contains an instance of gc_alloc_context within it.
The new ee_alloc_context::combined_limit should be used by fast allocation helpers to determine when to go down the slow path. Most of the time combined_limit has the same value as alloc_limit, but periodically we need to emit an allocation sampling event on an object that is somewhere in the middle of an AC. Using combined_limit rather than alloc_limit as the slow path trigger allows us to keep all the sampling event logic in the slow path.
- removed unnecessary UpdateCombinedLimit() in thread detach
- updated comment for workaround on 96081
- swapped to updating combined_limit inside GcEnumAllocContexts() instead of in RestartEE()
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@noahfalk
noahfalkforce-pushed the combined_limit_nativeaot branch from bc70bf5 to 36ecf6dCompareOctober 15, 2024 04:58
@noahfalk
noahfalk merged commit 588bc45 into dotnet:mainOct 16, 2024
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Nov 15, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@noahfalk@jkotas@mikem8361