From: Dario Faggioli <dario.faggioli@citrix.com>
To: Yechen Li <lccycc123@gmail.com>
Cc: Ian Campbell <Ian.Campbell@eu.citrix.com>,
Ian Jackson <Ian.Jackson@eu.citrix.com>,
Elena Ufimtseva <ufimtseva@gmail.com>,
xen-devel@lists.xen.org
Subject: Re: [PATCH v1][RFC] xen balloon driver numa support, libxl interface
Date: Mon, 12 Aug 2013 19:07:17 +0200 [thread overview]
Message-ID: <1376327237.15390.225.camel@Solace> (raw)
In-Reply-To: <1376313528-16530-1-git-send-email-lccycc123@gmail.com>
[-- Attachment #1.1: Type: text/plain, Size: 6494 bytes --]
[Adding potentially interested people in Cc: the Ian-s are the toolstack
maintainers, Elena is there because her work on PV-NUMA is somewhat
related, Konrad is there because of the Linux implications of this]
On lun, 2013-08-12 at 21:18 +0800, Yechen Li wrote:
> ---
>
> This small patch implements a numa support of memory operation for libxl
> The command is: xl mem-set-numa [-e] vmid memorysize nodeid
> To pass the parameters to balloon driver in kernel, I add a file of xen-store
> as /local/domain/(id)/memory/target_nid, hoping this is ok....
>
> It's my first time submitting a patch, please point out the problems so that
> I could work better in future, thanks very much!
>
> tools/libxl/libxl.c | 14 ++++++++++++--
> tools/libxl/libxl.h | 1 +
> tools/libxl/xl.h | 1 +
> tools/libxl/xl_cmdimpl.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
> tools/libxl/xl_cmdtable.c | 7 +++++++
> 5 files changed, 66 insertions(+), 2 deletions(-)
>
> diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
> index 81785df..f027d59 100644
> --- a/tools/libxl/libxl.c
> +++ b/tools/libxl/libxl.c
> @@ -3642,10 +3642,17 @@ retry:
> }
> return 0;
> }
> -
> int libxl_set_memory_target(libxl_ctx *ctx, uint32_t domid,
> int32_t target_memkb, int relative, int enforce)
> {
> + return libxl_set_memory_target_numa(ctx, domid, target_memkb, relative,
> + enforce, -1, 0);
> +}
> +
> +int libxl_set_memory_target_numa(libxl_ctx *ctx, uint32_t domid,
> + int32_t target_memkb, int relative, int enforce,
> + int node_specify, bool nodeexact)
> +{
> GC_INIT(ctx);
> int rc = 1, abort_transaction = 0;
> uint32_t memorykb = 0, videoram = 0;
> @@ -3754,7 +3761,10 @@ retry_transaction:
> abort_transaction = 1;
> goto out;
> }
> -
> + //lcc:
> + LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "target_nid = %d focus= %d", node_specify, (int) nodeexact);
> + libxl__xs_write(gc, t, libxl__sprintf(gc, "%s/memory/target_nid",
> + dompath), "%"PRId32" %"PRId32, node_specify, (int)nodeexact);
> libxl__xs_write(gc, t, libxl__sprintf(gc, "%s/memory/target",
> dompath), "%"PRIu32, new_target_memkb);
> rc = xc_domain_getinfolist(ctx->xch, domid, 1, &info);
> diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
> index be19bf5..e21d8c3 100644
> --- a/tools/libxl/libxl.h
> +++ b/tools/libxl/libxl.h
> @@ -628,6 +628,7 @@ int libxl_domain_core_dump(libxl_ctx *ctx, uint32_t domid,
>
> int libxl_domain_setmaxmem(libxl_ctx *ctx, uint32_t domid, uint32_t target_memkb);
> int libxl_set_memory_target(libxl_ctx *ctx, uint32_t domid, int32_t target_memkb, int relative, int enforce);
> +int libxl_set_memory_target_numa(libxl_ctx *ctx, uint32_t domid, int32_t target_memkb, int relative, int enforce, int node_specify, bool nodeexact);
> int libxl_get_memory_target(libxl_ctx *ctx, uint32_t domid, uint32_t *out_target);
>
>
> diff --git a/tools/libxl/xl.h b/tools/libxl/xl.h
> index e72a7d2..6e5873d 100644
> --- a/tools/libxl/xl.h
> +++ b/tools/libxl/xl.h
> @@ -62,6 +62,7 @@ int main_vcpupin(int argc, char **argv);
> int main_vcpuset(int argc, char **argv);
> int main_memmax(int argc, char **argv);
> int main_memset(int argc, char **argv);
> +int main_memset_numa(int argc, char **argv);
> int main_sched_credit(int argc, char **argv);
> int main_sched_credit2(int argc, char **argv);
> int main_sched_sedf(int argc, char **argv);
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> index 884f050..ddfb0d5 100644
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -2523,6 +2523,51 @@ int main_memset(int argc, char **argv)
> return 0;
> }
>
> +static void set_memory_target_numa(uint32_t domid, const char *mem, int mnid, bool nodeexact)
> +{
> + long long int memorykb;
> +
> + memorykb = parse_mem_size_kb(mem);
> + if (memorykb == -1) {
> + fprintf(stderr, "invalid memory size: %s\n", mem);
> + exit(3);
> + }
> +
> + libxl_set_memory_target_numa(ctx, domid, memorykb, 0, /* enforce */ 1, mnid, nodeexact);
> +}
> +
> +int main_memset_numa(int argc, char **argv)
> +{
> + uint32_t domid;
> + int opt = 0;
> + int mnid = -1;
> + const char *mem;
> + bool nodeexact = false;
> + static const struct option opts[] = {
> + {"exact", 0, 0, 'e'},
> + COMMON_LONG_OPTS,
> + {0, 0, 0, 0}
> + };
> +
> + SWITCH_FOREACH_OPT(opt, "e", opts, "mem-set-numa", 1) {
> + case 'e':
> + nodeexact = true;
> + break;
> + }
> + if (argc < optind + 3){
> + help("mem-set-numa");
> + return 2;
> + }
> + domid = find_domain(argv[optind]);
> + mem = argv[optind + 1];
> + if (sscanf(argv[optind + 2], "%d", &mnid) != 1){
> + fprintf(stderr, "invalid node id");
> + }
> + fprintf(stderr, "nodeexact = %d domid = %d mem = %s mnid = %d\n", nodeexact, domid, mem, mnid);
> + set_memory_target_numa(domid, mem, mnid, nodeexact);
> + return 0;
> +}
> +
> static int cd_insert(uint32_t domid, const char *virtdev, char *phys)
> {
> libxl_device_disk disk; /* we don't free disk's contents */
> diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c
> index 326a660..ab918c0 100644
> --- a/tools/libxl/xl_cmdtable.c
> +++ b/tools/libxl/xl_cmdtable.c
> @@ -199,6 +199,13 @@ struct cmd_spec cmd_table[] = {
> "Set the current memory usage for a domain",
> "<Domain> <MemMB['b'[bytes]|'k'[KB]|'m'[MB]|'g'[GB]|'t'[TB]]>",
> },
> + { "mem-set-numa",
> + &main_memset_numa, 0, 1,
> + "Set the current memory usage for a domain, with numa node specified",
> + "[-e] <Domain> <MemMB['b'[bytes]|'k'[KB]|'m'[MB]|'g'[GB]|'t'[TB]]> <nid>",
> + "-e, --exact: operatrion will force on this node exactly"
> + "nid: the machine(physical) node id\n"
> + },
> { "button-press",
> &main_button_press, 0, 1,
> "Indicate an ACPI button press to the domain",
--
<<This happens because I choose it to happen!>> (Raistlin Majere)
-----------------------------------------------------------------
Dario Faggioli, Ph.D, http://about.me/dario.faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)
[-- Attachment #1.2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
[-- Attachment #2: Type: text/plain, Size: 126 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2013-08-12 17:07 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-12 13:18 [PATCH v1][RFC] xen balloon driver numa support, libxl interface Yechen Li
2013-08-12 14:00 ` Jan Beulich
2013-08-12 14:18 ` Li Yechen
2013-08-12 14:31 ` Jan Beulich
2013-08-12 14:57 ` Li Yechen
2013-08-12 15:15 ` Li Yechen
2013-08-12 15:29 ` Jan Beulich
2013-08-12 15:51 ` Dario Faggioli
2013-08-13 20:56 ` Ian Campbell
2013-08-13 23:32 ` Dario Faggioli
2013-08-12 16:16 ` Dario Faggioli
2013-08-12 16:58 ` Dario Faggioli
2013-08-12 17:07 ` Dario Faggioli [this message]
2013-08-13 20:53 ` Ian Campbell
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=1376327237.15390.225.camel@Solace \
--to=dario.faggioli@citrix.com \
--cc=Ian.Campbell@eu.citrix.com \
--cc=Ian.Jackson@eu.citrix.com \
--cc=lccycc123@gmail.com \
--cc=ufimtseva@gmail.com \
--cc=xen-devel@lists.xen.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.