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