mdbx: добавление `MDBX_opt_prefer_waf_insteadof_balance`.
This commit is contained in:
parent
f19753636d
commit
7c69493473
|
@ -66,7 +66,7 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic
|
||||||
интеграции с легковесными потоками/нитями их мультиплексирования вместе
|
интеграции с легковесными потоками/нитями их мультиплексирования вместе
|
||||||
с транзакциями по потокам операционной системы.
|
с транзакциями по потокам операционной системы.
|
||||||
|
|
||||||
- TODO: Опция `MDBX_opt_prefer_waf_insteadof_balance`.
|
- Опция `MDBX_opt_prefer_waf_insteadof_balance`.
|
||||||
|
|
||||||
- TODO: Опции `MDBX_opt_subpage_limit`, `MDBX_opt_subpage_room_threshold`, `MDBX_opt_subpage_reserve_prereq`, `MDBX_opt_subpage_reserve_limit`.
|
- TODO: Опции `MDBX_opt_subpage_limit`, `MDBX_opt_subpage_room_threshold`, `MDBX_opt_subpage_reserve_prereq`, `MDBX_opt_subpage_reserve_limit`.
|
||||||
|
|
||||||
|
|
31
mdbx.h
31
mdbx.h
|
@ -2320,14 +2320,14 @@ enum MDBX_option_t {
|
||||||
MDBX_opt_spill_parent4child_denominator,
|
MDBX_opt_spill_parent4child_denominator,
|
||||||
|
|
||||||
/** \brief Controls the in-process threshold of semi-empty pages merge.
|
/** \brief Controls the in-process threshold of semi-empty pages merge.
|
||||||
* \warning This is experimental option and subject for change or removal.
|
|
||||||
* \details This option controls the in-process threshold of minimum page
|
* \details This option controls the in-process threshold of minimum page
|
||||||
* fill, as used space of percentage of a page. Neighbour pages emptier than
|
* fill, as used space of percentage of a page. Neighbour pages emptier than
|
||||||
* this value are candidates for merging. The threshold value is specified
|
* this value are candidates for merging. The threshold value is specified
|
||||||
* in 1/65536 of percent, which is equivalent to the 16-dot-16 fixed point
|
* in 1/65536 of percent, which is equivalent to the 16-dot-16 fixed point
|
||||||
* format. The specified value must be in the range from 12.5% (almost empty)
|
* format. The specified value must be in the range from 12.5% (almost empty)
|
||||||
* to 50% (half empty) which corresponds to the range from 8192 and to 32768
|
* to 50% (half empty) which corresponds to the range from 8192 and to 32768
|
||||||
* in units respectively. */
|
* in units respectively.
|
||||||
|
* \see MDBX_opt_prefer_waf_insteadof_balance */
|
||||||
MDBX_opt_merge_threshold_16dot16_percent,
|
MDBX_opt_merge_threshold_16dot16_percent,
|
||||||
|
|
||||||
/** \brief Controls the choosing between use write-through disk writes and
|
/** \brief Controls the choosing between use write-through disk writes and
|
||||||
|
@ -2388,7 +2388,32 @@ enum MDBX_option_t {
|
||||||
* С другой стороны, при минимальном значении (включая 0)
|
* С другой стороны, при минимальном значении (включая 0)
|
||||||
* `MDBX_opt_rp_augment_limit` переработка GC будет ограничиваться
|
* `MDBX_opt_rp_augment_limit` переработка GC будет ограничиваться
|
||||||
* преимущественно затраченным временем. */
|
* преимущественно затраченным временем. */
|
||||||
MDBX_opt_gc_time_limit
|
MDBX_opt_gc_time_limit,
|
||||||
|
|
||||||
|
/** \brief Управляет выбором между стремлением к равномерности наполнения
|
||||||
|
* страниц, либо уменьшением количества измененных и записанных страниц.
|
||||||
|
*
|
||||||
|
* \details После операций удаления страницы содержащие меньше минимума
|
||||||
|
* ключей, либо опустошенные до \ref MDBX_opt_merge_threshold_16dot16_percent
|
||||||
|
* подлежат слиянию с одной из соседних. Если страницы справа и слева от
|
||||||
|
* текущей обе «грязные» (были изменены в ходе транзакции и должны быть
|
||||||
|
* записаны на диск), либо обе «чисты» (не изменялись в текущей транзакции),
|
||||||
|
* то целью для слияния всегда выбирается менее заполненная страница.
|
||||||
|
* Когда же только одна из соседствующих является «грязной», а другая
|
||||||
|
* «чистой», то возможны две тактики выбора цели для слияния:
|
||||||
|
*
|
||||||
|
* - Если `MDBX_opt_prefer_waf_insteadof_balance = True`, то будет выбрана
|
||||||
|
* уже измененная страница, что НЕ УВЕЛИЧИТ количество измененных страниц
|
||||||
|
* и объем записи на диск при фиксации текущей транзакции, но в среднем
|
||||||
|
* будет УВЕЛИЧИВАТЬ неравномерность заполнения страниц.
|
||||||
|
*
|
||||||
|
* - Если `MDBX_opt_prefer_waf_insteadof_balance = False`, то будет выбрана
|
||||||
|
* менее заполненная страница, что УВЕЛИЧИТ количество измененных страниц
|
||||||
|
* и объем записи на диск при фиксации текущей транзакции, но в среднем
|
||||||
|
* будет УМЕНЬШАТЬ неравномерность заполнения страниц.
|
||||||
|
*
|
||||||
|
* \see MDBX_opt_merge_threshold_16dot16_percent */
|
||||||
|
MDBX_opt_prefer_waf_insteadof_balance
|
||||||
};
|
};
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
/** \ingroup c_settings */
|
/** \ingroup c_settings */
|
||||||
|
|
21
src/core.c
21
src/core.c
|
@ -6487,6 +6487,11 @@ static bool default_prefault_write(const MDBX_env *env) {
|
||||||
(env->me_flags & (MDBX_WRITEMAP | MDBX_RDONLY)) == MDBX_WRITEMAP;
|
(env->me_flags & (MDBX_WRITEMAP | MDBX_RDONLY)) == MDBX_WRITEMAP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool default_prefer_waf_insteadof_balance(const MDBX_env *env) {
|
||||||
|
(void)env;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static void adjust_defaults(MDBX_env *env) {
|
static void adjust_defaults(MDBX_env *env) {
|
||||||
if (!env->me_options.flags.non_auto.rp_augment_limit)
|
if (!env->me_options.flags.non_auto.rp_augment_limit)
|
||||||
env->me_options.rp_augment_limit = default_rp_augment_limit(env);
|
env->me_options.rp_augment_limit = default_rp_augment_limit(env);
|
||||||
|
@ -13692,6 +13697,8 @@ __cold int mdbx_env_create(MDBX_env **penv) {
|
||||||
env->me_options.spill_parent4child_denominator = 0;
|
env->me_options.spill_parent4child_denominator = 0;
|
||||||
env->me_options.dp_loose_limit = 64;
|
env->me_options.dp_loose_limit = 64;
|
||||||
env->me_options.merge_threshold_16dot16_percent = 65536 / 4 /* 25% */;
|
env->me_options.merge_threshold_16dot16_percent = 65536 / 4 /* 25% */;
|
||||||
|
if (default_prefer_waf_insteadof_balance(env))
|
||||||
|
env->me_options.prefer_waf_insteadof_balance = true;
|
||||||
|
|
||||||
#if !(defined(_WIN32) || defined(_WIN64))
|
#if !(defined(_WIN32) || defined(_WIN64))
|
||||||
env->me_options.writethrough_threshold =
|
env->me_options.writethrough_threshold =
|
||||||
|
@ -26459,6 +26466,16 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MDBX_opt_prefer_waf_insteadof_balance:
|
||||||
|
if (value == /* default */ UINT64_MAX)
|
||||||
|
env->me_options.prefer_waf_insteadof_balance =
|
||||||
|
default_prefer_waf_insteadof_balance(env);
|
||||||
|
else if (value > 1)
|
||||||
|
err = MDBX_EINVAL;
|
||||||
|
else
|
||||||
|
env->me_options.prefer_waf_insteadof_balance = value != 0;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return MDBX_EINVAL;
|
return MDBX_EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -26548,6 +26565,10 @@ __cold int mdbx_env_get_option(const MDBX_env *env, const MDBX_option_t option,
|
||||||
*pvalue = env->me_options.prefault_write;
|
*pvalue = env->me_options.prefault_write;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MDBX_opt_prefer_waf_insteadof_balance:
|
||||||
|
*pvalue = env->me_options.prefer_waf_insteadof_balance;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return MDBX_EINVAL;
|
return MDBX_EINVAL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue