Леонид Юрьев (Leonid Yuriev)
b86b71a948
mdbx: обновление ChangeLog.
2023-01-07 00:10:23 +03:00
Леонид Юрьев (Leonid Yuriev)
61e77e7b70
mdbx: контроль отсутствия дубликатов LCK-файла с альтернативными именами.
2023-01-07 00:10:23 +03:00
Леонид Юрьев (Leonid Yuriev)
08fb7d5838
mdbx: корректировка отключения MDBX_NOSUBDIR
при открытии mdbx.dat
без директории.
2023-01-07 00:10:19 +03:00
Леонид Юрьев (Leonid Yuriev)
f2a49b687a
mdbx: обновление ChangeLog.
2023-01-04 00:19:48 +03:00
Леонид Юрьев (Leonid Yuriev)
c6b73c8a24
mdbx: добавление me_madv_threshold
и рефакторинг/упрощение.
...
Для уменьшения затрат на MDBX_SHRINK_ALLOWED.
2023-01-03 20:20:03 +03:00
Леонид Юрьев (Leonid Yuriev)
24f2e878c1
mdbx: устранение несущественных предупреждений Valgrind.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
2c8d3e1e12
mdbx: исправление предупреждения UBSAN.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
ab55016599
mdbx: устранение ложного срабатывания assert внутри dpl_reserve()
.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
f0c2927fc7
mdbx: перенос LRU-отметок в теневые страницы по отрицательному смещению.
...
Это позволяет избавиться от повторного поиска в "гзязном" списке
страниц, уже находящихся в стеке курсора, для обнлвления LRU-отметок.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
8519fde741
mdbx: микро-оптимизация cmp_reverse()
.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
bcddeaba9f
mdbx: изменение CMP2INT()
.
...
Решил вернуться к старому варианту. Вроде-бы все актуальные компиляторы
ведут себя с ним прилично (не хуже), а некоторые лучше.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
5317e516d2
mdbx: микро-оптимизация cmp_int()
.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
be05037906
mdbx: перемещение debug/assert-макросов перед атомиками.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
f53dc70038
mdbx: добавление eq_fast()
для сравнений на (не)равенство.
...
Цель в том, чтобы уменьшить кол-во условных и безусловных переходов при
сравнениях равно/неравно, в том числе избегать вызовов задаваемых
кастомных компаратаров и memcmp() для коротких ключей/значений.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
2322138a8e
mdbx: корректировка сообщения об ошибке.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
37867a0b84
mdbx: не обходим проверку когерентности в режиме восстановления.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
f0c43fb24a
mdbx: без необходимости не объединяем не-грязные страницы в дереве.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
adf433a1bc
mdbx-make: доработка макро для bench-целей.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
48bd3fc4c8
mdbx: упрощение default_prefault_write()
.
2022-12-31 23:35:53 +03:00
Леонид Юрьев (Leonid Yuriev)
7ffea70087
mdbx: доработка loose-пути в page_retire()
.
2022-12-31 23:35:53 +03:00
Леонид Юрьев (Leonid Yuriev)
ef460a9229
mdbx: выделение cursor_get()
для уменьшения кол-ва проверок.
2022-12-29 23:03:12 +03:00
Леонид Юрьев (Leonid Yuriev)
df63ff0e7e
mdbx: выделение cursor_del()
для уменьшения кол-ва проверок.
2022-12-29 23:03:12 +03:00
Леонид Юрьев (Leonid Yuriev)
66a5704949
mdbx: выделение cursor_put()
для уменьшения кол-ва проверок.
2022-12-29 19:26:50 +03:00
Леонид Юрьев (Leonid Yuriev)
61d21b0a02
mdbx: не трогать LRU и dbi в cursor_touch() для вложенных курсоров.
2022-12-29 01:20:04 +03:00
Леонид Юрьев (Leonid Yuriev)
0941319940
mdbx: парочка незначительных likely.
2022-12-29 01:20:04 +03:00
Леонид Юрьев (Leonid Yuriev)
bb2e3967eb
mdbx: уменьшение кол-ва вызовов realloc()
.
2022-12-27 11:50:28 +03:00
Леонид Юрьев (Leonid Yuriev)
e458af602e
mdbx: устранение ненужных условий в отладке (несущественно).
2022-12-27 11:50:28 +03:00
Леонид Юрьев (Leonid Yuriev)
d29acf4fdc
mdbx: актуализация bits.md (внутренний справочник).
2022-12-27 11:50:28 +03:00
Леонид Юрьев (Leonid Yuriev)
a06fe4f168
mdbx: переработка контроля "некогерентности" для уменьшения накладных расходов.
...
Существует проблема https://libmdbx.dqdkfa.ru/dead-github/issues/269 ,
которая проявляется только при специфической неупорядоченности внутри
ядра ОС, когда страницы, записанные в файл отображенный в память,
становятся видны в памяти посредством работы unified page cache:
- если записанная последней мета-страница "обгоняет" ранее записанные,
т.е. когда записанное в файл позже становится видимым в отображении
раньше, чем записанное ранее.
Теперь, вместо постоянной полной сверки записываемых страниц,
выполняется легковесная проверка при старте транзакций, с переключением
в режим "как раньше" при обнаружении проблемы.
В результате, в некоторых сценариях возвращается 5-10%
производительности, а в отдельных синтетических тестах до 30%.
2022-12-27 11:50:28 +03:00
Леонид Юрьев (Leonid Yuriev)
0498114469
mdbx: обнуление информации о задержках для невалидных транзакций в mdbx_txn_commit_ex()
.
2022-12-27 11:50:28 +03:00
Леонид Юрьев (Leonid Yuriev)
85828f677a
mdbx: пересоздание пустой MAIN_DBI при необходимости.
2022-12-27 11:50:28 +03:00
Леонид Юрьев (Leonid Yuriev)
9cbbdfa025
mdbx: добавление const
к аргументам функций получения и контроля страниц.
2022-12-27 11:50:28 +03:00
Леонид Юрьев (Leonid Yuriev)
686145ec2e
mdbx: рефакторинг с удалением cursor_spill()
и MDBX_NOSPILL
.
2022-12-27 11:50:23 +03:00
Леонид Юрьев (Leonid Yuriev)
fe55f25665
mdbx: использование msync(MS_ASYNC)
для спиллинга в режиме MDBX_WRITEMAP вне зависимости от MDBX_AVOID_MSYNC
и MDBX_MMAP_USE_MS_ASYNC
.
2022-12-22 00:48:41 +03:00
Леонид Юрьев (Leonid Yuriev)
e9a2042df1
mdbx: добавление MDBX_NOTHROW_PURE_FUNCTION
к некоторым функциям.
2022-12-22 00:48:41 +03:00
Леонид Юрьев (Leonid Yuriev)
fd98a635d9
mdbx: не возвращаем ошибку при попытке закрытия MAIN_DBI
.
2022-12-22 00:48:41 +03:00
Леонид Юрьев (Leonid Yuriev)
722c6ecf43
mdbx: use attribute(tls_model(local-dynamic))
as workaround for CLANG bug.
2022-12-22 00:48:40 +03:00
Леонид Юрьев (Leonid Yuriev)
44493c6448
mdbx-tools: поддержка не-печатных имен subDb в mdbx_chk
.
2022-12-22 00:48:40 +03:00
Леонид Юрьев (Leonid Yuriev)
7011743262
mdbx: поддержка не-печатных имен для subDb.
2022-12-21 22:29:03 +03:00
Леонид Юрьев (Leonid Yuriev)
b247b081af
mdbx: переработка LRU-отметок для спиллинга.
...
Два существенных изменения:
1. Инкремент и обновление LRU происходит при изменении страницы,
но не при доступе к ней.
2. Устранен регресс, из-за которого страницы в стеке курсора хоть
помечались, но могли быть ошибочно пролиты на диск,
так как dpl_age() возвращал не 0.
2022-12-21 22:29:03 +03:00
Леонид Юрьев (Leonid Yuriev)
bf2f3bfbbf
mdbx: устранение чтения освобожденной памяти и жалоб ASAN при спиллинге.
...
Вероятность проявляния проблемы крайне низкая, но стало воспроизводиться после доработки спллинга.
2022-12-21 22:29:03 +03:00
Леонид Юрьев (Leonid Yuriev)
ffdff3f831
mdbx: обновление ChangeLog.
2022-12-14 10:58:31 +03:00
Леонид Юрьев (Leonid Yuriev)
07f2ccb752
mdbx: добавление опции MDBX_MMAP_USE_MS_ASYNC
.
...
Суть в избавлении от лишнего вызова msync(MS_ASYNC) в режимах
MDBX_WRITEMAP+MDBX_SAFE_NOSYNC и т.п.
Гипотетически могут быть системы/платформы, на которых изменения в
разделяемой памяти не видны другим процессам до вызова msync(MS_ASYNC)
и/или до этого вызова не будет инициироваться вытеснение/запись таких
страниц на диск.
Поэтому использование msync(MS_ASYNC) вынесено под опцию
MDBX_MMAP_USE_MS_ASYNC, которая по-умолчанию включена только на системах
с MDBX_MMAP_INCOHERENT_FILE_WRITE или MDBX_MMAP_INCOHERENT_CPU_CACHE.
2022-12-14 02:05:52 +03:00
Леонид Юрьев (Leonid Yuriev)
23fedf6bba
mdbx: контроль значений макросов-опций сборки.
2022-12-13 19:44:36 +03:00
Леонид Юрьев (Leonid Yuriev)
167011c2d5
mdbx: обновление ChangeLog.
2022-12-12 21:29:10 +03:00
Леонид Юрьев (Leonid Yuriev)
245a782912
mdbx: не игнорируем ошибки при открытии дескриптора с O_DSYNC.
2022-12-12 18:54:03 +03:00
Леонид Юрьев (Leonid Yuriev)
957c99d86f
mdbx: добавление MDBX_opt_prefault_write_enable
вместо MDBX_ENABLE_PREFAULT
.
2022-12-12 18:54:03 +03:00
Леонид Юрьев (Leonid Yuriev)
b959e217b1
mdbx: рефакторинг обработки установки опций в значения по-умолчанию.
2022-12-12 18:54:03 +03:00
Леонид Юрьев (Leonid Yuriev)
54b15d7e41
mdbx: определение in-core БД (в tmpfs/ramfs/mfs) с отключением prefault-write.
...
Это вынужденный читинг для "починки" сравнительных бенчмарков при
размещении БД в /dev/shm.
Проблема в том, что актуальные ядра Linux для файлов размещенных в tmpfs
возвращают mincore=false. В результате, в простейших бенчмарках видно
двукратное снижение производительности, просто из-за вызовов write()
выполняемых для prefault.
Из-за этого, в таких синтетических тестах, новая libmdbx становится
существенно медленнее предыдущих версий, в том числе LMDB.
2022-12-12 18:54:03 +03:00
Леонид Юрьев (Leonid Yuriev)
69f7d6cdd8
mdbx-tools: несущественный рефакторинг mdbx_chk
.
2022-12-11 20:33:11 +03:00