> -----Original Message----- > From: owner-linux-mm@xxxxxxxxx [mailto:owner-linux-mm@xxxxxxxxx] On > Behalf Of Dennis Zhou > Sent: 2019年2月28日 10:19 > To: Dennis Zhou <dennis@xxxxxxxxxx>; Tejun Heo <tj@xxxxxxxxxx>; Christoph > Lameter <cl@xxxxxxxxx> > Cc: Vlad Buslov <vladbu@xxxxxxxxxxxx>; kernel-team@xxxxxx; > linux-mm@xxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx > Subject: [PATCH 04/12] percpu: manage chunks based on contig_bits instead > of free_bytes > > When a chunk becomes fragmented, it can end up having a large number of > small allocation areas free. The free_bytes sorting of chunks leads to > unnecessary checking of chunks that cannot satisfy the allocation. > Switch to contig_bits sorting to prevent scanning chunks that may not be able > to service the allocation request. > > Signed-off-by: Dennis Zhou <dennis@xxxxxxxxxx> > --- > mm/percpu.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/percpu.c b/mm/percpu.c > index b40112b2fc59..c996bcffbb2a 100644 > --- a/mm/percpu.c > +++ b/mm/percpu.c > @@ -234,7 +234,7 @@ static int pcpu_chunk_slot(const struct pcpu_chunk > *chunk) > if (chunk->free_bytes < PCPU_MIN_ALLOC_SIZE || chunk->contig_bits > == 0) > return 0; > > - return pcpu_size_to_slot(chunk->free_bytes); > + return pcpu_size_to_slot(chunk->contig_bits * PCPU_MIN_ALLOC_SIZE); > } > > /* set the pointer to a chunk in a page struct */ Reviewed-by: Peng Fan <peng.fan@xxxxxxx> Not relevant to this patch, another optimization to percpu might be good to use per chunk spin_lock, not gobal pcpu_lock. Thanks, Peng. > -- > 2.17.1