2018-08-02 00:20:20 +00:00
|
|
|
It allows to integrate JEMalloc into CMake project.
|
2022-02-09 09:05:51 +00:00
|
|
|
|
|
|
|
- Remove JEMALLOC_HAVE_ATTR_FORMAT_GNU_PRINTF because it's non standard.
|
2022-02-09 09:07:33 +00:00
|
|
|
- Added JEMALLOC_CONFIG_MALLOC_CONF substitution
|
2022-02-09 09:14:30 +00:00
|
|
|
- Add musl support (USE_MUSL)
|
2023-11-02 07:56:45 +00:00
|
|
|
- Also note, that darwin build requires JEMALLOC_PREFIX, while others do not
|
Fix jemalloc assertion due to non-monotonic CLOCK_MONOTONIC_COARSE
Recently one tricky assertion of jemalloc had been discovered [1]:
Failed assertion: "nstime_compare(&decay->epoch, new_time) <= 0"
[1]: https://github.com/ClickHouse/ClickHouse/issues/66193
And as it turns out it is really possible for CLOCK_MONOTONIC_COARSE to
go backwards, in a nutshell it can be done with ADJ_FREQUENCY, you can
find example here [2]. And I can't trigger this issue for non-coarse
clocks.
[2]: https://gist.github.com/azat/7ea7f50ed75591b1af2d675a240ea94c?permalink_comment_id=5119222#gistcomment-5119222
But, jemalloc do not call clock_gettime() that frequently (I've verified
it), so it can use non-coarse version - CLOCK_MONOTONIC
I've also measured the latency of CLOCK_MONOTONIC and
CLOCK_MONOTONIC_COARSE, and it is 20ns vs 4ns per call [3], so make this
change affect performance you need really frequently calls of
clock_gettime.
[3]: https://gist.github.com/azat/622fa1f9a5d8e7d546ee9d294501961d?permalink_comment_id=5119245#gistcomment-5119245
Interesting, that this bug started to appears only after jemalloc heap
profiler had been enabled by default [4], no clue why (I would believe
more in a more frequent calls to clock_adjtime(ADJ_FREQUENCY), but I
can't verify this)
[4]: https://github.com/ClickHouse/ClickHouse/pull/65702
To be continued...
Fixes: https://github.com/ClickHouse/ClickHouse/issues/66193
Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
2024-07-12 12:40:40 +00:00
|
|
|
- JEMALLOC_HAVE_CLOCK_MONOTONIC_COARSE should be disabled
|
|
|
|
|
|
|
|
CLOCK_MONOTONIC_COARSE can go backwards after clock_adjtime(ADJ_FREQUENCY)
|
|
|
|
Let's disable it for now, and this menas that CLOCK_MONOTONIC will be used,
|
|
|
|
and this, should not be a problem, since:
|
|
|
|
- jemalloc do not call clock_gettime() that frequently
|
|
|
|
- the difference is CLOCK_MONOTONIC 20ns and CLOCK_MONOTONIC_COARSE 4ns
|
|
|
|
|
|
|
|
This can be done with the following command:
|
|
|
|
|
|
|
|
gg JEMALLOC_HAVE_CLOCK_MONOTONIC_COARSE | cut -d: -f1 | xargs sed -i 's@#define JEMALLOC_HAVE_CLOCK_MONOTONIC_COARSE@/* #undef JEMALLOC_HAVE_CLOCK_MONOTONIC_COARSE */@'
|