mdbx: перенос prefault_write_activated в транзакцию.

This commit is contained in:
Леонид Юрьев (Leonid Yuriev) 2024-12-20 20:34:49 +03:00
parent 4059686534
commit 0339aa56d9
2 changed files with 5 additions and 5 deletions

View File

@ -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:;

View File

@ -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;