[PATCH v5 0/6] support dirtyrate at the granualrity of vcpu

huangy81@chinatelecom.cn posted 6 patches 2 years, 10 months ago
Test checkpatch failed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/cover.1623934182.git.huangy81@chinatelecom.cn
There is a newer version of this series
hmp-commands.hx         |   7 +-
include/exec/memory.h   |  18 +++-
include/exec/ram_addr.h |   4 +-
migration/dirtyrate.c   | 260 +++++++++++++++++++++++++++++++++++++++++-------
migration/dirtyrate.h   |  19 +++-
migration/ram.c         |   8 +-
migration/trace-events  |   2 +
qapi/migration.json     |  46 ++++++++-
softmmu/memory.c        |  36 +++++--
softmmu/trace-events    |   1 +
10 files changed, 339 insertions(+), 62 deletions(-)
[PATCH v5 0/6] support dirtyrate at the granualrity of vcpu
Posted by huangy81@chinatelecom.cn 2 years, 10 months ago
From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>

v5:
- rename global_dirty_log to global_dirty_tracking on Peter's advice

- make global_dirty_tracking a bitmask:
  1. add assert statement to ensure starting dirty tracking repeatly
     not allowed.
  2. add assert statement to ensure dirty tracking cannot be stopped
     without having been started.

- protecting dirty rate stat info:
  1. drop the mutext for protecting dirty rate introduced in version 4
  2. change the code block in query_dirty_rate_info so that requirements
     of "safe racing" to the dirty rate stat can be meet

- make the helper function "record_dirtypages" inline and change
  the global var dirty_pages  to local var

- free DirtyRateVcpuList in case of memory leak

please review, thanks a lot.

v4:
- make global_dirty_log a bitmask:
  1. add comments about dirty log bitmask
  2. use assert statement to check validity of flags
  3. add trace to log bitmask changes

- introduce mode option to show what method calculation should be used,
  also, export mode option in the as last commmit

- split cleanup and init of dirty rate stat and move it in the main
  thread

- change the fields of DirtyPageRecord to uint64_t type so that we
  can calculation the increased dirty pages with the formula
  as Peter's advice: dirty pages = end_pages - start_pages

- introduce mutex to protect dirty rate stat info

- adjust order of registering thread

- drop the memory free callback

this version modify some code on Peter's advice, reference to:
https://lore.kernel.org/qemu-devel/YL5nNYXmrqMlXF3v@t490s/

thanks again.

v3:
- pick up "migration/dirtyrate: make sample page count configurable" to
  make patchset apply master correctly

v2:
- rebase to "migration/dirtyrate: make sample page count configurable"

- rename "vcpu" to "per_vcpu" to show the per-vcpu method

- squash patch 5/6 into a single one, squash patch 1/2 also

- pick up "hmp: Add "calc_dirty_rate" and "info dirty_rate" cmds"

- make global_dirty_log a bitmask to make sure both migration and dirty
  could not intefer with each other

- add memory free callback to prevent memory leaking

the most different of v2 fron v1 is that we make the global_dirty_log a
bitmask. the reason is dirty rate measurement may start or stop dirty
logging during calculation. this conflict with migration because stop
dirty log make migration leave dirty pages out then that'll be a
problem.

make global_dirty_log a bitmask can let both migration and dirty
rate measurement work fine. introduce GLOBAL_DIRTY_MIGRATION and
GLOBAL_DIRTY_DIRTY_RATE to distinguish what current dirty log aims
for, migration or dirty rate.

all references to global_dirty_log should be untouched because any bit
set there should justify that global dirty logging is enabled.

Please review, thanks !

v1:

Since the Dirty Ring on QEMU part has been merged recently, how to use
this feature is under consideration.

In the scene of migration, it is valuable to provide a more accurante
interface to track dirty memory than existing one, so that the upper
layer application can make a wise decision, or whatever. More
importantly,
dirtyrate info at the granualrity of vcpu could provide a possibility to
make migration convergent by imposing restriction on vcpu. With Dirty
Ring, we can calculate dirtyrate efficiently and cheaply.

The old interface implemented by sampling pages, it consumes cpu
resource, and the larger guest memory size become, the more cpu resource
it consumes, namely, hard to scale. New interface has no such drawback.

Please review, thanks !

Best Regards !

Hyman Huang(黄勇) (6):
  memory: rename global_dirty_log to global_dirty_tracking
  memory: make global_dirty_tracking a bitmask
  migration/dirtyrate: introduce struct and adjust DirtyRateStat
  migration/dirtyrate: adjust order of registering thread
  migration/dirtyrate: move init step of calculation to main thread
  migration/dirtyrate: implement dirty-ring dirtyrate calculation

 hmp-commands.hx         |   7 +-
 include/exec/memory.h   |  18 +++-
 include/exec/ram_addr.h |   4 +-
 migration/dirtyrate.c   | 260 +++++++++++++++++++++++++++++++++++++++++-------
 migration/dirtyrate.h   |  19 +++-
 migration/ram.c         |   8 +-
 migration/trace-events  |   2 +
 qapi/migration.json     |  46 ++++++++-
 softmmu/memory.c        |  36 +++++--
 softmmu/trace-events    |   1 +
 10 files changed, 339 insertions(+), 62 deletions(-)

-- 
1.8.3.1


Re: [PATCH v5 0/6] support dirtyrate at the granualrity of vcpu
Posted by no-reply@patchew.org 2 years, 10 months ago
Patchew URL: https://patchew.org/QEMU/cover.1623934182.git.huangy81@chinatelecom.cn/



Hi,

This series seems to have some coding style problems. See output below for
more information:

Type: series
Message-id: cover.1623934182.git.huangy81@chinatelecom.cn
Subject: [PATCH v5 0/6] support dirtyrate at the granualrity of vcpu 

=== TEST SCRIPT BEGIN ===
#!/bin/bash
git rev-parse base > /dev/null || exit 0
git config --local diff.renamelimit 0
git config --local diff.renames True
git config --local diff.algorithm histogram
./scripts/checkpatch.pl --mailback base..
=== TEST SCRIPT END ===

Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
From https://github.com/patchew-project/qemu
 * [new tag]         patchew/cover.1623934182.git.huangy81@chinatelecom.cn -> patchew/cover.1623934182.git.huangy81@chinatelecom.cn
Switched to a new branch 'test'
7c3806f migration/dirtyrate: implement dirty-ring dirtyrate calculation
de17d86 migration/dirtyrate: move init step of calculation to main thread
bcdab9c migration/dirtyrate: adjust order of registering thread
7df987c migration/dirtyrate: introduce struct and adjust DirtyRateStat
4cb2069 memory: make global_dirty_tracking a bitmask
1eaf085 memory: rename global_dirty_log to global_dirty_tracking

=== OUTPUT BEGIN ===
1/6 Checking commit 1eaf085f9a24 (memory: rename global_dirty_log to global_dirty_tracking)
2/6 Checking commit 4cb20690ee05 (memory: make global_dirty_tracking a bitmask)
3/6 Checking commit 7df987cc88c8 (migration/dirtyrate: introduce struct and adjust DirtyRateStat)
4/6 Checking commit bcdab9c720b2 (migration/dirtyrate: adjust order of registering thread)
5/6 Checking commit de17d8630d2f (migration/dirtyrate: move init step of calculation to main thread)
6/6 Checking commit 7c3806f92697 (migration/dirtyrate: implement dirty-ring dirtyrate calculation)
ERROR: trailing whitespace
#88: FILE: migration/dirtyrate.c:93:
+ $

WARNING: line over 80 characters
#94: FILE: migration/dirtyrate.c:99:
+            /* set sample_pages with 0 to indicate page sampling isn't enabled */

ERROR: trailing whitespace
#106: FILE: migration/dirtyrate.c:111:
+   $

ERROR: trailing whitespace
#325: FILE: migration/dirtyrate.c:658:
+    qapi_free_DirtyRateVcpuList(info->vcpu_dirty_rate); $

total: 3 errors, 1 warnings, 350 lines checked

Patch 6/6 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

=== OUTPUT END ===

Test command exited with code: 1


The full log is available at
http://patchew.org/logs/cover.1623934182.git.huangy81@chinatelecom.cn/testing.checkpatch/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com