All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH for-2.8 0/4] Allow 'cache-clean-interval' in Linux only
@ 2016-11-25 11:27 Alberto Garcia
  2016-11-25 11:27 ` [Qemu-devel] [PATCH 1/4] qcow2: Make qcow2_cache_table_release() work only in Linux Alberto Garcia
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Alberto Garcia @ 2016-11-25 11:27 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-block, Kevin Wolf, Max Reitz, Alberto Garcia

Hi all,

The cache-clean-interval setting of qcow2 frees the memory of the L2
cache tables that haven't been used after a certain interval of time.

QEMU uses madvise() with MADV_DONTNEED for this. After that call, the
data in the specified cache tables is discarded by the kernel. The
problem with this behavior is that it is Linux-specific. madvise()
itself is not a standard system call and while other implementations
(e.g. FreeBSD) also have MADV_DONTNEED, they don't share the same
semantics.

POSIX defines posix_madvise(), which has POSIX_MADV_DONTNEED, and
that's what QEMU uses in systems that don't implement madvise().
However POSIX_MADV_DONTNEED also has different semantics and cannot be
used for our purposes. As a matter of fact, in glibc it is a no-op:

https://github.molgen.mpg.de/git-mirror/glibc/blob/glibc-2.23/sysdeps/unix/sysv/linux/posix_madvise.c

So while this all is mentioned in the QEMU documentation, there's
nothing preventing users of other systems from trying to use this
feature. In non-Linux systems it is worse than a no-op: it invalidates
perfectly valid cache tables for no reason without freeing their
memory.

This series makes Linux a hard requirement for cache-clean-interval
and prints an error message in other systems.

Regards,

Berto

Alberto Garcia (4):
  qcow2: Make qcow2_cache_table_release() work only in Linux
  qcow2: Allow 'cache-clean-interval' in Linux only
  qcow2: Remove stale comment
  docs: Specify that cache-clean-interval is only supported in Linux

 block/qcow2-cache.c  | 6 +++---
 block/qcow2.c        | 8 ++++++++
 docs/qcow2-cache.txt | 5 +++--
 3 files changed, 14 insertions(+), 5 deletions(-)

-- 
2.10.2

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

end of thread, other threads:[~2016-11-28 14:46 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-11-25 11:27 [Qemu-devel] [PATCH for-2.8 0/4] Allow 'cache-clean-interval' in Linux only Alberto Garcia
2016-11-25 11:27 ` [Qemu-devel] [PATCH 1/4] qcow2: Make qcow2_cache_table_release() work only in Linux Alberto Garcia
2016-11-25 11:27 ` [Qemu-devel] [PATCH 2/4] qcow2: Allow 'cache-clean-interval' in Linux only Alberto Garcia
2016-11-25 11:27 ` [Qemu-devel] [PATCH 3/4] qcow2: Remove stale comment Alberto Garcia
2016-11-25 11:27 ` [Qemu-devel] [PATCH 4/4] docs: Specify that cache-clean-interval is only supported in Linux Alberto Garcia
2016-11-28 14:46 ` [Qemu-devel] [PATCH for-2.8 0/4] Allow 'cache-clean-interval' in Linux only Kevin Wolf

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.