[PATCH v4 0/7] util/oslib-posix: Support MADV_POPULATE_WRITE for os_mem_prealloc()

David Hildenbrand posted 7 patches 2 years, 6 months ago
Test checkpatch passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20211004120208.7409-1-david@redhat.com
include/qemu/osdep.h |   7 ++
softmmu/cpus.c       |   4 +
util/oslib-posix.c   | 231 ++++++++++++++++++++++++++++++++-----------
3 files changed, 187 insertions(+), 55 deletions(-)
[PATCH v4 0/7] util/oslib-posix: Support MADV_POPULATE_WRITE for os_mem_prealloc()
Posted by David Hildenbrand 2 years, 6 months ago
#1 is a preparation for improved error reporting, #2 adds support for
MADV_POPULATE_WRITE, #3 cleans up the code to avoid global variables and
prepare for concurrency, #4 and #5 optimize thread handling, #6 makes
os_mem_prealloc() safe to be called from multiple threads concurrently and
#7 makes the SIGBUS handler coexist cleanly with the MCE SIGBUS handler
under Linux.

Details regarding MADV_POPULATE_WRITE can be found in introducing upstream
Linux commits 4ca9b3859dac ("mm/madvise: introduce
MADV_POPULATE_(READ|WRITE) to prefault page tables") and eb2faa513c24
("mm/madvise: report SIGBUS as -EFAULT for MADV_POPULATE_(READ|WRITE)"),
and in the man page update [1].

v3 -> v4:
- Added ACKs
- "util/oslib-posix: Support concurrent os_mem_prealloc() invocation"
-- Remove stale comment from patch description

v2 -> v3:
- "util/oslib-posix: Let touch_all_pages() return an error"
-- Added
- Added ACKs/RBs
- "util/oslib-posix: Support MADV_POPULATE_WRITE for os_mem_prealloc()"
-- Set error code accordingly

v1 -> v2:
- "util/oslib-posix: Support MADV_POPULATE_WRITE for os_mem_prealloc()"
-- Handle thread with no data to initialize
-- Always set use_madv_populate_write properly
-- Add comment regarding future fallocate() optimization
- "util/oslib-posix: Don't create too many threads with small memory or
   little pages"
-- Added
- "util/oslib-posix: Avoid creating a single thread with
   MADV_POPULATE_WRITE"
-- Added
- "util/oslib-posix: Support concurrent os_mem_prealloc() invocation"
-- Add missing g_once_init_leave()
-- Move g_once_init_enter() to the place where it is actually needed
- "util/oslib-posix: Forward SIGBUS to MCE handler under Linux"
-- Added

[1] https://lkml.kernel.org/r/20210823120645.8223-1-david@redhat.com

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Igor Mammedov <imammedo@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: Dr. David Alan Gilbert <dgilbert@redhat.com>
Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com>
Cc: Daniel P. Berrangé <berrange@redhat.com>

David Hildenbrand (7):
  util/oslib-posix: Let touch_all_pages() return an error
  util/oslib-posix: Support MADV_POPULATE_WRITE for os_mem_prealloc()
  util/oslib-posix: Introduce and use MemsetContext for
    touch_all_pages()
  util/oslib-posix: Don't create too many threads with small memory or
    little pages
  util/oslib-posix: Avoid creating a single thread with
    MADV_POPULATE_WRITE
  util/oslib-posix: Support concurrent os_mem_prealloc() invocation
  util/oslib-posix: Forward SIGBUS to MCE handler under Linux

 include/qemu/osdep.h |   7 ++
 softmmu/cpus.c       |   4 +
 util/oslib-posix.c   | 231 ++++++++++++++++++++++++++++++++-----------
 3 files changed, 187 insertions(+), 55 deletions(-)

-- 
2.31.1


Re: [PATCH v4 0/7] util/oslib-posix: Support MADV_POPULATE_WRITE for os_mem_prealloc()
Posted by David Hildenbrand 2 years, 6 months ago
On 04.10.21 14:02, David Hildenbrand wrote:
> #1 is a preparation for improved error reporting, #2 adds support for
> MADV_POPULATE_WRITE, #3 cleans up the code to avoid global variables and
> prepare for concurrency, #4 and #5 optimize thread handling, #6 makes
> os_mem_prealloc() safe to be called from multiple threads concurrently and
> #7 makes the SIGBUS handler coexist cleanly with the MCE SIGBUS handler
> under Linux.
> 
> Details regarding MADV_POPULATE_WRITE can be found in introducing upstream
> Linux commits 4ca9b3859dac ("mm/madvise: introduce
> MADV_POPULATE_(READ|WRITE) to prefault page tables") and eb2faa513c24
> ("mm/madvise: report SIGBUS as -EFAULT for MADV_POPULATE_(READ|WRITE)"),
> and in the man page update [1].

Paolo, are you planning on taking this via your tree (POSIX)? Thanks!

-- 
Thanks,

David / dhildenb