microsoft / verona-rt

The runtime for the Verona project
MIT License
25 stars 14 forks source link

Cown dependence #9

Closed mjp41 closed 1 year ago

mjp41 commented 1 year ago

This change moves to the new approach to tracking dependencies based on the MCS Queue Lock. It effectively builds a DAG of behaviours using the pattern in the MCS Queue lock. The two phase commit it integrated into the MCS structure.

Just putting up a draft PR for CI feedback.

mjp41 commented 1 year ago

I am going to leave the following to future PRs:

Each of these requires some design, so I would sooner make them separate PRs, so it is easier to review.

mjp41 commented 1 year ago

This branch is now showing a 30% speed up on perf-con-ubench. This could reach about 38% if we pushed some of the epoch work into snmalloc.

With Savina it is a bit harder to tell. Mostly things improve mildly, or stay within noise. There is one notable exception Concurrent SLL, which doubles in time. All the time is spent in walking the list not in any of the runtime changes. I think it is due to the different batching strategies. This could lead to the list growing differently between the two executions, but I don't know for sure.

Overall, I think this is a win for performance, and we should proceed with the refactoring.

mjp41 commented 1 year ago

@lukecheeseman if you could take a look it would be much appreciated.

mjp41 commented 1 year ago

To review the PR. My recommended reading order is:

Once, you have those bits

The rest of the changes are mostly what needed changing for the refactoring.