• Linus Torvalds's avatar
    Merge branch 'for-4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu · a7cbfd05
    Linus Torvalds authored
    Pull percpu updates from Tejun Heo:
     "A lot of changes for percpu this time around. percpu inherited the
      same area allocator from the original pre-virtual-address-mapped
      implementation. This was from the time when percpu allocator wasn't
      used all that much and the implementation was focused on simplicity,
      with the unfortunate computational complexity of O(number of areas
      allocated from the chunk) per alloc / free.
    
      With the increase in percpu usage, we're hitting cases where the lack
      of scalability is hurting. The most prominent one right now is bpf
      perpcu map creation / destruction which may allocate and free a lot of
      entries consecutively and it's likely that the problem will become
      more prominent in the future.
    
      To address the issue, Dennis replaced the area allocator with hinted
      bitmap allocator which is more consistent. While the new allocator
      does perform a bit worse in some cases, it outperforms the old
      allocator way more than an order of magnitude in other more common
      scenarios while staying mostly flat in CPU overhead and completely
      flat in memory consumption"
    
    * 'for-4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu: (27 commits)
      percpu: update header to contain bitmap allocator explanation.
      percpu: update pcpu_find_block_fit to use an iterator
      percpu: use metadata blocks to update the chunk contig hint
      percpu: update free path to take advantage of contig hints
      percpu: update alloc path to only scan if contig hints are broken
      percpu: keep track of the best offset for contig hints
      percpu: skip chunks if the alloc does not fit in the contig hint
      percpu: add first_bit to keep track of the first free in the bitmap
      percpu: introduce bitmap metadata blocks
      percpu: replace area map allocator with bitmap
      percpu: generalize bitmap (un)populated iterators
      percpu: increase minimum percpu allocation size and align first regions
      percpu: introduce nr_empty_pop_pages to help empty page accounting
      percpu: change the number of pages marked in the first_chunk pop bitmap
      percpu: combine percpu address checks
      percpu: modify base_addr to be region specific
      percpu: setup_first_chunk rename schunk/dchunk to chunk
      percpu: end chunk area maps page aligned for the populated bitmap
      percpu: unify allocation of schunk and dchunk
      percpu: setup_first_chunk remove dyn_size and consolidate logic
      ...
    a7cbfd05
main.c 26.4 KB