icount: add sleep parameter to the icount option to set icount_sleep mode
The 'sleep' parameter sets the icount_sleep mode, which is enabled by default. To disable it, add the 'sleep=no' parameter (or 'nosleep') to the qemu -icount option. Signed-off-by: Victor CLEMENT <victor.clement@openwide.fr> Message-Id: <1432912446-9811-3-git-send-email-victor.clement@openwide.fr> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
5045e9d912
commit
f1f4b57e88
9
cpus.c
9
cpus.c
@ -520,11 +520,18 @@ void configure_icount(QemuOpts *opts, Error **errp)
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
icount_sleep = qemu_opt_get_bool(opts, "sleep", true);
|
||||
if (icount_sleep) {
|
||||
icount_warp_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL_RT,
|
||||
icount_warp_rt, NULL);
|
||||
}
|
||||
|
||||
icount_align_option = qemu_opt_get_bool(opts, "align", false);
|
||||
|
||||
if (icount_align_option && !icount_sleep) {
|
||||
error_setg(errp, "align=on and sleep=no are incompatible");
|
||||
}
|
||||
if (strcmp(option, "auto") != 0) {
|
||||
errno = 0;
|
||||
icount_time_shift = strtol(option, &rem_str, 0);
|
||||
@ -535,6 +542,8 @@ void configure_icount(QemuOpts *opts, Error **errp)
|
||||
return;
|
||||
} else if (icount_align_option) {
|
||||
error_setg(errp, "shift=auto and align=on are incompatible");
|
||||
} else if (!icount_sleep) {
|
||||
error_setg(errp, "shift=auto and sleep=no are incompatible");
|
||||
}
|
||||
|
||||
use_icount = 2;
|
||||
|
@ -3100,9 +3100,10 @@ re-inject them.
|
||||
ETEXI
|
||||
|
||||
DEF("icount", HAS_ARG, QEMU_OPTION_icount, \
|
||||
"-icount [shift=N|auto][,align=on|off]\n" \
|
||||
"-icount [shift=N|auto][,align=on|off][,sleep=no]\n" \
|
||||
" enable virtual instruction counter with 2^N clock ticks per\n" \
|
||||
" instruction and enable aligning the host and virtual clocks\n", QEMU_ARCH_ALL)
|
||||
" instruction, enable aligning the host and virtual clocks\n" \
|
||||
" or disable real time cpu sleeping\n", QEMU_ARCH_ALL)
|
||||
STEXI
|
||||
@item -icount [shift=@var{N}|auto]
|
||||
@findex -icount
|
||||
@ -3111,6 +3112,13 @@ instruction every 2^@var{N} ns of virtual time. If @code{auto} is specified
|
||||
then the virtual cpu speed will be automatically adjusted to keep virtual
|
||||
time within a few seconds of real time.
|
||||
|
||||
When the virtual cpu is sleeping, the virtual time will advance at default
|
||||
speed unless @option{sleep=no} is specified.
|
||||
With @option{sleep=no}, the virtual time will jump to the next timer deadline
|
||||
instantly whenever the virtual cpu goes to sleep mode and will not advance
|
||||
if no timer is enabled. This behavior give deterministic execution times from
|
||||
the guest point of view.
|
||||
|
||||
Note that while this option can give deterministic behavior, it does not
|
||||
provide cycle accurate emulation. Modern CPUs contain superscalar out of
|
||||
order cores with complex cache hierarchies. The number of instructions
|
||||
|
Loading…
Reference in New Issue
Block a user