qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Wanlong Gao <gaowanlong@cn.fujitsu.com>
To: qemu-devel@nongnu.org
Cc: aliguori@us.ibm.com, ehabkost@redhat.com, lersek@redhat.com,
	peter.huangpeng@huawei.com, lcapitulino@redhat.com,
	drjones@redhat.com, bsd@redhat.com, hutao@cn.fujitsu.com,
	y-goto@jp.fujitsu.com, pbonzini@redhat.com, afaerber@suse.de,
	Wanlong Gao <gaowanlong@cn.fujitsu.com>
Subject: Re: [Qemu-devel] [PATCH V13 00/13] Add support for binding guest numa nodes to host numa nodes
Date: Wed, 25 Sep 2013 09:28:16 +0800	[thread overview]
Message-ID: <52423C30.7030807@cn.fujitsu.com> (raw)
In-Reply-To: <1379387785-14554-1-git-send-email-gaowanlong@cn.fujitsu.com>

Hi folks,

Any comments on this version?


Thanks,
Wanlong Gao

> As you know, QEMU can't direct it's memory allocation now, this may cause
> guest cross node access performance regression.
> And, the worse thing is that if PCI-passthrough is used,
> direct-attached-device uses DMA transfer between device and qemu process.
> All pages of the guest will be pinned by get_user_pages().
> 
> KVM_ASSIGN_PCI_DEVICE ioctl
>   kvm_vm_ioctl_assign_device()
>     =>kvm_assign_device()
>       => kvm_iommu_map_memslots()
>         => kvm_iommu_map_pages()
>            => kvm_pin_pages()
> 
> So, with direct-attached-device, all guest page's page count will be +1 and
> any page migration will not work. AutoNUMA won't too.
> 
> So, we should set the guest nodes memory allocation policy before
> the pages are really mapped.
> 
> According to this patch set, we are able to set guest nodes memory policy
> like following:
> 
>  -numa node,nodeid=0,cpus=0, \
>  -numa mem,size=1024M,policy=membind,host-nodes=0-1 \
>  -numa node,nodeid=1,cpus=1 \
>  -numa mem,size=1024M,policy=interleave,host-nodes=1
> 
> This supports "policy={default|membind|interleave|preferred},relative=true,host-nodes=N-N" like format.
> 
> 
> Also add "set-mem-policy" QMP and hmp command to set memory policy.
> 
> And add a QMP command "query-numa" to show numa info through
> this API.
> 
> And convert the "info numa" monitor command to use this
> QMP command "query-numa".
> 
> 
> V1->V2:
>     change to use QemuOpts in numa options (Paolo)
>     handle Error in mpol parser (Paolo)
>     change qmp command format to mem-policy=membind,mem-hostnode=0-1 like (Paolo)
> V2->V3:
>     also handle Error in cpus parser (5/10)
>     split out common parser from cpus and hostnode parser (Bandan 6/10)
> V3-V4:
>     rebase to request for comments
> V4->V5:
>     use OptVisitor and split -numa option (Paolo)
>      - s/set-mpol/set-mem-policy (Andreas)
>      - s/mem-policy/policy
>      - s/mem-hostnode/host-nodes
>     fix hmp command process after error (Luiz)
>     add qmp command query-numa and convert info numa to it (Luiz)
> V5->V6:
>     remove tabs in json file (Laszlo, Paolo)
>     add back "-numa node,mem=xxx" as legacy (Paolo)
>     change cpus and host-nodes to array (Laszlo, Eric)
>     change "nodeid" to "uint16"
>     add NumaMemPolicy enum type (Eric)
>     rebased on Laszlo's "OptsVisitor: support / flatten integer ranges for repeating options" patch set, thanks for Laszlo's help
> V6-V7:
>     change UInt16 to uint16 (Laszlo)
>     fix a typo in adding qmp command set-mem-policy
> V7-V8:
>     rebase to current master with Laszlo's V2 of OptsVisitor patch set
>     fix an adding white space line error
> V8->V9:
>     rebase to current master
>     check if total numa memory size is equal to ram_size (Paolo)
>     add comments to the OptsVisitor stuff in qapi-schema.json (Eric, Laszlo)
>     replace the use of numa_num_configured_nodes() (Andrew)
>     avoid abusing the fact i==nodeid (Andrew)
> V9->V10:
>     rebase to current master
>     remove libnuma (Andrew)
>     MAX_NODES=64 -> MAX_NODES=128 since libnuma selected 128 (Andrew)
>     use MAX_NODES instead of MAX_CPUMASK_BITS for host_mem bitmap (Andrew)
>     remove a useless clear_bit() operation (Andrew)
> V10->V11:
>     rebase to current master
>     fix "maxnode" argument of mbind(2)
> V11->V12:
>     rebase to current master
>     split patch 02/11 of V11 (Eduardo)
>     add some max value check (Eduardo)
>     split MAX_NODES change patch (Eduardo)
> V12->V13:
>     rebase to current master
>     thanks for Luiz's review (Luiz)
>     doc hmp command set-mem-policy (Luiz)
>     rename: NUMAInfo -> NUMANode (Luiz)
> 
> 
> *I hope this can catch up the train of 1.7.*
> 
> Thanks,
> Wanlong Gao
> 
> Wanlong Gao (13):
>   NUMA: move numa related code to new file numa.c
>   NUMA: check if the total numa memory size is equal to ram_size
>   NUMA: Add numa_info structure to contain numa nodes info
>   NUMA: convert -numa option to use OptsVisitor
>   NUMA: introduce NumaMemOptions
>   NUMA: add "-numa mem," options
>   NUMA: expand MAX_NODES from 64 to 128
>   NUMA: parse guest numa nodes memory policy
>   NUMA: set guest numa nodes memory policy
>   NUMA: add qmp command set-mem-policy to set memory policy for NUMA
>     node
>   NUMA: add hmp command set-mem-policy
>   NUMA: add qmp command query-numa
>   NUMA: convert hmp command info_numa to use qmp command query_numa
> 
>  Makefile.target         |   2 +-
>  cpus.c                  |  14 --
>  hmp-commands.hx         |  28 +++
>  hmp.c                   | 119 +++++++++++++
>  hmp.h                   |   2 +
>  hw/i386/pc.c            |   4 +-
>  include/sysemu/cpus.h   |   1 -
>  include/sysemu/sysemu.h |  18 +-
>  monitor.c               |  21 +--
>  numa.c                  | 460 ++++++++++++++++++++++++++++++++++++++++++++++++
>  qapi-schema.json        | 133 ++++++++++++++
>  qemu-options.hx         |   6 +-
>  qmp-commands.hx         |  90 ++++++++++
>  vl.c                    | 160 ++---------------
>  14 files changed, 873 insertions(+), 185 deletions(-)
>  create mode 100644 numa.c
> 

      parent reply	other threads:[~2013-09-25  1:40 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-17  3:16 [Qemu-devel] [PATCH V13 00/13] Add support for binding guest numa nodes to host numa nodes Wanlong Gao
2013-09-17  3:16 ` [Qemu-devel] [PATCH V13 01/13] NUMA: move numa related code to new file numa.c Wanlong Gao
2013-09-17  3:16 ` [Qemu-devel] [PATCH V13 02/13] NUMA: check if the total numa memory size is equal to ram_size Wanlong Gao
2013-09-17  3:16 ` [Qemu-devel] [PATCH V13 03/13] NUMA: Add numa_info structure to contain numa nodes info Wanlong Gao
2013-09-17  3:16 ` [Qemu-devel] [PATCH V13 04/13] NUMA: convert -numa option to use OptsVisitor Wanlong Gao
2013-09-17  3:16 ` [Qemu-devel] [PATCH V13 05/13] NUMA: introduce NumaMemOptions Wanlong Gao
2013-09-17  3:16 ` [Qemu-devel] [PATCH V13 06/13] NUMA: add "-numa mem," options Wanlong Gao
2013-09-17  3:16 ` [Qemu-devel] [PATCH V13 07/13] NUMA: expand MAX_NODES from 64 to 128 Wanlong Gao
2013-09-17  3:16 ` [Qemu-devel] [PATCH V13 08/13] NUMA: parse guest numa nodes memory policy Wanlong Gao
2013-09-17  3:16 ` [Qemu-devel] [PATCH V13 09/13] NUMA: set " Wanlong Gao
2013-09-17  3:16 ` [Qemu-devel] [PATCH V13 10/13] NUMA: add qmp command set-mem-policy to set memory policy for NUMA node Wanlong Gao
2013-10-03  2:13   ` Marcelo Tosatti
2013-10-04  0:04     ` Marcelo Tosatti
2013-10-04  8:13       ` Paolo Bonzini
2013-10-07  1:28         ` Wanlong Gao
2013-09-17  3:16 ` [Qemu-devel] [PATCH V13 11/13] NUMA: add hmp command set-mem-policy Wanlong Gao
2013-09-17  3:16 ` [Qemu-devel] [PATCH V13 12/13] NUMA: add qmp command query-numa Wanlong Gao
2013-09-17  3:16 ` [Qemu-devel] [PATCH V13 13/13] NUMA: convert hmp command info_numa to use qmp command query_numa Wanlong Gao
2013-09-25  1:28 ` Wanlong Gao [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=52423C30.7030807@cn.fujitsu.com \
    --to=gaowanlong@cn.fujitsu.com \
    --cc=afaerber@suse.de \
    --cc=aliguori@us.ibm.com \
    --cc=bsd@redhat.com \
    --cc=drjones@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=hutao@cn.fujitsu.com \
    --cc=lcapitulino@redhat.com \
    --cc=lersek@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.huangpeng@huawei.com \
    --cc=qemu-devel@nongnu.org \
    --cc=y-goto@jp.fujitsu.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).