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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
icount_sleep = qemu_opt_get_bool(opts, "sleep", true);
|
||||||
if (icount_sleep) {
|
if (icount_sleep) {
|
||||||
icount_warp_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL_RT,
|
icount_warp_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL_RT,
|
||||||
icount_warp_rt, NULL);
|
icount_warp_rt, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
icount_align_option = qemu_opt_get_bool(opts, "align", false);
|
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) {
|
if (strcmp(option, "auto") != 0) {
|
||||||
errno = 0;
|
errno = 0;
|
||||||
icount_time_shift = strtol(option, &rem_str, 0);
|
icount_time_shift = strtol(option, &rem_str, 0);
|
||||||
@ -535,6 +542,8 @@ void configure_icount(QemuOpts *opts, Error **errp)
|
|||||||
return;
|
return;
|
||||||
} else if (icount_align_option) {
|
} else if (icount_align_option) {
|
||||||
error_setg(errp, "shift=auto and align=on are incompatible");
|
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;
|
use_icount = 2;
|
||||||
|
@ -3100,9 +3100,10 @@ re-inject them.
|
|||||||
ETEXI
|
ETEXI
|
||||||
|
|
||||||
DEF("icount", HAS_ARG, QEMU_OPTION_icount, \
|
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" \
|
" 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
|
STEXI
|
||||||
@item -icount [shift=@var{N}|auto]
|
@item -icount [shift=@var{N}|auto]
|
||||||
@findex -icount
|
@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
|
then the virtual cpu speed will be automatically adjusted to keep virtual
|
||||||
time within a few seconds of real time.
|
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
|
Note that while this option can give deterministic behavior, it does not
|
||||||
provide cycle accurate emulation. Modern CPUs contain superscalar out of
|
provide cycle accurate emulation. Modern CPUs contain superscalar out of
|
||||||
order cores with complex cache hierarchies. The number of instructions
|
order cores with complex cache hierarchies. The number of instructions
|
||||||
|
Loading…
Reference in New Issue
Block a user