Skip to content

Add Ciphersuite Benchmark Tests#781

Merged
adrianosela merged 1 commit intopion:masterfrom
adrianosela:ciphersuite-performance
Jan 21, 2026
Merged

Add Ciphersuite Benchmark Tests#781
adrianosela merged 1 commit intopion:masterfrom
adrianosela:ciphersuite-performance

Conversation

@adrianosela
Copy link
Copy Markdown
Contributor

@adrianosela adrianosela commented Jan 21, 2026

Add Ciphersuite Benchmark Tests

This PR has NO logic changes, only 3 new test files and a README describing how to run benchmark tests.

Adds benchmark tests and benchmarking/profiling documentation for CCM, GCM, and CBC (all in pkg/crypto/ciphersuite package).

I have some small throughput and memory improvements I want to open a PR for, but the changes are small and would be easier to review if all this is already present.

Current Results:

19:52 $ go test -tags=bench -bench=. -benchmem
goos: darwin
goarch: arm64
pkg: github.com/pion/dtls/v3/pkg/crypto/ciphersuite
cpu: Apple M1 Pro
BenchmarkCBCEncrypt/016B-8         	 1432101	       823.3 ns/op	  19.43 MB/s	     912 B/op	      14 allocs/op
BenchmarkCBCEncrypt/064B-8         	 1352626	       891.6 ns/op	  71.78 MB/s	    1056 B/op	      13 allocs/op
BenchmarkCBCEncrypt/256B-8         	  826776	      1262 ns/op	 202.91 MB/s	    2256 B/op	      13 allocs/op
BenchmarkCBCEncrypt/512B-8         	  633306	      1726 ns/op	 296.64 MB/s	    3504 B/op	      13 allocs/op
BenchmarkCBCEncrypt/1KB-8          	  426016	      2652 ns/op	 386.12 MB/s	    5936 B/op	      13 allocs/op
BenchmarkCBCEncrypt/1.4KB-8        	  328288	      3571 ns/op	 420.05 MB/s	    8484 B/op	      13 allocs/op
BenchmarkCBCDecrypt/016B-8         	 2256201	       546.9 ns/op	  29.26 MB/s	     752 B/op	       9 allocs/op
BenchmarkCBCDecrypt/064B-8         	 1855621	       647.3 ns/op	  98.88 MB/s	     800 B/op	       9 allocs/op
BenchmarkCBCDecrypt/256B-8         	 1000000	      1002 ns/op	 255.50 MB/s	    1008 B/op	       9 allocs/op
BenchmarkCBCDecrypt/512B-8         	  892654	      1293 ns/op	 396.07 MB/s	    1296 B/op	       9 allocs/op
BenchmarkCBCDecrypt/1KB-8          	  616560	      1852 ns/op	 552.78 MB/s	    1808 B/op	       9 allocs/op
BenchmarkCBCDecrypt/1.4KB-8        	  476758	      2357 ns/op	 636.39 MB/s	    2448 B/op	       9 allocs/op
BenchmarkCCMEncrypt/016B-8         	 1760246	       680.3 ns/op	  23.52 MB/s	     872 B/op	      13 allocs/op
BenchmarkCCMEncrypt/064B-8         	 1565007	       761.3 ns/op	  84.06 MB/s	    1112 B/op	      13 allocs/op
BenchmarkCCMEncrypt/256B-8         	 1000000	      1093 ns/op	 234.25 MB/s	    2136 B/op	      13 allocs/op
BenchmarkCCMEncrypt/512B-8         	  712968	      1478 ns/op	 346.51 MB/s	    3320 B/op	      13 allocs/op
BenchmarkCCMEncrypt/1KB-8          	  431733	      2576 ns/op	 397.45 MB/s	    5688 B/op	      13 allocs/op
BenchmarkCCMEncrypt/1.4KB-8        	  320128	      3524 ns/op	 425.70 MB/s	    7608 B/op	      13 allocs/op
BenchmarkCCMDecrypt/016B-8         	 2120180	       564.5 ns/op	  28.34 MB/s	     792 B/op	      12 allocs/op
BenchmarkCCMDecrypt/064B-8         	 1903417	       645.7 ns/op	  99.12 MB/s	     888 B/op	      12 allocs/op
BenchmarkCCMDecrypt/256B-8         	 1322184	       907.3 ns/op	 282.17 MB/s	    1288 B/op	      12 allocs/op
BenchmarkCCMDecrypt/512B-8         	  890490	      1259 ns/op	 406.72 MB/s	    1800 B/op	      12 allocs/op
BenchmarkCCMDecrypt/1KB-8          	  527132	      2218 ns/op	 461.60 MB/s	    2888 B/op	      12 allocs/op
BenchmarkCCMDecrypt/1.4KB-8        	  359418	      3130 ns/op	 479.30 MB/s	    4040 B/op	      12 allocs/op
BenchmarkGCMEncrypt/016B-8         	 6078590	       197.0 ns/op	  81.23 MB/s	     160 B/op	       5 allocs/op
BenchmarkGCMEncrypt/064B-8         	 5064283	       235.2 ns/op	 272.06 MB/s	     304 B/op	       5 allocs/op
BenchmarkGCMEncrypt/128B-8         	 4924057	       242.9 ns/op	 526.91 MB/s	     496 B/op	       5 allocs/op
BenchmarkGCMEncrypt/256B-8         	 3926989	       301.6 ns/op	 848.87 MB/s	     928 B/op	       5 allocs/op
BenchmarkGCMEncrypt/512B-8         	 2772226	       431.6 ns/op	1186.32 MB/s	    1760 B/op	       5 allocs/op
BenchmarkGCMEncrypt/800B-8         	 2051502	       586.1 ns/op	1364.91 MB/s	    2720 B/op	       5 allocs/op
BenchmarkGCMEncrypt/1KB-8          	 1727732	       699.3 ns/op	1464.30 MB/s	    3488 B/op	       5 allocs/op
BenchmarkGCMEncrypt/1.1KB-8        	 1424820	       828.3 ns/op	1448.76 MB/s	    3872 B/op	       5 allocs/op
BenchmarkGCMEncrypt/1.4KB-8        	 1000000	      1049 ns/op	1430.38 MB/s	    4896 B/op	       5 allocs/op
BenchmarkGCMEncrypt/4KB-8          	  517086	      2062 ns/op	1986.58 MB/s	   14624 B/op	       5 allocs/op
BenchmarkGCMEncrypt/8KB-8          	  312402	      3748 ns/op	2185.71 MB/s	   28448 B/op	       5 allocs/op
BenchmarkGCMDecrypt/016B-8         	12856401	        91.48 ns/op	 174.89 MB/s	      96 B/op	       3 allocs/op
BenchmarkGCMDecrypt/064B-8         	 9523500	       123.6 ns/op	 518.00 MB/s	     144 B/op	       3 allocs/op
BenchmarkGCMDecrypt/128B-8         	10810846	       109.5 ns/op	1168.56 MB/s	     208 B/op	       3 allocs/op
BenchmarkGCMDecrypt/256B-8         	 8269497	       142.2 ns/op	1799.69 MB/s	     352 B/op	       3 allocs/op
BenchmarkGCMDecrypt/512B-8         	 5492044	       211.1 ns/op	2425.04 MB/s	     608 B/op	       3 allocs/op
BenchmarkGCMDecrypt/800B-8         	 3998550	       294.3 ns/op	2718.52 MB/s	     928 B/op	       3 allocs/op
BenchmarkGCMDecrypt/1KB-8          	 3479430	       340.5 ns/op	3007.33 MB/s	    1184 B/op	       3 allocs/op
BenchmarkGCMDecrypt/1.1KB-8        	 2947528	       409.0 ns/op	2933.76 MB/s	    1312 B/op	       3 allocs/op
BenchmarkGCMDecrypt/1.4KB-8        	 2404940	       524.9 ns/op	2857.54 MB/s	    1824 B/op	       3 allocs/op
BenchmarkGCMDecrypt/4KB-8          	  971718	      1259 ns/op	3254.08 MB/s	    4896 B/op	       3 allocs/op
BenchmarkGCMDecrypt/8KB-8          	  528451	      2192 ns/op	3737.19 MB/s	    9504 B/op	       3 allocs/op
PASS
ok  	github.com/pion/dtls/v3/pkg/crypto/ciphersuite	66.368s

@adrianosela adrianosela force-pushed the ciphersuite-performance branch from 3d82c43 to 392c031 Compare January 21, 2026 03:52
@codecov
Copy link
Copy Markdown

codecov bot commented Jan 21, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 81.65%. Comparing base (6b2fbf1) to head (434b089).
⚠️ Report is 1 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master     #781      +/-   ##
==========================================
+ Coverage   81.60%   81.65%   +0.05%     
==========================================
  Files         105      105              
  Lines        5837     5837              
==========================================
+ Hits         4763     4766       +3     
+ Misses        690      688       -2     
+ Partials      384      383       -1     
Flag Coverage Δ
go 81.65% <ø> (+0.05%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@adrianosela adrianosela force-pushed the ciphersuite-performance branch 2 times, most recently from fc3797c to 422c5ca Compare January 21, 2026 04:43
Copy link
Copy Markdown
Member

@JoTurk JoTurk left a comment

Choose a reason for hiding this comment

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

Had fun reading this, thank you :)

encCopy := make([]byte, len(encrypted))
copy(encCopy, encrypted)

_, err := cbcCipher.Decrypt(recordlayer.Header{}, encCopy)
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.

I think it would be appropriate to use a non-empty header.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

done :)

Adds benchmark tests and benchmarking/profiling documentation
for CCM, GCM, and CBC (all in pkg/crypto/ciphersuite package).
@adrianosela adrianosela force-pushed the ciphersuite-performance branch from 422c5ca to 434b089 Compare January 21, 2026 19:41
@adrianosela
Copy link
Copy Markdown
Contributor Author

Re ran benchmarks with non empty header:

11:40 $ go test -tags=bench -bench=. -benchmem
goos: darwin
goarch: arm64
pkg: github.com/pion/dtls/v3/pkg/crypto/ciphersuite
cpu: Apple M1 Pro
BenchmarkCBCEncrypt/016B-8         	 1429353	       823.2 ns/op	  19.44 MB/s	     912 B/op	      14 allocs/op
BenchmarkCBCEncrypt/064B-8         	 1353157	       888.6 ns/op	  72.02 MB/s	    1056 B/op	      13 allocs/op
BenchmarkCBCEncrypt/256B-8         	  886088	      1267 ns/op	 202.11 MB/s	    2256 B/op	      13 allocs/op
BenchmarkCBCEncrypt/512B-8         	  665112	      1733 ns/op	 295.49 MB/s	    3504 B/op	      13 allocs/op
BenchmarkCBCEncrypt/1KB-8          	  425582	      2661 ns/op	 384.80 MB/s	    5936 B/op	      13 allocs/op
BenchmarkCBCEncrypt/1.4KB-8        	  328204	      3574 ns/op	 419.67 MB/s	    8484 B/op	      13 allocs/op
BenchmarkCBCDecrypt/016B-8         	 2141010	       567.2 ns/op	  28.21 MB/s	     752 B/op	       9 allocs/op
BenchmarkCBCDecrypt/064B-8         	 1802319	       666.8 ns/op	  95.98 MB/s	     800 B/op	       9 allocs/op
BenchmarkCBCDecrypt/256B-8         	 1000000	      1007 ns/op	 254.20 MB/s	    1008 B/op	       9 allocs/op
BenchmarkCBCDecrypt/512B-8         	  883816	      1310 ns/op	 390.96 MB/s	    1296 B/op	       9 allocs/op
BenchmarkCBCDecrypt/1KB-8          	  619720	      1889 ns/op	 542.10 MB/s	    1808 B/op	       9 allocs/op
BenchmarkCBCDecrypt/1.4KB-8        	  478996	      2387 ns/op	 628.29 MB/s	    2448 B/op	       9 allocs/op
BenchmarkCCMEncrypt/016B-8         	 1683126	       690.4 ns/op	  23.17 MB/s	     872 B/op	      13 allocs/op
BenchmarkCCMEncrypt/064B-8         	 1573089	       786.0 ns/op	  81.42 MB/s	    1112 B/op	      13 allocs/op
BenchmarkCCMEncrypt/256B-8         	  996811	      1102 ns/op	 232.25 MB/s	    2136 B/op	      13 allocs/op
BenchmarkCCMEncrypt/512B-8         	  727600	      1508 ns/op	 339.44 MB/s	    3320 B/op	      13 allocs/op
BenchmarkCCMEncrypt/1KB-8          	  442342	      2552 ns/op	 401.28 MB/s	    5688 B/op	      13 allocs/op
BenchmarkCCMEncrypt/1.4KB-8        	  326205	      3523 ns/op	 425.81 MB/s	    7608 B/op	      13 allocs/op
BenchmarkCCMDecrypt/016B-8         	 2080203	       568.9 ns/op	  28.13 MB/s	     792 B/op	      12 allocs/op
BenchmarkCCMDecrypt/064B-8         	 1897423	       637.6 ns/op	 100.38 MB/s	     888 B/op	      12 allocs/op
BenchmarkCCMDecrypt/256B-8         	 1321878	       911.9 ns/op	 280.74 MB/s	    1288 B/op	      12 allocs/op
BenchmarkCCMDecrypt/512B-8         	  940555	      1267 ns/op	 403.99 MB/s	    1800 B/op	      12 allocs/op
BenchmarkCCMDecrypt/1KB-8          	  493912	      2230 ns/op	 459.13 MB/s	    2888 B/op	      12 allocs/op
BenchmarkCCMDecrypt/1.4KB-8        	  358525	      3143 ns/op	 477.29 MB/s	    4040 B/op	      12 allocs/op
BenchmarkGCMEncrypt/016B-8         	 6018066	       199.2 ns/op	  80.31 MB/s	     160 B/op	       5 allocs/op
BenchmarkGCMEncrypt/064B-8         	 4993989	       236.7 ns/op	 270.37 MB/s	     304 B/op	       5 allocs/op
BenchmarkGCMEncrypt/128B-8         	 4376493	       244.9 ns/op	 522.75 MB/s	     496 B/op	       5 allocs/op
BenchmarkGCMEncrypt/256B-8         	 3890924	       306.3 ns/op	 835.91 MB/s	     928 B/op	       5 allocs/op
BenchmarkGCMEncrypt/512B-8         	 2699450	       428.9 ns/op	1193.73 MB/s	    1760 B/op	       5 allocs/op
BenchmarkGCMEncrypt/800B-8         	 2030320	       586.5 ns/op	1364.09 MB/s	    2720 B/op	       5 allocs/op
BenchmarkGCMEncrypt/1KB-8          	 1723813	       696.3 ns/op	1470.58 MB/s	    3488 B/op	       5 allocs/op
BenchmarkGCMEncrypt/1.1KB-8        	 1462590	       790.2 ns/op	1518.59 MB/s	    3872 B/op	       5 allocs/op
BenchmarkGCMEncrypt/1.4KB-8        	 1249474	       939.5 ns/op	1596.61 MB/s	    4896 B/op	       5 allocs/op
BenchmarkGCMEncrypt/4KB-8          	  529846	      2069 ns/op	1979.61 MB/s	   14624 B/op	       5 allocs/op
BenchmarkGCMEncrypt/8KB-8          	  300313	      3763 ns/op	2177.08 MB/s	   28448 B/op	       5 allocs/op
BenchmarkGCMDecrypt/016B-8         	12889527	        91.50 ns/op	 174.86 MB/s	      96 B/op	       3 allocs/op
BenchmarkGCMDecrypt/064B-8         	 9514489	       123.7 ns/op	 517.24 MB/s	     144 B/op	       3 allocs/op
BenchmarkGCMDecrypt/128B-8         	10820786	       110.3 ns/op	1160.38 MB/s	     208 B/op	       3 allocs/op
BenchmarkGCMDecrypt/256B-8         	 8424715	       140.7 ns/op	1819.47 MB/s	     352 B/op	       3 allocs/op
BenchmarkGCMDecrypt/512B-8         	 5741937	       214.2 ns/op	2389.93 MB/s	     608 B/op	       3 allocs/op
BenchmarkGCMDecrypt/800B-8         	 3941619	       297.0 ns/op	2694.04 MB/s	     928 B/op	       3 allocs/op
BenchmarkGCMDecrypt/1KB-8          	 3517104	       341.4 ns/op	2999.38 MB/s	    1184 B/op	       3 allocs/op
BenchmarkGCMDecrypt/1.1KB-8        	 2966346	       404.2 ns/op	2969.09 MB/s	    1312 B/op	       3 allocs/op
BenchmarkGCMDecrypt/1.4KB-8        	 2404398	       500.0 ns/op	2999.83 MB/s	    1824 B/op	       3 allocs/op
BenchmarkGCMDecrypt/4KB-8          	 1000000	      1106 ns/op	3704.35 MB/s	    4896 B/op	       3 allocs/op
BenchmarkGCMDecrypt/8KB-8          	  545824	      2194 ns/op	3734.44 MB/s	    9504 B/op	       3 allocs/op
PASS
ok  	github.com/pion/dtls/v3/pkg/crypto/ciphersuite	67.369s

@adrianosela adrianosela merged commit 199a753 into pion:master Jan 21, 2026
27 of 28 checks passed
@adrianosela adrianosela deleted the ciphersuite-performance branch January 21, 2026 19:48
Sign up for free to 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.

2 participants