-
Notifications
You must be signed in to change notification settings - Fork 284
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CP-50475: parallelize device ops during VM lifecycle ops #6057
Conversation
Parallel atoms do quite a bit of unnecessary actions even when they are empty. They are also not needed when running a single task. They also show as spans in the traces. Removing them makes the traces shorter and easier to read. Co-authored-by: Edwin Török <[email protected]> Signed-off-by: Pau Ruiz Safont <[email protected]>
Operations on different devices should be independent and therefore can be parallelized. This both means parallelizing operations on different device types and on devices for the same type. An atom to serialize action has been introduced because the operation regarding a single device must be kept serialized. Signed-off-by: Pau Ruiz Safont <[email protected]>
I have to look at the details of the PR, but the first thing I wondered is why we need to introduce a new I can see that nesting is easier with an explicit |
I introduced the serial atomic because it was convenient. At some point I also added a nop one, which removes the need to concatenate lists quite a bit, but I'd rather do the latter than the former, as it could end up in the traces.
An option to avoid the serial atom would be to make the parallel one to receive a list of lists of atomics ops, instead of a list of atomic ops, although I'm not fond of the implicitness of it.
I can try :) |
I thought there might be some dependencies between these operations. It's great to see that they actually can be performed in parallel like this. If the returned lists can be encoded with |
Can we merge this and it was only held back because we wanted to get some fixes in first? |
This was held back because of the fixes as well as some performance tests being run. It's taking really long to get them scheduled :( |
This can be merged whenever we feel like it, the performance tests won't be able to be run in weeks, so we will need to run benchmarks when this is merged to master |
Operations on different devices should be independent and therefore can be
parallelized. This both means parallelizing operations on different device
types and on devices for the same type.
An atom to serialize action has been introduced because the operation regarding
a single device must be kept serialized.
Also removes some unneeded parallel atoms, which cause some overhead as well as polluting the traces
This makes VM_starts to run about ~1 second faster on some tests where VMs have 5 VIFs. I'm testing it further, but it doesn't look like it's breaking any tests. I want to push it through some bootstorms and measure improvements
Please do suggest some further parallelization if you can find it!
BVT+BST are all green