mirror of
https://github.com/isar/libmdbx.git
synced 2025-10-18 21:02:48 +08:00
mdbx: переделка page_alloc_slowpath()
с добавлением профилирования GC.
This commit is contained in:
81
mdbx.h
81
mdbx.h
@@ -2561,9 +2561,6 @@ struct MDBX_envinfo {
|
||||
msync; /**< Number of explicit msync-to-disk operations (not a pages) */
|
||||
uint64_t
|
||||
fsync; /**< Number of explicit fsync-to-disk operations (not a pages) */
|
||||
uint64_t
|
||||
gcrtime_seconds16dot16; /**< Time spent loading and searching inside
|
||||
GC (aka FreeDB) in 1/65536 of second */
|
||||
} mi_pgop_stat;
|
||||
};
|
||||
#ifndef __cplusplus
|
||||
@@ -3713,8 +3710,8 @@ struct MDBX_commit_latency {
|
||||
/** \brief Duration of preparation (commit child transactions, update
|
||||
* sub-databases records and cursors destroying). */
|
||||
uint32_t preparation;
|
||||
/** \brief Duration of GC/freeDB handling & updation. */
|
||||
uint32_t gc;
|
||||
/** \brief Duration of GC update by wall clock. */
|
||||
uint32_t gc_wallclock;
|
||||
/** \brief Duration of internal audit if enabled. */
|
||||
uint32_t audit;
|
||||
/** \brief Duration of writing dirty/modified data pages to a filesystem,
|
||||
@@ -3727,6 +3724,80 @@ struct MDBX_commit_latency {
|
||||
uint32_t ending;
|
||||
/** \brief The total duration of a commit. */
|
||||
uint32_t whole;
|
||||
/** \brief User-mode CPU time spent on GC update. */
|
||||
uint32_t gc_cputime;
|
||||
|
||||
/** \brief Информация для профилирования работы GC.
|
||||
* \note Статистика является общей для всех процессов работающих с одним
|
||||
* файлом БД и хранится в LCK-файле. Данные аккумулируются при фиксации всех
|
||||
* транзакций, но только в сборках libmdbx c установленной опцией
|
||||
* \ref MDBX_ENABLE_PROFGC. Собранная статистика возвращаются любому процессу
|
||||
* при использовании \ref mdbx_txn_commit_ex() и одновременно обнуляется
|
||||
* при завершении транзакций верхнего уровня (не вложенных). */
|
||||
struct {
|
||||
/** \brief Количество итераций обновления GC,
|
||||
* больше 1 если были повторы/перезапуски. */
|
||||
uint32_t wloops;
|
||||
/** \brief Количество итераций слияния записей GC. */
|
||||
uint32_t coalescences;
|
||||
/** \brief Количество уничтожений предыдущих надежных/устойчивых
|
||||
* точек фиксации при работе в режиме \ref MDBX_UTTERLY_NOSYNC. */
|
||||
uint32_t wipes;
|
||||
/** \brief Количество принудительных фиксаций на диск
|
||||
* во избежания приращения БД при работе вне режима
|
||||
* \ref MDBX_UTTERLY_NOSYNC. */
|
||||
uint32_t flushes;
|
||||
/** \brief Количество обращений к механизму Handle-Slow-Readers
|
||||
* во избежания приращения БД.
|
||||
* \see MDBX_hsr_func */
|
||||
uint32_t kicks;
|
||||
|
||||
/** \brief Счетчик выполнения по медленному пути (slow path execution count)
|
||||
* GC ради данных пользователя. */
|
||||
uint32_t work_counter;
|
||||
/** \brief Время "по настенным часам" затраченное на чтение и поиск внутри
|
||||
* GC ради данных пользователя. */
|
||||
uint32_t work_rtime_monotonic;
|
||||
/** \brief Монотонное время по "настенным часам" затраченное
|
||||
* на подготовку страниц извлекаемых из GC для данных пользователя,
|
||||
* включая подкачку с диска. */
|
||||
uint32_t work_xtime_monotonic;
|
||||
/** \brief Время ЦПУ в режиме пользователе затраченное на чтение и поиск
|
||||
* внтури GC ради данных пользователя. */
|
||||
uint32_t work_rtime_cpu;
|
||||
/** \brief Количество итераций поиска внутри GC при выделении страниц
|
||||
* ради данных пользователя. */
|
||||
uint32_t work_rsteps;
|
||||
/** \brief Количество запросов на выделение последовательностей страниц
|
||||
* ради данных пользователя. */
|
||||
uint32_t work_xpages;
|
||||
/** \brief Количество страничных промахов (page faults) внутри GC
|
||||
* при выделении и подготовки страниц для данных пользователя. */
|
||||
uint32_t work_majflt;
|
||||
|
||||
/** \brief Счетчик выполнения по медленному пути (slow path execution count)
|
||||
* GC для целей поддержки и обновления самой GC. */
|
||||
uint32_t self_counter;
|
||||
/** \brief Время "по настенным часам" затраченное на чтение и поиск внутри
|
||||
* GC для целей поддержки и обновления самой GC. */
|
||||
uint32_t self_rtime_monotonic;
|
||||
/** \brief Монотонное время по "настенным часам" затраченное на подготовку
|
||||
* страниц извлекаемых из GC для целей поддержки и обновления самой GC,
|
||||
* включая подкачку с диска. */
|
||||
uint32_t self_xtime_monotonic;
|
||||
/** \brief Время ЦПУ в режиме пользователе затраченное на чтение и поиск
|
||||
* внтури GC для целей поддержки и обновления самой GC. */
|
||||
uint32_t self_rtime_cpu;
|
||||
/** \brief Количество итераций поиска внутри GC при выделении страниц
|
||||
* для целей поддержки и обновления самой GC. */
|
||||
uint32_t self_rsteps;
|
||||
/** \brief Количество запросов на выделение последовательностей страниц
|
||||
* для самой GC. */
|
||||
uint32_t self_xpages;
|
||||
/** \brief Количество страничных промахов (page faults) внутри GC
|
||||
* при выделении и подготовки страниц для самой GC. */
|
||||
uint32_t self_majflt;
|
||||
} gc_prof;
|
||||
};
|
||||
#ifndef __cplusplus
|
||||
/** \ingroup c_statinfo */
|
||||
|
Reference in New Issue
Block a user