Skip to content

Commit

Permalink
save
Browse files Browse the repository at this point in the history
  • Loading branch information
AskAlexSharov committed Apr 23, 2024
1 parent 7c2671b commit 4350b11
Show file tree
Hide file tree
Showing 13 changed files with 34 additions and 228 deletions.
57 changes: 6 additions & 51 deletions mdbx/mdbx.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
* <http://www.OpenLDAP.org/license.html>. */

#define xMDBX_ALLOY 1
#define MDBX_BUILD_SOURCERY 7e1fc281eda601813f191bf4e230e0cd439df56e9fbe6b0cbfee716c27a838cf_v0_13_0_41_g0da3c87a
#define MDBX_BUILD_SOURCERY 91ff5b5423830ee44fca4b70dcb298f233338a17a3185c44df67ec16d3034af3_v0_13_0_38_gf1975363
#ifdef MDBX_CONFIG_H
#include MDBX_CONFIG_H
#endif
Expand Down Expand Up @@ -2053,7 +2053,7 @@ extern LIBMDBX_API const char *const mdbx_sourcery_anchor;

/** Controls profiling of GC search and updates. */
#ifndef MDBX_ENABLE_PROFGC
#define MDBX_ENABLE_PROFGC 1
#define MDBX_ENABLE_PROFGC 0
#elif !(MDBX_ENABLE_PROFGC == 0 || MDBX_ENABLE_PROFGC == 1)
#error MDBX_ENABLE_PROFGC must be defined as 0 or 1
#endif /* MDBX_ENABLE_PROFGC */
Expand Down Expand Up @@ -3027,12 +3027,6 @@ typedef struct profgc_stat {
uint32_t spe_counter;
/* page faults (hard page faults) */
uint32_t majflt;
/* Для разборок с pnl_merge() */
struct {
uint64_t time;
uint64_t volume;
uint32_t calls;
} pnl_merge;
} profgc_stat_t;

/* Statistics of page operations overall of all (running, completed and aborted)
Expand Down Expand Up @@ -10612,11 +10606,6 @@ static bool default_prefault_write(const MDBX_env *env) {
(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) {
if (!env->me_options.flags.non_auto.rp_augment_limit)
env->me_options.rp_augment_limit = default_rp_augment_limit(env);
Expand Down Expand Up @@ -12129,15 +12118,7 @@ next_gc:;
}

/* Merge in descending sorted order */
#if MDBX_ENABLE_PROFGC
const uint64_t merge_begin = osal_monotime();
#endif /* MDBX_ENABLE_PROFGC */
pnl_merge(txn->tw.relist, gc_pnl);
#if MDBX_ENABLE_PROFGC
prof->pnl_merge.calls += 1;
prof->pnl_merge.volume += MDBX_PNL_GETSIZE(txn->tw.relist);
prof->pnl_merge.time += osal_monotime() - merge_begin;
#endif /* MDBX_ENABLE_PROFGC */
flags |= MDBX_ALLOC_SHOULD_SCAN;
if (AUDIT_ENABLED()) {
if (unlikely(!pnl_check(txn->tw.relist, txn->mt_next_pgno))) {
Expand Down Expand Up @@ -12310,7 +12291,7 @@ next_gc:;
no_gc:
eASSERT(env, pgno == 0);
#ifndef MDBX_ENABLE_BACKLOG_DEPLETED
#define MDBX_ENABLE_BACKLOG_DEPLETED 1
#define MDBX_ENABLE_BACKLOG_DEPLETED 0
#endif /* MDBX_ENABLE_BACKLOG_DEPLETED*/
if (MDBX_ENABLE_BACKLOG_DEPLETED &&
unlikely(!(txn->mt_flags & MDBX_TXN_DRAINED_GC))) {
Expand Down Expand Up @@ -16207,16 +16188,6 @@ static void take_gcprof(MDBX_txn *txn, MDBX_commit_latency *latency) {
latency->gc_prof.wipes = ptr->gc_prof.wipes;
latency->gc_prof.flushes = ptr->gc_prof.flushes;
latency->gc_prof.kicks = ptr->gc_prof.kicks;

latency->gc_prof.pnl_merge_work.time =
osal_monotime_to_16dot16(ptr->gc_prof.work.pnl_merge.time);
latency->gc_prof.pnl_merge_work.calls = ptr->gc_prof.work.pnl_merge.calls;
latency->gc_prof.pnl_merge_work.volume = ptr->gc_prof.work.pnl_merge.volume;
latency->gc_prof.pnl_merge_self.time =
osal_monotime_to_16dot16(ptr->gc_prof.self.pnl_merge.time);
latency->gc_prof.pnl_merge_self.calls = ptr->gc_prof.self.pnl_merge.calls;
latency->gc_prof.pnl_merge_self.volume = ptr->gc_prof.self.pnl_merge.volume;

if (txn == env->me_txn0)
memset(&ptr->gc_prof, 0, sizeof(ptr->gc_prof));
} else
Expand Down Expand Up @@ -17840,8 +17811,6 @@ __cold int mdbx_env_create(MDBX_env **penv) {
env->me_options.spill_parent4child_denominator = 0;
env->me_options.dp_loose_limit = 64;
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))
env->me_options.writethrough_threshold =
Expand Down Expand Up @@ -30609,16 +30578,6 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option,
}
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:
return MDBX_EINVAL;
}
Expand Down Expand Up @@ -30708,10 +30667,6 @@ __cold int mdbx_env_get_option(const MDBX_env *env, const MDBX_option_t option,
*pvalue = env->me_options.prefault_write;
break;

case MDBX_opt_prefer_waf_insteadof_balance:
*pvalue = env->me_options.prefer_waf_insteadof_balance;
break;

default:
return MDBX_EINVAL;
}
Expand Down Expand Up @@ -37140,9 +37095,9 @@ __dll_export
0,
13,
0,
41,
{"2024-04-05T00:30:46+03:00", "797cb93cde0a0dde4835bb2754a4c2fd7191863d", "0da3c87a8fd8b69ec85184f27ebef55030c0a3b2",
"v0.13.0-41-g0da3c87a"},
38,
{"2024-04-04T22:31:03+03:00", "a0fc2d938419aa82764beae00e1472f412d5a4d5", "f19753636d2364c43125f972b8d3f29dc9e244b4",
"v0.13.0-38-gf1975363"},
sourcery};

__dll_export
Expand Down
37 changes: 3 additions & 34 deletions mdbx/mdbx.h
Original file line number Diff line number Diff line change
Expand Up @@ -2320,14 +2320,14 @@ enum MDBX_option_t {
MDBX_opt_spill_parent4child_denominator,

/** \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
* fill, as used space of percentage of a page. Neighbour pages emptier than
* 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
* 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
* in units respectively.
* \see MDBX_opt_prefer_waf_insteadof_balance */
* in units respectively. */
MDBX_opt_merge_threshold_16dot16_percent,

/** \brief Controls the choosing between use write-through disk writes and
Expand Down Expand Up @@ -2388,32 +2388,7 @@ enum MDBX_option_t {
* С другой стороны, при минимальном значении (включая 0)
* `MDBX_opt_rp_augment_limit` переработка GC будет ограничиваться
* преимущественно затраченным временем. */
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
MDBX_opt_gc_time_limit
};
#ifndef __cplusplus
/** \ingroup c_settings */
Expand Down Expand Up @@ -4111,12 +4086,6 @@ struct MDBX_commit_latency {
/** \brief Количество страничных промахов (page faults) внутри GC
* при выделении и подготовки страниц для самой GC. */
uint32_t self_majflt;
/* Для разборок с pnl_merge() */
struct {
uint32_t time;
uint64_t volume;
uint32_t calls;
} pnl_merge_work, pnl_merge_self;
} gc_prof;
};
#ifndef __cplusplus
Expand Down
2 changes: 1 addition & 1 deletion mdbxdist/ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic
интеграции с легковесными потоками/нитями их мультиплексирования вместе
с транзакциями по потокам операционной системы.

- Опция `MDBX_opt_prefer_waf_insteadof_balance`.
- TODO: Опция `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`.

Expand Down
2 changes: 1 addition & 1 deletion mdbxdist/VERSION.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.13.0.41
0.13.0.38
57 changes: 6 additions & 51 deletions mdbxdist/mdbx.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
* <http://www.OpenLDAP.org/license.html>. */

#define xMDBX_ALLOY 1
#define MDBX_BUILD_SOURCERY 7e1fc281eda601813f191bf4e230e0cd439df56e9fbe6b0cbfee716c27a838cf_v0_13_0_41_g0da3c87a
#define MDBX_BUILD_SOURCERY 91ff5b5423830ee44fca4b70dcb298f233338a17a3185c44df67ec16d3034af3_v0_13_0_38_gf1975363
#ifdef MDBX_CONFIG_H
#include MDBX_CONFIG_H
#endif
Expand Down Expand Up @@ -2053,7 +2053,7 @@ extern LIBMDBX_API const char *const mdbx_sourcery_anchor;

/** Controls profiling of GC search and updates. */
#ifndef MDBX_ENABLE_PROFGC
#define MDBX_ENABLE_PROFGC 1
#define MDBX_ENABLE_PROFGC 0
#elif !(MDBX_ENABLE_PROFGC == 0 || MDBX_ENABLE_PROFGC == 1)
#error MDBX_ENABLE_PROFGC must be defined as 0 or 1
#endif /* MDBX_ENABLE_PROFGC */
Expand Down Expand Up @@ -3027,12 +3027,6 @@ typedef struct profgc_stat {
uint32_t spe_counter;
/* page faults (hard page faults) */
uint32_t majflt;
/* Для разборок с pnl_merge() */
struct {
uint64_t time;
uint64_t volume;
uint32_t calls;
} pnl_merge;
} profgc_stat_t;

/* Statistics of page operations overall of all (running, completed and aborted)
Expand Down Expand Up @@ -10612,11 +10606,6 @@ static bool default_prefault_write(const MDBX_env *env) {
(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) {
if (!env->me_options.flags.non_auto.rp_augment_limit)
env->me_options.rp_augment_limit = default_rp_augment_limit(env);
Expand Down Expand Up @@ -12129,15 +12118,7 @@ next_gc:;
}

/* Merge in descending sorted order */
#if MDBX_ENABLE_PROFGC
const uint64_t merge_begin = osal_monotime();
#endif /* MDBX_ENABLE_PROFGC */
pnl_merge(txn->tw.relist, gc_pnl);
#if MDBX_ENABLE_PROFGC
prof->pnl_merge.calls += 1;
prof->pnl_merge.volume += MDBX_PNL_GETSIZE(txn->tw.relist);
prof->pnl_merge.time += osal_monotime() - merge_begin;
#endif /* MDBX_ENABLE_PROFGC */
flags |= MDBX_ALLOC_SHOULD_SCAN;
if (AUDIT_ENABLED()) {
if (unlikely(!pnl_check(txn->tw.relist, txn->mt_next_pgno))) {
Expand Down Expand Up @@ -12310,7 +12291,7 @@ next_gc:;
no_gc:
eASSERT(env, pgno == 0);
#ifndef MDBX_ENABLE_BACKLOG_DEPLETED
#define MDBX_ENABLE_BACKLOG_DEPLETED 1
#define MDBX_ENABLE_BACKLOG_DEPLETED 0
#endif /* MDBX_ENABLE_BACKLOG_DEPLETED*/
if (MDBX_ENABLE_BACKLOG_DEPLETED &&
unlikely(!(txn->mt_flags & MDBX_TXN_DRAINED_GC))) {
Expand Down Expand Up @@ -16207,16 +16188,6 @@ static void take_gcprof(MDBX_txn *txn, MDBX_commit_latency *latency) {
latency->gc_prof.wipes = ptr->gc_prof.wipes;
latency->gc_prof.flushes = ptr->gc_prof.flushes;
latency->gc_prof.kicks = ptr->gc_prof.kicks;

latency->gc_prof.pnl_merge_work.time =
osal_monotime_to_16dot16(ptr->gc_prof.work.pnl_merge.time);
latency->gc_prof.pnl_merge_work.calls = ptr->gc_prof.work.pnl_merge.calls;
latency->gc_prof.pnl_merge_work.volume = ptr->gc_prof.work.pnl_merge.volume;
latency->gc_prof.pnl_merge_self.time =
osal_monotime_to_16dot16(ptr->gc_prof.self.pnl_merge.time);
latency->gc_prof.pnl_merge_self.calls = ptr->gc_prof.self.pnl_merge.calls;
latency->gc_prof.pnl_merge_self.volume = ptr->gc_prof.self.pnl_merge.volume;

if (txn == env->me_txn0)
memset(&ptr->gc_prof, 0, sizeof(ptr->gc_prof));
} else
Expand Down Expand Up @@ -17840,8 +17811,6 @@ __cold int mdbx_env_create(MDBX_env **penv) {
env->me_options.spill_parent4child_denominator = 0;
env->me_options.dp_loose_limit = 64;
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))
env->me_options.writethrough_threshold =
Expand Down Expand Up @@ -30609,16 +30578,6 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option,
}
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:
return MDBX_EINVAL;
}
Expand Down Expand Up @@ -30708,10 +30667,6 @@ __cold int mdbx_env_get_option(const MDBX_env *env, const MDBX_option_t option,
*pvalue = env->me_options.prefault_write;
break;

case MDBX_opt_prefer_waf_insteadof_balance:
*pvalue = env->me_options.prefer_waf_insteadof_balance;
break;

default:
return MDBX_EINVAL;
}
Expand Down Expand Up @@ -37140,9 +37095,9 @@ __dll_export
0,
13,
0,
41,
{"2024-04-05T00:30:46+03:00", "797cb93cde0a0dde4835bb2754a4c2fd7191863d", "0da3c87a8fd8b69ec85184f27ebef55030c0a3b2",
"v0.13.0-41-g0da3c87a"},
38,
{"2024-04-04T22:31:03+03:00", "a0fc2d938419aa82764beae00e1472f412d5a4d5", "f19753636d2364c43125f972b8d3f29dc9e244b4",
"v0.13.0-38-gf1975363"},
sourcery};

__dll_export
Expand Down
10 changes: 2 additions & 8 deletions mdbxdist/mdbx.c++
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
* <http://www.OpenLDAP.org/license.html>. */

#define xMDBX_ALLOY 1
#define MDBX_BUILD_SOURCERY 7e1fc281eda601813f191bf4e230e0cd439df56e9fbe6b0cbfee716c27a838cf_v0_13_0_41_g0da3c87a
#define MDBX_BUILD_SOURCERY 91ff5b5423830ee44fca4b70dcb298f233338a17a3185c44df67ec16d3034af3_v0_13_0_38_gf1975363
#ifdef MDBX_CONFIG_H
#include MDBX_CONFIG_H
#endif
Expand Down Expand Up @@ -2053,7 +2053,7 @@ extern LIBMDBX_API const char *const mdbx_sourcery_anchor;

/** Controls profiling of GC search and updates. */
#ifndef MDBX_ENABLE_PROFGC
#define MDBX_ENABLE_PROFGC 1
#define MDBX_ENABLE_PROFGC 0
#elif !(MDBX_ENABLE_PROFGC == 0 || MDBX_ENABLE_PROFGC == 1)
#error MDBX_ENABLE_PROFGC must be defined as 0 or 1
#endif /* MDBX_ENABLE_PROFGC */
Expand Down Expand Up @@ -3027,12 +3027,6 @@ typedef struct profgc_stat {
uint32_t spe_counter;
/* page faults (hard page faults) */
uint32_t majflt;
/* Для разборок с pnl_merge() */
struct {
uint64_t time;
uint64_t volume;
uint32_t calls;
} pnl_merge;
} profgc_stat_t;

/* Statistics of page operations overall of all (running, completed and aborted)
Expand Down
Loading

0 comments on commit 4350b11

Please sign in to comment.