Windows: Switching memory allocation model and configuring large pages
In solidDB Version 101.0.9 and later on Windows 64-bit platforms, you can choose to use any of the following memory allocation models:
▪ malloc()
▪ VirtualAlloc
▪ VirtualAlloc suballocator with large pages support.
VirtualAlloc is always used for cache memory allocation in solidDB but for other types of memory, malloc() is the default allocator as it typically requires less administration than other models.
However, if you choose to use the VirtualAlloc memory allocation model, you can also configure solidDB to use Windows large pages to get improved performance.
Choosing VirtualAlloc and configuring large pages support
▪ To use VirtualAlloc as the memory allocator, add the following lines to the [General] section in the solid.ini file:
MemoryAllocator = VirtualAlloc
▪ To use VirtualAlloc as the memory allocator and configure large pages, add the following lines to the [General] section in the solid.ini file:
MemoryAllocator = VirtualAlloc
HugePageSize = 2M
MemorySegmentSize = memsegsize
where memsegsize is a multiple of 2M (2Mb). When Long MME rows are used, the value must be larger than the length of the longest expected row. If a valid value for MemorySegmentSize is not specified, large pages are not used.
Large page allocations require the following prerequisites:
▪ The Lock pages in memory option must be enabled, see the following Microsoft article for more information:
▪ The solidDB process must be run as Administrator.
Note If large page allocations are not allowed, VirtualAlloc is used without large pages and the following message is displayed in the solmsg.out file:
Using VirtualAlloc without large pages.
Considerations
When using the large pages allocator, the following points must be taken into consideration:
▪ A minor to significant memory overhead is experienced because the minimum allocation that solidDB uses is the size of a page.
▪ When memory is too fragmented, a large page allocation might fail if a contiguous memory block of the required size is not available. In solidDB Version 101.0.9 and later, solidDB falls back to allocating 4Kb pages if 2Mb pages are not available.
▪ Large pages are used for solidDB cache memory and in-memory allocations only. Other allocations do not use large pages.
▪ No memory is returned to the operating system; the memory is reused within solidDB. To release the memory back to the operating system, solidDB must be restarted.