qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v3 00/38] bitmap queue
@ 2013-12-17 15:25 Juan Quintela
  2013-12-17 15:25 ` [Qemu-devel] [PATCH 01/38] bitmap: use long as index Juan Quintela
                   ` (37 more replies)
  0 siblings, 38 replies; 78+ messages in thread
From: Juan Quintela @ 2013-12-17 15:25 UTC (permalink / raw)
  To: qemu-devel


Hi

This is the last version of the bitmap patches, changes from last submission:
- cleanups: now it passes checkpatch
- all coments from Eric & Paolo addressed
- fixed problem with DIRTY_MEMORY_NUM
- tested by Vinod and numbers are very good
- move bitmap operations to take long as index
- round ram_addr's of blocks as suggesetd by Paolo.

If there is no negative comments, will sent for inclusion.

Thanks, Juan.


[v2]
In this version:
- fixed all the comments from last versions (thanks Eric)
- kvm migration bitmap is synchronized using bitmap operations
- qemu bitmap -> migration bitmap is synchronized using bitmap operations
If bitmaps are not properly aligned, we fall back to old code.
Code survives virt-tests, so should be in quite good shape.

ToDo list:

- vga ram by default is not aligned in a page number multiple of 64,

  it could be optimized.  Kraxel?  It syncs the kvm bitmap at least 1
  a second or so? bitmap is only 2048 pages (16MB by default).
  We need to change the ram_addr only

- vga: still more, after we finish migration, vga code continues
  synchronizing the kvm bitmap on source machine.  Notice that there
  is no graphics client connected to the VGA.  Worth investigating?

- I haven't yet meassure speed differences on big hosts.  Vinod?

- Depending of performance, more optimizations to do.

- debugging printf's still on the code, just to see if we are taking
  (or not) the optimized paths.

And that is all.  Please test & comment.

Thanks, Juan.

The following changes since commit f46e720a82ccdf1a521cf459448f3f96ed895d43:

  qemu_opts_parse(): always check return value (2013-12-16 15:33:48 -0800)

are available in the git repository at:

  git://github.com/juanquintela/qemu.git bitmap.next

for you to fetch changes up to 197a77684c35f75e43d937220ffac72101783384:

  ram: align ram_addr_t's regions in multiples of 64 (2013-12-17 15:56:04 +0100)

----------------------------------------------------------------
Juan Quintela (38):
      bitmap: use long as index
      memory: cpu_physical_memory_set_dirty_flags() result is never used
      memory: cpu_physical_memory_set_dirty_range() return void
      exec: use accessor function to know if memory is dirty
      memory: create function to set a single dirty bit
      exec: create function to get a single dirty bit
      memory: make cpu_physical_memory_is_dirty return bool
      memory: all users of cpu_physical_memory_get_dirty used only one flag
      memory: set single dirty flags when possible
      memory: cpu_physical_memory_set_dirty_range() always dirty all flags
      memory: cpu_physical_memory_mask_dirty_range() always clears a single flag
      memory: use bit 2 for migration
      memory: make sure that client is always inside range
      memory: only resize dirty bitmap when memory size increases
      memory: cpu_physical_memory_clear_dirty_flag() result is never used
      bitmap: Add bitmap_zero_extend operation
      memory: split dirty bitmap into three
      memory: unfold cpu_physical_memory_clear_dirty_flag() in its only user
      memory: unfold cpu_physical_memory_set_dirty() in its only user
      memory: unfold cpu_physical_memory_set_dirty_flag()
      memory: make cpu_physical_memory_get_dirty() the main function
      memory: cpu_physical_memory_get_dirty() is used as returning a bool
      memory: s/mask/clear/ cpu_physical_memory_mask_dirty_range
      memory: use find_next_bit() to find dirty bits
      memory: cpu_physical_memory_set_dirty_range() now uses bitmap operations
      memory: cpu_physical_memory_clear_dirty_range() now uses bitmap operations
      memory: s/dirty/clean/ in cpu_physical_memory_is_dirty()
      memory: make cpu_physical_memory_reset_dirty() take a length parameter
      memory: cpu_physical_memory_set_dirty_tracking() should return void
      memory: split cpu_physical_memory_* functions to its own include
      memory: unfold memory_region_test_and_clear()
      kvm: use directly cpu_physical_memory_* api for tracking dirty pages
      kvm: refactor start address calculation
      memory: move bitmap synchronization to its own function
      memory: syncronize kvm bitmap using bitmaps operations
      ram: split function that synchronizes a range
      migration: synchronize memory bitmap 64bits at a time
      ram: align ram_addr_t's regions in multiples of 64

 arch_init.c                    |  52 ++++++++++++---
 cputlb.c                       |  11 +--
 exec.c                         |  78 +++++++++++-----------
 include/exec/cpu-all.h         |   3 +-
 include/exec/memory-internal.h |  90 -------------------------
 include/exec/memory.h          |  12 ++--
 include/exec/ram_addr.h        | 147 +++++++++++++++++++++++++++++++++++++++++
 include/qemu/bitmap.h          |  86 +++++++++++++-----------
 include/qemu/bitops.h          |  14 ++--
 kvm-all.c                      |  28 ++------
 memory.c                       |  17 ++---
 util/bitmap.c                  |  60 ++++++++---------
 12 files changed, 337 insertions(+), 261 deletions(-)
 create mode 100644 include/exec/ram_addr.h

^ permalink raw reply	[flat|nested] 78+ messages in thread

end of thread, other threads:[~2013-12-24 13:24 UTC | newest]

Thread overview: 78+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-17 15:25 [Qemu-devel] [PATCH v3 00/38] bitmap queue Juan Quintela
2013-12-17 15:25 ` [Qemu-devel] [PATCH 01/38] bitmap: use long as index Juan Quintela
2013-12-17 18:05   ` Eric Blake
2013-12-17 18:27     ` Stefan Weil
2013-12-17 20:21     ` Juan Quintela
2013-12-24 13:24   ` Orit Wasserman
2013-12-17 15:25 ` [Qemu-devel] [PATCH 02/38] memory: cpu_physical_memory_set_dirty_flags() result is never used Juan Quintela
2013-12-17 15:25 ` [Qemu-devel] [PATCH 03/38] memory: cpu_physical_memory_set_dirty_range() return void Juan Quintela
2013-12-17 15:25 ` [Qemu-devel] [PATCH 04/38] exec: use accessor function to know if memory is dirty Juan Quintela
2013-12-17 15:25 ` [Qemu-devel] [PATCH 05/38] memory: create function to set a single dirty bit Juan Quintela
2013-12-17 15:25 ` [Qemu-devel] [PATCH 06/38] exec: create function to get " Juan Quintela
2013-12-17 15:25 ` [Qemu-devel] [PATCH 07/38] memory: make cpu_physical_memory_is_dirty return bool Juan Quintela
2013-12-18 10:08   ` Orit Wasserman
2013-12-17 15:25 ` [Qemu-devel] [PATCH 08/38] memory: all users of cpu_physical_memory_get_dirty used only one flag Juan Quintela
2013-12-18 10:09   ` Orit Wasserman
2013-12-17 15:25 ` [Qemu-devel] [PATCH 09/38] memory: set single dirty flags when possible Juan Quintela
2013-12-18 10:10   ` Orit Wasserman
2013-12-17 15:25 ` [Qemu-devel] [PATCH 10/38] memory: cpu_physical_memory_set_dirty_range() always dirty all flags Juan Quintela
2013-12-18 10:12   ` Orit Wasserman
2013-12-17 15:25 ` [Qemu-devel] [PATCH 11/38] memory: cpu_physical_memory_mask_dirty_range() always clears a single flag Juan Quintela
2013-12-18 10:14   ` Orit Wasserman
2013-12-17 15:25 ` [Qemu-devel] [PATCH 12/38] memory: use bit 2 for migration Juan Quintela
2013-12-18 10:15   ` Orit Wasserman
2013-12-17 15:25 ` [Qemu-devel] [PATCH 13/38] memory: make sure that client is always inside range Juan Quintela
2013-12-18 10:16   ` Orit Wasserman
2013-12-17 15:25 ` [Qemu-devel] [PATCH 14/38] memory: only resize dirty bitmap when memory size increases Juan Quintela
2013-12-18 10:17   ` Orit Wasserman
2013-12-17 15:25 ` [Qemu-devel] [PATCH 15/38] memory: cpu_physical_memory_clear_dirty_flag() result is never used Juan Quintela
2013-12-18 10:17   ` Orit Wasserman
2013-12-17 15:25 ` [Qemu-devel] [PATCH 16/38] bitmap: Add bitmap_zero_extend operation Juan Quintela
2013-12-18 10:18   ` Orit Wasserman
2013-12-17 15:25 ` [Qemu-devel] [PATCH 17/38] memory: split dirty bitmap into three Juan Quintela
2013-12-18 10:22   ` Orit Wasserman
2013-12-17 15:25 ` [Qemu-devel] [PATCH 18/38] memory: unfold cpu_physical_memory_clear_dirty_flag() in its only user Juan Quintela
2013-12-18 10:28   ` Orit Wasserman
2013-12-18 10:36   ` Orit Wasserman
2013-12-17 15:25 ` [Qemu-devel] [PATCH 19/38] memory: unfold cpu_physical_memory_set_dirty() " Juan Quintela
2013-12-18 10:28   ` Orit Wasserman
2013-12-17 15:25 ` [Qemu-devel] [PATCH 20/38] memory: unfold cpu_physical_memory_set_dirty_flag() Juan Quintela
2013-12-18 10:29   ` Orit Wasserman
2013-12-17 15:25 ` [Qemu-devel] [PATCH 21/38] memory: make cpu_physical_memory_get_dirty() the main function Juan Quintela
2013-12-18 10:30   ` Orit Wasserman
2013-12-17 15:25 ` [Qemu-devel] [PATCH 22/38] memory: cpu_physical_memory_get_dirty() is used as returning a bool Juan Quintela
2013-12-18 10:33   ` Orit Wasserman
2013-12-17 15:25 ` [Qemu-devel] [PATCH 23/38] memory: s/mask/clear/ cpu_physical_memory_mask_dirty_range Juan Quintela
2013-12-18 10:38   ` Orit Wasserman
2013-12-17 15:26 ` [Qemu-devel] [PATCH 24/38] memory: use find_next_bit() to find dirty bits Juan Quintela
2013-12-18 11:48   ` Orit Wasserman
2013-12-17 15:26 ` [Qemu-devel] [PATCH 25/38] memory: cpu_physical_memory_set_dirty_range() now uses bitmap operations Juan Quintela
2013-12-18 11:50   ` Orit Wasserman
2013-12-17 15:26 ` [Qemu-devel] [PATCH 26/38] memory: cpu_physical_memory_clear_dirty_range() " Juan Quintela
2013-12-18 11:50   ` Orit Wasserman
2013-12-17 15:26 ` [Qemu-devel] [PATCH 27/38] memory: s/dirty/clean/ in cpu_physical_memory_is_dirty() Juan Quintela
2013-12-18 11:51   ` Orit Wasserman
2013-12-17 15:26 ` [Qemu-devel] [PATCH 28/38] memory: make cpu_physical_memory_reset_dirty() take a length parameter Juan Quintela
2013-12-18 11:53   ` Orit Wasserman
2013-12-17 15:26 ` [Qemu-devel] [PATCH 29/38] memory: cpu_physical_memory_set_dirty_tracking() should return void Juan Quintela
2013-12-18 11:54   ` Orit Wasserman
2013-12-17 15:26 ` [Qemu-devel] [PATCH 30/38] memory: split cpu_physical_memory_* functions to its own include Juan Quintela
2013-12-18 12:12   ` Orit Wasserman
2013-12-17 15:26 ` [Qemu-devel] [PATCH 31/38] memory: unfold memory_region_test_and_clear() Juan Quintela
2013-12-18 12:25   ` Orit Wasserman
2013-12-17 15:26 ` [Qemu-devel] [PATCH 32/38] kvm: use directly cpu_physical_memory_* api for tracking dirty pages Juan Quintela
2013-12-19 10:03   ` Orit Wasserman
2013-12-19 10:06   ` Peter Maydell
2013-12-19 13:24     ` Juan Quintela
2013-12-17 15:26 ` [Qemu-devel] [PATCH 33/38] kvm: refactor start address calculation Juan Quintela
2013-12-19 10:04   ` Orit Wasserman
2013-12-17 15:26 ` [Qemu-devel] [PATCH 34/38] memory: move bitmap synchronization to its own function Juan Quintela
2013-12-19 10:08   ` Orit Wasserman
2013-12-17 15:26 ` [Qemu-devel] [PATCH 35/38] memory: syncronize kvm bitmap using bitmaps operations Juan Quintela
2013-12-19 10:25   ` Orit Wasserman
2013-12-17 15:26 ` [Qemu-devel] [PATCH 36/38] ram: split function that synchronizes a range Juan Quintela
2013-12-19 10:45   ` Orit Wasserman
2013-12-17 15:26 ` [Qemu-devel] [PATCH 37/38] migration: synchronize memory bitmap 64bits at a time Juan Quintela
2013-12-19 11:22   ` Orit Wasserman
2013-12-17 15:26 ` [Qemu-devel] [PATCH 38/38] ram: align ram_addr_t's regions in multiples of 64 Juan Quintela
2013-12-17 16:05   ` Juan Quintela

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).