Updated benchmark scripts to run on rpi + stm32h563#682
Merged
dgarske merged 5 commits intowolfSSL:masterfrom Feb 11, 2026
Merged
Updated benchmark scripts to run on rpi + stm32h563#682dgarske merged 5 commits intowolfSSL:masterfrom
dgarske merged 5 commits intowolfSSL:masterfrom
Conversation
Member
danielinux
commented
Feb 9, 2026
| Name | Configuration | Bootloader size | Stack size | Image header size | Application size | Boot time |
|---|---|---|---|---|---|---|
| SHA2 only | SIGN=NONE | 10600 | 1216 | 1024 | 103096 | 55.662 ms |
| SHA384 only | SIGN=NONE HASH=SHA384 | 20120 | 3760 | 1024 | 103096 | 98.213 ms |
| SHA3 only | SIGN=NONE HASH=SHA3 | 10264 | 1216 | 1024 | 103096 | 159.116 ms |
| SHA2 only,small | SIGN=NONE NO_ASM=1 | 7144 | 1216 | 1024 | 103096 | 64.379 ms |
| rsa2048 | SIGN=RSA2048 | 17316 | 17568 | 1024 | 103984 | 69.844 ms |
| rsa3072 | SIGN=RSA3072 | 17452 | 12288 | 1024 | 104112 | 85.834 ms |
| rsa4096 | SIGN=RSA4096 | 17612 | 18064 | 1024 | 104240 | 108.302 ms |
| rsa4096 with sha384 | SIGN=RSA4096 HASH=SHA384 | 27304 | 18064 | 1024 | 104240 | 154.711 ms |
| ecdsa256 | SIGN=ECC256 | 24784 | 7632 | 1024 | 103720 | 75.611 ms |
| ecdsa384 | SIGN=ECC384 | 25656 | 11216 | 1024 | 103752 | 297.082 ms |
| ecdsa521 | SIGN=ECC521 | 29292 | 8480 | 1024 | 103788 | 404.038 ms |
| ecdsa256 with small stack | SIGN=ECC384 WOLFBOOT_SMALL_STACK=1 | 25208 | 5880 | 1024 | 103752 | 295.158 ms |
| ecdsa256 with fast math | SIGN=ECC384 SP_MATH=0 | 25656 | 11216 | 1024 | 103752 | 297.073 ms |
| ecdsa256, no asm | SIGN=ECC256 NO_ASM=1 | 16084 | 7632 | 1024 | 103720 | 352.741 ms |
| ecdsa384, no asm | SIGN=ECC384 NO_ASM=1 | 17436 | 11216 | 1024 | 103752 | 954.500 ms |
| ecdsa521, no asm | SIGN=ECC521 NO_ASM=1 | 16376 | 8480 | 1024 | 103788 | 1960.132 ms |
| ecdsa384 with sha384 | SIGN=ECC384 HASH=SHA384 | 35176 | 11216 | 1024 | 103752 | 338.830 ms |
| ed25519 with sha384, small | SIGN=ED25519 HASH=SHA384 NO_ASM=1 | 12860 | 5000 | 1024 | 103688 | 1580.776 ms |
| ed25519 fast | SIGN=ED25519 NO_ASM=0 | 29664 | 5000 | 1024 | 103688 | 1589.512 ms |
| ed448 | SIGN=ED448 | 19576 | 4578 | 1024 | 103716 | 5793.993 ms |
| ML_DSA-44 | SIGN=ML_DSA ML_DSA_LEVEL=2 IMAGE_SIGNATURE_SIZE=2420 IMAGE_HEADER_SIZE=8192 | 21524 | 25000 | 8192 | 104984 | 82.791 ms |
| ML_DSA-65 | SIGN=ML_DSA ML_DSA_LEVEL=3 IMAGE_SIGNATURE_SIZE=3309 IMAGE_HEADER_SIZE=8192 | 22164 | 25000 | 8192 | 105624 | 99.279 ms |
| ML_DSA-87 | SIGN=ML_DSA ML_DSA_LEVEL=5 IMAGE_SIGNATURE_SIZE=4627 IMAGE_HEADER_SIZE=12288 | 22804 | 25000 | 12288 | 106264 | 127.807 ms |
| LMS 1-10-8 | SIGN=LMS LMS_LEVELS=1 LMS_HEIGHT=10 LMS_WINTERNITZ=8 IMAGE_HEADER_SIZE=4096 IMAGE_SIGNATURE_SIZE=1456 | 13416 | 1320 | 4096 | 103716 | 207.703 ms |
| XMSS-SHA2_10_256' | XMSS_PARAMS=XMSS-SHA2_10_256 SIGN=XMSS IMAGE_SIGNATURE_SIZE=2500 IMAGE_HEADER_SIZE=8192 | 14236 | 9352 | 8192 | 103724 | 189.553 ms |
| ML_DSA-65 hybrid with ECDSA384 | SIGN=ML_DSA ML_DSA_LEVEL=3 IMAGE_SIGNATURE_SIZE=3309 IMAGE_HEADER_SIZE=8192 SIGN_SECONDARY=ECC384 WOLFBOOT_UNIVERSAL_KEYSTORE=1 | 38820 | 25000 | 8192 | 107592 | 341.706 ms |
| ML_DSA-87 hybrid with ECDSA521 | SIGN=ML_DSA ML_DSA_LEVEL=5 IMAGE_SIGNATURE_SIZE=4627 IMAGE_HEADER_SIZE=12288 SIGN_SECONDARY=ECC521 WOLFBOOT_UNIVERSAL_KEYSTORE=1 | 43700 | 25000 | 12288 | 108872 | 477.560 ms |
dgarske
approved these changes
Feb 9, 2026
dgarske
requested changes
Feb 9, 2026
Contributor
There was a problem hiding this comment.
Pull request overview
Updates the benchmarking and emulation tooling to support running boot-time benchmarks from a Raspberry Pi against an STM32H5/H563 target, plus associated build/config tweaks to enable consistent timing and sizing measurements.
Changes:
- Add a new
libgpiod-based boot-time measurement script and switch the benchmark runner to OpenOCD + GPIO edge timing. - Introduce build flags (
WOLFBOOT_TEST_FILLER,WOLFBOOT_TIME_TEST) and early-boot GPIO toggling to support boot-time measurements. - Adjust emulation linker templates and config-generation flow for multiple targets (STM32*, nRF, MCX).
Reviewed changes
Copilot reviewed 20 out of 20 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/scripts/boot-time.py | New GPIO edge-timestamp based boot-time measurement script (libgpiod). |
| tools/scripts/benchmark.sh | Switch benchmark flashing to OpenOCD and delegate timing to boot-time.py; add “Application size” column. |
| tools/check_config/Makefile | Adds CROSS_COMPILE/CC support for building check_config. |
| test-app/startup_arm.c | Calls an early boot-time pin toggle for STM32H5 when WOLFBOOT_TIME_TEST is enabled. |
| test-app/emu-test-apps/test.sh | Updates how target.h is generated and how check_config is built; adds per-emu linker template support. |
| test-app/emu-test-apps/stm32u585/target.ld.in | Fix RAM region definition for emulation linker script. |
| test-app/emu-test-apps/stm32l552/target.ld.in | Fix RAM region definition for emulation linker script. |
| test-app/emu-test-apps/stm32h563/target_v8.ld | Fix RAM region definition for emulation linker script. |
| test-app/emu-test-apps/stm32h563/target.ld.in | Fix RAM region definition for emulation linker script. |
| test-app/emu-test-apps/nrf5340/target.ld.in | Fix RAM region definition for emulation linker script. |
| test-app/emu-test-apps/mcxw71/target.ld.in | Fix RAM region definition for emulation linker script. |
| test-app/app_stm32h7.c | Make filler data optional behind WOLFBOOT_TEST_FILLER. |
| test-app/app_stm32h5.c | Gate keystore usage when signing is disabled; add early boot-time GPIO toggle; optional filler. |
| test-app/Makefile | Avoid linking keystore objects into test-app when SIGN=NONE. |
| test-app/ARM-stm32h5.ld | Increase RAM size in linker script template. |
| test-app/ARM-stm32h5-ns.ld | Increase RAM size in non-secure linker script template. |
| src/image.c | Silence unused stored_secondary_signature_size. |
| options.mk | Add build flags for timing/filler; adjust ECC521 stack usage number. |
| include/image.h | Add an extra compare_res; statement inside RSA verification macro. |
| config/examples/stm32h5-no-tz.config | New STM32H5 no-TrustZone example config used by benchmark script. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
dgarske
approved these changes
Feb 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.