All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Beulich <jbeulich@suse.com>
To: Carlo Nonato <carlo.nonato@minervasys.tech>
Cc: andrea.bastoni@minervasys.tech,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Bertrand Marquis <bertrand.marquis@arm.com>,
	Michal Orzel <michal.orzel@amd.com>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Marco Solieri <marco.solieri@minervasys.tech>,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH v8 09/13] xen: add cache coloring allocator for domains
Date: Mon, 6 May 2024 14:46:17 +0200	[thread overview]
Message-ID: <5c16f53f-3bb0-49d6-b174-b0e8c6ceff4c@suse.com> (raw)
In-Reply-To: <20240502165533.319988-10-carlo.nonato@minervasys.tech>

On 02.05.2024 18:55, Carlo Nonato wrote:
> --- a/docs/misc/xen-command-line.pandoc
> +++ b/docs/misc/xen-command-line.pandoc
> @@ -270,6 +270,20 @@ and not running softirqs. Reduce this if softirqs are not being run frequently
>  enough. Setting this to a high value may cause boot failure, particularly if
>  the NMI watchdog is also enabled.
>  
> +### buddy-alloc-size (arm64)

I'd like to ask for consistency in the command line doc additions: Either
"(arm64)" here and then also in patch 1, or (less desirable) nowhere.

> @@ -1481,6 +1487,14 @@ static void free_heap_pages(
>              pg[i].count_info |= PGC_need_scrub;
>              poison_one_page(&pg[i]);
>          }
> +
> +        if ( pg->count_info & PGC_colored )
> +        {
> +            /* Colored pages can be 0-order only, so ignore it */
> +            free_color_heap_page(pg, need_scrub);
> +            spin_unlock(&heap_lock);
> +            return;
> +        }

Why "ignore it"? You pass the page to free_color_heap_page() after all.
(later) Oh, you may mean to ignore "order". Yet besides this not really
becoming clear from the wording, I think that this constraint could do
with asserting here.

> @@ -1945,6 +1959,156 @@ static unsigned long avail_heap_pages(
>      return free_pages;
>  }
>  
> +/*************************
> + * COLORED SIDE-ALLOCATOR
> + *
> + * Pages are grouped by LLC color in lists which are globally referred to as the
> + * color heap. Lists are populated in end_boot_allocator().
> + * After initialization there will be N lists where N is the number of
> + * available colors on the platform.
> + */
> +static struct page_list_head *__ro_after_init _color_heap;
> +#define color_heap(color) (&_color_heap[color])
> +
> +static unsigned long *__ro_after_init free_colored_pages;
> +
> +/* Memory required for buddy allocator to work with colored one */
> +#ifdef CONFIG_LLC_COLORING
> +static unsigned long __initdata buddy_alloc_size =
> +    MB(CONFIG_BUDDY_ALLOCATOR_SIZE);

I think it would be quite nice if this and ...

> +size_param("buddy-alloc-size", buddy_alloc_size);
> +
> +#define domain_num_llc_colors(d) (d)->num_llc_colors
> +#define domain_llc_color(d, i)   (d)->llc_colors[i]
> +#else
> +static unsigned long __initdata buddy_alloc_size;

... this were folded. Which I think would be possible if the Kconfig
addition went like this:

config BUDDY_ALLOCATOR_SIZE
	int "Buddy allocator reserved memory size (MiB)" if LLC_COLORING
	default "0" if !LLC_COLORING
	default "64"

> +static struct page_info *alloc_color_heap_page(unsigned int memflags,
> +                                               const struct domain *d)
> +{
> +    struct page_info *pg = NULL;
> +    unsigned int i, color = 0;
> +    unsigned long max = 0;
> +    bool need_tlbflush = false;
> +    uint32_t tlbflush_timestamp = 0;
> +    bool need_scrub;
> +
> +    if ( memflags & ~(MEMF_no_owner | MEMF_no_refcount | MEMF_no_scrub |
> +                      MEMF_no_tlbflush) )
> +        return NULL;
> +
> +    spin_lock(&heap_lock);
> +
> +    for ( i = 0; i < domain_num_llc_colors(d); i++ )
> +    {
> +        unsigned long free = free_colored_pages[domain_llc_color(d, i)];
> +
> +        if ( free > max )
> +        {
> +            color = domain_llc_color(d, i);
> +            pg = page_list_first(color_heap(color));
> +            max = free;
> +        }
> +    }
> +
> +    if ( !pg )
> +    {
> +        spin_unlock(&heap_lock);
> +        return NULL;
> +    }
> +
> +    need_scrub = pg->count_info & (PGC_need_scrub);

Nit: No need for parentheses here.

Jan


  reply	other threads:[~2024-05-06 12:46 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-02 16:55 [PATCH v8 00/13] Arm cache coloring Carlo Nonato
2024-05-02 16:55 ` [PATCH v8 01/13] xen/common: add cache coloring common code Carlo Nonato
2024-05-06 11:54   ` Jan Beulich
2024-05-06 15:53     ` Carlo Nonato
2024-05-02 16:55 ` [PATCH v8 02/13] xen/arm: add initial support for LLC coloring on arm64 Carlo Nonato
2024-05-02 16:55 ` [PATCH v8 03/13] xen/arm: permit non direct-mapped Dom0 construction Carlo Nonato
2024-05-02 16:55 ` [PATCH v8 04/13] xen/arm: add Dom0 cache coloring support Carlo Nonato
2024-05-06 12:01   ` Jan Beulich
2024-05-06 15:53     ` Carlo Nonato
2024-05-14  7:02       ` Jan Beulich
2024-05-02 16:55 ` [PATCH v8 05/13] xen: extend domctl interface for cache coloring Carlo Nonato
2024-05-06 12:05   ` Jan Beulich
2024-05-02 16:55 ` [PATCH v8 06/13] tools: add support for cache coloring configuration Carlo Nonato
2024-07-01 12:29   ` Anthony PERARD
2024-05-02 16:55 ` [PATCH v8 07/13] xen/arm: add support for cache coloring configuration via device-tree Carlo Nonato
2024-05-06 12:11   ` Jan Beulich
2024-05-02 16:55 ` [PATCH v8 08/13] xen/page_alloc: introduce preserved page flags macro Carlo Nonato
2024-05-06 12:22   ` Jan Beulich
2024-05-06 15:54     ` Carlo Nonato
2024-05-02 16:55 ` [PATCH v8 09/13] xen: add cache coloring allocator for domains Carlo Nonato
2024-05-06 12:46   ` Jan Beulich [this message]
2024-05-02 16:55 ` [PATCH v8 10/13] xen/arm: use domain memory to allocate p2m page tables Carlo Nonato
2024-05-02 16:55 ` [PATCH v8 11/13] xen/arm: add Xen cache colors command line parameter Carlo Nonato
2024-05-06 13:24   ` Jan Beulich
2024-05-02 16:55 ` [PATCH v8 12/13] xen/arm: make consider_modules() available for xen relocation Carlo Nonato
2024-05-02 16:55 ` [PATCH v8 13/13] xen/arm: add cache coloring support for Xen Carlo Nonato

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=5c16f53f-3bb0-49d6-b174-b0e8c6ceff4c@suse.com \
    --to=jbeulich@suse.com \
    --cc=Volodymyr_Babchuk@epam.com \
    --cc=andrea.bastoni@minervasys.tech \
    --cc=andrew.cooper3@citrix.com \
    --cc=bertrand.marquis@arm.com \
    --cc=carlo.nonato@minervasys.tech \
    --cc=george.dunlap@citrix.com \
    --cc=julien@xen.org \
    --cc=marco.solieri@minervasys.tech \
    --cc=michal.orzel@amd.com \
    --cc=sstabellini@kernel.org \
    --cc=xen-devel@lists.xenproject.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.