This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Facilitate tracing from WASM - #5826

Closed
mattrutherford wants to merge 91 commits into
masterfrom
mr-sp-tracing
Closed

Facilitate tracing from WASM#5826
mattrutherford wants to merge 91 commits into
masterfrom
mr-sp-tracing

Conversation

@mattrutherford

@mattrutherfordmattrutherford commented Apr 29, 2020

Copy link
Copy Markdown
Contributor

Add --wasm-tracing CLI flag to enable tracing from WASM.

This must be used in conjunction with --tracing-targets (and optionally --tracing-receiver).

Add 2 new host functions to allow tracing span enter and exit. The tracing API requires span target and name to be const, so it's not possible to create spans directly with the actual target and name; instead all are created with a single pre-defined identifier, with the span's fields containing the actual target and name, which is then patched in the tracing Subscriber in client.

Each span is stored in the TracingProxy along with it's associated guard until a call to exit is received, at which point it's dropped, triggering a span exit call to the tracing Subscriber.

Each host function call can take around 300ns, although only the second call will be included in the measurement. The total cost of a wasm trace that's incorporated into the measurement is potentially around 0.4µs.

@parity-cla-bot

Copy link
Copy Markdown

It looks like @mattrutherford signed our Contributor License Agreement. 👍

Many thanks,

Parity Technologies CLA Bot

@mattrutherfordmattrutherford added the A3-in_progress Pull request is in progress. No review needed at this stage. label Apr 29, 2020
@mattrutherford

mattrutherford commented Apr 29, 2020

Copy link
Copy Markdown
ContributorAuthor

Here are some graphs for the first few minutes of running a dev chain:

Screenshot 2020-04-29 at 14 36 25
Screenshot 2020-04-29 at 14 36 36

@mattrutherfordmattrutherford added A0-please_review Pull request needs code review. and removed A3-in_progress Pull request is in progress. No review needed at this stage. labels May 6, 2020
@mattrutherfordmattrutherford changed the title [WIP] sp-tracing Proxy - to facilitate tracing span creation and exit from WASMProxy to facilitate tracing from WASM environmentMay 6, 2020
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadprimitives/tracing/src/span_dispatch.rs Outdated
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadframe/support/src/wasm_tracing.rs Outdated
Comment threadframe/support/src/wasm_tracing.rs Outdated
Comment threadprimitives/tracing/src/span_dispatch.rs Outdated
@mattrutherford

mattrutherford commented May 7, 2020

Copy link
Copy Markdown
ContributorAuthor

Just updated this PR to use a different way to create tracing spans, rather than rely on a brittle mechanism of pre-registered spans, this way reserves a special span name WASM_TRACE_IDENTIFIER to signal to the subscriber in client::tracing that the actual span name and target should instead be extracted from the spans' associated Fields. While still a compromise, I think that it's a more manageable one - just requiring that we reserve 3 identifiers - one for span name and two more for associated fields.

@tomusdrwtomusdrw left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I don't know that much about how tracing works, but looks good to me if it works :)

Comment threadclient/tracing/src/lib.rs Outdated
@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

I don't know that much about how tracing works, but looks good to me if it works :)

It works and while not as pure from the POV of tracing, I think it's a better solution for substrate at the moment.

@mattrutherfordmattrutherford added the C1-low PR touches the given topic and has a low impact on builders. label Jun 11, 2020

@bkchrbkchr 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.

Last nitpicks, after that we should be okay.

Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Comment threadclient/tracing/src/lib.rs Outdated
@bkchr

Copy link
Copy Markdown
Member

Ty for your work! :)

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

Thanks all for helping get this one done!

Made final check with Polkadot master and should be ready to merge now.

Just reiterating that this runtime will be incompatible with earlier versions of the client due to the new host functions utilised by it. (Client upgrade is critical on runtime upgrade.)

@gavofyork

Copy link
Copy Markdown
Member

hmm... is there no way to make it compatible assuming we're not using the new runtime functions? i can't really merge this any time with our current need to have some degree of release stability and a fairly regular upgrade schedule across two live chains.

@gavofyorkgavofyork added A1-onice and removed A0-please_review Pull request needs code review. labels Jun 16, 2020
@bkchr

Copy link
Copy Markdown
Member

But what is the problem? We just need to make sure we have a node release before applying the runtime upgrade.

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

Just to also clarify that the client is compatible with earlier runtime versions (currently syncing Polkadot CC1 with client based from this branch).

@gavofyork

gavofyork commented Jun 17, 2020

Copy link
Copy Markdown
Member

But what is the problem? We just need to make sure we have a node release before applying the runtime upgrade.

The problem is that we have two production networks with several hundreds of validators between them, as well as a tendency to do runtime upgrades from master branch every day or two. As soon as I merge this, then I won't be able to make a runtime ugrade on Polkadot until everybody has upgraded their nodes, same for Kusama. Requiring validators to upgrade on such a short timespan, or hamstringing myself so that I can't push upgrades from master branch is not something that I want to do outside of a real emergency.

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

@gavofyork Would you agree to splitting this PR into two?

1st stage include the new host functions and related features in client (minus CLI options).

2nd stage at some point in future we can then add the runtime features to make use of them, also adding the CLI parameters to enable it.

This would allow us to give whatever window seems appropriate to allow everyone to upgrade.

@gavofyork

Copy link
Copy Markdown
Member

Perfect.

@gnunicorn

Copy link
Copy Markdown
Contributor

closing because of inactivity.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

C1-lowPR touches the given topic and has a low impact on builders.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants

@mattrutherford@parity-cla-bot@gavofyork@bkchr@NikVolf@gnunicorn@tomusdrw@cecton@kianenigma@paritytech-ci
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} 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
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Facilitate tracing from WASM - #5826

Closed
mattrutherford wants to merge 91 commits into
masterfrom
mr-sp-tracing
Closed

Facilitate tracing from WASM#5826
mattrutherford wants to merge 91 commits into
masterfrom
mr-sp-tracing

Conversation

@mattrutherford

@mattrutherfordmattrutherford commented Apr 29, 2020

Copy link
Copy Markdown
Contributor

Add --wasm-tracing CLI flag to enable tracing from WASM.

This must be used in conjunction with --tracing-targets (and optionally --tracing-receiver).

Add 2 new host functions to allow tracing span enter and exit. The tracing API requires span target and name to be const, so it's not possible to create spans directly with the actual target and name; instead all are created with a single pre-defined identifier, with the span's fields containing the actual target and name, which is then patched in the tracing Subscriber in client.

Each span is stored in the TracingProxy along with it's associated guard until a call to exit is received, at which point it's dropped, triggering a span exit call to the tracing Subscriber.

Each host function call can take around 300ns, although only the second call will be included in the measurement. The total cost of a wasm trace that's incorporated into the measurement is potentially around 0.4µs.

@parity-cla-bot

Copy link
Copy Markdown

It looks like @mattrutherford signed our Contributor License Agreement. 👍

Many thanks,

Parity Technologies CLA Bot

@mattrutherfordmattrutherford added the A3-in_progress Pull request is in progress. No review needed at this stage. label Apr 29, 2020
@mattrutherford

mattrutherford commented Apr 29, 2020

Copy link
Copy Markdown
ContributorAuthor

Here are some graphs for the first few minutes of running a dev chain:

Screenshot 2020-04-29 at 14 36 25
Screenshot 2020-04-29 at 14 36 36

@mattrutherfordmattrutherford added A0-please_review Pull request needs code review. and removed A3-in_progress Pull request is in progress. No review needed at this stage. labels May 6, 2020
@mattrutherfordmattrutherford changed the title [WIP] sp-tracing Proxy - to facilitate tracing span creation and exit from WASMProxy to facilitate tracing from WASM environmentMay 6, 2020
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadprimitives/tracing/src/span_dispatch.rs Outdated
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadframe/support/src/wasm_tracing.rs Outdated
Comment threadframe/support/src/wasm_tracing.rs Outdated
Comment threadprimitives/tracing/src/span_dispatch.rs Outdated
@mattrutherford

mattrutherford commented May 7, 2020

Copy link
Copy Markdown
ContributorAuthor

Just updated this PR to use a different way to create tracing spans, rather than rely on a brittle mechanism of pre-registered spans, this way reserves a special span name WASM_TRACE_IDENTIFIER to signal to the subscriber in client::tracing that the actual span name and target should instead be extracted from the spans' associated Fields. While still a compromise, I think that it's a more manageable one - just requiring that we reserve 3 identifiers - one for span name and two more for associated fields.

@tomusdrwtomusdrw left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I don't know that much about how tracing works, but looks good to me if it works :)

Comment threadclient/tracing/src/lib.rs Outdated
@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

I don't know that much about how tracing works, but looks good to me if it works :)

It works and while not as pure from the POV of tracing, I think it's a better solution for substrate at the moment.

@mattrutherfordmattrutherford added the C1-low PR touches the given topic and has a low impact on builders. label Jun 11, 2020

@bkchrbkchr 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.

Last nitpicks, after that we should be okay.

Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Comment threadclient/tracing/src/lib.rs Outdated
@bkchr

Copy link
Copy Markdown
Member

Ty for your work! :)

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

Thanks all for helping get this one done!

Made final check with Polkadot master and should be ready to merge now.

Just reiterating that this runtime will be incompatible with earlier versions of the client due to the new host functions utilised by it. (Client upgrade is critical on runtime upgrade.)

@gavofyork

Copy link
Copy Markdown
Member

hmm... is there no way to make it compatible assuming we're not using the new runtime functions? i can't really merge this any time with our current need to have some degree of release stability and a fairly regular upgrade schedule across two live chains.

@gavofyorkgavofyork added A1-onice and removed A0-please_review Pull request needs code review. labels Jun 16, 2020
@bkchr

Copy link
Copy Markdown
Member

But what is the problem? We just need to make sure we have a node release before applying the runtime upgrade.

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

Just to also clarify that the client is compatible with earlier runtime versions (currently syncing Polkadot CC1 with client based from this branch).

@gavofyork

gavofyork commented Jun 17, 2020

Copy link
Copy Markdown
Member

But what is the problem? We just need to make sure we have a node release before applying the runtime upgrade.

The problem is that we have two production networks with several hundreds of validators between them, as well as a tendency to do runtime upgrades from master branch every day or two. As soon as I merge this, then I won't be able to make a runtime ugrade on Polkadot until everybody has upgraded their nodes, same for Kusama. Requiring validators to upgrade on such a short timespan, or hamstringing myself so that I can't push upgrades from master branch is not something that I want to do outside of a real emergency.

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

@gavofyork Would you agree to splitting this PR into two?

1st stage include the new host functions and related features in client (minus CLI options).

2nd stage at some point in future we can then add the runtime features to make use of them, also adding the CLI parameters to enable it.

This would allow us to give whatever window seems appropriate to allow everyone to upgrade.

@gavofyork

Copy link
Copy Markdown
Member

Perfect.

@gnunicorn

Copy link
Copy Markdown
Contributor

closing because of inactivity.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

C1-lowPR touches the given topic and has a low impact on builders.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants

@mattrutherford@parity-cla-bot@gavofyork@bkchr@NikVolf@gnunicorn@tomusdrw@cecton@kianenigma@paritytech-ci
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Facilitate tracing from WASM - #5826

Closed
mattrutherford wants to merge 91 commits into
masterfrom
mr-sp-tracing
Closed

Facilitate tracing from WASM#5826
mattrutherford wants to merge 91 commits into
masterfrom
mr-sp-tracing

Conversation

@mattrutherford

@mattrutherfordmattrutherford commented Apr 29, 2020

Copy link
Copy Markdown
Contributor

Add --wasm-tracing CLI flag to enable tracing from WASM.

This must be used in conjunction with --tracing-targets (and optionally --tracing-receiver).

Add 2 new host functions to allow tracing span enter and exit. The tracing API requires span target and name to be const, so it's not possible to create spans directly with the actual target and name; instead all are created with a single pre-defined identifier, with the span's fields containing the actual target and name, which is then patched in the tracing Subscriber in client.

Each span is stored in the TracingProxy along with it's associated guard until a call to exit is received, at which point it's dropped, triggering a span exit call to the tracing Subscriber.

Each host function call can take around 300ns, although only the second call will be included in the measurement. The total cost of a wasm trace that's incorporated into the measurement is potentially around 0.4µs.

@parity-cla-bot

Copy link
Copy Markdown

It looks like @mattrutherford signed our Contributor License Agreement. 👍

Many thanks,

Parity Technologies CLA Bot

@mattrutherfordmattrutherford added the A3-in_progress Pull request is in progress. No review needed at this stage. label Apr 29, 2020
@mattrutherford

mattrutherford commented Apr 29, 2020

Copy link
Copy Markdown
ContributorAuthor

Here are some graphs for the first few minutes of running a dev chain:

Screenshot 2020-04-29 at 14 36 25
Screenshot 2020-04-29 at 14 36 36

@mattrutherfordmattrutherford added A0-please_review Pull request needs code review. and removed A3-in_progress Pull request is in progress. No review needed at this stage. labels May 6, 2020
@mattrutherfordmattrutherford changed the title [WIP] sp-tracing Proxy - to facilitate tracing span creation and exit from WASMProxy to facilitate tracing from WASM environmentMay 6, 2020
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadprimitives/tracing/src/span_dispatch.rs Outdated
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadframe/support/src/wasm_tracing.rs Outdated
Comment threadframe/support/src/wasm_tracing.rs Outdated
Comment threadprimitives/tracing/src/span_dispatch.rs Outdated
@mattrutherford

mattrutherford commented May 7, 2020

Copy link
Copy Markdown
ContributorAuthor

Just updated this PR to use a different way to create tracing spans, rather than rely on a brittle mechanism of pre-registered spans, this way reserves a special span name WASM_TRACE_IDENTIFIER to signal to the subscriber in client::tracing that the actual span name and target should instead be extracted from the spans' associated Fields. While still a compromise, I think that it's a more manageable one - just requiring that we reserve 3 identifiers - one for span name and two more for associated fields.

@tomusdrwtomusdrw left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I don't know that much about how tracing works, but looks good to me if it works :)

Comment threadclient/tracing/src/lib.rs Outdated
@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

I don't know that much about how tracing works, but looks good to me if it works :)

It works and while not as pure from the POV of tracing, I think it's a better solution for substrate at the moment.

@mattrutherfordmattrutherford added the C1-low PR touches the given topic and has a low impact on builders. label Jun 11, 2020

@bkchrbkchr 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.

Last nitpicks, after that we should be okay.

Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Comment threadclient/tracing/src/lib.rs Outdated
@bkchr

Copy link
Copy Markdown
Member

Ty for your work! :)

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

Thanks all for helping get this one done!

Made final check with Polkadot master and should be ready to merge now.

Just reiterating that this runtime will be incompatible with earlier versions of the client due to the new host functions utilised by it. (Client upgrade is critical on runtime upgrade.)

@gavofyork

Copy link
Copy Markdown
Member

hmm... is there no way to make it compatible assuming we're not using the new runtime functions? i can't really merge this any time with our current need to have some degree of release stability and a fairly regular upgrade schedule across two live chains.

@gavofyorkgavofyork added A1-onice and removed A0-please_review Pull request needs code review. labels Jun 16, 2020
@bkchr

Copy link
Copy Markdown
Member

But what is the problem? We just need to make sure we have a node release before applying the runtime upgrade.

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

Just to also clarify that the client is compatible with earlier runtime versions (currently syncing Polkadot CC1 with client based from this branch).

@gavofyork

gavofyork commented Jun 17, 2020

Copy link
Copy Markdown
Member

But what is the problem? We just need to make sure we have a node release before applying the runtime upgrade.

The problem is that we have two production networks with several hundreds of validators between them, as well as a tendency to do runtime upgrades from master branch every day or two. As soon as I merge this, then I won't be able to make a runtime ugrade on Polkadot until everybody has upgraded their nodes, same for Kusama. Requiring validators to upgrade on such a short timespan, or hamstringing myself so that I can't push upgrades from master branch is not something that I want to do outside of a real emergency.

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

@gavofyork Would you agree to splitting this PR into two?

1st stage include the new host functions and related features in client (minus CLI options).

2nd stage at some point in future we can then add the runtime features to make use of them, also adding the CLI parameters to enable it.

This would allow us to give whatever window seems appropriate to allow everyone to upgrade.

@gavofyork

Copy link
Copy Markdown
Member

Perfect.

@gnunicorn

Copy link
Copy Markdown
Contributor

closing because of inactivity.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

C1-lowPR touches the given topic and has a low impact on builders.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants

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

Facilitate tracing from WASM - #5826

Closed
mattrutherford wants to merge 91 commits into
masterfrom
mr-sp-tracing
Closed

Facilitate tracing from WASM#5826
mattrutherford wants to merge 91 commits into
masterfrom
mr-sp-tracing

Conversation

@mattrutherford

@mattrutherfordmattrutherford commented Apr 29, 2020

Copy link
Copy Markdown
Contributor

Add --wasm-tracing CLI flag to enable tracing from WASM.

This must be used in conjunction with --tracing-targets (and optionally --tracing-receiver).

Add 2 new host functions to allow tracing span enter and exit. The tracing API requires span target and name to be const, so it's not possible to create spans directly with the actual target and name; instead all are created with a single pre-defined identifier, with the span's fields containing the actual target and name, which is then patched in the tracing Subscriber in client.

Each span is stored in the TracingProxy along with it's associated guard until a call to exit is received, at which point it's dropped, triggering a span exit call to the tracing Subscriber.

Each host function call can take around 300ns, although only the second call will be included in the measurement. The total cost of a wasm trace that's incorporated into the measurement is potentially around 0.4µs.

@parity-cla-bot

Copy link
Copy Markdown

It looks like @mattrutherford signed our Contributor License Agreement. 👍

Many thanks,

Parity Technologies CLA Bot

@mattrutherfordmattrutherford added the A3-in_progress Pull request is in progress. No review needed at this stage. label Apr 29, 2020
@mattrutherford

mattrutherford commented Apr 29, 2020

Copy link
Copy Markdown
ContributorAuthor

Here are some graphs for the first few minutes of running a dev chain:

Screenshot 2020-04-29 at 14 36 25
Screenshot 2020-04-29 at 14 36 36

@mattrutherfordmattrutherford added A0-please_review Pull request needs code review. and removed A3-in_progress Pull request is in progress. No review needed at this stage. labels May 6, 2020
@mattrutherfordmattrutherford changed the title [WIP] sp-tracing Proxy - to facilitate tracing span creation and exit from WASMProxy to facilitate tracing from WASM environmentMay 6, 2020
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadprimitives/tracing/src/span_dispatch.rs Outdated
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadframe/support/src/wasm_tracing.rs Outdated
Comment threadframe/support/src/wasm_tracing.rs Outdated
Comment threadprimitives/tracing/src/span_dispatch.rs Outdated
@mattrutherford

mattrutherford commented May 7, 2020

Copy link
Copy Markdown
ContributorAuthor

Just updated this PR to use a different way to create tracing spans, rather than rely on a brittle mechanism of pre-registered spans, this way reserves a special span name WASM_TRACE_IDENTIFIER to signal to the subscriber in client::tracing that the actual span name and target should instead be extracted from the spans' associated Fields. While still a compromise, I think that it's a more manageable one - just requiring that we reserve 3 identifiers - one for span name and two more for associated fields.

@tomusdrwtomusdrw left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I don't know that much about how tracing works, but looks good to me if it works :)

Comment threadclient/tracing/src/lib.rs Outdated
@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

I don't know that much about how tracing works, but looks good to me if it works :)

It works and while not as pure from the POV of tracing, I think it's a better solution for substrate at the moment.

@mattrutherfordmattrutherford added the C1-low PR touches the given topic and has a low impact on builders. label Jun 11, 2020

@bkchrbkchr 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.

Last nitpicks, after that we should be okay.

Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Comment threadclient/tracing/src/lib.rs Outdated
@bkchr

Copy link
Copy Markdown
Member

Ty for your work! :)

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

Thanks all for helping get this one done!

Made final check with Polkadot master and should be ready to merge now.

Just reiterating that this runtime will be incompatible with earlier versions of the client due to the new host functions utilised by it. (Client upgrade is critical on runtime upgrade.)

@gavofyork

Copy link
Copy Markdown
Member

hmm... is there no way to make it compatible assuming we're not using the new runtime functions? i can't really merge this any time with our current need to have some degree of release stability and a fairly regular upgrade schedule across two live chains.

@gavofyorkgavofyork added A1-onice and removed A0-please_review Pull request needs code review. labels Jun 16, 2020
@bkchr

Copy link
Copy Markdown
Member

But what is the problem? We just need to make sure we have a node release before applying the runtime upgrade.

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

Just to also clarify that the client is compatible with earlier runtime versions (currently syncing Polkadot CC1 with client based from this branch).

@gavofyork

gavofyork commented Jun 17, 2020

Copy link
Copy Markdown
Member

But what is the problem? We just need to make sure we have a node release before applying the runtime upgrade.

The problem is that we have two production networks with several hundreds of validators between them, as well as a tendency to do runtime upgrades from master branch every day or two. As soon as I merge this, then I won't be able to make a runtime ugrade on Polkadot until everybody has upgraded their nodes, same for Kusama. Requiring validators to upgrade on such a short timespan, or hamstringing myself so that I can't push upgrades from master branch is not something that I want to do outside of a real emergency.

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

@gavofyork Would you agree to splitting this PR into two?

1st stage include the new host functions and related features in client (minus CLI options).

2nd stage at some point in future we can then add the runtime features to make use of them, also adding the CLI parameters to enable it.

This would allow us to give whatever window seems appropriate to allow everyone to upgrade.

@gavofyork

Copy link
Copy Markdown
Member

Perfect.

@gnunicorn

Copy link
Copy Markdown
Contributor

closing because of inactivity.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

C1-lowPR touches the given topic and has a low impact on builders.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants

@mattrutherford@parity-cla-bot@gavofyork@bkchr@NikVolf@gnunicorn@tomusdrw@cecton@kianenigma@paritytech-ci
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } 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
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Facilitate tracing from WASM - #5826

Closed
mattrutherford wants to merge 91 commits into
masterfrom
mr-sp-tracing
Closed

Facilitate tracing from WASM#5826
mattrutherford wants to merge 91 commits into
masterfrom
mr-sp-tracing

Conversation

@mattrutherford

@mattrutherfordmattrutherford commented Apr 29, 2020

Copy link
Copy Markdown
Contributor

Add --wasm-tracing CLI flag to enable tracing from WASM.

This must be used in conjunction with --tracing-targets (and optionally --tracing-receiver).

Add 2 new host functions to allow tracing span enter and exit. The tracing API requires span target and name to be const, so it's not possible to create spans directly with the actual target and name; instead all are created with a single pre-defined identifier, with the span's fields containing the actual target and name, which is then patched in the tracing Subscriber in client.

Each span is stored in the TracingProxy along with it's associated guard until a call to exit is received, at which point it's dropped, triggering a span exit call to the tracing Subscriber.

Each host function call can take around 300ns, although only the second call will be included in the measurement. The total cost of a wasm trace that's incorporated into the measurement is potentially around 0.4µs.

@parity-cla-bot

Copy link
Copy Markdown

It looks like @mattrutherford signed our Contributor License Agreement. 👍

Many thanks,

Parity Technologies CLA Bot

@mattrutherfordmattrutherford added the A3-in_progress Pull request is in progress. No review needed at this stage. label Apr 29, 2020
@mattrutherford

mattrutherford commented Apr 29, 2020

Copy link
Copy Markdown
ContributorAuthor

Here are some graphs for the first few minutes of running a dev chain:

Screenshot 2020-04-29 at 14 36 25
Screenshot 2020-04-29 at 14 36 36

@mattrutherfordmattrutherford added A0-please_review Pull request needs code review. and removed A3-in_progress Pull request is in progress. No review needed at this stage. labels May 6, 2020
@mattrutherfordmattrutherford changed the title [WIP] sp-tracing Proxy - to facilitate tracing span creation and exit from WASMProxy to facilitate tracing from WASM environmentMay 6, 2020
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadprimitives/tracing/src/span_dispatch.rs Outdated
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadframe/support/src/wasm_tracing.rs Outdated
Comment threadframe/support/src/wasm_tracing.rs Outdated
Comment threadprimitives/tracing/src/span_dispatch.rs Outdated
@mattrutherford

mattrutherford commented May 7, 2020

Copy link
Copy Markdown
ContributorAuthor

Just updated this PR to use a different way to create tracing spans, rather than rely on a brittle mechanism of pre-registered spans, this way reserves a special span name WASM_TRACE_IDENTIFIER to signal to the subscriber in client::tracing that the actual span name and target should instead be extracted from the spans' associated Fields. While still a compromise, I think that it's a more manageable one - just requiring that we reserve 3 identifiers - one for span name and two more for associated fields.

@tomusdrwtomusdrw left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I don't know that much about how tracing works, but looks good to me if it works :)

Comment threadclient/tracing/src/lib.rs Outdated
@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

I don't know that much about how tracing works, but looks good to me if it works :)

It works and while not as pure from the POV of tracing, I think it's a better solution for substrate at the moment.

@mattrutherfordmattrutherford added the C1-low PR touches the given topic and has a low impact on builders. label Jun 11, 2020

@bkchrbkchr 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.

Last nitpicks, after that we should be okay.

Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Comment threadclient/tracing/src/lib.rs Outdated
@bkchr

Copy link
Copy Markdown
Member

Ty for your work! :)

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

Thanks all for helping get this one done!

Made final check with Polkadot master and should be ready to merge now.

Just reiterating that this runtime will be incompatible with earlier versions of the client due to the new host functions utilised by it. (Client upgrade is critical on runtime upgrade.)

@gavofyork

Copy link
Copy Markdown
Member

hmm... is there no way to make it compatible assuming we're not using the new runtime functions? i can't really merge this any time with our current need to have some degree of release stability and a fairly regular upgrade schedule across two live chains.

@gavofyorkgavofyork added A1-onice and removed A0-please_review Pull request needs code review. labels Jun 16, 2020
@bkchr

Copy link
Copy Markdown
Member

But what is the problem? We just need to make sure we have a node release before applying the runtime upgrade.

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

Just to also clarify that the client is compatible with earlier runtime versions (currently syncing Polkadot CC1 with client based from this branch).

@gavofyork

gavofyork commented Jun 17, 2020

Copy link
Copy Markdown
Member

But what is the problem? We just need to make sure we have a node release before applying the runtime upgrade.

The problem is that we have two production networks with several hundreds of validators between them, as well as a tendency to do runtime upgrades from master branch every day or two. As soon as I merge this, then I won't be able to make a runtime ugrade on Polkadot until everybody has upgraded their nodes, same for Kusama. Requiring validators to upgrade on such a short timespan, or hamstringing myself so that I can't push upgrades from master branch is not something that I want to do outside of a real emergency.

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

@gavofyork Would you agree to splitting this PR into two?

1st stage include the new host functions and related features in client (minus CLI options).

2nd stage at some point in future we can then add the runtime features to make use of them, also adding the CLI parameters to enable it.

This would allow us to give whatever window seems appropriate to allow everyone to upgrade.

@gavofyork

Copy link
Copy Markdown
Member

Perfect.

@gnunicorn

Copy link
Copy Markdown
Contributor

closing because of inactivity.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

C1-lowPR touches the given topic and has a low impact on builders.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants

@mattrutherford@parity-cla-bot@gavofyork@bkchr@NikVolf@gnunicorn@tomusdrw@cecton@kianenigma@paritytech-ci
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Facilitate tracing from WASM - #5826

Closed
mattrutherford wants to merge 91 commits into
masterfrom
mr-sp-tracing
Closed

Facilitate tracing from WASM#5826
mattrutherford wants to merge 91 commits into
masterfrom
mr-sp-tracing

Conversation

@mattrutherford

@mattrutherfordmattrutherford commented Apr 29, 2020

Copy link
Copy Markdown
Contributor

Add --wasm-tracing CLI flag to enable tracing from WASM.

This must be used in conjunction with --tracing-targets (and optionally --tracing-receiver).

Add 2 new host functions to allow tracing span enter and exit. The tracing API requires span target and name to be const, so it's not possible to create spans directly with the actual target and name; instead all are created with a single pre-defined identifier, with the span's fields containing the actual target and name, which is then patched in the tracing Subscriber in client.

Each span is stored in the TracingProxy along with it's associated guard until a call to exit is received, at which point it's dropped, triggering a span exit call to the tracing Subscriber.

Each host function call can take around 300ns, although only the second call will be included in the measurement. The total cost of a wasm trace that's incorporated into the measurement is potentially around 0.4µs.

@parity-cla-bot

Copy link
Copy Markdown

It looks like @mattrutherford signed our Contributor License Agreement. 👍

Many thanks,

Parity Technologies CLA Bot

@mattrutherfordmattrutherford added the A3-in_progress Pull request is in progress. No review needed at this stage. label Apr 29, 2020
@mattrutherford

mattrutherford commented Apr 29, 2020

Copy link
Copy Markdown
ContributorAuthor

Here are some graphs for the first few minutes of running a dev chain:

Screenshot 2020-04-29 at 14 36 25
Screenshot 2020-04-29 at 14 36 36

@mattrutherfordmattrutherford added A0-please_review Pull request needs code review. and removed A3-in_progress Pull request is in progress. No review needed at this stage. labels May 6, 2020
@mattrutherfordmattrutherford changed the title [WIP] sp-tracing Proxy - to facilitate tracing span creation and exit from WASMProxy to facilitate tracing from WASM environmentMay 6, 2020
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadprimitives/tracing/src/span_dispatch.rs Outdated
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadframe/support/src/wasm_tracing.rs Outdated
Comment threadframe/support/src/wasm_tracing.rs Outdated
Comment threadprimitives/tracing/src/span_dispatch.rs Outdated
@mattrutherford

mattrutherford commented May 7, 2020

Copy link
Copy Markdown
ContributorAuthor

Just updated this PR to use a different way to create tracing spans, rather than rely on a brittle mechanism of pre-registered spans, this way reserves a special span name WASM_TRACE_IDENTIFIER to signal to the subscriber in client::tracing that the actual span name and target should instead be extracted from the spans' associated Fields. While still a compromise, I think that it's a more manageable one - just requiring that we reserve 3 identifiers - one for span name and two more for associated fields.

@tomusdrwtomusdrw left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I don't know that much about how tracing works, but looks good to me if it works :)

Comment threadclient/tracing/src/lib.rs Outdated
@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

I don't know that much about how tracing works, but looks good to me if it works :)

It works and while not as pure from the POV of tracing, I think it's a better solution for substrate at the moment.

@mattrutherfordmattrutherford added the C1-low PR touches the given topic and has a low impact on builders. label Jun 11, 2020

@bkchrbkchr 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.

Last nitpicks, after that we should be okay.

Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Comment threadclient/tracing/src/lib.rs Outdated
@bkchr

Copy link
Copy Markdown
Member

Ty for your work! :)

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

Thanks all for helping get this one done!

Made final check with Polkadot master and should be ready to merge now.

Just reiterating that this runtime will be incompatible with earlier versions of the client due to the new host functions utilised by it. (Client upgrade is critical on runtime upgrade.)

@gavofyork

Copy link
Copy Markdown
Member

hmm... is there no way to make it compatible assuming we're not using the new runtime functions? i can't really merge this any time with our current need to have some degree of release stability and a fairly regular upgrade schedule across two live chains.

@gavofyorkgavofyork added A1-onice and removed A0-please_review Pull request needs code review. labels Jun 16, 2020
@bkchr

Copy link
Copy Markdown
Member

But what is the problem? We just need to make sure we have a node release before applying the runtime upgrade.

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

Just to also clarify that the client is compatible with earlier runtime versions (currently syncing Polkadot CC1 with client based from this branch).

@gavofyork

gavofyork commented Jun 17, 2020

Copy link
Copy Markdown
Member

But what is the problem? We just need to make sure we have a node release before applying the runtime upgrade.

The problem is that we have two production networks with several hundreds of validators between them, as well as a tendency to do runtime upgrades from master branch every day or two. As soon as I merge this, then I won't be able to make a runtime ugrade on Polkadot until everybody has upgraded their nodes, same for Kusama. Requiring validators to upgrade on such a short timespan, or hamstringing myself so that I can't push upgrades from master branch is not something that I want to do outside of a real emergency.

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

@gavofyork Would you agree to splitting this PR into two?

1st stage include the new host functions and related features in client (minus CLI options).

2nd stage at some point in future we can then add the runtime features to make use of them, also adding the CLI parameters to enable it.

This would allow us to give whatever window seems appropriate to allow everyone to upgrade.

@gavofyork

Copy link
Copy Markdown
Member

Perfect.

@gnunicorn

Copy link
Copy Markdown
Contributor

closing because of inactivity.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

C1-lowPR touches the given topic and has a low impact on builders.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants

@mattrutherford@parity-cla-bot@gavofyork@bkchr@NikVolf@gnunicorn@tomusdrw@cecton@kianenigma@paritytech-ci
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Facilitate tracing from WASM - #5826

Closed
mattrutherford wants to merge 91 commits into
masterfrom
mr-sp-tracing
Closed

Facilitate tracing from WASM#5826
mattrutherford wants to merge 91 commits into
masterfrom
mr-sp-tracing

Conversation

@mattrutherford

@mattrutherfordmattrutherford commented Apr 29, 2020

Copy link
Copy Markdown
Contributor

Add --wasm-tracing CLI flag to enable tracing from WASM.

This must be used in conjunction with --tracing-targets (and optionally --tracing-receiver).

Add 2 new host functions to allow tracing span enter and exit. The tracing API requires span target and name to be const, so it's not possible to create spans directly with the actual target and name; instead all are created with a single pre-defined identifier, with the span's fields containing the actual target and name, which is then patched in the tracing Subscriber in client.

Each span is stored in the TracingProxy along with it's associated guard until a call to exit is received, at which point it's dropped, triggering a span exit call to the tracing Subscriber.

Each host function call can take around 300ns, although only the second call will be included in the measurement. The total cost of a wasm trace that's incorporated into the measurement is potentially around 0.4µs.

@parity-cla-bot

Copy link
Copy Markdown

It looks like @mattrutherford signed our Contributor License Agreement. 👍

Many thanks,

Parity Technologies CLA Bot

@mattrutherfordmattrutherford added the A3-in_progress Pull request is in progress. No review needed at this stage. label Apr 29, 2020
@mattrutherford

mattrutherford commented Apr 29, 2020

Copy link
Copy Markdown
ContributorAuthor

Here are some graphs for the first few minutes of running a dev chain:

Screenshot 2020-04-29 at 14 36 25
Screenshot 2020-04-29 at 14 36 36

@mattrutherfordmattrutherford added A0-please_review Pull request needs code review. and removed A3-in_progress Pull request is in progress. No review needed at this stage. labels May 6, 2020
@mattrutherfordmattrutherford changed the title [WIP] sp-tracing Proxy - to facilitate tracing span creation and exit from WASMProxy to facilitate tracing from WASM environmentMay 6, 2020
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadprimitives/tracing/src/span_dispatch.rs Outdated
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadframe/support/src/wasm_tracing.rs Outdated
Comment threadframe/support/src/wasm_tracing.rs Outdated
Comment threadprimitives/tracing/src/span_dispatch.rs Outdated
@mattrutherford

mattrutherford commented May 7, 2020

Copy link
Copy Markdown
ContributorAuthor

Just updated this PR to use a different way to create tracing spans, rather than rely on a brittle mechanism of pre-registered spans, this way reserves a special span name WASM_TRACE_IDENTIFIER to signal to the subscriber in client::tracing that the actual span name and target should instead be extracted from the spans' associated Fields. While still a compromise, I think that it's a more manageable one - just requiring that we reserve 3 identifiers - one for span name and two more for associated fields.

@tomusdrwtomusdrw left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I don't know that much about how tracing works, but looks good to me if it works :)

Comment threadclient/tracing/src/lib.rs Outdated
@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

I don't know that much about how tracing works, but looks good to me if it works :)

It works and while not as pure from the POV of tracing, I think it's a better solution for substrate at the moment.

@mattrutherfordmattrutherford added the C1-low PR touches the given topic and has a low impact on builders. label Jun 11, 2020

@bkchrbkchr 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.

Last nitpicks, after that we should be okay.

Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Comment threadclient/tracing/src/lib.rs Outdated
@bkchr

Copy link
Copy Markdown
Member

Ty for your work! :)

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

Thanks all for helping get this one done!

Made final check with Polkadot master and should be ready to merge now.

Just reiterating that this runtime will be incompatible with earlier versions of the client due to the new host functions utilised by it. (Client upgrade is critical on runtime upgrade.)

@gavofyork

Copy link
Copy Markdown
Member

hmm... is there no way to make it compatible assuming we're not using the new runtime functions? i can't really merge this any time with our current need to have some degree of release stability and a fairly regular upgrade schedule across two live chains.

@gavofyorkgavofyork added A1-onice and removed A0-please_review Pull request needs code review. labels Jun 16, 2020
@bkchr

Copy link
Copy Markdown
Member

But what is the problem? We just need to make sure we have a node release before applying the runtime upgrade.

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

Just to also clarify that the client is compatible with earlier runtime versions (currently syncing Polkadot CC1 with client based from this branch).

@gavofyork

gavofyork commented Jun 17, 2020

Copy link
Copy Markdown
Member

But what is the problem? We just need to make sure we have a node release before applying the runtime upgrade.

The problem is that we have two production networks with several hundreds of validators between them, as well as a tendency to do runtime upgrades from master branch every day or two. As soon as I merge this, then I won't be able to make a runtime ugrade on Polkadot until everybody has upgraded their nodes, same for Kusama. Requiring validators to upgrade on such a short timespan, or hamstringing myself so that I can't push upgrades from master branch is not something that I want to do outside of a real emergency.

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

@gavofyork Would you agree to splitting this PR into two?

1st stage include the new host functions and related features in client (minus CLI options).

2nd stage at some point in future we can then add the runtime features to make use of them, also adding the CLI parameters to enable it.

This would allow us to give whatever window seems appropriate to allow everyone to upgrade.

@gavofyork

Copy link
Copy Markdown
Member

Perfect.

@gnunicorn

Copy link
Copy Markdown
Contributor

closing because of inactivity.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

C1-lowPR touches the given topic and has a low impact on builders.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants

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

Facilitate tracing from WASM - #5826

Closed
mattrutherford wants to merge 91 commits into
masterfrom
mr-sp-tracing
Closed

Facilitate tracing from WASM#5826
mattrutherford wants to merge 91 commits into
masterfrom
mr-sp-tracing

Conversation

@mattrutherford

@mattrutherfordmattrutherford commented Apr 29, 2020

Copy link
Copy Markdown
Contributor

Add --wasm-tracing CLI flag to enable tracing from WASM.

This must be used in conjunction with --tracing-targets (and optionally --tracing-receiver).

Add 2 new host functions to allow tracing span enter and exit. The tracing API requires span target and name to be const, so it's not possible to create spans directly with the actual target and name; instead all are created with a single pre-defined identifier, with the span's fields containing the actual target and name, which is then patched in the tracing Subscriber in client.

Each span is stored in the TracingProxy along with it's associated guard until a call to exit is received, at which point it's dropped, triggering a span exit call to the tracing Subscriber.

Each host function call can take around 300ns, although only the second call will be included in the measurement. The total cost of a wasm trace that's incorporated into the measurement is potentially around 0.4µs.

@parity-cla-bot

Copy link
Copy Markdown

It looks like @mattrutherford signed our Contributor License Agreement. 👍

Many thanks,

Parity Technologies CLA Bot

@mattrutherfordmattrutherford added the A3-in_progress Pull request is in progress. No review needed at this stage. label Apr 29, 2020
@mattrutherford

mattrutherford commented Apr 29, 2020

Copy link
Copy Markdown
ContributorAuthor

Here are some graphs for the first few minutes of running a dev chain:

Screenshot 2020-04-29 at 14 36 25
Screenshot 2020-04-29 at 14 36 36

@mattrutherfordmattrutherford added A0-please_review Pull request needs code review. and removed A3-in_progress Pull request is in progress. No review needed at this stage. labels May 6, 2020
@mattrutherfordmattrutherford changed the title [WIP] sp-tracing Proxy - to facilitate tracing span creation and exit from WASMProxy to facilitate tracing from WASM environmentMay 6, 2020
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadprimitives/tracing/src/span_dispatch.rs Outdated
Comment threadprimitives/tracing/src/proxy.rs Outdated
Comment threadframe/support/src/wasm_tracing.rs Outdated
Comment threadframe/support/src/wasm_tracing.rs Outdated
Comment threadprimitives/tracing/src/span_dispatch.rs Outdated
@mattrutherford

mattrutherford commented May 7, 2020

Copy link
Copy Markdown
ContributorAuthor

Just updated this PR to use a different way to create tracing spans, rather than rely on a brittle mechanism of pre-registered spans, this way reserves a special span name WASM_TRACE_IDENTIFIER to signal to the subscriber in client::tracing that the actual span name and target should instead be extracted from the spans' associated Fields. While still a compromise, I think that it's a more manageable one - just requiring that we reserve 3 identifiers - one for span name and two more for associated fields.

@tomusdrwtomusdrw left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I don't know that much about how tracing works, but looks good to me if it works :)

Comment threadclient/tracing/src/lib.rs Outdated
@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

I don't know that much about how tracing works, but looks good to me if it works :)

It works and while not as pure from the POV of tracing, I think it's a better solution for substrate at the moment.

@mattrutherfordmattrutherford added the C1-low PR touches the given topic and has a low impact on builders. label Jun 11, 2020

@bkchrbkchr 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.

Last nitpicks, after that we should be okay.

Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs
Comment threadclient/tracing/src/lib.rs Outdated
Comment threadclient/tracing/src/lib.rs Outdated
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Comment threadclient/tracing/src/lib.rs Outdated
@bkchr

Copy link
Copy Markdown
Member

Ty for your work! :)

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

Thanks all for helping get this one done!

Made final check with Polkadot master and should be ready to merge now.

Just reiterating that this runtime will be incompatible with earlier versions of the client due to the new host functions utilised by it. (Client upgrade is critical on runtime upgrade.)

@gavofyork

Copy link
Copy Markdown
Member

hmm... is there no way to make it compatible assuming we're not using the new runtime functions? i can't really merge this any time with our current need to have some degree of release stability and a fairly regular upgrade schedule across two live chains.

@gavofyorkgavofyork added A1-onice and removed A0-please_review Pull request needs code review. labels Jun 16, 2020
@bkchr

Copy link
Copy Markdown
Member

But what is the problem? We just need to make sure we have a node release before applying the runtime upgrade.

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

Just to also clarify that the client is compatible with earlier runtime versions (currently syncing Polkadot CC1 with client based from this branch).

@gavofyork

gavofyork commented Jun 17, 2020

Copy link
Copy Markdown
Member

But what is the problem? We just need to make sure we have a node release before applying the runtime upgrade.

The problem is that we have two production networks with several hundreds of validators between them, as well as a tendency to do runtime upgrades from master branch every day or two. As soon as I merge this, then I won't be able to make a runtime ugrade on Polkadot until everybody has upgraded their nodes, same for Kusama. Requiring validators to upgrade on such a short timespan, or hamstringing myself so that I can't push upgrades from master branch is not something that I want to do outside of a real emergency.

@mattrutherford

Copy link
Copy Markdown
ContributorAuthor

@gavofyork Would you agree to splitting this PR into two?

1st stage include the new host functions and related features in client (minus CLI options).

2nd stage at some point in future we can then add the runtime features to make use of them, also adding the CLI parameters to enable it.

This would allow us to give whatever window seems appropriate to allow everyone to upgrade.

@gavofyork

Copy link
Copy Markdown
Member

Perfect.

@gnunicorn

Copy link
Copy Markdown
Contributor

closing because of inactivity.

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

C1-lowPR touches the given topic and has a low impact on builders.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants

@mattrutherford@parity-cla-bot@gavofyork@bkchr@NikVolf@gnunicorn@tomusdrw@cecton@kianenigma@paritytech-ci