Commit Graph

19 Commits

Author SHA1 Message Date
Azat Khuzhin
22611781b0 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-14 08:21:13 +02:00
Azat Khuzhin
1f049e8bac Bump jemalloc to fix possible assertion
This patch also updates the jemalloc version.

Note, that I've enabled page_id for jemalloc
PR_SET_VMA/PR_SET_VMA_ANON_NAME, that requires linux 5.17+ (but ignores
EINVAL anyway).

v2: add -isystem to fix reserved name for JEMALLOC_OVERRIDE___LIBC_PVALLOC
Refs: https://github.com/jemalloc/jemalloc/pull/2304
Refs: https://github.com/ClickHouse/ClickHouse/issues/31531
Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
2022-07-12 07:57:27 +03:00
Azat Khuzhin
daa292cf5a jemalloc: remove README for linux x86_64
Note, that there is no need to disable JEMALLOC_PURGE_MADVISE_FREE,
since jemalloc does check in runtime, and ClickHouse already
successfully works w/o this change.

Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
2022-02-17 21:25:58 +03:00
Azat Khuzhin
1a98c1aace jemalloc: move JEMALLOC_HAVE_ATTR_FORMAT_GNU_PRINTF out from per-arch
Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
2022-02-17 21:25:58 +03:00
Azat Khuzhin
e962649899 jemalloc: correctly disable JEMALLOC_HAVE_ATTR_FORMAT_GNU_PRINTF
Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
2022-02-17 21:25:58 +03:00
Azat Khuzhin
560f813c46 jemalloc: cleanup README for linux x86_64
- remove GNU_SOURCE it is done in common CMakeLists.txt
- remove JEMALLOC_OVERRIDE___POSIX_MEMALIGN (there is no need to since
  __posix_memalign() does not exists in linux)

Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
2022-02-17 21:25:58 +03:00
Azat Khuzhin
bc183223c5 jemalloc: update provisioned headers for linux x86_64
v2: update jemalloc

Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
2022-02-17 21:25:58 +03:00
Alexey Milovidov
41acc52458 Preparation to build with Musl 2021-10-16 00:17:34 +03:00
Azat Khuzhin
1becc6ca02 jemalloc: jemalloc_preamble.h is common 2020-06-23 01:47:56 +03:00
Azat Khuzhin
9f1cefd8df jemalloc: disable secure_getenv() 2020-05-27 02:19:13 +03:00
Azat Khuzhin
2f256b0d2d jemalloc: merge jemalloc_internal_defs.h.in for x86_64
- Use upstream JEMALLOC_PURGE_MADVISE_FREE
2020-05-27 02:19:13 +03:00
Azat Khuzhin
b2ff1b3f20 jemalloc: merge jemalloc_preamble.h for x86_64 2020-05-27 02:19:13 +03:00
Azat Khuzhin
734cc78e58 jemalloc: make include_linux_*/jemalloc/*.h common for aarch64 and x86_64
This patch can go upstream, regardless of the jemalloc update
eventually.

Also I noticed that header with jemalloc version differs (someone forgot
to update?)
2020-05-27 02:19:13 +03:00
Azat Khuzhin
5da41d5cd6 Configure jemalloc options via cmake 2020-05-21 11:43:29 +03:00
Azat Khuzhin
58ffa4c59c Enable percpu_arena:percpu for jemalloc
This will reduce memory fragmentation due to thread pool.
2020-05-21 01:01:28 +03:00
alexey-milovidov
8a313e9f31
Revert "Update JEMalloc just in case" 2020-03-10 20:28:14 +03:00
Alexey Milovidov
b75927e4ed Update JEMalloc just in case 2020-03-08 01:59:56 +03:00
Alexey Milovidov
7e79e99b8b Removed dependency [#CLICKHOUSE-2] 2018-08-06 01:43:55 +03:00
alexey-milovidov
9cd5228df2
Using jemalloc instead of tcmalloc. (#2773)
* Added jemalloc as submodule [#CLICKHOUSE-2]

* Imported jemalloc-cmake [#CLICKHOUSE-2]

* Added README for jemalloc-cmake [#CLICKHOUSE-2]

* Trying to add jemalloc [#CLICKHOUSE-2]

* Trying to add jemalloc [#CLICKHOUSE-2]

* Trying to add jemalloc [#CLICKHOUSE-2]

* Add support for jemalloc: development [#CLICKHOUSE-2]

* Add support for jemalloc: development [#CLICKHOUSE-2]

* Add support for jemalloc: development [#CLICKHOUSE-2]

* Add support for jemalloc: development [#CLICKHOUSE-2]

* Add support for jemalloc: development [#CLICKHOUSE-2]

* Add support for jemalloc: development [#CLICKHOUSE-2]

* Add support for jemalloc: development [#CLICKHOUSE-2]

* Add support for jemalloc: development [#CLICKHOUSE-2]

* Add support for jemalloc: development [#CLICKHOUSE-2]

* Add support for jemalloc: development [#CLICKHOUSE-2]

* Add support for jemalloc: development [#CLICKHOUSE-2]

* Add support for jemalloc: development [#CLICKHOUSE-2]

* Add support for jemalloc: development [#CLICKHOUSE-2]

* Add support for jemalloc: development [#CLICKHOUSE-2]
2018-08-02 03:20:20 +03:00