Ping.
How about this series? hoping to get comments if anyone has played
with it.
Thanks !
Hyman
在 2022/7/23 15:49, huangy81@chinatelecom.cn 写道:
> From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
>
> Abstract
> ========
>
> This series added a new migration capability called "dirtylimit". It can
> be enabled when dirty ring is enabled, and it'll improve the vCPU performance
> during the process of migration. It is based on the previous patchset:
> https://lore.kernel.org/qemu-devel/cover.1656177590.git.huangy81@chinatelecom.cn/
>
> As mentioned in patchset "support dirty restraint on vCPU", dirtylimit way of
> migration can make the read-process not be penalized. This series wires up the
> vcpu dirty limit and wrappers as dirtylimit capability of migration. I introduce
> two parameters vcpu-dirtylimit-period and vcpu-dirtylimit to implement the setup
> of dirtylimit during live migration.
>
> To validate the implementation, i tested a 32 vCPU vm live migration with such
> model:
> Only dirty vcpu0, vcpu1 with heavy memory workoad and leave the rest vcpus
> untouched, running unixbench on the vpcu8-vcpu15 by setup the cpu affinity as
> the following command:
> taskset -c 8-15 ./Run -i 2 -c 8 {unixbench test item}
>
> The following are results:
>
> host cpu: Intel(R) Xeon(R) Platinum 8378A
> host interface speed: 1000Mb/s
> |---------------------+--------+------------+---------------|
> | UnixBench test item | Normal | Dirtylimit | Auto-converge |
> |---------------------+--------+------------+---------------|
> | dhry2reg | 32800 | 32786 | 25292 |
> | whetstone-double | 10326 | 10315 | 9847 |
> | pipe | 15442 | 15271 | 14506 |
> | context1 | 7260 | 6235 | 4514 |
> | spawn | 3663 | 3317 | 3249 |
> | syscall | 4669 | 4667 | 3841 |
> |---------------------+--------+------------+---------------|
> From the data above we can draw a conclusion that vcpus that do not dirty memory
> in vm are almost unaffected during the dirtylimit migration, but the auto converge
> way does.
>
> I also tested the total time of dirtylimit migration with variable dirty memory
> size in vm.
>
> senario 1:
> host cpu: Intel(R) Xeon(R) Platinum 8378A
> host interface speed: 1000Mb/s
> |-----------------------+----------------+-------------------|
> | dirty memory size(MB) | Dirtylimit(ms) | Auto-converge(ms) |
> |-----------------------+----------------+-------------------|
> | 60 | 2014 | 2131 |
> | 70 | 5381 | 12590 |
> | 90 | 6037 | 33545 |
> | 110 | 7660 | [*] |
> |-----------------------+----------------+-------------------|
> [*]: This case means migration is not convergent.
>
> senario 2:
> host cpu: Intel(R) Xeon(R) CPU E5-2650
> host interface speed: 10000Mb/s
> |-----------------------+----------------+-------------------|
> | dirty memory size(MB) | Dirtylimit(ms) | Auto-converge(ms) |
> |-----------------------+----------------+-------------------|
> | 1600 | 15842 | 27548 |
> | 2000 | 19026 | 38447 |
> | 2400 | 19897 | 46381 |
> | 2800 | 22338 | 57149 |
> |-----------------------+----------------+-------------------|
> Above data shows that dirtylimit way of migration can also reduce the total
> time of migration and it achieves convergence more easily in some case.
>
> In addition to implement dirtylimit capability itself, this series
> add 3 tests for migration, aiming at playing around for developer simply:
> 1. qtest for dirty limit migration
> 2. support dirty ring way of migration for guestperf tool
> 3. support dirty limit migration for guestperf tool
>
> Please review, thanks !
>
> Hyman Huang (8):
> qapi/migration: Introduce x-vcpu-dirty-limit-period parameter
> qapi/migration: Introduce vcpu-dirty-limit parameters
> migration: Introduce dirty-limit capability
> migration: Implement dirty-limit convergence algo
> migration: Export dirty-limit time info
> tests: Add migration dirty-limit capability test
> tests/migration: Introduce dirty-ring-size option into guestperf
> tests/migration: Introduce dirty-limit into guestperf
>
> include/sysemu/dirtylimit.h | 2 +
> migration/migration.c | 50 ++++++++++++++++++
> migration/migration.h | 1 +
> migration/ram.c | 53 ++++++++++++++-----
> migration/trace-events | 1 +
> monitor/hmp-cmds.c | 26 ++++++++++
> qapi/migration.json | 57 ++++++++++++++++----
> softmmu/dirtylimit.c | 33 +++++++++++-
> tests/migration/guestperf/comparison.py | 14 +++++
> tests/migration/guestperf/engine.py | 33 +++++++++++-
> tests/migration/guestperf/hardware.py | 8 ++-
> tests/migration/guestperf/progress.py | 17 +++++-
> tests/migration/guestperf/scenario.py | 11 +++-
> tests/migration/guestperf/shell.py | 25 ++++++++-
> tests/qtest/migration-test.c | 92 +++++++++++++++++++++++++++++++++
> 15 files changed, 392 insertions(+), 31 deletions(-)
>