Skip to content
Snippets Groups Projects
Select Git revision
  • benchmark-tools
  • postgres-lambda
  • master default
  • REL9_4_25
  • REL9_5_20
  • REL9_6_16
  • REL_10_11
  • REL_11_6
  • REL_12_1
  • REL_12_0
  • REL_12_RC1
  • REL_12_BETA4
  • REL9_4_24
  • REL9_5_19
  • REL9_6_15
  • REL_10_10
  • REL_11_5
  • REL_12_BETA3
  • REL9_4_23
  • REL9_5_18
  • REL9_6_14
  • REL_10_9
  • REL_11_4
23 results

postgres-lambda-diff

  • Clone with SSH
  • Clone with HTTPS
  • user avatar
    Andres Freund authored
    The default general purpose aset.c style memory context is not a great
    choice for allocations that are all going to be evenly sized,
    especially when those objects aren't small, and have varying
    lifetimes.  There tends to be a lot of fragmentation, larger
    allocations always directly go to libc rather than have their cost
    amortized over several pallocs.
    
    These problems lead to the introduction of ad-hoc slab allocators in
    reorderbuffer.c. But it turns out that the simplistic implementation
    leads to problems when a lot of objects are allocated and freed, as
    aset.c is still the underlying implementation. Especially freeing can
    easily run into O(n^2) behavior in aset.c.
    
    While the O(n^2) behavior in aset.c can, and probably will, be
    addressed, custom allocators for this behavior are more efficient
    both in space and time.
    
    This allocator is for evenly sized allocations, and supports both
    cheap allocations and freeing, without fragmenting significantly.  It
    does so by allocating evenly sized blocks via malloc(), and carves
    them into chunks that can be used for allocations.  In order to
    release blocks to the OS as early as possible, chunks are allocated
    from the fullest block that still has free objects, increasing the
    likelihood of a block being entirely unused.
    
    A subsequent commit uses this in reorderbuffer.c, but a further
    allocator is needed to resolve the performance problems triggering
    this work.
    
    There likely are further potentialy uses of this allocator besides
    reorderbuffer.c.
    
    There's potential further optimizations of the new slab.c, in
    particular the array of freelists could be replaced by a more
    intelligent structure - but for now this looks more than good enough.
    
    Author: Tomas Vondra, editorialized by Andres Freund
    Reviewed-By: Andres Freund, Petr Jelinek, Robert Haas, Jim Nasby
    Discussion: https://postgr.es/m/d15dff83-0b37-28ed-0809-95a5cc7292ad@2ndquadrant.com
    58b25e98
    History
    PostgreSQL Database Management System
    =====================================
    
    This directory contains the source code distribution of the PostgreSQL
    database management system.
    
    PostgreSQL is an advanced object-relational database management system
    that supports an extended subset of the SQL standard, including
    transactions, foreign keys, subqueries, triggers, user-defined types
    and functions.  This distribution also contains C language bindings.
    
    PostgreSQL has many language interfaces, many of which are listed here:
    
    	http://www.postgresql.org/download
    
    See the file INSTALL for instructions on how to build and install
    PostgreSQL.  That file also lists supported operating systems and
    hardware platforms and contains information regarding any other
    software packages that are required to build or run the PostgreSQL
    system.  Copyright and license information can be found in the
    file COPYRIGHT.  A comprehensive documentation set is included in this
    distribution; it can be read as described in the installation
    instructions.
    
    The latest version of this software may be obtained at
    http://www.postgresql.org/download/.  For more information look at our
    web site located at http://www.postgresql.org/.