From 0339aa56d932741814297ba43626bf2185aa60fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B5=D0=BE=D0=BD=D0=B8=D0=B4=20=D0=AE=D1=80=D1=8C?= =?UTF-8?q?=D0=B5=D0=B2=20=28Leonid=20Yuriev=29?= Date: Fri, 20 Dec 2024 20:34:49 +0300 Subject: [PATCH] =?UTF-8?q?mdbx:=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=20`prefault=5Fwrite=5Factivated`=20=D0=B2=20=D1=82=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=B7=D0=B0=D0=BA=D1=86=D0=B8=D1=8E.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gc-get.c | 8 ++++---- src/internals.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/gc-get.c b/src/gc-get.c index b33ba209..39b68bba 100644 --- a/src/gc-get.c +++ b/src/gc-get.c @@ -768,7 +768,7 @@ static inline pgr_t page_alloc_finalize(MDBX_env *const env, MDBX_txn *const txn * обновляться PTE с последующей генерацией page-fault и чтением данных из * грязной I/O очереди. Из-за этого штраф за лишнюю запись может быть * сравним с избегаемым ненужным чтением. */ - if (env->prefault_write_activated) { + if (txn->tw.prefault_write_activated) { void *const pattern = ptr_disp(env->page_auxbuf, need_clean ? env->ps : env->ps * 2); size_t file_offset = pgno2bytes(env, pgno); if (likely(num == 1)) { @@ -900,8 +900,8 @@ pgr_t gc_alloc_ex(const MDBX_cursor *const mc, const size_t num, uint8_t flags) gc->dbi_state = txn->dbi_state; gc->top_and_flags = z_fresh_mark; - env->prefault_write_activated = env->options.prefault_write; - if (env->prefault_write_activated) { + txn->tw.prefault_write_activated = env->options.prefault_write; + if (txn->tw.prefault_write_activated) { /* Проверка посредством minicore() существенно снижает затраты, но в * простейших случаях (тривиальный бенчмарк) интегральная производительность * становится вдвое меньше. А на платформах без mincore() и с проблемной @@ -914,7 +914,7 @@ pgr_t gc_alloc_ex(const MDBX_cursor *const mc, const size_t num, uint8_t flags) (txn->dbs[FREE_DBI].branch_pages == 0 && txn->geo.now < 1234) || /* Не суетимся если страница в зоне включенного упреждающего чтения */ (readahead_enabled && pgno + num < readahead_edge)) - env->prefault_write_activated = false; + txn->tw.prefault_write_activated = false; } retry_gc_refresh_oldest:; diff --git a/src/internals.h b/src/internals.h index aae09e42..a7f15143 100644 --- a/src/internals.h +++ b/src/internals.h @@ -212,6 +212,7 @@ struct MDBX_txn { troika_t troika; /* In write txns, array of cursors for each DB */ pnl_t __restrict relist; /* Reclaimed GC pages */ + bool prefault_write_activated; struct { /* The list of reclaimed txns from GC */ txl_t __restrict reclaimed; @@ -436,7 +437,6 @@ struct MDBX_env { } me_sysv_ipc; #endif /* MDBX_LOCKING == MDBX_LOCKING_SYSV */ bool incore; - bool prefault_write_activated; #if MDBX_ENABLE_DBI_LOCKFREE defer_free_item_t *defer_free;