mdbx: добавление MDBX_opt_prefault_write_enable вместо MDBX_ENABLE_PREFAULT.

This commit is contained in:
Леонид Юрьев (Leonid Yuriev) 2022-12-12 15:23:47 +03:00
parent b959e217b1
commit 957c99d86f
3 changed files with 21 additions and 15 deletions

5
mdbx.h
View File

@ -2254,6 +2254,11 @@ enum MDBX_option_t {
* On Windows a write-through is used always but \ref MDBX_NOMETASYNC could * On Windows a write-through is used always but \ref MDBX_NOMETASYNC could
* be used for switching to write-and-flush. */ * be used for switching to write-and-flush. */
MDBX_opt_writethrough_threshold, MDBX_opt_writethrough_threshold,
/** \brief Controls prevention of page-faults of reclaimed and allocated pages
* in the \ref MDBX_WRITEMAP mode by clearing ones through file handle before
* touching. */
MDBX_opt_prefault_write_enable,
}; };
#ifndef __cplusplus #ifndef __cplusplus
/** \ingroup c_settings */ /** \ingroup c_settings */

View File

@ -7043,7 +7043,6 @@ static __inline pgr_t page_alloc_finalize(MDBX_env *const env,
MDBX_ASAN_UNPOISON_MEMORY_REGION(ret.page, pgno2bytes(env, num)); MDBX_ASAN_UNPOISON_MEMORY_REGION(ret.page, pgno2bytes(env, num));
VALGRIND_MAKE_MEM_UNDEFINED(ret.page, pgno2bytes(env, num)); VALGRIND_MAKE_MEM_UNDEFINED(ret.page, pgno2bytes(env, num));
#if MDBX_ENABLE_PREFAULT
/* Содержимое выделенной страницы не нужно, но если страница отсутствует /* Содержимое выделенной страницы не нужно, но если страница отсутствует
* в ОЗУ (что весьма вероятно), то любое обращение к ней приведет * в ОЗУ (что весьма вероятно), то любое обращение к ней приведет
* к page-fault: * к page-fault:
@ -7107,7 +7106,6 @@ static __inline pgr_t page_alloc_finalize(MDBX_env *const env,
need_clean = false; need_clean = false;
} }
} }
#endif /* MDBX_ENABLE_PREFAULT */
} else { } else {
ret.page = page_malloc(txn, num); ret.page = page_malloc(txn, num);
if (unlikely(!ret.page)) { if (unlikely(!ret.page)) {
@ -24553,6 +24551,18 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option,
#endif #endif
break; break;
case MDBX_opt_prefault_write_enable:
if (value == /* default */ UINT64_MAX) {
env->me_options.prefault_write = default_prefault_write(env);
env->me_options.flags.non_auto.prefault_write = false;
} else if (value > 1)
err = MDBX_EINVAL;
else {
env->me_options.prefault_write = value != 0;
env->me_options.flags.non_auto.prefault_write = true;
}
break;
default: default:
return MDBX_EINVAL; return MDBX_EINVAL;
} }
@ -24634,6 +24644,10 @@ __cold int mdbx_env_get_option(const MDBX_env *env, const MDBX_option_t option,
#endif #endif
break; break;
case MDBX_opt_prefault_write_enable:
*pvalue = env->me_options.prefault_write;
break;
default: default:
return MDBX_EINVAL; return MDBX_EINVAL;
} }
@ -25120,7 +25134,6 @@ __dll_export
" MDBX_AVOID_MSYNC=" MDBX_STRINGIFY(MDBX_AVOID_MSYNC) " MDBX_AVOID_MSYNC=" MDBX_STRINGIFY(MDBX_AVOID_MSYNC)
" MDBX_ENABLE_REFUND=" MDBX_STRINGIFY(MDBX_ENABLE_REFUND) " MDBX_ENABLE_REFUND=" MDBX_STRINGIFY(MDBX_ENABLE_REFUND)
" MDBX_ENABLE_MADVISE=" MDBX_STRINGIFY(MDBX_ENABLE_MADVISE) " MDBX_ENABLE_MADVISE=" MDBX_STRINGIFY(MDBX_ENABLE_MADVISE)
" MDBX_ENABLE_PREFAULT=" MDBX_STRINGIFY(MDBX_ENABLE_PREFAULT)
" MDBX_ENABLE_MINCORE=" MDBX_STRINGIFY(MDBX_ENABLE_MINCORE) " MDBX_ENABLE_MINCORE=" MDBX_STRINGIFY(MDBX_ENABLE_MINCORE)
" MDBX_ENABLE_PGOP_STAT=" MDBX_STRINGIFY(MDBX_ENABLE_PGOP_STAT) " MDBX_ENABLE_PGOP_STAT=" MDBX_STRINGIFY(MDBX_ENABLE_PGOP_STAT)
" MDBX_ENABLE_PROFGC=" MDBX_STRINGIFY(MDBX_ENABLE_PROFGC) " MDBX_ENABLE_PROFGC=" MDBX_STRINGIFY(MDBX_ENABLE_PROFGC)

View File

@ -87,18 +87,6 @@
#error MDBX_ENABLE_PGOP_STAT must be defined as 0 or 1 #error MDBX_ENABLE_PGOP_STAT must be defined as 0 or 1
#endif /* MDBX_ENABLE_PGOP_STAT */ #endif /* MDBX_ENABLE_PGOP_STAT */
/** Controls prevention of page-faults of reclaimed and allocated pages in the
* MDBX_WRITEMAP mode by clearing ones through file handle before touching. */
#ifndef MDBX_ENABLE_PREFAULT
#if MDBX_MMAP_INCOHERENT_FILE_WRITE
#define MDBX_ENABLE_PREFAULT 0
#else
#define MDBX_ENABLE_PREFAULT 1
#endif
#elif !(MDBX_ENABLE_PREFAULT == 0 || MDBX_ENABLE_PREFAULT == 1)
#error MDBX_ENABLE_PREFAULT must be defined as 0 or 1
#endif /* MDBX_ENABLE_PREFAULT */
/** Controls using Unix' mincore() to determine whether DB-pages /** Controls using Unix' mincore() to determine whether DB-pages
* are resident in memory. */ * are resident in memory. */
#ifndef MDBX_ENABLE_MINCORE #ifndef MDBX_ENABLE_MINCORE