[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4 1/1] numa: equally distribute memory on nodes
From: |
Eduardo Habkost |
Subject: |
Re: [Qemu-devel] [PATCH v4 1/1] numa: equally distribute memory on nodes |
Date: |
Tue, 2 May 2017 17:09:03 -0300 |
User-agent: |
Mutt/1.8.0 (2017-02-23) |
On Tue, May 02, 2017 at 06:29:55PM +0200, Laurent Vivier wrote:
[...]
> diff --git a/numa.c b/numa.c
> index 6fc2393..750fd95 100644
> --- a/numa.c
> +++ b/numa.c
> @@ -294,6 +294,42 @@ static void validate_numa_cpus(void)
> g_free(seen_cpus);
> }
>
> +void numa_legacy_auto_assign_ram(MachineClass *mc, NodeInfo *nodes,
> + int nb_nodes, ram_addr_t size)
> +{
> + int i;
> + uint64_t usedmem = 0;
> +
> + /* Align each node according to the alignment
> + * requirements of the machine class
> + */
> +
> + for (i = 0; i < nb_nodes - 1; i++) {
> + nodes[i].node_mem = (size / nb_nodes) &
> + ~((1 << mc->numa_mem_align_shift) - 1);
> + usedmem += nodes[i].node_mem;
> + }
> + nodes[i].node_mem = size - usedmem;
> +}
> +
> +void numa_default_auto_assign_ram(MachineClass *mc, NodeInfo *nodes,
> + int nb_nodes, ram_addr_t size)
> +{
> + int i;
> + uint64_t usedmem = 0, node_mem;
> + uint64_t granularity = size / nb_nodes;
> + uint64_t propagate = 0;
> +
> + for (i = 0; i < nb_nodes - 1; i++) {
> + node_mem = (granularity + propagate) &
> + ~((1 << mc->numa_mem_align_shift) - 1);
> + propagate = granularity + propagate - node_mem;
> + nodes[i].node_mem = node_mem;
> + usedmem += node_mem;
> + }
> + nodes[i].node_mem = ram_size - usedmem;
I believe you meant 'size - usedmem' here.
I can fix this while applying the patch, if that's OK. The rest
of the patch looks good to me.
> +}
> +
> void parse_numa_opts(MachineClass *mc)
> {
> int i;
> @@ -336,17 +372,8 @@ void parse_numa_opts(MachineClass *mc)
> }
> }
> if (i == nb_numa_nodes) {
> - uint64_t usedmem = 0;
> -
> - /* Align each node according to the alignment
> - * requirements of the machine class
> - */
> - for (i = 0; i < nb_numa_nodes - 1; i++) {
> - numa_info[i].node_mem = (ram_size / nb_numa_nodes) &
> - ~((1 << mc->numa_mem_align_shift) -
> 1);
> - usedmem += numa_info[i].node_mem;
> - }
> - numa_info[i].node_mem = ram_size - usedmem;
> + assert(mc->numa_auto_assign_ram);
> + mc->numa_auto_assign_ram(mc, numa_info, nb_numa_nodes, ram_size);
> }
>
> numa_total = 0;
> --
> 2.9.3
>
--
Eduardo