From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:46446) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UKs7k-0005V1-Cd for qemu-devel@nongnu.org; Wed, 27 Mar 2013 11:18:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UKs7i-0005FP-Fj for qemu-devel@nongnu.org; Wed, 27 Mar 2013 11:18:48 -0400 Received: from e23smtp04.au.ibm.com ([202.81.31.146]:60793) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UKs7h-00057R-NZ for qemu-devel@nongnu.org; Wed, 27 Mar 2013 11:18:46 -0400 Received: from /spool/local by e23smtp04.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 28 Mar 2013 01:07:29 +1000 Received: from d23relay05.au.ibm.com (d23relay05.au.ibm.com [9.190.235.152]) by d23dlp02.au.ibm.com (Postfix) with ESMTP id 6E8FF2BB005B for ; Thu, 28 Mar 2013 02:18:07 +1100 (EST) Received: from d23av03.au.ibm.com (d23av03.au.ibm.com [9.190.234.97]) by d23relay05.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r2RF4urf58720504 for ; Thu, 28 Mar 2013 02:04:56 +1100 Received: from d23av03.au.ibm.com (loopback [127.0.0.1]) by d23av03.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r2RFI67D025937 for ; Thu, 28 Mar 2013 02:18:06 +1100 From: Anthony Liguori In-Reply-To: <8631DC5930FA9E468F04F3FD3A5D00721AFE9AE6@USINDEM103.corp.hds.com> References: <8631DC5930FA9E468F04F3FD3A5D00721AFE9AE6@USINDEM103.corp.hds.com> Date: Wed, 27 Mar 2013 10:18:00 -0500 Message-ID: <87mwto98if.fsf@codemonkey.ws> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Subject: Re: [Qemu-devel] [PATCH v4] Add option to mlock qemu and guest memory List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Satoru Moriya , "qemu-devel@nongnu.org" Cc: "dle-develop@lists.sourceforge.net" , "satoru.moriya.br@hitachi.com" , Jan Kiszka , "mtosatti@redhat.com" , Tomoki Sekiyama , Paolo Bonzini , Seiji Aguchi Satoru Moriya writes: > In certain scenario, latency induced by paging is significant and > memory locking is needed. Also, in the scenario with untrusted > guests, latency improvement due to mlock is desired. > > This patch introduces a following new option to mlock guest and > qemu memory: > > -realtime mlock=on|off > > Signed-off-by: Satoru Moriya > Reviewed-by: Paolo Bonzini > Reviewed-by: Marcelo Tosatti This patch doesn't apply because you're sending it MIME encoded and the patch has carriage returns in it. I think your mailer is badly munging the patch. Please send it via git-send-email directly from the repository. Regards, Anthony Liguori > --- > ChangeLog: > v4 > - Update commit message > v3 > - Modify os_mlock() to return error code > - Update configure_realtime() to handle return value from os_mlock() > - Change the variable name from is_mlock to enable_mlock in configure_realtime() > - Rebase qemu version 1.4.50 > > v2 > - Change option name from -mlock to -realtime mlock=on|off > - Rebase qemu version 1.3.91 > - Update patch description > > include/sysemu/os-posix.h | 1 + > include/sysemu/os-win32.h | 5 +++++ > os-posix.c | 12 ++++++++++++ > qemu-options.hx | 13 +++++++++++++ > vl.c | 34 ++++++++++++++++++++++++++++++++++ > 5 files changed, 65 insertions(+) > > diff --git a/include/sysemu/os-posix.h b/include/sysemu/os-posix.h > index 7f198e4..25d0b2a 100644 > --- a/include/sysemu/os-posix.h > +++ b/include/sysemu/os-posix.h > @@ -31,6 +31,7 @@ void os_set_proc_name(const char *s); > void os_setup_signal_handling(void); > void os_daemonize(void); > void os_setup_post(void); > +int os_mlock(void); > > typedef struct timeval qemu_timeval; > #define qemu_gettimeofday(tp) gettimeofday(tp, NULL) > diff --git a/include/sysemu/os-win32.h b/include/sysemu/os-win32.h > index 71f5fa0..bf8523a 100644 > --- a/include/sysemu/os-win32.h > +++ b/include/sysemu/os-win32.h > @@ -106,4 +106,9 @@ static inline bool is_daemonized(void) > return false; > } > > +static inline int os_mlock(void) > +{ > + return -ENOSYS; > +} > + > #endif > diff --git a/os-posix.c b/os-posix.c > index 5c64518..d39261d 100644 > --- a/os-posix.c > +++ b/os-posix.c > @@ -363,3 +363,15 @@ bool is_daemonized(void) > { > return daemonize; > } > + > +int os_mlock(void) > +{ > + int ret = 0; > + > + ret = mlockall(MCL_CURRENT | MCL_FUTURE); > + if (ret < 0) { > + perror("mlockall"); > + } > + > + return ret; > +} > diff --git a/qemu-options.hx b/qemu-options.hx > index 06dd565..1ec9541 100644 > --- a/qemu-options.hx > +++ b/qemu-options.hx > @@ -2569,6 +2569,19 @@ STEXI > Do not start CPU at startup (you must type 'c' in the monitor). > ETEXI > > +DEF("realtime", HAS_ARG, QEMU_OPTION_realtime, > + "-realtime [mlock=on|off]\n" > + " run qemu with realtime features\n" > + " mlock=on|off controls mlock support (default: on)\n", > + QEMU_ARCH_ALL) > +STEXI > +@item -realtime mlock=on|off > +@findex -realtime > +Run qemu with realtime features. > +mlocking qemu and guest memory can be enabled via @option{mlock=on} > +(enabled by default). > +ETEXI > + > DEF("gdb", HAS_ARG, QEMU_OPTION_gdb, \ > "-gdb dev wait for gdb connection on 'dev'\n", QEMU_ARCH_ALL) > STEXI > diff --git a/vl.c b/vl.c > index aeed7f4..71bbcf1 100644 > --- a/vl.c > +++ b/vl.c > @@ -521,6 +521,18 @@ static QemuOptsList qemu_tpmdev_opts = { > }, > }; > > +static QemuOptsList qemu_realtime_opts = { > + .name = "realtime", > + .head = QTAILQ_HEAD_INITIALIZER(qemu_realtime_opts.head), > + .desc = { > + { > + .name = "mlock", > + .type = QEMU_OPT_BOOL, > + }, > + { /* end of list */ } > + }, > +}; > + > const char *qemu_get_vm_name(void) > { > return qemu_name; > @@ -1420,6 +1432,20 @@ static void smp_parse(const char *optarg) > max_cpus = smp_cpus; > } > > +static void configure_realtime(QemuOpts *opts) > +{ > + bool enable_mlock; > + > + enable_mlock = qemu_opt_get_bool(opts, "mlock", true); > + > + if (enable_mlock) { > + if (os_mlock() < 0) { > + fprintf(stderr, "qemu: locking memory failed\n"); > + exit(1); > + } > + } > +} > + > /***********************************************************/ > /* USB devices */ > > @@ -2909,6 +2935,7 @@ int main(int argc, char **argv, char **envp) > qemu_add_opts(&qemu_add_fd_opts); > qemu_add_opts(&qemu_object_opts); > qemu_add_opts(&qemu_tpmdev_opts); > + qemu_add_opts(&qemu_realtime_opts); > > runstate_init(); > > @@ -3878,6 +3905,13 @@ int main(int argc, char **argv, char **envp) > exit(1); > } > break; > + case QEMU_OPTION_realtime: > + opts = qemu_opts_parse(qemu_find_opts("realtime"), optarg, 0); > + if (!opts) { > + exit(1); > + } > + configure_realtime(opts); > + break; > default: > os_parse_cmd_args(popt->index, optarg); > } > -- > 1.7.11.7