On Mon, Nov 11, 2019 at 11:02:47AM +0100, Maxime Villard wrote: > Typically in sys/uvm/uvm_fault.c there are several lockless stat increments > like the following: > > /* Increment the counters.*/ > uvmexp.fltanget++;
Wasn't the general consensus here to ideally have per-cpu counters here that are aggregated passively? I can think of three different options depending the platform: (1) Use full atomic operations. Fine for true UP platforms and when the overhead of per-CPU precise accounting is too high. (2) Use uninterruptible memory operations in per CPU memory, aggregate passively on demand. (3) Emulate uninterruptible memory operations with kernel RAS, aggregate passively on demand. Essentially, the only race condition we care about for the statistic counters is via interrupts or scheduling. We can implement the equivalent of x86's add with memory operand as destination using RAS, so the only overhead would be the function call in that case. Joerg