mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-08-18 21:43:23 +02:00
pq-all and trackmemory restore a seed ccache that already sits at its cap, so every object a run compiles evicts a seeded one that is still needed. Both reported a cache 100% full with over 200 cleanups and a 43-44% hit rate, and their configs took 3-5x their warm time. That left pq-all shards finishing at 23-26 min against a 30 min limit: a healthy shard passed with 5.6 min to spare, so any hiccup ahead of the build took the job down. One did, twice, when the prebuilt deb image came up short and the dependency step fell back to apt for 9.7 min - the only two jobs out of 47 whose install ran past 2 min are the only two that timed out. Size both caches to hold the seeded objects and a run's own alongside them, and widen the limits so a slow install is survivable. Raise the trackmemory limit as well, for a different reason: its wolfEntropy configs have overrun it outright, once with six configs done inside 8 min while all-wolfentropy ran on for another 32. That is a stall rather than a slow run - 91 jobs have a 17.2 min median and a 17.9 min p90, with nothing between 18 min and the cap - so the higher limit is headroom, not a fix. It costs nothing on a healthy run. Recalibrate "minutes", which drives longest-first scheduling and shard balancing. pq-all and fips-dev-no-post had drifted several-fold in both directions: two frodokem cross-builds were declared at 4 min but take 0.3, so the pool kept scheduling them first as its longest work. pq-all is calibrated from runs whose ccache actually hit, which the resized cache makes the normal case; a value read off a cold run makes every warm run warn instead. os-check-linux was already calibrated cold and correct, so only its three genuine outliers change. Both config lists are re-sorted to restore the documented descending order, so most of their diff is a mechanical move rather than a value change. Shard totals come out at 29.4/29.6 for pq-all and 76.9-77.7 across the four os-check shards.
131 lines
6.3 KiB
YAML
131 lines
6.3 KiB
YAML
name: WOLFSSL_TRACK_MEMORY Tests
|
|
|
|
# START OF COMMON SECTION
|
|
on:
|
|
push:
|
|
branches: [ 'release/**' ]
|
|
pull_request:
|
|
types: [opened, synchronize, reopened, ready_for_review]
|
|
branches: [ '*' ]
|
|
# Weekday-morning cron (10:00 UTC) seeds the master-scoped ccache that PR runs
|
|
# restore: re-runs --build-only (compile only, no tests) on the
|
|
# default branch. PR runs are read-only (see ccache-setup).
|
|
schedule:
|
|
- cron: '44 10 * * 1-5'
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: read
|
|
# END OF COMMON SECTION
|
|
|
|
jobs:
|
|
# All former runner-per-config matrix entries build on one runner via
|
|
# .github/scripts/parallel-make-check.py (see os-check.yml for the full
|
|
# pattern): each config in its own out-of-tree ("VPATH") build directory
|
|
# off one checkout/autogen, checks on a pool of one-per-CPU worker
|
|
# threads, longest first. bubblewrap gives every test script its own
|
|
# network namespace so concurrent checks cannot collide on TCP/UDP ports
|
|
# (do not set AM_BWRAPPED here - that would disable it).
|
|
make_check:
|
|
name: make check
|
|
if: ${{ (github.repository_owner == 'wolfssl') && (github.event_name != 'pull_request' || github.event.pull_request.draft == false) }}
|
|
runs-on: ubuntu-24.04
|
|
# Typical runs finish in 13-16 min, but the wolfEntropy configs gather
|
|
# entropy from CPU timing jitter, whose runtime varies severalfold with
|
|
# runner contention (a 20-min limit was hit with one config left, and
|
|
# later a 40-min one: six configs were done inside 8 min while
|
|
# all-wolfentropy ran on for another 32). Cheap to leave high - a
|
|
# healthy run never approaches it.
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
name: Checkout wolfSSL
|
|
|
|
- name: Install dependencies
|
|
uses: ./.github/actions/install-apt-deps
|
|
with:
|
|
packages: autoconf automake libtool build-essential bubblewrap
|
|
ghcr-debs-tag: ubuntu-24.04-minimal
|
|
|
|
# ccache via the cross-platform composite; the script passes the
|
|
# compiler to configure as CC="ccache gcc" (or a per-config "cc").
|
|
- name: Set up ccache
|
|
uses: ./.github/actions/ccache-setup
|
|
with:
|
|
workflow-id: trackmemory
|
|
read-only: ${{ github.event_name == 'pull_request' }}
|
|
# 250M left the cache 100% full with 232 cleanups and a 44% hit
|
|
# rate, i.e. evicting objects this same run still needed; the
|
|
# configs then ran 2-3x their warm time.
|
|
max-size: 450M
|
|
|
|
# Ubuntu 24.04 can restrict unprivileged user namespaces via AppArmor,
|
|
# which would stop the test scripts from re-execing under
|
|
# bwrap --unshare-net (their port-isolation mechanism).
|
|
- name: Allow unprivileged user namespaces (for bwrap)
|
|
run: sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 || true
|
|
|
|
# The JSON list below is the former runner-per-config matrix; add new
|
|
# configs as new entries (a "comment" key is allowed for notes).
|
|
# "minutes" is the expected duration driving longest-first scheduling:
|
|
# take it from the Minutes column of a previous run's step summary, or
|
|
# omit it for a new config (defaults to 1) and refresh later. The list
|
|
# is kept sorted by minutes for readability, but the schedule sorts by
|
|
# the values, not list order.
|
|
- name: Build and make check all configs (parallel, out-of-tree)
|
|
run: |
|
|
cat > "$RUNNER_TEMP/trackmemory-configs.json" <<'EOF'
|
|
[
|
|
{"name": "all-noasm-wolfentropy", "minutes": 6.3,
|
|
"configure": ["--disable-asm", "--enable-wolfEntropy",
|
|
"--enable-smallstackcache", "--enable-smallstack", "--enable-all",
|
|
"CFLAGS=-DWC_RNG_SEED_CB -DWOLFSSL_TRACK_MEMORY -DWOLFSSL_DEBUG_MEMORY -DNO_WOLFSSL_CIPHER_SUITE_TEST"]},
|
|
{"name": "all-smallstack-cache-trace", "minutes": 4.1,
|
|
"configure": ["--enable-smallstackcache", "--enable-smallstack",
|
|
"--enable-all", "--enable-debug-trace-errcodes",
|
|
"CFLAGS=-DWC_RNG_SEED_CB -DWOLFSSL_TRACK_MEMORY -DWOLFSSL_DEBUG_MEMORY"]},
|
|
{"name": "all-wolfentropy", "minutes": 4.1,
|
|
"comment": "smallstackcache coverage here is crucial for the Linux kernel module when targeting a kernel with the randomness patch (linuxkm/patches/) applied. Don't combine wolfEntropy with the full TLS cipher suite test - the implicit wc_InitRng()s in each suite have an enormous CPU footprint.",
|
|
"configure": ["--enable-wolfEntropy", "--enable-smallstackcache",
|
|
"--enable-smallstack", "--enable-all",
|
|
"CFLAGS=-DWC_RNG_SEED_CB -DWOLFSSL_TRACK_MEMORY -DWOLFSSL_DEBUG_MEMORY -DNO_WOLFSSL_CIPHER_SUITE_TEST"]},
|
|
{"name": "all-trace-errcodes", "minutes": 3.9,
|
|
"configure": ["--enable-all", "--enable-debug-trace-errcodes",
|
|
"CFLAGS=-DWC_RNG_SEED_CB -DWOLFSSL_TRACK_MEMORY -DWOLFSSL_DEBUG_MEMORY"]},
|
|
{"name": "all-smallstack", "minutes": 3.9,
|
|
"configure": ["--enable-smallstack", "--enable-all",
|
|
"CFLAGS=-DWC_RNG_SEED_CB -DWOLFSSL_TRACK_MEMORY -DWOLFSSL_DEBUG_MEMORY"]},
|
|
{"name": "all-intelrdseed", "minutes": 2.5,
|
|
"configure": ["--enable-intelrdseed", "--enable-smallstackcache",
|
|
"--enable-smallstack", "--enable-all",
|
|
"CFLAGS=-DWC_RNG_SEED_CB -DWOLFSSL_TRACK_MEMORY -DWOLFSSL_DEBUG_MEMORY -DNO_WOLFSSL_CIPHER_SUITE_TEST"]},
|
|
{"name": "all-amdrand", "minutes": 2.5,
|
|
"configure": ["--enable-amdrand", "--enable-smallstackcache",
|
|
"--enable-smallstack", "--enable-all",
|
|
"CFLAGS=-DWC_RNG_SEED_CB -DWOLFSSL_TRACK_MEMORY -DWOLFSSL_DEBUG_MEMORY -DNO_WOLFSSL_CIPHER_SUITE_TEST"]}
|
|
]
|
|
EOF
|
|
.github/scripts/parallel-make-check.py \
|
|
${{ github.event_name == 'schedule' && '--build-only' || '' }} \
|
|
--private-dir=certs \
|
|
"$RUNNER_TEMP/trackmemory-configs.json"
|
|
|
|
- name: ccache stats
|
|
if: always()
|
|
run: ccache -s || true
|
|
|
|
- name: Upload logs on failure
|
|
if: failure()
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
retention-days: 7
|
|
name: trackmemory-logs
|
|
path: |
|
|
build-*/make-check.log
|
|
build-*/test-suite.log
|
|
build-*/config.log
|
|
if-no-files-found: ignore
|