-
Notifications
You must be signed in to change notification settings - Fork 641
Description
Ryzen has a conditional branch counter. I have patches to use it here: https://github.com/mozilla/rr/tree/ryzen
To make it work reliably I had to increase the skid counter to 1000. That's pretty high, but OK. The patches make the skid size configurable per-architecture so we don't take that hit on Intel.
With these patches, most tests pass and the rest seem to be intermittent. In one run I get 10 failures out of 2068:
327 - proc_fds (Failed)
388 - ptracer_death_multithread_peer-no-syscallbuf (Failed)
688 - condvar_stress-no-syscallbuf (Failed)
835 - thread_stress (Failed)
904 - checkpoint_prctl_name-no-syscallbuf (Failed)
1362 - proc_fds-32-no-syscallbuf (Failed)
1679 - async_signal_syscalls2-32 (Failed)
1722 - condvar_stress-32-no-syscallbuf (Failed)
1869 - thread_stress-32 (Failed)
1870 - thread_stress-32-no-syscallbuf (Failed)
It appears that all these failures are due to intermittent overcounting. In most of them, during recording we seem to have overcounted a few conditional branches in the leadup to some syscall. In the rest, we seem to have overcounted during replay.
One interesting thing is that most of the syscalls where we detect the overcount are an mprotect (or a syscall following a syscall-buffered mprotect) that followed an mmap. There are two exceptions, one a read syscall and one a write syscall. I need to think about what this might mean.