The savevm_state.handlers queue of SaveStateEntry objects is a
priority queue with an O(n) insertion cost. This is makes startup
extremely slow when a VM has many such objects to register. For
instance, a ppc64 VM with a large (8T+) maxmem needs to register tens
of thousands of SaveStateEntry handlers: startup for these VMs is
glacial.
If we track insertion points within the priority queue we can make
savevm_state_handler_insert() a constant-time operation with little
change to the module's code. Startup times for VMs with many handlers
are dramatically improved as a result.
Changes since v1:
* Split patch 1 into 2 patches.
Scott Cheloha (2):
migration: add savevm_state_handler_remove()
migration: savevm_state_handler_insert: constant-time element
insertion
migration/savevm.c | 35 ++++++++++++++++++++++++++++++-----
1 file changed, 30 insertions(+), 5 deletions(-)
--
2.23.0