mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
libpmem cmake macros
Also added support for MAP_SYNC. It allows to achieve decent performance with DAX devices even when libpmem is unavailable. Fixed Windows version of my_msync(): according to manual FlushViewOfFile() may return before flush is actually completed. It is advised to issue FlushFileBuffers() after FlushViewOfFile().
This commit is contained in:
parent
42e825dd0a
commit
daaa881cfe
4 changed files with 39 additions and 1 deletions
|
@ -168,6 +168,7 @@ INCLUDE(mysql_add_executable)
|
||||||
INCLUDE(symlinks)
|
INCLUDE(symlinks)
|
||||||
INCLUDE(compile_flags)
|
INCLUDE(compile_flags)
|
||||||
INCLUDE(crc32)
|
INCLUDE(crc32)
|
||||||
|
INCLUDE(pmem)
|
||||||
|
|
||||||
# Handle options
|
# Handle options
|
||||||
OPTION(DISABLE_SHARED
|
OPTION(DISABLE_SHARED
|
||||||
|
|
13
cmake/pmem.cmake
Normal file
13
cmake/pmem.cmake
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
INCLUDE(CheckIncludeFiles)
|
||||||
|
OPTION(WITH_PMEM "Enable persistent memory features" OFF)
|
||||||
|
IF(WITH_PMEM)
|
||||||
|
FIND_LIBRARY(LIBPMEM pmem)
|
||||||
|
CHECK_INCLUDE_FILES(libpmem.h HAVE_LIBPMEM_H)
|
||||||
|
IF (NOT LIBPMEM)
|
||||||
|
MESSAGE(FATAL_ERROR "Can't find libpmem")
|
||||||
|
ELSEIF(NOT HAVE_LIBPMEM_H)
|
||||||
|
MESSAGE(FATAL_ERROR "Can't find libpmem.h")
|
||||||
|
ELSE()
|
||||||
|
ADD_DEFINITIONS(-DHAVE_PMEM)
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
|
@ -964,6 +964,13 @@ extern ulonglong my_getcputime(void);
|
||||||
#define available_stack_size(CUR,END) (long) ((char*)(END) - (char*)(CUR))
|
#define available_stack_size(CUR,END) (long) ((char*)(END) - (char*)(CUR))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef MAP_SYNC
|
||||||
|
#define MAP_SYNC 0x80000
|
||||||
|
#endif
|
||||||
|
#ifndef MAP_SHARED_VALIDATE
|
||||||
|
#define MAP_SHARED_VALIDATE 0x03
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_SYS_MMAN_H
|
#ifdef HAVE_SYS_MMAN_H
|
||||||
#ifndef MAP_NOSYNC
|
#ifndef MAP_NOSYNC
|
||||||
#define MAP_NOSYNC 0
|
#define MAP_NOSYNC 0
|
||||||
|
|
|
@ -29,6 +29,10 @@ int my_msync(int fd, void *addr, size_t len, int flags)
|
||||||
|
|
||||||
#elif defined(_WIN32)
|
#elif defined(_WIN32)
|
||||||
|
|
||||||
|
#ifndef FILE_DAX_VOLUME
|
||||||
|
#define FILE_DAX_VOLUME 0x20000000
|
||||||
|
#endif
|
||||||
|
|
||||||
static SECURITY_ATTRIBUTES mmap_security_attributes=
|
static SECURITY_ATTRIBUTES mmap_security_attributes=
|
||||||
{sizeof(SECURITY_ATTRIBUTES), 0, TRUE};
|
{sizeof(SECURITY_ATTRIBUTES), 0, TRUE};
|
||||||
|
|
||||||
|
@ -61,6 +65,18 @@ void *my_mmap(void *addr, size_t len, int prot,
|
||||||
*/
|
*/
|
||||||
CloseHandle(hFileMap);
|
CloseHandle(hFileMap);
|
||||||
|
|
||||||
|
if (flags & MAP_SYNC)
|
||||||
|
{
|
||||||
|
DWORD filesystemFlags;
|
||||||
|
if (!GetVolumeInformationByHandleW(hFile, NULL, 0, NULL, NULL,
|
||||||
|
&filesystemFlags, NULL, 0) ||
|
||||||
|
!(filesystemFlags & FILE_DAX_VOLUME))
|
||||||
|
{
|
||||||
|
UnmapViewOfFile(ptr);
|
||||||
|
ptr= NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ptr)
|
if (ptr)
|
||||||
{
|
{
|
||||||
DBUG_PRINT("mysys", ("mapped addr: %p", ptr));
|
DBUG_PRINT("mysys", ("mapped addr: %p", ptr));
|
||||||
|
@ -79,7 +95,8 @@ int my_munmap(void *addr, size_t len)
|
||||||
|
|
||||||
int my_msync(int fd, void *addr, size_t len, int flags)
|
int my_msync(int fd, void *addr, size_t len, int flags)
|
||||||
{
|
{
|
||||||
return FlushViewOfFile(addr, len) ? 0 : -1;
|
return FlushViewOfFile(addr, len) &&
|
||||||
|
FlushFileBuffers(my_get_osfhandle(fd)) ? 0 : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
Loading…
Add table
Reference in a new issue