• Heikki Linnakangas's avatar
    Allow using huge TLB pages on Linux (MAP_HUGETLB) · 1a3458b6
    Heikki Linnakangas authored
    This patch adds an option, huge_tlb_pages, which allows requesting the
    shared memory segment to be allocated using huge pages, by using the
    MAP_HUGETLB flag in mmap(). This can improve performance.
    
    The default is 'try', which means that we will attempt using huge pages,
    and fall back to non-huge pages if it doesn't work. Currently, only Linux
    has MAP_HUGETLB. On other platforms, the default 'try' behaves the same as
    'off'.
    
    In the passing, don't try to round the mmap() size to a multiple of
    pagesize. mmap() doesn't require that, and there's no particular reason for
    PostgreSQL to do that either. When using MAP_HUGETLB, however, round the
    request size up to nearest 2MB boundary. This is to work around a bug in
    some Linux kernel versions, but also to avoid wasting memory, because the
    kernel will round the size up anyway.
    
    Many people were involved in writing this patch, including Christian Kruse,
    Richard Poole, Abhijit Menon-Sen, reviewed by Peter Geoghegan, Andres Freund
    and me.
    1a3458b6
sysv_shmem.c 20.9 KB