Re: [RFC PATCH 11/14] mm/slub: allocate slabs from virtual memory

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 9/15/23 03:59, Matteo Rizzo wrote:
> +	spin_lock_irqsave(&slub_kworker_lock, irq_flags);
> +	list_splice_init(&slub_tlbflush_queue, &local_queue);
> +	list_for_each_entry(slab, &local_queue, flush_list_elem) {
> +		unsigned long start = (unsigned long)slab_to_virt(slab);
> +		unsigned long end = start + PAGE_SIZE *
> +			(1UL << oo_order(slab->oo));
> +
> +		if (start < addr_start)
> +			addr_start = start;
> +		if (end > addr_end)
> +			addr_end = end;
> +	}
> +	spin_unlock_irqrestore(&slub_kworker_lock, irq_flags);
> +
> +	if (addr_start < addr_end)
> +		flush_tlb_kernel_range(addr_start, addr_end);

I assume that the TLB flushes in the queue are going to be pretty sparse
on average.

At least on x86, flush_tlb_kernel_range() falls back pretty quickly from
individual address invalidation to just doing a full flush.  It might
not even be worth tracking the address ranges, and just do a full flush
every time.

I'd be really curious to see how often actual ranged flushes are
triggered from this code.  I expect it would be very near zero.




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux