scripts: Add automated fuzzing trial orchestrator - #153
Conversation
|
It's looking really nice! Q: Couldn't this live in the smitebot cli? |
Thanks, Eric!
Right, the more I was working on the script the more I realized that this is a better fit as a feature in However, I decided to not go down that path because: i) I already had a similar script in Python, and creating this script just meant making a couple of changes in that script (although it did end up being more than a couple 😞). This is probably the biggest reason. ii) This script uses iii) I had a discussion with Matt and Nishant on this some time ago and we agreed that it was fine to implement the script in Python. It might be worthwhile to note this (porting this script to |
|
Yes, I'm on board with this. Looking at it, the overlap with smitebot goes a bit further than From my understanding, the one thing that'd make a port non-trivial is that smitebot is built entirely around |
Right, I first implemented this using
|
Doesn't happen for me on bare metal. Could you file a bug with the startup errors you get?
I do eventually want this ported over to smitebot. But a Python script works for now. |
| "AFL_NO_AFFINITY": "1", | ||
| "AFL_NO_UI": "1", | ||
| "AFL_NO_COLOR": "1", | ||
| "AFL_FORKSRV_INIT_TMOUT": "1800000", |
There was a problem hiding this comment.
I haven't had to touch the forkserver timeout; I assume it's needed for your nested virtualization setup?
There was a problem hiding this comment.
Yes. Spawning parallel Nyx-mode AFL++ instances on my potato laptop takes some time, the default timeout frequently produced false positive crashes😅. This is supposed to be a generous upper bound to prevent that.
Sure, I'll do that if I encounter those again. |
Introduce `smite-orchestrator.py` to handle the automated execution of parallel fuzzing trials across multiple targets for rigorous A/B coverage evaluation. The script automatically queues jobs and maps CPU cores using `taskset` for strict isolation. It manages the full lifecycle of standalone Nyx mode (`-X`) fuzzers, including the generation and cleanup of isolated sharedirs per trial. It features a live Rich TUI dashboard to monitor real-time coverage metrics and track failed trials, and ensures graceful teardown of active processes upon completion or interrupt.
66ddbd3 to
d9f0bfb
Compare
I think now I have a good idea of why this happens. To make the required changes to this script, I had to revert a change I had made to I believe this is because a single target consumed (4 GB + some overhead) of memory, and because my VM has only 10 GB of memory, spawning two such instances forced the OOM killer to terminate one of these instances. Changing the allocated memory to 2 GB fixed the issue for LND, LDK, and Eclair. As for why the issue only surfaced in CLN and Eclair earlier, I believe it is because these two targets are the most memory-hungry out of the set (CLN spawns a bunch of sub-daemons and Eclair needs JVM). |
morehouse
left a comment
There was a problem hiding this comment.
Used this to evaluate #154 (comment), and everything was seamless.
The ability to choose the CPU cores was especially helpful so that I could make sure P cores were used for all trials.

Introduce
smite-orchestrator.pyto handle the automated execution of parallel fuzzing trials across multiple targets for rigorous A/B coverage evaluation.The script automatically queues jobs and maps CPU cores using
tasksetfor strict isolation. It manages the full lifecycle of standalone Nyx mode (-X) fuzzers, including the generation and cleanup of isolated sharedirs per trial.It features a live Rich TUI dashboard to monitor real-time coverage metrics and track failed trials, and ensures graceful teardown of active processes upon completion or interrupt.