feat: Forward ports - #49

Merged
wwared merged 5 commits into
plonkfrom
forward_ports_38
Jun 20, 2024
Merged

feat: Forward ports#49
wwared merged 5 commits into
plonkfrom
forward_ports_38

Conversation

@wwared

@wwaredwwared commented Jun 18, 2024

Copy link
Copy Markdown
Contributor

This contributes to #38

This ports the following upstream PRs:

This PR causes a ~20-25% regression to prove_core (+35s for test_prove_epoch_change). See #49 (comment)

This PR reverts some of the upstream changes in 3c9df43, possibly the reason why testnet-v1.0.6 was pulled from upstream. There are follow-up fixes in v1.0.7 and upcoming v1.0.8 dealing with these constraints, and that commit can be reverted once the memory chip constraints are properly updated with the fixes.

Issue #60 was created for tracking a possible minor perf improvement.

Note

This brings us closer to testnet-v1.0.6, which has been pulled from upstream's tags. We are currently slightly ahead of testnet-v1.0.5

@wwaredwwared changed the title Forward ports 38feat: Forward ports 38Jun 18, 2024
Co-authored-by: Ratan Kaliani <ratankaliani@berkeley.edu>
Co-authored-by: Kevin Jue <kjue235@gmail.com>
Co-authored-by: Eugene Rabinovich <eugene@succinct.xyz>
chore: state_mem validity (#871)
chore: constraint selectors when is_real zero (#873)
chore: circuit poseidon2 babybear (#870)
Co-authored-by: John Guibas <jtguibas@gmail.com>
fix: nonce in ed decompress (#874)
fix: unit tests to test nonces (#875)
chore: increase byte lookup channes (#876)
chore: update plonk artifacts (#877)
@wwared
wwaredforce-pushed the forward_ports_38 branch 4 times, most recently from 7faa80c to a97010bCompareJune 19, 2024 21:13
@wwared
wwared marked this pull request as ready for review June 19, 2024 21:14
@wwaredwwared changed the title feat: Forward ports 38feat: Forward portsJun 19, 2024
wwaredand others added 4 commits June 19, 2024 18:32
This commit adds the `nonce` column and respective constraints to all
chips that didn't yet have it, as well as other minor misc changes.
The MemoryProgram chip was modified to only be included in the first
shard. However, the rust out-of-circuit verifier was not updated to
account for this since it still expects the chip to be present in every
shard, and the in-circuit recursive verifier was updated with
constraints that are only valid if the core proof has a single shard.
This commit temporarily comments out these additional checks, but this
should be reverted when the verifier and Memory chip-related fixes are
integrated. This is related to the batch of PRs for issue #38
It might be necessary to revert commit
6aea5dc
after the proper fixes are incorporated.
* fix: Update `sha2` commit
* fix: Update `ed25519-consensus`
* Update `tiny-keccak`
* Update `curve25519-dalek`

@storojs72storojs72 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 have enough expertise to review this as it should be. Hope you will share your experience at one of our programming sessions

@wwaredwwared mentioned this pull request Jun 19, 2024

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

From a performance standpoint, the regression makes this hard to integrate.
From a security standpoint, can we avoid porting the last few commits of succinctlabs/sp1#821 ? That is, can succinctlabs/sp1#853 and its nonce logic (which costs us 20% performance in some stages) be left aside?
/cc @adr1anh

@wwared

wwared commented Jun 20, 2024

Copy link
Copy Markdown
ContributorAuthor

@huitseeker, @adr1anh: I've pushed a branch forward_ports_38_reverts that attempts to revert some specific changes one by one.

Context: Comparing only the prove_core time since that's where the performance regression is. Running LC test test_prove_epoch_change, with SHARD_SIZE=4194304 SHARD_BATCH_SIZE=0.

  • plonk (f1cbdc2): 89.803454692s
  • forward_ports_38 (a0aa59f): 126.396090489s
  • forward_ports_38_reverts (83ae16f): 99.831796899s

There is about ~35s of overhead in this PR. Here's a rough breakdown of the performance gains with each specific revert in sequence:

  • No reverts (a0aa59f): 126.396090489s
  • Revert nonces (2c2d61b): 121.316983633s (-5s)
  • Revert range check columns (6e1f306): 117.123038039s (-4s)
  • Revert NUM_BYTE_LOOKUP_CHANNELS (83ae16f): 99.831796899s (-17s)

Given these results, it doesn't look like the nonce change by itself is the most costly part of the prove_core step, so it's not as simple as reverting that single change to gain the performance back. In fact surprisingly, the performance impact of the nonces and the range check columns combined is not as big as the NUM_BYTE_LOOKUP_CHANNELS change.

There are still other changes in the PR responsible for about ~10s of the overhead that's unaccounted for, but reverting these three changes seem to account for most of the lost performance. However since we don't have too much overhead to spare to meet our performance goals, reverting these might not be enough and requires some more investigation.

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

After discussion with @adr1anh clarifying the need for the nonce fixes, and @wwared 's helpful information on the performance cost breakdown, it's clear that it's a better approach to consider the overall set of security fixes and find the performance elsewhere.

This PR looks excellent (aside from the poor performance, which isn't exactly a fault in this case), so let's merge it in the plonk feature branch and iterate there!

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

Crypto looks good

@wwared
wwared merged commit 317414f into plonkJun 20, 2024
@wwared
wwared deleted the forward_ports_38 branch June 20, 2024 10:37
@wwared
wwared restored the forward_ports_38 branch June 20, 2024 10:38
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@wwared@huitseeker@adr1anh@storojs72@jtguibas@samuelburnham
, '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

feat: Forward ports - #49

Merged
wwared merged 5 commits into
plonkfrom
forward_ports_38
Jun 20, 2024
Merged

feat: Forward ports#49
wwared merged 5 commits into
plonkfrom
forward_ports_38

Conversation

@wwared

@wwaredwwared commented Jun 18, 2024

Copy link
Copy Markdown
Contributor

This contributes to #38

This ports the following upstream PRs:

This PR causes a ~20-25% regression to prove_core (+35s for test_prove_epoch_change). See #49 (comment)

This PR reverts some of the upstream changes in 3c9df43, possibly the reason why testnet-v1.0.6 was pulled from upstream. There are follow-up fixes in v1.0.7 and upcoming v1.0.8 dealing with these constraints, and that commit can be reverted once the memory chip constraints are properly updated with the fixes.

Issue #60 was created for tracking a possible minor perf improvement.

Note

This brings us closer to testnet-v1.0.6, which has been pulled from upstream's tags. We are currently slightly ahead of testnet-v1.0.5

@wwaredwwared changed the title Forward ports 38feat: Forward ports 38Jun 18, 2024
Co-authored-by: Ratan Kaliani <ratankaliani@berkeley.edu>
Co-authored-by: Kevin Jue <kjue235@gmail.com>
Co-authored-by: Eugene Rabinovich <eugene@succinct.xyz>
chore: state_mem validity (#871)
chore: constraint selectors when is_real zero (#873)
chore: circuit poseidon2 babybear (#870)
Co-authored-by: John Guibas <jtguibas@gmail.com>
fix: nonce in ed decompress (#874)
fix: unit tests to test nonces (#875)
chore: increase byte lookup channes (#876)
chore: update plonk artifacts (#877)
@wwared
wwaredforce-pushed the forward_ports_38 branch 4 times, most recently from 7faa80c to a97010bCompareJune 19, 2024 21:13
@wwared
wwared marked this pull request as ready for review June 19, 2024 21:14
@wwaredwwared changed the title feat: Forward ports 38feat: Forward portsJun 19, 2024
wwaredand others added 4 commits June 19, 2024 18:32
This commit adds the `nonce` column and respective constraints to all
chips that didn't yet have it, as well as other minor misc changes.
The MemoryProgram chip was modified to only be included in the first
shard. However, the rust out-of-circuit verifier was not updated to
account for this since it still expects the chip to be present in every
shard, and the in-circuit recursive verifier was updated with
constraints that are only valid if the core proof has a single shard.
This commit temporarily comments out these additional checks, but this
should be reverted when the verifier and Memory chip-related fixes are
integrated. This is related to the batch of PRs for issue #38
It might be necessary to revert commit
6aea5dc
after the proper fixes are incorporated.
* fix: Update `sha2` commit
* fix: Update `ed25519-consensus`
* Update `tiny-keccak`
* Update `curve25519-dalek`

@storojs72storojs72 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 have enough expertise to review this as it should be. Hope you will share your experience at one of our programming sessions

@wwaredwwared mentioned this pull request Jun 19, 2024

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

From a performance standpoint, the regression makes this hard to integrate.
From a security standpoint, can we avoid porting the last few commits of succinctlabs/sp1#821 ? That is, can succinctlabs/sp1#853 and its nonce logic (which costs us 20% performance in some stages) be left aside?
/cc @adr1anh

@wwared

wwared commented Jun 20, 2024

Copy link
Copy Markdown
ContributorAuthor

@huitseeker, @adr1anh: I've pushed a branch forward_ports_38_reverts that attempts to revert some specific changes one by one.

Context: Comparing only the prove_core time since that's where the performance regression is. Running LC test test_prove_epoch_change, with SHARD_SIZE=4194304 SHARD_BATCH_SIZE=0.

  • plonk (f1cbdc2): 89.803454692s
  • forward_ports_38 (a0aa59f): 126.396090489s
  • forward_ports_38_reverts (83ae16f): 99.831796899s

There is about ~35s of overhead in this PR. Here's a rough breakdown of the performance gains with each specific revert in sequence:

  • No reverts (a0aa59f): 126.396090489s
  • Revert nonces (2c2d61b): 121.316983633s (-5s)
  • Revert range check columns (6e1f306): 117.123038039s (-4s)
  • Revert NUM_BYTE_LOOKUP_CHANNELS (83ae16f): 99.831796899s (-17s)

Given these results, it doesn't look like the nonce change by itself is the most costly part of the prove_core step, so it's not as simple as reverting that single change to gain the performance back. In fact surprisingly, the performance impact of the nonces and the range check columns combined is not as big as the NUM_BYTE_LOOKUP_CHANNELS change.

There are still other changes in the PR responsible for about ~10s of the overhead that's unaccounted for, but reverting these three changes seem to account for most of the lost performance. However since we don't have too much overhead to spare to meet our performance goals, reverting these might not be enough and requires some more investigation.

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

After discussion with @adr1anh clarifying the need for the nonce fixes, and @wwared 's helpful information on the performance cost breakdown, it's clear that it's a better approach to consider the overall set of security fixes and find the performance elsewhere.

This PR looks excellent (aside from the poor performance, which isn't exactly a fault in this case), so let's merge it in the plonk feature branch and iterate there!

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

Crypto looks good

@wwared
wwared merged commit 317414f into plonkJun 20, 2024
@wwared
wwared deleted the forward_ports_38 branch June 20, 2024 10:37
@wwared
wwared restored the forward_ports_38 branch June 20, 2024 10:38
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@wwared@huitseeker@adr1anh@storojs72@jtguibas@samuelburnham
, '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

feat: Forward ports - #49

Merged
wwared merged 5 commits into
plonkfrom
forward_ports_38
Jun 20, 2024
Merged

feat: Forward ports#49
wwared merged 5 commits into
plonkfrom
forward_ports_38

Conversation

@wwared

@wwaredwwared commented Jun 18, 2024

Copy link
Copy Markdown
Contributor

This contributes to #38

This ports the following upstream PRs:

This PR causes a ~20-25% regression to prove_core (+35s for test_prove_epoch_change). See #49 (comment)

This PR reverts some of the upstream changes in 3c9df43, possibly the reason why testnet-v1.0.6 was pulled from upstream. There are follow-up fixes in v1.0.7 and upcoming v1.0.8 dealing with these constraints, and that commit can be reverted once the memory chip constraints are properly updated with the fixes.

Issue #60 was created for tracking a possible minor perf improvement.

Note

This brings us closer to testnet-v1.0.6, which has been pulled from upstream's tags. We are currently slightly ahead of testnet-v1.0.5

@wwaredwwared changed the title Forward ports 38feat: Forward ports 38Jun 18, 2024
Co-authored-by: Ratan Kaliani <ratankaliani@berkeley.edu>
Co-authored-by: Kevin Jue <kjue235@gmail.com>
Co-authored-by: Eugene Rabinovich <eugene@succinct.xyz>
chore: state_mem validity (#871)
chore: constraint selectors when is_real zero (#873)
chore: circuit poseidon2 babybear (#870)
Co-authored-by: John Guibas <jtguibas@gmail.com>
fix: nonce in ed decompress (#874)
fix: unit tests to test nonces (#875)
chore: increase byte lookup channes (#876)
chore: update plonk artifacts (#877)
@wwared
wwaredforce-pushed the forward_ports_38 branch 4 times, most recently from 7faa80c to a97010bCompareJune 19, 2024 21:13
@wwared
wwared marked this pull request as ready for review June 19, 2024 21:14
@wwaredwwared changed the title feat: Forward ports 38feat: Forward portsJun 19, 2024
wwaredand others added 4 commits June 19, 2024 18:32
This commit adds the `nonce` column and respective constraints to all
chips that didn't yet have it, as well as other minor misc changes.
The MemoryProgram chip was modified to only be included in the first
shard. However, the rust out-of-circuit verifier was not updated to
account for this since it still expects the chip to be present in every
shard, and the in-circuit recursive verifier was updated with
constraints that are only valid if the core proof has a single shard.
This commit temporarily comments out these additional checks, but this
should be reverted when the verifier and Memory chip-related fixes are
integrated. This is related to the batch of PRs for issue #38
It might be necessary to revert commit
6aea5dc
after the proper fixes are incorporated.
* fix: Update `sha2` commit
* fix: Update `ed25519-consensus`
* Update `tiny-keccak`
* Update `curve25519-dalek`

@storojs72storojs72 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 have enough expertise to review this as it should be. Hope you will share your experience at one of our programming sessions

@wwaredwwared mentioned this pull request Jun 19, 2024

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

From a performance standpoint, the regression makes this hard to integrate.
From a security standpoint, can we avoid porting the last few commits of succinctlabs/sp1#821 ? That is, can succinctlabs/sp1#853 and its nonce logic (which costs us 20% performance in some stages) be left aside?
/cc @adr1anh

@wwared

wwared commented Jun 20, 2024

Copy link
Copy Markdown
ContributorAuthor

@huitseeker, @adr1anh: I've pushed a branch forward_ports_38_reverts that attempts to revert some specific changes one by one.

Context: Comparing only the prove_core time since that's where the performance regression is. Running LC test test_prove_epoch_change, with SHARD_SIZE=4194304 SHARD_BATCH_SIZE=0.

  • plonk (f1cbdc2): 89.803454692s
  • forward_ports_38 (a0aa59f): 126.396090489s
  • forward_ports_38_reverts (83ae16f): 99.831796899s

There is about ~35s of overhead in this PR. Here's a rough breakdown of the performance gains with each specific revert in sequence:

  • No reverts (a0aa59f): 126.396090489s
  • Revert nonces (2c2d61b): 121.316983633s (-5s)
  • Revert range check columns (6e1f306): 117.123038039s (-4s)
  • Revert NUM_BYTE_LOOKUP_CHANNELS (83ae16f): 99.831796899s (-17s)

Given these results, it doesn't look like the nonce change by itself is the most costly part of the prove_core step, so it's not as simple as reverting that single change to gain the performance back. In fact surprisingly, the performance impact of the nonces and the range check columns combined is not as big as the NUM_BYTE_LOOKUP_CHANNELS change.

There are still other changes in the PR responsible for about ~10s of the overhead that's unaccounted for, but reverting these three changes seem to account for most of the lost performance. However since we don't have too much overhead to spare to meet our performance goals, reverting these might not be enough and requires some more investigation.

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

After discussion with @adr1anh clarifying the need for the nonce fixes, and @wwared 's helpful information on the performance cost breakdown, it's clear that it's a better approach to consider the overall set of security fixes and find the performance elsewhere.

This PR looks excellent (aside from the poor performance, which isn't exactly a fault in this case), so let's merge it in the plonk feature branch and iterate there!

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

Crypto looks good

@wwared
wwared merged commit 317414f into plonkJun 20, 2024
@wwared
wwared deleted the forward_ports_38 branch June 20, 2024 10:37
@wwared
wwared restored the forward_ports_38 branch June 20, 2024 10:38
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@wwared@huitseeker@adr1anh@storojs72@jtguibas@samuelburnham
, '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

feat: Forward ports - #49

Merged
wwared merged 5 commits into
plonkfrom
forward_ports_38
Jun 20, 2024
Merged

feat: Forward ports#49
wwared merged 5 commits into
plonkfrom
forward_ports_38

Conversation

@wwared

@wwaredwwared commented Jun 18, 2024

Copy link
Copy Markdown
Contributor

This contributes to #38

This ports the following upstream PRs:

This PR causes a ~20-25% regression to prove_core (+35s for test_prove_epoch_change). See #49 (comment)

This PR reverts some of the upstream changes in 3c9df43, possibly the reason why testnet-v1.0.6 was pulled from upstream. There are follow-up fixes in v1.0.7 and upcoming v1.0.8 dealing with these constraints, and that commit can be reverted once the memory chip constraints are properly updated with the fixes.

Issue #60 was created for tracking a possible minor perf improvement.

Note

This brings us closer to testnet-v1.0.6, which has been pulled from upstream's tags. We are currently slightly ahead of testnet-v1.0.5

@wwaredwwared changed the title Forward ports 38feat: Forward ports 38Jun 18, 2024
Co-authored-by: Ratan Kaliani <ratankaliani@berkeley.edu>
Co-authored-by: Kevin Jue <kjue235@gmail.com>
Co-authored-by: Eugene Rabinovich <eugene@succinct.xyz>
chore: state_mem validity (#871)
chore: constraint selectors when is_real zero (#873)
chore: circuit poseidon2 babybear (#870)
Co-authored-by: John Guibas <jtguibas@gmail.com>
fix: nonce in ed decompress (#874)
fix: unit tests to test nonces (#875)
chore: increase byte lookup channes (#876)
chore: update plonk artifacts (#877)
@wwared
wwaredforce-pushed the forward_ports_38 branch 4 times, most recently from 7faa80c to a97010bCompareJune 19, 2024 21:13
@wwared
wwared marked this pull request as ready for review June 19, 2024 21:14
@wwaredwwared changed the title feat: Forward ports 38feat: Forward portsJun 19, 2024
wwaredand others added 4 commits June 19, 2024 18:32
This commit adds the `nonce` column and respective constraints to all
chips that didn't yet have it, as well as other minor misc changes.
The MemoryProgram chip was modified to only be included in the first
shard. However, the rust out-of-circuit verifier was not updated to
account for this since it still expects the chip to be present in every
shard, and the in-circuit recursive verifier was updated with
constraints that are only valid if the core proof has a single shard.
This commit temporarily comments out these additional checks, but this
should be reverted when the verifier and Memory chip-related fixes are
integrated. This is related to the batch of PRs for issue #38
It might be necessary to revert commit
6aea5dc
after the proper fixes are incorporated.
* fix: Update `sha2` commit
* fix: Update `ed25519-consensus`
* Update `tiny-keccak`
* Update `curve25519-dalek`

@storojs72storojs72 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 have enough expertise to review this as it should be. Hope you will share your experience at one of our programming sessions

@wwaredwwared mentioned this pull request Jun 19, 2024

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

From a performance standpoint, the regression makes this hard to integrate.
From a security standpoint, can we avoid porting the last few commits of succinctlabs/sp1#821 ? That is, can succinctlabs/sp1#853 and its nonce logic (which costs us 20% performance in some stages) be left aside?
/cc @adr1anh

@wwared

wwared commented Jun 20, 2024

Copy link
Copy Markdown
ContributorAuthor

@huitseeker, @adr1anh: I've pushed a branch forward_ports_38_reverts that attempts to revert some specific changes one by one.

Context: Comparing only the prove_core time since that's where the performance regression is. Running LC test test_prove_epoch_change, with SHARD_SIZE=4194304 SHARD_BATCH_SIZE=0.

  • plonk (f1cbdc2): 89.803454692s
  • forward_ports_38 (a0aa59f): 126.396090489s
  • forward_ports_38_reverts (83ae16f): 99.831796899s

There is about ~35s of overhead in this PR. Here's a rough breakdown of the performance gains with each specific revert in sequence:

  • No reverts (a0aa59f): 126.396090489s
  • Revert nonces (2c2d61b): 121.316983633s (-5s)
  • Revert range check columns (6e1f306): 117.123038039s (-4s)
  • Revert NUM_BYTE_LOOKUP_CHANNELS (83ae16f): 99.831796899s (-17s)

Given these results, it doesn't look like the nonce change by itself is the most costly part of the prove_core step, so it's not as simple as reverting that single change to gain the performance back. In fact surprisingly, the performance impact of the nonces and the range check columns combined is not as big as the NUM_BYTE_LOOKUP_CHANNELS change.

There are still other changes in the PR responsible for about ~10s of the overhead that's unaccounted for, but reverting these three changes seem to account for most of the lost performance. However since we don't have too much overhead to spare to meet our performance goals, reverting these might not be enough and requires some more investigation.

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

After discussion with @adr1anh clarifying the need for the nonce fixes, and @wwared 's helpful information on the performance cost breakdown, it's clear that it's a better approach to consider the overall set of security fixes and find the performance elsewhere.

This PR looks excellent (aside from the poor performance, which isn't exactly a fault in this case), so let's merge it in the plonk feature branch and iterate there!

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

Crypto looks good

@wwared
wwared merged commit 317414f into plonkJun 20, 2024
@wwared
wwared deleted the forward_ports_38 branch June 20, 2024 10:37
@wwared
wwared restored the forward_ports_38 branch June 20, 2024 10:38
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@wwared@huitseeker@adr1anh@storojs72@jtguibas@samuelburnham
, '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

feat: Forward ports - #49

Merged
wwared merged 5 commits into
plonkfrom
forward_ports_38
Jun 20, 2024
Merged

feat: Forward ports#49
wwared merged 5 commits into
plonkfrom
forward_ports_38

Conversation

@wwared

@wwaredwwared commented Jun 18, 2024

Copy link
Copy Markdown
Contributor

This contributes to #38

This ports the following upstream PRs:

This PR causes a ~20-25% regression to prove_core (+35s for test_prove_epoch_change). See #49 (comment)

This PR reverts some of the upstream changes in 3c9df43, possibly the reason why testnet-v1.0.6 was pulled from upstream. There are follow-up fixes in v1.0.7 and upcoming v1.0.8 dealing with these constraints, and that commit can be reverted once the memory chip constraints are properly updated with the fixes.

Issue #60 was created for tracking a possible minor perf improvement.

Note

This brings us closer to testnet-v1.0.6, which has been pulled from upstream's tags. We are currently slightly ahead of testnet-v1.0.5

@wwaredwwared changed the title Forward ports 38feat: Forward ports 38Jun 18, 2024
Co-authored-by: Ratan Kaliani <ratankaliani@berkeley.edu>
Co-authored-by: Kevin Jue <kjue235@gmail.com>
Co-authored-by: Eugene Rabinovich <eugene@succinct.xyz>
chore: state_mem validity (#871)
chore: constraint selectors when is_real zero (#873)
chore: circuit poseidon2 babybear (#870)
Co-authored-by: John Guibas <jtguibas@gmail.com>
fix: nonce in ed decompress (#874)
fix: unit tests to test nonces (#875)
chore: increase byte lookup channes (#876)
chore: update plonk artifacts (#877)
@wwared
wwaredforce-pushed the forward_ports_38 branch 4 times, most recently from 7faa80c to a97010bCompareJune 19, 2024 21:13
@wwared
wwared marked this pull request as ready for review June 19, 2024 21:14
@wwaredwwared changed the title feat: Forward ports 38feat: Forward portsJun 19, 2024
wwaredand others added 4 commits June 19, 2024 18:32
This commit adds the `nonce` column and respective constraints to all
chips that didn't yet have it, as well as other minor misc changes.
The MemoryProgram chip was modified to only be included in the first
shard. However, the rust out-of-circuit verifier was not updated to
account for this since it still expects the chip to be present in every
shard, and the in-circuit recursive verifier was updated with
constraints that are only valid if the core proof has a single shard.
This commit temporarily comments out these additional checks, but this
should be reverted when the verifier and Memory chip-related fixes are
integrated. This is related to the batch of PRs for issue #38
It might be necessary to revert commit
6aea5dc
after the proper fixes are incorporated.
* fix: Update `sha2` commit
* fix: Update `ed25519-consensus`
* Update `tiny-keccak`
* Update `curve25519-dalek`

@storojs72storojs72 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 have enough expertise to review this as it should be. Hope you will share your experience at one of our programming sessions

@wwaredwwared mentioned this pull request Jun 19, 2024

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

From a performance standpoint, the regression makes this hard to integrate.
From a security standpoint, can we avoid porting the last few commits of succinctlabs/sp1#821 ? That is, can succinctlabs/sp1#853 and its nonce logic (which costs us 20% performance in some stages) be left aside?
/cc @adr1anh

@wwared

wwared commented Jun 20, 2024

Copy link
Copy Markdown
ContributorAuthor

@huitseeker, @adr1anh: I've pushed a branch forward_ports_38_reverts that attempts to revert some specific changes one by one.

Context: Comparing only the prove_core time since that's where the performance regression is. Running LC test test_prove_epoch_change, with SHARD_SIZE=4194304 SHARD_BATCH_SIZE=0.

  • plonk (f1cbdc2): 89.803454692s
  • forward_ports_38 (a0aa59f): 126.396090489s
  • forward_ports_38_reverts (83ae16f): 99.831796899s

There is about ~35s of overhead in this PR. Here's a rough breakdown of the performance gains with each specific revert in sequence:

  • No reverts (a0aa59f): 126.396090489s
  • Revert nonces (2c2d61b): 121.316983633s (-5s)
  • Revert range check columns (6e1f306): 117.123038039s (-4s)
  • Revert NUM_BYTE_LOOKUP_CHANNELS (83ae16f): 99.831796899s (-17s)

Given these results, it doesn't look like the nonce change by itself is the most costly part of the prove_core step, so it's not as simple as reverting that single change to gain the performance back. In fact surprisingly, the performance impact of the nonces and the range check columns combined is not as big as the NUM_BYTE_LOOKUP_CHANNELS change.

There are still other changes in the PR responsible for about ~10s of the overhead that's unaccounted for, but reverting these three changes seem to account for most of the lost performance. However since we don't have too much overhead to spare to meet our performance goals, reverting these might not be enough and requires some more investigation.

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

After discussion with @adr1anh clarifying the need for the nonce fixes, and @wwared 's helpful information on the performance cost breakdown, it's clear that it's a better approach to consider the overall set of security fixes and find the performance elsewhere.

This PR looks excellent (aside from the poor performance, which isn't exactly a fault in this case), so let's merge it in the plonk feature branch and iterate there!

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

Crypto looks good

@wwared
wwared merged commit 317414f into plonkJun 20, 2024
@wwared
wwared deleted the forward_ports_38 branch June 20, 2024 10:37
@wwared
wwared restored the forward_ports_38 branch June 20, 2024 10:38
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@wwared@huitseeker@adr1anh@storojs72@jtguibas@samuelburnham
, '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

feat: Forward ports - #49

Merged
wwared merged 5 commits into
plonkfrom
forward_ports_38
Jun 20, 2024
Merged

feat: Forward ports#49
wwared merged 5 commits into
plonkfrom
forward_ports_38

Conversation

@wwared

@wwaredwwared commented Jun 18, 2024

Copy link
Copy Markdown
Contributor

This contributes to #38

This ports the following upstream PRs:

This PR causes a ~20-25% regression to prove_core (+35s for test_prove_epoch_change). See #49 (comment)

This PR reverts some of the upstream changes in 3c9df43, possibly the reason why testnet-v1.0.6 was pulled from upstream. There are follow-up fixes in v1.0.7 and upcoming v1.0.8 dealing with these constraints, and that commit can be reverted once the memory chip constraints are properly updated with the fixes.

Issue #60 was created for tracking a possible minor perf improvement.

Note

This brings us closer to testnet-v1.0.6, which has been pulled from upstream's tags. We are currently slightly ahead of testnet-v1.0.5

@wwaredwwared changed the title Forward ports 38feat: Forward ports 38Jun 18, 2024
Co-authored-by: Ratan Kaliani <ratankaliani@berkeley.edu>
Co-authored-by: Kevin Jue <kjue235@gmail.com>
Co-authored-by: Eugene Rabinovich <eugene@succinct.xyz>
chore: state_mem validity (#871)
chore: constraint selectors when is_real zero (#873)
chore: circuit poseidon2 babybear (#870)
Co-authored-by: John Guibas <jtguibas@gmail.com>
fix: nonce in ed decompress (#874)
fix: unit tests to test nonces (#875)
chore: increase byte lookup channes (#876)
chore: update plonk artifacts (#877)
@wwared
wwaredforce-pushed the forward_ports_38 branch 4 times, most recently from 7faa80c to a97010bCompareJune 19, 2024 21:13
@wwared
wwared marked this pull request as ready for review June 19, 2024 21:14
@wwaredwwared changed the title feat: Forward ports 38feat: Forward portsJun 19, 2024
wwaredand others added 4 commits June 19, 2024 18:32
This commit adds the `nonce` column and respective constraints to all
chips that didn't yet have it, as well as other minor misc changes.
The MemoryProgram chip was modified to only be included in the first
shard. However, the rust out-of-circuit verifier was not updated to
account for this since it still expects the chip to be present in every
shard, and the in-circuit recursive verifier was updated with
constraints that are only valid if the core proof has a single shard.
This commit temporarily comments out these additional checks, but this
should be reverted when the verifier and Memory chip-related fixes are
integrated. This is related to the batch of PRs for issue #38
It might be necessary to revert commit
6aea5dc
after the proper fixes are incorporated.
* fix: Update `sha2` commit
* fix: Update `ed25519-consensus`
* Update `tiny-keccak`
* Update `curve25519-dalek`

@storojs72storojs72 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 have enough expertise to review this as it should be. Hope you will share your experience at one of our programming sessions

@wwaredwwared mentioned this pull request Jun 19, 2024

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

From a performance standpoint, the regression makes this hard to integrate.
From a security standpoint, can we avoid porting the last few commits of succinctlabs/sp1#821 ? That is, can succinctlabs/sp1#853 and its nonce logic (which costs us 20% performance in some stages) be left aside?
/cc @adr1anh

@wwared

wwared commented Jun 20, 2024

Copy link
Copy Markdown
ContributorAuthor

@huitseeker, @adr1anh: I've pushed a branch forward_ports_38_reverts that attempts to revert some specific changes one by one.

Context: Comparing only the prove_core time since that's where the performance regression is. Running LC test test_prove_epoch_change, with SHARD_SIZE=4194304 SHARD_BATCH_SIZE=0.

  • plonk (f1cbdc2): 89.803454692s
  • forward_ports_38 (a0aa59f): 126.396090489s
  • forward_ports_38_reverts (83ae16f): 99.831796899s

There is about ~35s of overhead in this PR. Here's a rough breakdown of the performance gains with each specific revert in sequence:

  • No reverts (a0aa59f): 126.396090489s
  • Revert nonces (2c2d61b): 121.316983633s (-5s)
  • Revert range check columns (6e1f306): 117.123038039s (-4s)
  • Revert NUM_BYTE_LOOKUP_CHANNELS (83ae16f): 99.831796899s (-17s)

Given these results, it doesn't look like the nonce change by itself is the most costly part of the prove_core step, so it's not as simple as reverting that single change to gain the performance back. In fact surprisingly, the performance impact of the nonces and the range check columns combined is not as big as the NUM_BYTE_LOOKUP_CHANNELS change.

There are still other changes in the PR responsible for about ~10s of the overhead that's unaccounted for, but reverting these three changes seem to account for most of the lost performance. However since we don't have too much overhead to spare to meet our performance goals, reverting these might not be enough and requires some more investigation.

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

After discussion with @adr1anh clarifying the need for the nonce fixes, and @wwared 's helpful information on the performance cost breakdown, it's clear that it's a better approach to consider the overall set of security fixes and find the performance elsewhere.

This PR looks excellent (aside from the poor performance, which isn't exactly a fault in this case), so let's merge it in the plonk feature branch and iterate there!

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

Crypto looks good

@wwared
wwared merged commit 317414f into plonkJun 20, 2024
@wwared
wwared deleted the forward_ports_38 branch June 20, 2024 10:37
@wwared
wwared restored the forward_ports_38 branch June 20, 2024 10:38
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@wwared@huitseeker@adr1anh@storojs72@jtguibas@samuelburnham
, '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

feat: Forward ports - #49

Merged
wwared merged 5 commits into
plonkfrom
forward_ports_38
Jun 20, 2024
Merged

feat: Forward ports#49
wwared merged 5 commits into
plonkfrom
forward_ports_38

Conversation

@wwared

@wwaredwwared commented Jun 18, 2024

Copy link
Copy Markdown
Contributor

This contributes to #38

This ports the following upstream PRs:

This PR causes a ~20-25% regression to prove_core (+35s for test_prove_epoch_change). See #49 (comment)

This PR reverts some of the upstream changes in 3c9df43, possibly the reason why testnet-v1.0.6 was pulled from upstream. There are follow-up fixes in v1.0.7 and upcoming v1.0.8 dealing with these constraints, and that commit can be reverted once the memory chip constraints are properly updated with the fixes.

Issue #60 was created for tracking a possible minor perf improvement.

Note

This brings us closer to testnet-v1.0.6, which has been pulled from upstream's tags. We are currently slightly ahead of testnet-v1.0.5

@wwaredwwared changed the title Forward ports 38feat: Forward ports 38Jun 18, 2024
Co-authored-by: Ratan Kaliani <ratankaliani@berkeley.edu>
Co-authored-by: Kevin Jue <kjue235@gmail.com>
Co-authored-by: Eugene Rabinovich <eugene@succinct.xyz>
chore: state_mem validity (#871)
chore: constraint selectors when is_real zero (#873)
chore: circuit poseidon2 babybear (#870)
Co-authored-by: John Guibas <jtguibas@gmail.com>
fix: nonce in ed decompress (#874)
fix: unit tests to test nonces (#875)
chore: increase byte lookup channes (#876)
chore: update plonk artifacts (#877)
@wwared
wwaredforce-pushed the forward_ports_38 branch 4 times, most recently from 7faa80c to a97010bCompareJune 19, 2024 21:13
@wwared
wwared marked this pull request as ready for review June 19, 2024 21:14
@wwaredwwared changed the title feat: Forward ports 38feat: Forward portsJun 19, 2024
wwaredand others added 4 commits June 19, 2024 18:32
This commit adds the `nonce` column and respective constraints to all
chips that didn't yet have it, as well as other minor misc changes.
The MemoryProgram chip was modified to only be included in the first
shard. However, the rust out-of-circuit verifier was not updated to
account for this since it still expects the chip to be present in every
shard, and the in-circuit recursive verifier was updated with
constraints that are only valid if the core proof has a single shard.
This commit temporarily comments out these additional checks, but this
should be reverted when the verifier and Memory chip-related fixes are
integrated. This is related to the batch of PRs for issue #38
It might be necessary to revert commit
6aea5dc
after the proper fixes are incorporated.
* fix: Update `sha2` commit
* fix: Update `ed25519-consensus`
* Update `tiny-keccak`
* Update `curve25519-dalek`

@storojs72storojs72 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 have enough expertise to review this as it should be. Hope you will share your experience at one of our programming sessions

@wwaredwwared mentioned this pull request Jun 19, 2024

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

From a performance standpoint, the regression makes this hard to integrate.
From a security standpoint, can we avoid porting the last few commits of succinctlabs/sp1#821 ? That is, can succinctlabs/sp1#853 and its nonce logic (which costs us 20% performance in some stages) be left aside?
/cc @adr1anh

@wwared

wwared commented Jun 20, 2024

Copy link
Copy Markdown
ContributorAuthor

@huitseeker, @adr1anh: I've pushed a branch forward_ports_38_reverts that attempts to revert some specific changes one by one.

Context: Comparing only the prove_core time since that's where the performance regression is. Running LC test test_prove_epoch_change, with SHARD_SIZE=4194304 SHARD_BATCH_SIZE=0.

  • plonk (f1cbdc2): 89.803454692s
  • forward_ports_38 (a0aa59f): 126.396090489s
  • forward_ports_38_reverts (83ae16f): 99.831796899s

There is about ~35s of overhead in this PR. Here's a rough breakdown of the performance gains with each specific revert in sequence:

  • No reverts (a0aa59f): 126.396090489s
  • Revert nonces (2c2d61b): 121.316983633s (-5s)
  • Revert range check columns (6e1f306): 117.123038039s (-4s)
  • Revert NUM_BYTE_LOOKUP_CHANNELS (83ae16f): 99.831796899s (-17s)

Given these results, it doesn't look like the nonce change by itself is the most costly part of the prove_core step, so it's not as simple as reverting that single change to gain the performance back. In fact surprisingly, the performance impact of the nonces and the range check columns combined is not as big as the NUM_BYTE_LOOKUP_CHANNELS change.

There are still other changes in the PR responsible for about ~10s of the overhead that's unaccounted for, but reverting these three changes seem to account for most of the lost performance. However since we don't have too much overhead to spare to meet our performance goals, reverting these might not be enough and requires some more investigation.

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

After discussion with @adr1anh clarifying the need for the nonce fixes, and @wwared 's helpful information on the performance cost breakdown, it's clear that it's a better approach to consider the overall set of security fixes and find the performance elsewhere.

This PR looks excellent (aside from the poor performance, which isn't exactly a fault in this case), so let's merge it in the plonk feature branch and iterate there!

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

Crypto looks good

@wwared
wwared merged commit 317414f into plonkJun 20, 2024
@wwared
wwared deleted the forward_ports_38 branch June 20, 2024 10:37
@wwared
wwared restored the forward_ports_38 branch June 20, 2024 10:38
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@wwared@huitseeker@adr1anh@storojs72@jtguibas@samuelburnham
, '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

feat: Forward ports - #49

Merged
wwared merged 5 commits into
plonkfrom
forward_ports_38
Jun 20, 2024
Merged

feat: Forward ports#49
wwared merged 5 commits into
plonkfrom
forward_ports_38

Conversation

@wwared

@wwaredwwared commented Jun 18, 2024

Copy link
Copy Markdown
Contributor

This contributes to #38

This ports the following upstream PRs:

This PR causes a ~20-25% regression to prove_core (+35s for test_prove_epoch_change). See #49 (comment)

This PR reverts some of the upstream changes in 3c9df43, possibly the reason why testnet-v1.0.6 was pulled from upstream. There are follow-up fixes in v1.0.7 and upcoming v1.0.8 dealing with these constraints, and that commit can be reverted once the memory chip constraints are properly updated with the fixes.

Issue #60 was created for tracking a possible minor perf improvement.

Note

This brings us closer to testnet-v1.0.6, which has been pulled from upstream's tags. We are currently slightly ahead of testnet-v1.0.5

@wwaredwwared changed the title Forward ports 38feat: Forward ports 38Jun 18, 2024
Co-authored-by: Ratan Kaliani <ratankaliani@berkeley.edu>
Co-authored-by: Kevin Jue <kjue235@gmail.com>
Co-authored-by: Eugene Rabinovich <eugene@succinct.xyz>
chore: state_mem validity (#871)
chore: constraint selectors when is_real zero (#873)
chore: circuit poseidon2 babybear (#870)
Co-authored-by: John Guibas <jtguibas@gmail.com>
fix: nonce in ed decompress (#874)
fix: unit tests to test nonces (#875)
chore: increase byte lookup channes (#876)
chore: update plonk artifacts (#877)
@wwared
wwaredforce-pushed the forward_ports_38 branch 4 times, most recently from 7faa80c to a97010bCompareJune 19, 2024 21:13
@wwared
wwared marked this pull request as ready for review June 19, 2024 21:14
@wwaredwwared changed the title feat: Forward ports 38feat: Forward portsJun 19, 2024
wwaredand others added 4 commits June 19, 2024 18:32
This commit adds the `nonce` column and respective constraints to all
chips that didn't yet have it, as well as other minor misc changes.
The MemoryProgram chip was modified to only be included in the first
shard. However, the rust out-of-circuit verifier was not updated to
account for this since it still expects the chip to be present in every
shard, and the in-circuit recursive verifier was updated with
constraints that are only valid if the core proof has a single shard.
This commit temporarily comments out these additional checks, but this
should be reverted when the verifier and Memory chip-related fixes are
integrated. This is related to the batch of PRs for issue #38
It might be necessary to revert commit
6aea5dc
after the proper fixes are incorporated.
* fix: Update `sha2` commit
* fix: Update `ed25519-consensus`
* Update `tiny-keccak`
* Update `curve25519-dalek`

@storojs72storojs72 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 have enough expertise to review this as it should be. Hope you will share your experience at one of our programming sessions

@wwaredwwared mentioned this pull request Jun 19, 2024

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

From a performance standpoint, the regression makes this hard to integrate.
From a security standpoint, can we avoid porting the last few commits of succinctlabs/sp1#821 ? That is, can succinctlabs/sp1#853 and its nonce logic (which costs us 20% performance in some stages) be left aside?
/cc @adr1anh

@wwared

wwared commented Jun 20, 2024

Copy link
Copy Markdown
ContributorAuthor

@huitseeker, @adr1anh: I've pushed a branch forward_ports_38_reverts that attempts to revert some specific changes one by one.

Context: Comparing only the prove_core time since that's where the performance regression is. Running LC test test_prove_epoch_change, with SHARD_SIZE=4194304 SHARD_BATCH_SIZE=0.

  • plonk (f1cbdc2): 89.803454692s
  • forward_ports_38 (a0aa59f): 126.396090489s
  • forward_ports_38_reverts (83ae16f): 99.831796899s

There is about ~35s of overhead in this PR. Here's a rough breakdown of the performance gains with each specific revert in sequence:

  • No reverts (a0aa59f): 126.396090489s
  • Revert nonces (2c2d61b): 121.316983633s (-5s)
  • Revert range check columns (6e1f306): 117.123038039s (-4s)
  • Revert NUM_BYTE_LOOKUP_CHANNELS (83ae16f): 99.831796899s (-17s)

Given these results, it doesn't look like the nonce change by itself is the most costly part of the prove_core step, so it's not as simple as reverting that single change to gain the performance back. In fact surprisingly, the performance impact of the nonces and the range check columns combined is not as big as the NUM_BYTE_LOOKUP_CHANNELS change.

There are still other changes in the PR responsible for about ~10s of the overhead that's unaccounted for, but reverting these three changes seem to account for most of the lost performance. However since we don't have too much overhead to spare to meet our performance goals, reverting these might not be enough and requires some more investigation.

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

After discussion with @adr1anh clarifying the need for the nonce fixes, and @wwared 's helpful information on the performance cost breakdown, it's clear that it's a better approach to consider the overall set of security fixes and find the performance elsewhere.

This PR looks excellent (aside from the poor performance, which isn't exactly a fault in this case), so let's merge it in the plonk feature branch and iterate there!

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

Crypto looks good

@wwared
wwared merged commit 317414f into plonkJun 20, 2024
@wwared
wwared deleted the forward_ports_38 branch June 20, 2024 10:37
@wwared
wwared restored the forward_ports_38 branch June 20, 2024 10:38
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@wwared@huitseeker@adr1anh@storojs72@jtguibas@samuelburnham