google / syzkaller

syzkaller is an unsupervised coverage-guided kernel fuzzer
Apache License 2.0
5.34k stars 1.21k forks source link

prog: switch to math/rand/v2 #4751

Open dvyukov opened 5 months ago

dvyukov commented 5 months ago

We extensively use math/rand, but there are some performance issues with it: https://go.dev/blog/randv2

the Go 1 generator, which is reasonably fast (about 1.8ns per number on my
M3 Mac) but maintains an internal state of almost 5 kilobytes. In contrast,
Melissa O’Neill’s PCG family of generators generates better random numbers
in about 2.1ns per number with only 16 bytes of internal state.

Perhaps if we switch all pacakges (prog, fuzzer, etc) to math/rand/v2 we can get some perf wins.

It was added in Go 1.22, so need to fix #4746 first.

a-nogikh commented 5 months ago

If we stick to the rule that our old-env container uses a one older Go version than env/syzbot, we'd be able to make use of this new random generator only once Go 1.23 is released.

dvyukov commented 5 months ago

We could diverge from that rule for a short period of time. Nobody really asked us for 2 versions.

Just spotted this: https://twitter.com/val_deleplace/status/1787818710822011163

tarasmadan commented 5 months ago

What are the potential side effects assuming we want to remove syz-old-env?

a-nogikh commented 5 months ago

At the very least we want to make sure that newer syzkaller revisions are buildable and testable by the currently running syz-ci's in the current docker images. There's also FreeBSD (and probably something else), where we don't use docker containers at all, so we should be mindful of everything that breaks once we start using newer Go features. Otherwise, I can't think of any other benefits of the syz-old-env tests.

a-nogikh commented 4 weeks ago

After #5288, everything is ready for math/rand/v2