Леонид Юрьев (Leonid Yuriev)
e518edcfed
mdbx: унифицирование инициализации mp_txnid
внутри page_dirty()
.
2022-11-19 19:36:30 +03:00
Леонид Юрьев (Leonid Yuriev)
3563ed00e3
mdbx: использование не-спаренного курсора и gc_cursor_init()
внутри update_gc()
.
2022-11-19 19:36:30 +03:00
Леонид Юрьев (Leonid Yuriev)
6c840cf58e
mdbx: подсчет грязных страниц в режиме MDBX_WRITEMAP
для статистики.
2022-11-19 19:36:30 +03:00
Леонид Юрьев (Leonid Yuriev)
3704433aa9
mdbx: минорное удаление мертвого/ненужного кода из page_alloc_slowpath()
.
2022-11-10 16:34:23 +03:00
Леонид Юрьев (Leonid Yuriev)
70e8006776
mdbx-docs: перенаправление github-ссылок на web-archive.
2022-11-10 15:54:31 +03:00
Леонид Юрьев (Leonid Yuriev)
2dfdac2821
mdbx-windows: повтор чтения заголовка при ERROR_LOCK_VIOLATION
.
2022-11-08 23:32:34 +03:00
Леонид Юрьев (Leonid Yuriev)
c270306580
mdbx-windows: уточнение проверок макросов MinGW и устранение предупреждений.
2022-11-08 20:39:44 +03:00
Леонид Юрьев (Leonid Yuriev)
3ee223514d
mdbx: очистка readers_refresh_flag
для page_alloc_slowpath()
.
2022-11-07 14:16:59 +03:00
Леонид Юрьев (Leonid Yuriev)
f7f94bb698
mdbx: чуть больше const
для прозрачности.
2022-11-07 14:16:35 +03:00
Леонид Юрьев (Leonid Yuriev)
f0c6aa4646
mdbx: workaround for false-positives from Valgrind bug.
2022-11-07 00:47:16 +03:00
Леонид Юрьев (Leonid Yuriev)
771c85a880
mdbx: уточнение txn_space_dirty
в соответствии с обновленным учетом грязных страниц.
2022-11-07 00:44:38 +03:00
Леонид Юрьев (Leonid Yuriev)
4f1f9141f4
mdbx: добавление MDBX_ENABLE_PGOP_STAT
и MDBX_ENABLE_PROFGC
во внутреннюю строку с опциями сборки.
2022-11-07 00:44:38 +03:00
Леонид Юрьев (Leonid Yuriev)
f680c99116
mdbx: переделка page_alloc_slowpath()
с добавлением профилирования GC.
2022-11-07 00:44:37 +03:00
Леонид Юрьев (Leonid Yuriev)
acaa1d82d9
mdbx: minor touch assertions for issue#7
.
...
https://gitflic.ru/project/erthink/libmdbx/issue/7
2022-11-05 14:06:00 +03:00
Леонид Юрьев (Leonid Yuriev)
47e7a646fd
mdbx: переделка отслеживания mlocks для игнорирования EINVAL
от madvise()
.
2022-11-05 14:06:00 +03:00
Леонид Юрьев (Leonid Yuriev)
d4e67d14ce
mdbx: исправление неожиданного MDBX_BUSY
из mdbx_env_set_option()
.
2022-11-03 17:23:32 +03:00
Леонид Юрьев (Leonid Yuriev)
28e2e31949
mdbx: выделение специфической инициализации в osal_ctor()
.
2022-11-02 11:09:32 +03:00
Леонид Юрьев (Leonid Yuriev)
d661d4bac7
mdbx: добавление mdbx_env_warmup()
2022-10-24 11:37:57 +03:00
Леонид Юрьев (Leonid Yuriev)
4e95a079ee
mdbx: переименование MDBX_COMMIT_PAGES
в MDBX_AUXILARY_IOV_MAX
.
2022-10-22 11:12:52 +03:00
Леонид Юрьев (Leonid Yuriev)
753fa13048
mdbx: удаление лишних комментариев.
2022-10-22 11:12:52 +03:00
Леонид Юрьев (Leonid Yuriev)
8833dc6871
mdbx: костыль для обхода ошибок encryptfs.
...
Выяснилось что утилита `mdbx_copy` и функции `mdbx_env_copy()` могут
создавать ПРОБЛЕМЫ если целевой файл расположен в encryptfs (такая
файловая система в Linux).
При этом может быть четыре исхода в зависимости от версии ядра и
положения звезд на небе:
- всё хорошо;
- плохие данные в копии без возврата ошибок;
- ошибка EINVAL(22) при копировании;
- oops или зависание ядра, отвал смонтированной encryptfs и т.п.
В текущем понимании, причина обусловлена ошибой в коде fs, которая
проявляется при использовании системного вызова `copy_file_range`.
2022-10-22 01:38:33 +03:00
Леонид Юрьев (Leonid Yuriev)
6c986ce904
mdbx: костыль для старых версий stdatomic.h
, где макросы ATOMIC_*_LOCK_FREE
ошибочно переопределяются через функции.
2022-10-13 19:28:01 +03:00
Леонид Юрьев (Leonid Yuriev)
d94e65b870
mdbx: использование fcntl64(F_GETLK64/F_SETLK64/F_SETLKW64)
при наличии.
...
Это решает проблему срабатывания проверочного утверждения при сборке для
платформ где тип off_t шире соответствующих полей структуры flock,
используемой для блокировки файлов.
2022-10-12 21:25:18 +03:00
Леонид Юрьев (Leonid Yuriev)
5a45c4a210
mdbx-windows: удаление ненужного вызова LockFileEx()
внутри mdbx_env_copy()
.
2022-10-12 21:25:18 +03:00
Леонид Юрьев (Leonid Yuriev)
686c908a95
mdbx: более осторожное преобразование к типу mdbx_tid_t
для устранения предупреждений.
2022-10-12 21:25:18 +03:00
Леонид Юрьев (Leonid Yuriev)
e5fc056035
mdbx: изменение формата LCK и семантики некоторых внутренних полей.
...
Изменение формата LCK-файла означает что версии libmdbx использующие
разный формат не смогут работать с одной БД одновременно, а только
поочередно (LCK-файл переписывается при открытии первым открывающим БД
процессом).
1. Поле mti_unsynced_pages теперь 64-битное (чтобы не контролировать
переполнение) и перемещено для соблюдения выравнивания.
2. Поле mti_sync_timestamp переименовано в mti_eoos_timestamp
одновременно со сменой семантики. Теперь время отсчитывается не от
момента сброса данных на диск, а с момента входа в «грязное» состояние.
Скорее всего, текущая версия формата LCK не окончательная
и изменится до релиза.
2022-10-12 21:25:18 +03:00
Леонид Юрьев (Leonid Yuriev)
5242c5bfdc
mdbx: улучшение эвристики включения авто-слияния записей GC.
2022-10-10 21:06:33 +03:00
Леонид Юрьев (Leonid Yuriev)
329af93436
mdbx: уменьшение в 42 раза значения по-умолчанию для me_options.dp_limit
в отладочных сборках.
2022-10-10 19:26:38 +03:00
Леонид Юрьев (Leonid Yuriev)
22a84d656b
mdbx: проверка атомарности C11-операций c 32/64-битными данными.
2022-10-10 19:24:14 +03:00
Леонид Юрьев (Leonid Yuriev)
c3dd60fcb6
mdbx: добавление mdbx_env_get_pairsize4page_max()
и mdbx_env_get_valsize4page_max()
.
2022-10-10 16:33:51 +03:00
Леонид Юрьев (Leonid Yuriev)
92d203a12c
mdbx: исправление ложного срабатывания контроля "invalid page-address" в page_check()
.
...
При проверке использовалось глобальное значение me_dxb_mmap.current,
к которому не должны обращаться читающие транзакции. В результате,
в сложных много-поточных сценариях с изменением размера БД и её
переполнением, проверка могла выдавать ложно-положительный результат.
С точки зрения пользователя, ошибка могла проявляться как возврат
`MDBX_CORRUPTED` из читающей транзакции, когда включен "безопасный
режим" (дополнительный контроль), а в параллельной пишущей транзакции
происходит увеличение размера БД с последующим переполнением и откатом
этой транзакции. При этом никакого повреждения структуры БД нет.
2022-10-10 13:56:57 +03:00
Леонид Юрьев (Leonid Yuriev)
ad09164604
mdbx: минорное исправление для устранения срабатывания проверочного утверждения в отладочных сборках.
...
Ассерт мог срабатывать из-за отсутствия бита P_LEAF2 в передаваемом проверочном значении.
На что-либо другое не влияло, но не следует понять почему этот недочет ны был выявлен тестами раньше.
2022-10-10 13:56:57 +03:00
Леонид Юрьев (Leonid Yuriev)
db72763de0
mdbx: отключение учета грязных страниц в не требующих этого режимах.
...
В режиме MDBX_WRITEMAP с опцией сборки MDBX_AVOID_MSYNC=0 отслеживание грязных страниц не требуется.
Эта доработка устраняет еще одну из недоделок (пункт в TODO).
2022-10-10 13:56:57 +03:00
Леонид Юрьев (Leonid Yuriev)
940ef30659
mdbx: спиллинг грязных страниц с учетом их суммарного размера.
2022-10-10 13:56:57 +03:00
Леонид Юрьев (Leonid Yuriev)
f6eec7195b
mdbx: защита от нуля только общей задержки в метриках транзакции.
...
Ранее, при конвертации очень коротких интервалов в формат фиксированной
точки 16-точка-16, всегда выполнялось замещение нуля единицей. Т.е. если
интервал был не нулевым, но меньше 15.259 микросекунд (1/65536 секунды),
то вместо 0 возвращалось 1.
Это приводило к тому, что сумма длительности отдельных стадий нередко
была больше чем общее время фиксации транзакции. Проблема усугублялась,
если получаемые значения аккумулировались по серии транзакций.
Теперь такая защита от нуля выполняется только для общего времени,
но не для отдельных стадий.
Было:
latency(ms): preparation=72.69 gc=72.69 write=73.04 sync=141.40 ending=72.69 whole=142.14
Аккумулированная сумма длительности этапов ВТРОЕ(!) больше общей длительности.
Стало:
latency(ms): preparation=0.00 gc=0.02 write=0.79 sync=67.98 ending=0.00 whole=140.81
Аккумулированная сумма длительности этапов меньше общей длительности,
так как для каждой транзакции общая длительность возвращается не менее 15.259 микросекунд.
2022-10-10 13:56:57 +03:00
Леонид Юрьев (Leonid Yuriev)
92dabe1ad1
mdbx: исправление лишнего сброса данных на диск в режиме MDBX_SAFE_NOSYNC
при обновлении GC.
2022-10-10 13:56:57 +03:00
Leonid Yuriev
0f7e5073db
mdbx: поправлен сбор информации о задержках, чтобы включенный аудит не искажал затраты на GC.
2022-10-10 13:56:57 +03:00
Леонид Юрьев (Leonid Yuriev)
24d7a4d605
mdbx: добавлено описание использования файловых дескрипторов в различных режимах.
2022-10-10 13:56:57 +03:00
Леонид Юрьев (Leonid Yuriev)
a95ee8daa3
mdbx: минорная доработка mdbx_env_create()
.
2022-10-10 13:56:57 +03:00
Леонид Юрьев (Leonid Yuriev)
6eeb08de46
mdbx: использование mdbx_panic()
вместо __assert_fail()
в ряде внутренних проверок.
2022-10-10 13:56:57 +03:00
Леонид Юрьев (Leonid Yuriev)
66f2e3d596
mdbx: добавление в API функций mdbx_limits_pairsize4page_max()
и mdbx_limits_valsize4page_max()
с сопутствующими доработками.
2022-10-10 13:56:57 +03:00
Леонид Юрьев (Leonid Yuriev)
143e3dfb77
mdbx: преимущественное использование size_t
для уменьшения накладных расходов на платформе Эльбрус.
2022-10-10 13:56:57 +03:00
Леонид Юрьев (Leonid Yuriev)
375fa3a225
mdbx: небольшая чистка dlist_free()
.
2022-10-10 13:56:57 +03:00
Леонид Юрьев (Leonid Yuriev)
2236b90567
mdbx: добавлена опция сборки MDBX_AVOID_MSYNC
(объединённые коммиты и исправления).
2022-10-10 13:56:42 +03:00
Леонид Юрьев (Leonid Yuriev)
8aeb22b8bf
mdbx: логирование ошибок при подготовке/записи/фиксации транзакций.
2022-10-06 20:35:26 +03:00
Леонид Юрьев (Leonid Yuriev)
474391c83c
mdbx: поддержка асинхронного ввода-вывода для Windows и подготовка к io_ring
(объединённые коммиты и исправления).
2022-10-06 20:35:07 +03:00
Леонид Юрьев (Leonid Yuriev)
9f64e2a10c
mdbx: правка спилинга для устранения срабатывания проверочных утверждений в отладочных сборках.
2022-10-01 01:38:08 +03:00
Леонид Юрьев (Leonid Yuriev)
41b918f1fc
mdbx: исправление проверочного утверждения внутри mdbx_txn_abort()
для ошибочных транзакций.
2022-10-01 01:35:08 +03:00
Леонид Юрьев (Leonid Yuriev)
00515d50a9
mdbx: исправление проверочного утверждения в page_retire_ex()
.
2022-10-01 01:33:48 +03:00
Леонид Юрьев (Leonid Yuriev)
32a3674dc8
mdbx: return MDBX_PROBLEM
insted of MDBX_CORRUPTED
on coherence troubles.
2022-09-22 19:48:44 +03:00
Леонид Юрьев (Leonid Yuriev)
beda291692
mdbx-windows: fix nasty clz()
(i.e. using _BitScanReverse()
bug.
2022-09-22 18:27:28 +03:00
Леонид Юрьев (Leonid Yuriev)
fe20de136c
mdbx: require linux >= 4.0
2022-09-22 18:27:23 +03:00
Леонид Юрьев (Leonid Yuriev)
cf8540d84e
mdbx: minor refine mdbx_env_create()
.
2022-09-22 18:26:28 +03:00
Леонид Юрьев (Leonid Yuriev)
bec9312df5
mdbx: more off/on for clang-format.
2022-09-22 17:06:32 +03:00
Леонид Юрьев (Leonid Yuriev)
a089f73002
mdbx: fix minor MinGW warning.
2022-09-13 11:39:55 +03:00
Леонид Юрьев (Leonid Yuriev)
2d5438d2c2
mdbx: fix regression ASAN/Valgring-enabled builds.
2022-09-06 13:03:04 +03:00
Леонид Юрьев (Leonid Yuriev)
52cb6b90a7
mdbx: fix extra check for MDBX_APPENDDUP
.
2022-09-02 02:02:33 +03:00
Леонид Юрьев (Leonid Yuriev)
2d7c25b263
mdbx: minor fix extra ensure/assertion check of oldest_reader
inside txn_end()
.
2022-09-02 01:46:11 +03:00
Леонид Юрьев (Leonid Yuriev)
b73727d73e
mdbx: add MDBX_HAVE_BUILTIN_CPU_SUPPORTS
build option.
2022-08-26 19:17:09 +03:00
Леонид Юрьев (Leonid Yuriev)
b60d8e78c3
mdbx: merge branch master
into devel
.
2022-08-22 21:46:54 +03:00
Леонид Юрьев (Leonid Yuriev)
5368551081
mdbx: minor clarify iov_page()
failure case.
2022-08-22 12:59:42 +03:00
Леонид Юрьев (Leonid Yuriev)
0ccec20409
mdbx: don't deem meta pages with zero txnid equal.
...
Устранение крайне маловероятного регресса после перехода на мета-тройку:
- процесс А открыает БД и читает мета-траницы для формирования тройки;
- процесс Б постоянно коммитит новые транзакции;
- есть шанс что процесс А при чтении разных мета страниц попадет на момент их обновления более одного раза,
это может привести к ложной ошибке коллизии мета-страниц,
так как для обновляемых мета-страниц будет виден нулевой номер транзакции.
2022-08-20 01:54:11 +03:00
Леонид Юрьев (Leonid Yuriev)
ceba040e32
mdbx: add meta_xyz_dump()
.
2022-08-20 01:54:11 +03:00
Леонид Юрьев (Leonid Yuriev)
b617f25eaa
mdbx: refine & rename internal xyz
to troika
.
2022-08-20 01:54:06 +03:00
Леонид Юрьев (Leonid Yuriev)
b759dfafd7
mdbx: counting large/overflow dirty pages (unused for now).
...
This is a basis for [Large/Overflow pages accounting for dirty-room](https://web.archive.org/web/20220414235959/https://github.com/erthink/libmdbx/issues/192 ).
2022-08-20 00:14:48 +03:00
Леонид Юрьев (Leonid Yuriev)
4cef1c2376
mdbx: avoid extra using F_ISSET()
macro.
2022-08-18 01:39:06 +03:00
Леонид Юрьев (Leonid Yuriev)
08a8f844dc
mdbx: ×4 ARM-Neon accelerated scan4seq()
.
2022-08-18 01:10:27 +03:00
Леонид Юрьев (Leonid Yuriev)
8e2c276562
mdbx: merge branch 'master' into devel
branch.
2022-08-18 01:04:35 +03:00
Леонид Юрьев (Leonid Yuriev)
7b36f946cb
mdbx: rework/speed up accessing to meta-pages, choosing and cache of ones (squashed).
2022-08-17 21:39:22 +03:00
Леонид Юрьев (Leonid Yuriev)
ef16dd2a22
mdbx: move global_ctor()
to the end .
2022-08-17 21:31:11 +03:00
Леонид Юрьев (Leonid Yuriev)
f9ad835680
mdbx: drop E2K libc obsolete workarounds.
2022-08-17 21:29:51 +03:00
Леонид Юрьев (Leonid Yuriev)
9b3faee630
mdbx: drop obsolete Nexenta attributes API.
2022-08-17 21:29:51 +03:00
Леонид Юрьев (Leonid Yuriev)
316ddf9e01
mdbx: fix typo in MDBX_EINVAL
which breaks MingGW builds with CLANG.
2022-08-16 11:09:52 +03:00
Леонид Юрьев (Leonid Yuriev)
3fbbe32adf
mdbx: fix checking owner for finished write transactions inside txn_abort()
.
...
Fixed regression after 06734bf8ffd94842b13e72cc65836f347fa585f0.
2022-08-14 12:39:21 +03:00
Леонид Юрьев (Leonid Yuriev)
8467cc6d03
mdbx: use current txn geo for untouched parameters when env_set_geometry()
called within a write transaction.
2022-08-13 16:56:29 +03:00
Леонид Юрьев (Leonid Yuriev)
9f0e2ecc67
mdbx: fix variable name typo.
2022-08-13 16:56:09 +03:00
Леонид Юрьев (Leonid Yuriev)
1c5ef060c5
mdbx: reduce number of memory fences in the hot paths.
2022-08-11 18:45:00 +03:00
Леонид Юрьев (Leonid Yuriev)
34a4e7e102
mdbx: avoid Valgrind warnings.
2022-08-11 17:10:13 +03:00
Леонид Юрьев (Leonid Yuriev)
ae730ae2f3
mdbx: fix minor warnings for ASAN-enabled builds.
2022-08-11 12:33:56 +03:00
Леонид Юрьев (Leonid Yuriev)
18e557c6e8
mdbx: rename internal functions, types and macros (to be closer to MithrilDB).
2022-08-11 12:33:56 +03:00
Леонид Юрьев (Leonid Yuriev)
096d6a9bd6
mdbx: some micro-optimizations.
2022-08-10 22:09:42 +03:00
Леонид Юрьев (Leonid Yuriev)
d8f0c9dc44
mdbx: more __hot
.
2022-08-10 15:46:45 +03:00
Леонид Юрьев (Leonid Yuriev)
78dc699709
mdbx: add ×16 accelerated scan4seq()
(AVX512BW).
2022-08-10 13:23:04 +03:00
Леонид Юрьев (Leonid Yuriev)
c2bf9ebf17
mdbx: minor refine AVX2/SSE2-accelerated scan4seq()
.
2022-08-10 11:43:24 +03:00
Леонид Юрьев (Leonid Yuriev)
3c28619562
mdbx: merge branch master
into devel
.
2022-08-09 19:04:27 +03:00
Леонид Юрьев (Leonid Yuriev)
2ff8d3c4f2
mdbx: native wchar_t
pathname for Windows.
2022-08-09 18:27:43 +03:00
Леонид Юрьев (Leonid Yuriev)
98c53555ab
mdbx: using e2k-frendly/cmov/branch-less bsearch.
...
https://gitflic.ru/project/erthink/bsearch-try
2022-08-09 18:25:05 +03:00
Леонид Юрьев (Leonid Yuriev)
c8b1392cbe
mdbx: use MultiByteToWideChar(CP_THREAD_ACP)
instead of mbstowcs()
.
2022-08-09 16:12:24 +03:00
Леонид Юрьев (Leonid Yuriev)
6d85e35876
mdbx: never use modern __cxa_thread_atexit()
on Apple's OSes.
2022-08-08 15:23:39 +03:00
Леонид Юрьев (Leonid Yuriev)
3de759a7be
mdbx: fix page-boundary checking inside accelerated scan4seq()
.
2022-08-07 22:24:00 +03:00
Леонид Юрьев (Leonid Yuriev)
d6603a0c0a
mdbx: add ×8 accelerated scan4seq()
(AVX2).
2022-08-07 17:08:51 +03:00
Леонид Юрьев (Leonid Yuriev)
15146d3823
mdbx: fix scan4seq()
selection for non-implemented cases.
2022-08-07 15:14:50 +03:00
Леонид Юрьев (Leonid Yuriev)
d62d3e2aab
mdbx: merge branch master
into devel
.
2022-08-07 12:42:43 +03:00
Леонид Юрьев (Leonid Yuriev)
fa854e40c3
mdbx: refine checking inside page_get()
.
2022-08-07 12:29:51 +03:00
Леонид Юрьев (Leonid Yuriev)
5afc5c4e8c
mdbx: reorganize/move fences to reduce overhead.
2022-08-07 12:29:51 +03:00
Леонид Юрьев (Leonid Yuriev)
c05a3b7bb9
mdbx: minor refine node_add()
.
2022-08-07 12:29:50 +03:00
Леонид Юрьев (Leonid Yuriev)
1215bda188
mdbx: minor refine/speedup node_del()
.
2022-08-07 12:29:50 +03:00
Леонид Юрьев (Leonid Yuriev)
0dd4532473
mdbx: reduce gap/backlog of linear scan inside dpl_search()
.
2022-08-07 12:29:50 +03:00
Леонид Юрьев (Leonid Yuriev)
eac3d0499f
mdbx: minor refine/speedup dpl_sort_slowpath()
.
2022-08-07 12:29:50 +03:00
Леонид Юрьев (Leonid Yuriev)
a11c045f1e
mdbx: using expect_with_probability()
macro.
2022-08-07 12:28:35 +03:00