[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [QEMU patch 2/2] kvm: allow configuration of tsc deadli
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [QEMU patch 2/2] kvm: allow configuration of tsc deadline timer advancement |
Date: |
Wed, 10 Dec 2014 18:01:21 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0 |
On 10/12/2014 17:23, Marcelo Tosatti wrote:
> Add machine option and QMP commands to configure TSC deadline
> timer advancement.
>
> Signed-off-by: Marcelo Tosatti <address@hidden>
>
> ---
> monitor.c | 15 ++++++++++
> qapi-schema.json | 29 +++++++++++++++++++
> qmp-commands.hx | 48 ++++++++++++++++++++++++++++++++
> target-i386/kvm.c | 80
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> vl.c | 4 ++
> 5 files changed, 176 insertions(+)
>
> Index: qemu.tscdeadline/qapi-schema.json
> ===================================================================
> --- qemu.tscdeadline.orig/qapi-schema.json
> +++ qemu.tscdeadline/qapi-schema.json
> @@ -3515,3 +3515,32 @@
> # Since: 2.1
> ##
> { 'command': 'rtc-reset-reinjection' }
> +
> +##
> +# @set-lapic-tscdeadline-advance
> +#
> +# This command sets the TSC deadline timer advancement.
> +# This value will be subtracted from the expiration time
> +# of the high resolution timer which emulates
> +# TSC deadline timer.
> +#
> +# Useful to achieve low timer latencies.
> +#
> +# Only supported by KVM acceleration.
> +#
> +# Since: 2.3
> +##
> +{ 'command': 'set-lapic-tscdeadline-advance',
> + 'data': { 'advance':'int' }
> +}
> +
> +##
> +# @get-lapic-tscdeadline-advance
> +#
> +# This command gets the TSC deadline timer advancement.
> +#
> +# Only supported by KVM acceleration.
> +#
> +# Since: 2.3
> +##
> +{ 'command': 'get-lapic-tscdeadline-advance', 'returns': 'int' }
Please add an object property to the x86 CPU object. It can then be
configured with "-global" on the command line.
> + ret = kvm_vm_ioctl(s, KVM_SET_TSCDEADLINE_ADVANCE, &adv);
> + if (ret < 0) {
> + return ret;
> + }
Please use KVM_GET/SET_ONE_REG instead of introducing a new set of ioctls.
Paolo
> + lapic_tscdeadline_advance.advance_ns = advance;
> +
> + return ret;
> +}
> +
> int kvm_arch_init(KVMState *s)
> {
> uint64_t identity_base = 0xfffbc000;
> uint64_t shadow_mem;
> int ret;
> struct utsname utsname;
> + uint32_t lapic_advance_ns;
>
> ret = kvm_get_supported_msrs(s);
> if (ret < 0) {
> @@ -894,9 +919,40 @@ int kvm_arch_init(KVMState *s)
> return ret;
> }
> }
> +
> + lapic_advance_ns = qemu_opt_get_number(qemu_get_machine_opts(),
> + "lapic-tscdeadline-advance",
> + 0);
> + if (lapic_advance_ns) {
> + ret = kvm_set_lapic_tscdeadline(s, lapic_advance_ns);
> + if (ret) {
> + fprintf(stderr, "Set tscdeadline advance failed: %s\n",
> + strerror(-ret));
> + return ret;
> + }
> + }
> +
> +
> return 0;
> }
>
> +int64_t qmp_get_lapic_tscdeadline_advance(Error **errp)
> +{
> + return lapic_tscdeadline_advance.advance_ns;
> +}
> +
> +void qmp_set_lapic_tscdeadline_advance(int64_t advance, Error **errp)
> +{
> + KVMState *s = kvm_state;
> + int ret;
> +
> + ret = kvm_set_lapic_tscdeadline(s, advance);
> + if (ret) {
> + error_setg_errno(errp, ret, "set lapic tscdeadline failed");
> + return;
> + }
> +}
> +
> static void set_v8086_seg(struct kvm_segment *lhs, const SegmentCache *rhs)
> {
> lhs->selector = rhs->selector;
> Index: qemu.tscdeadline/monitor.c
> ===================================================================
> --- qemu.tscdeadline.orig/monitor.c
> +++ qemu.tscdeadline/monitor.c
> @@ -5447,3 +5447,18 @@ void qmp_rtc_reset_reinjection(Error **e
> error_set(errp, QERR_FEATURE_DISABLED, "rtc-reset-reinjection");
> }
> #endif
> +
> +#if !defined (TARGET_I386) || !defined (CONFIG_KVM)
> +int64_t qmp_get_lapic_tscdeadline_advance(Error **errp)
> +{
> + error_set(errp, QERR_FEATURE_DISABLED, "get-lapic-tscdeadline-advance");
> +
> + return 0;
> +}
> +
> +void qmp_set_lapic_tscdeadline_advance(int64_t advance, Error **errp)
> +{
> + error_set(errp, QERR_FEATURE_DISABLED, "set-lapic-tscdeadline-advance");
> +}
> +#endif
> +
> Index: qemu.tscdeadline/include/hw/boards.h
> ===================================================================
> --- qemu.tscdeadline.orig/include/hw/boards.h
> +++ qemu.tscdeadline/include/hw/boards.h
> @@ -133,6 +133,7 @@ struct MachineState {
> bool usb;
> char *firmware;
> bool iommu;
> + int lapi_tscdeadline_advance;
>
> ram_addr_t ram_size;
> ram_addr_t maxram_size;
> Index: qemu.tscdeadline/qemu-options.hx
> ===================================================================
> --- qemu.tscdeadline.orig/qemu-options.hx
> +++ qemu.tscdeadline/qemu-options.hx
> @@ -37,7 +37,8 @@ DEF("machine", HAS_ARG, QEMU_OPTION_mach
> " kvm_shadow_mem=size of KVM shadow MMU\n"
> " dump-guest-core=on|off include guest memory in a core
> dump (default=on)\n"
> " mem-merge=on|off controls memory merge support
> (default: on)\n"
> - " iommu=on|off controls emulated Intel IOMMU (VT-d)
> support (default=off)\n",
> + " iommu=on|off controls emulated Intel IOMMU (VT-d)
> support (default=off)\n"
> + " lapic-tscdeadline-advance=value controls LAPIC
> tscdeadline timer advancement (default=0)\n",
> QEMU_ARCH_ALL)
> STEXI
> @item -machine address@hidden,address@hidden,...]]
> @@ -66,6 +67,8 @@ the host, de-duplicates identical memory
> (enabled by default).
> @item iommu=on|off
> Enables or disables emulated Intel IOMMU (VT-d) support. The default is off.
> address@hidden lapic-tscdeadline-advance=value
> +Defines the advancement of LAPIC TSC deadline timer, in nanoseconds.
> @end table
> ETEXI
>
> Index: qemu.tscdeadline/hw/core/machine.c
> ===================================================================
> --- qemu.tscdeadline.orig/hw/core/machine.c
> +++ qemu.tscdeadline/hw/core/machine.c
> @@ -72,6 +72,35 @@ static void machine_set_kvm_shadow_mem(O
> ms->kvm_shadow_mem = value;
> }
>
> +static void machine_get_lapic_tscdeadline_advance(Object *obj, Visitor *v,
> + void *opaque,
> + const char *name,
> + Error **errp)
> +{
> + MachineState *ms = MACHINE(obj);
> + int64_t value = ms->kvm_shadow_mem;
> +
> + visit_type_int(v, &value, name, errp);
> +}
> +
> +static void machine_set_lapic_tscdeadline_advance(Object *obj, Visitor *v,
> + void *opaque,
> + const char *name,
> + Error **errp)
> +{
> + MachineState *ms = MACHINE(obj);
> + Error *error = NULL;
> + int64_t value;
> +
> + visit_type_int(v, &value, name, &error);
> + if (error) {
> + error_propagate(errp, error);
> + return;
> + }
> +
> + ms->lapi_tscdeadline_advance = value;
> +}
> +
> static char *machine_get_kernel(Object *obj, Error **errp)
> {
> MachineState *ms = MACHINE(obj);
> @@ -299,6 +328,10 @@ static void machine_initfn(Object *obj)
> machine_get_kvm_shadow_mem,
> machine_set_kvm_shadow_mem,
> NULL, NULL, NULL);
> + object_property_add(obj, "lapic-tscdeadline-advance", "int",
> + machine_get_lapic_tscdeadline_advance,
> + machine_set_lapic_tscdeadline_advance,
> + NULL, NULL, NULL);
> object_property_add_str(obj, "kernel",
> machine_get_kernel, machine_set_kernel, NULL);
> object_property_add_str(obj, "initrd",
>
>
- [Qemu-devel] [QEMU patch 0/2] QEMU lapic tsc deadline advancement, Marcelo Tosatti, 2014/12/10
- [Qemu-devel] [QEMU patch 2/2] kvm: allow configuration of tsc deadline timer advancement, Marcelo Tosatti, 2014/12/10
- Re: [Qemu-devel] [QEMU patch 2/2] kvm: allow configuration of tsc deadline timer advancement,
Paolo Bonzini <=
- Re: [Qemu-devel] [QEMU patch 2/2] kvm: allow configuration of tsc deadline timer advancement, Marcelo Tosatti, 2014/12/10
- Re: [Qemu-devel] [QEMU patch 2/2] kvm: allow configuration of tsc deadline timer advancement, Paolo Bonzini, 2014/12/10
- Re: [Qemu-devel] [QEMU patch 2/2] kvm: allow configuration of tsc deadline timer advancement, Marcelo Tosatti, 2014/12/10
- Re: [Qemu-devel] [QEMU patch 2/2] kvm: allow configuration of tsc deadline timer advancement, Paolo Bonzini, 2014/12/10
- Re: [Qemu-devel] [QEMU patch 2/2] kvm: allow configuration of tsc deadline timer advancement, Marcelo Tosatti, 2014/12/10
- Re: [Qemu-devel] [QEMU patch 2/2] kvm: allow configuration of tsc deadline timer advancement, Paolo Bonzini, 2014/12/10
- Re: [Qemu-devel] [QEMU patch 2/2] kvm: allow configuration of tsc deadline timer advancement, Radim Krčmář, 2014/12/10
- Re: [Qemu-devel] [QEMU patch 2/2] kvm: allow configuration of tsc deadline timer advancement, Paolo Bonzini, 2014/12/10
Re: [Qemu-devel] [QEMU patch 2/2] kvm: allow configuration of tsc deadline timer advancement, Eric Blake, 2014/12/10
[Qemu-devel] [QEMU patch 1/2] kvm: sync kernel headers, Marcelo Tosatti, 2014/12/10