Hello Everyone,

I hope you are all doing well.

First, I continued working on the pv-barrier-sync implementation in
libgomp. I added more tests for the new GOMP_WAIT_POLICY behavior and
updated the documentation. The first set of patches will soon be posted to
the GCC patches mailing list, and I am currently working on the last patch
for the Degree of Parallelism (DoP) implementation.

On the Phantom Tracker side, I completed the eBPF implementation for
calculating the average number of runnable tasks on the host CPUs. My first
approach used the sched_wakeup, sched_wakeup_new, and sched_switch
tracepoints to maintain a global counter, but this did not work well under
heavy workloads because the counter kept drifting.

I then changed my approach and used bpf_per_cpu_ptr() to directly read the
nr_running field from each CPU's runqueue. I sample this value on each
sched_switch event and calculate a time-weighted average using a BPF timer.
I then use this average to calculate the idle average which is to be shared
with the guest.

I also made the idle average available to other BPF programs by pinning the
BPF map. The timer program now reads both the phantom average and the idle
average and combines them with a host timestamp into a 64-bit watermark.
This information is exposed to the guest through the kfunc provided by the
host IVSHMEM driver. I also added a rotating cursor for each VM to maintain
a history of watermarks( to be use in DOP patch)

The work on the Phantom Tracker side is now finished, and I am currently
focusing on completing the last GCC patch for the DoP implementation.

Best regards,
Nchang Roy

Reply via email to