2123 Commits

Author SHA1 Message Date
Леонид Юрьев (Leonid Yuriev)
209f784ee7 mdbx: исправление assert-проверок внутри dxb_resize().
Устранение регресса после a484a1f89bcbf38aeb7a81d6080605f86ddc7933.

Проверка `prev_limit_pgno >= used_pgno` правомочна только в части сценариев,
но не в общем случае.
2023-01-23 23:54:11 +03:00
Леонид Юрьев (Leonid Yuriev)
c01f025bfa mdbx: обновление года на 2023. 2023-01-16 16:32:02 +03:00
Леонид Юрьев (Leonid Yuriev)
a484a1f89b mdbx: рефакторинг dxb_resize() и связанного кода.
В том числе, для устранения срабатывания assert-проверки
`size_bytes == env->me_dxb_mmap.current` в специфических многопоточных
сценариях использования.

Проверка срабатывала только в отладочных сборках, при специфическом
наложении во времени читающей и пишущей транзакции в разных потоках,
одновременно с изменением размера БД.

Кроме срабатывание проверки, каких-либо других последствий не возникало.
2023-01-16 02:20:56 +03:00
Леонид Юрьев (Leonid Yuriev)
0979a93a78 mdbx: добавлено примечание об ошибке MinGW MSYS2. 2023-01-12 17:01:27 +03:00
Leonid Yuriev
9e15bd9b29 mdbx-windows: устранение регресса ERROR_SHARING_VIOLATION в режиме MDBX_EXCLUSIVE.
Спасибо maxc0d3r@protonmail.com за сообщение о проблеме.
2023-01-12 17:01:27 +03:00
Leonid Yuriev
0159f97e94 mdbx: ограничиваем размер отображения при коротком read-only файле.
Цель в предотвращении ошибки ERROR_NOT_ENOUGH_MEMORY в Windows, которая
совсем не информативна для пользователя и возникает в этом случае (когда
файл открыт read-only и короче запрошенного размера).
2023-01-12 01:53:22 +03:00
Леонид Юрьев (Leonid Yuriev)
525c4a55a4 mdbx: fix English typos.
Thanks to Dimitris Apostolou <dimitris.apostolou@icloud.com>
2023-01-10 14:16:08 +03:00
Леонид Юрьев (Leonid Yuriev)
3da23da7b3 mdbx: косметический рефакторинг контроля MDBX_APPEND. 2023-01-09 21:39:42 +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)
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)
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)
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)
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