Today, I played my new version Linux kernel 5.5.9 on WSL2. Quickly, I hit a very interesting bug. Please see the following code
If you run the above code, you would get the following result:
xyb@ubuntu:~$ time gcc a.c xyb@ubuntu:~$ time ./a.out real 0m1.011s user 0m0.010s <-- This is wrong! sys 0m0.000s
The user time is just
0.010s. It's a wrong value obviously. After a lot of investigation, I found it might be a bug in the latest Linux kernel.
In linux, the unit of
shced_clock() should be nano seconds, but in
hyperv_timer.c, the unit, I believe, is 100 nano seconds.
I made a fix here: https://github.com/xieyubo/WSL2-Linux-Kernel/commit/85fc62846acb12a06b18f6e60bba849315f51d86. After this fix, re-run the above application:
xyb@ubuntu:~$ time ./a.out real 0m1.003s user 0m0.999s sys 0m0.004s
The value looks right now.