mirror of
https://gitflic.ru/project/erthink/libmdbx.git
synced 2025-02-05 06:45:51 +00:00
mdbx: перенос prefault_write_activated
в транзакцию.
This commit is contained in:
parent
4059686534
commit
0339aa56d9
@ -768,7 +768,7 @@ static inline pgr_t page_alloc_finalize(MDBX_env *const env, MDBX_txn *const txn
|
|||||||
* обновляться PTE с последующей генерацией page-fault и чтением данных из
|
* обновляться PTE с последующей генерацией page-fault и чтением данных из
|
||||||
* грязной I/O очереди. Из-за этого штраф за лишнюю запись может быть
|
* грязной 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);
|
void *const pattern = ptr_disp(env->page_auxbuf, need_clean ? env->ps : env->ps * 2);
|
||||||
size_t file_offset = pgno2bytes(env, pgno);
|
size_t file_offset = pgno2bytes(env, pgno);
|
||||||
if (likely(num == 1)) {
|
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->dbi_state = txn->dbi_state;
|
||||||
gc->top_and_flags = z_fresh_mark;
|
gc->top_and_flags = z_fresh_mark;
|
||||||
|
|
||||||
env->prefault_write_activated = env->options.prefault_write;
|
txn->tw.prefault_write_activated = env->options.prefault_write;
|
||||||
if (env->prefault_write_activated) {
|
if (txn->tw.prefault_write_activated) {
|
||||||
/* Проверка посредством minicore() существенно снижает затраты, но в
|
/* Проверка посредством minicore() существенно снижает затраты, но в
|
||||||
* простейших случаях (тривиальный бенчмарк) интегральная производительность
|
* простейших случаях (тривиальный бенчмарк) интегральная производительность
|
||||||
* становится вдвое меньше. А на платформах без mincore() и с проблемной
|
* становится вдвое меньше. А на платформах без 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) ||
|
(txn->dbs[FREE_DBI].branch_pages == 0 && txn->geo.now < 1234) ||
|
||||||
/* Не суетимся если страница в зоне включенного упреждающего чтения */
|
/* Не суетимся если страница в зоне включенного упреждающего чтения */
|
||||||
(readahead_enabled && pgno + num < readahead_edge))
|
(readahead_enabled && pgno + num < readahead_edge))
|
||||||
env->prefault_write_activated = false;
|
txn->tw.prefault_write_activated = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
retry_gc_refresh_oldest:;
|
retry_gc_refresh_oldest:;
|
||||||
|
@ -212,6 +212,7 @@ struct MDBX_txn {
|
|||||||
troika_t troika;
|
troika_t troika;
|
||||||
/* In write txns, array of cursors for each DB */
|
/* In write txns, array of cursors for each DB */
|
||||||
pnl_t __restrict relist; /* Reclaimed GC pages */
|
pnl_t __restrict relist; /* Reclaimed GC pages */
|
||||||
|
bool prefault_write_activated;
|
||||||
struct {
|
struct {
|
||||||
/* The list of reclaimed txns from GC */
|
/* The list of reclaimed txns from GC */
|
||||||
txl_t __restrict reclaimed;
|
txl_t __restrict reclaimed;
|
||||||
@ -436,7 +437,6 @@ struct MDBX_env {
|
|||||||
} me_sysv_ipc;
|
} me_sysv_ipc;
|
||||||
#endif /* MDBX_LOCKING == MDBX_LOCKING_SYSV */
|
#endif /* MDBX_LOCKING == MDBX_LOCKING_SYSV */
|
||||||
bool incore;
|
bool incore;
|
||||||
bool prefault_write_activated;
|
|
||||||
|
|
||||||
#if MDBX_ENABLE_DBI_LOCKFREE
|
#if MDBX_ENABLE_DBI_LOCKFREE
|
||||||
defer_free_item_t *defer_free;
|
defer_free_item_t *defer_free;
|
||||||
|
Loading…
Reference in New Issue
Block a user