On Thursday, June 1st, 2023 at 1:31 PM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > What about kernel based emulation? You could tie it into user_dispatch > and have a user_dispatch tsc offset. > > So regular kernel emulation simply returns the native value (keeps the > VDSO working for one), but then from a user_dispatch range, it returns > +offset. > > That is; how slow is the below? It's around 1800-1900 clock cycles on this system (modified patch attached, compile fix + rdtscp support). It's definitely better than the userspace signal handler (20x vs 100x). Also compared to reading one of the clock_gettime() clocks when current_clocksource is 'hpet', it's about twice as fast. So that's at least in the realm of being usable. Since faulting would still make the vDSO clocks go through this path we'd have to be careful that whatever offsets we throw into this path don't affect the correctness of the other clocks.
Attachment:
tsc-test.patch
Description: Binary data
Attachment:
signature.asc
Description: OpenPGP digital signature