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;