-rw-r--r-- 1826 saferewrite-20250228/README-resources raw
Recommendations: (1) use a modern server with a reasonable amount of
RAM, (2) limit the number of threads that saferewrite will use (see the
THREADS mechanism in README), and (3) select the analyses that you're
interested in (see the chmod mechanism in README).
The following measurements were collected on rome2, a dual EPYC 7742
(128 cores overall), overclocking disabled, 512GB RAM, 1TB swap space.
Measurements for one run analyzing src/{int,uint}* with THREADS=64:
There were 249 src/{int,uint}* directories with 642 src/{int,uint}*/*
implementations, each of which was compiled with 10 compilers, so 6420
implementation-compiler combinations overall. Timings: 8m41.141s real
time, 295m51.414s user time, 89m59.609s system time.
Enabling elfulator (see README-elfulator) increases costs because of the
double emulation layers: unrolling one simple implementation will take
on the scale of 5GB of RAM and on the scale of 20 core-minutes. A full
run analyzing src/{int,uint}* with THREADS=64, with elfulator (so 7062
implementation-compiler combinations overall), took 333m57.259s real
time, 15112m20.030s user time, 148m47.499s system time. RAM usage varied
but was always below 300GB.
(Replacing python3 with pypy3 reduces user time below 7000 minutes while
increasing RAM usage by about 50%. Unfortunately, pypy3 occasionally
hangs in __futex_abstimed_wait_common64; currently saferewrite doesn't
know how to recognize the hang and restart the process.)
Disk usage for the unprivileged user that carried out the above
measurements was slightly under 10GB, mostly for buildroot for
cross-compilation for elfulator. This does not count the space for the
system packages installed.
Some src/* functions are more complicated than src/{int,uint}*. Analyses
of single implementations have been observed using 100GB RAM.