Skip to content

[bugfix](glibc) fix glibc compatible bugs - #67701

Merged
yiguolei merged 1 commit into
apache:masterfrom
yiguolei:f1
Sep 9, 2026
Merged

yiguolei merged 1 commit into
apache:masterfrom
yiguolei:f1

Conversation

@yiguolei

@yiguolei yiguolei commented Sep 9, 2026 •

Copy link
Copy Markdown
Contributor

What problem does this PR solve?

Rust std weak-links this glibc 2.18 entry point and has an internal fallback when it is absent. Since the LDB sysroot exposes it, the final linker would otherwise record GLIBC_2.18.

See rust-lang/rust#57497 for more details.

I have checked the output.

objdump -T output/be/lib/doris_be | grep -o 'GLIBC_[0-9.]*' | sort -Vu | tail
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10

Related PR: #xxx

Problem Summary:

Release note

None

Check List (For Author)

  • Test

    • Regression test
    • Unit Test
    • Manual test (add detailed scripts or steps below)
    • No need to test or manual test. Explain why:
      • This is a refactor/code format and no logic has been changed.
      • Previous test can cover this change.
      • No code files have been changed.
      • Other reason
  • Behavior changed:

    • No.
    • Yes.
  • Does this need documentation?

    • No.
    • Yes.

Check List (For Reviewer who merge this PR)

  • Confirm the release note
  • Confirm test cases
  • Confirm document
  • Add branch pick label

@hello-stephen

Copy link
Copy Markdown
Contributor

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR.

Please clearly describe your PR:

  1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
  2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
  3. What features were added. Why was this function added?
  4. Which code was refactored and why was this part of the code refactored?
  5. Which functions were optimized and what is the difference before and after the optimization?

@yiguolei

yiguolei commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

run buildall

@yiguolei

yiguolei commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

/review

@yiguolei

yiguolei commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

run buildall

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review status: capped/incomplete after three rounds. The final allowed round produced one additional accepted issue, so I am not claiming convergence. All five substantiated issues found so far are included inline.

The GLIBC_2.17 symbol-table goal is not safely met yet: the new gate has a copy-relocation false negative, and the forced runtime replacements change math and TLS lifecycle semantics.

Critical checkpoint conclusions:

  • Goal and proof: The link roots and POST_BUILD hook target the correct final executable, and compile CI passes, but the gate misses a real class of version needs and the replacements are not behaviorally equivalent. The PR adds no semantic or lifecycle test.
  • Scope: The six-file change is focused under GLIBC_COMPATIBILITY, but forced expf and the TLS ABI shim affect process-wide and dlopened-native callers.
  • Concurrency: pthread_once and per-thread key storage avoid a shared-list race and preserve reentrant LIFO registration. Pending TLS callbacks can still race with DSO unload because DSO ownership is discarded. No separate deadlock or lock-order issue was found.
  • Lifecycle/static state: Key initialization is safe, but initial-thread TLS destruction is ordered incorrectly and unloadable DSO callbacks are not pinned. No separate cross-TU initialization issue was found.
  • Configuration: No new runtime configuration is added; the existing compile-time compatibility switch gates the behavior.
  • Compatibility: The raw copy_file_range wrapper preserves Rust's old-kernel fallback on x86_64/aarch64. This does not touch wire/storage formats or rolling-upgrade protocols. The math/TLS defects and checker escape remain blocking ABI-compatibility issues.
  • Parallel paths and conditions: All DORIS_LINK_LIBS consumers receive the roots. The package-wide shared-library scan gap was examined but not reported because no current incompatible packaged library is established. The NaN and directed-underflow conditions are incorrect as noted inline.
  • Tests/results: The author supplied an objdump result and compile CI passes; BE unit and regression jobs are still pending. There are no negative copy-relocation, floating special-value/rounding, main-thread termination-order, or DSO-unload/TLS tests. No expected-result file changes are involved.
  • Error handling/observability: Registration failures abort instead of continuing partially initialized, and build-hook diagnostics are adequate. No additional metrics or logs are needed once correctness is fixed.
  • Persistence/data/FE-BE variables: Not applicable; there are no transaction, metadata, data-write, storage-format, RPC, or cross-process variable changes.
  • Performance/other: No separate blocking CPU or memory regression was substantiated. The final changed-file and live-thread sweep found no duplicate or unresolved candidate, but the round cap requires this review to remain incomplete.

Comment thread be/src/glibc-compatibility/musl/expf.c Outdated
hx &= 0x7fffffff; /* high word of |x| */

/* special cases */
if (hx >= 0x42aeac50) { /* if |x| >= -87.33655f or NaN */

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This block maps every negative-sign NaN to +0: after the sign bit is cleared, a negative NaN skips the positive branch and satisfies the underflow threshold below. Because the new -u,expf option forces this definition into doris_be, ordinary callers can observe the wrong result. Please use the corrected upstream musl form, returning NaNs before branching on sign, and cover both NaN signs in compatibility tests.

// A registration failure means that normal main-thread TLS cleanup cannot
// be guaranteed, so fail immediately instead of continuing with a partially
// installed compatibility implementation.
if (atexit(doris_run_main_thread_tls_destructors) != 0) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the supported enable_graceful_exit_check return-from-main path, an ordinary atexit callback cannot preserve initial-thread TLS ordering. If a TLS value registers this handler and a function-local static is initialized later, LIFO teardown destroys that static first and invokes this TLS cleanup afterward. Glibc deliberately calls TLS destructors before its atexit/static list. Please preserve that ordering and add a main-thread termination-order test.

// See https://github.com/rust-lang/rust/issues/57497 for more details.
DORIS_HIDDEN int __cxa_thread_atexit_impl(doris_tls_destructor destructor, void* object,
void* dso_symbol) {
(void)dso_symbol;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dso_symbol is what lets glibc pin a DSO until pending TLS destructors finish. Dropping it leaves only a raw callback pointer. This is reachable here because doris_be exports static libstdc++'s public __cxa_thread_atexit bridge to dlopened native code, while the UDF cache can later dlclose those libraries. A worker can therefore call unmapped code at thread exit. Please preserve the DSO-lifetime contract, or prevent DSO callers from binding through this shim, and test dlclose with a pending TLS destructor.

Comment thread be/src/glibc-compatibility/musl/expf.c Outdated
/* underflow */
FORCE_EVAL(-0x1p-149f/x);
if (hx >= 0x42cff1b5) /* x <= -103.972084f */
return 0;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This literal zero loses the active rounding mode for finite underflow. With FE_UPWARD and x = -104.0f, the exact result is positive but below the smallest subnormal, so expf must return 0x1p-149f; the FORCE_EVAL above raises the exception but its rounded value is discarded. WANT_ROUNDING is enabled locally, and exp2f uses __math_uflowf(0) for this case. Please return the rounding-aware helper here and add a directed-rounding test.

set(incompatible_symbols)

foreach (symbol_line IN LISTS dynamic_symbol_lines)
# Only undefined symbols are runtime requirements on the target system.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This *UND*-only filter misses version needs carried by ELF copy relocations. A versioned data import can become an R_X86_64_COPY/R_AARCH64_COPY symbol defined in the executable's .bss, while its version index still points into .gnu.version_r and the loader still requires that GLIBC version. For example, __libc_single_threaded@GLIBC_2.32 can pass this check and then fail on CentOS 7. Please audit the version-needs table, for example with readelf --version-info, or explicitly cover copy-relocated symbols, and add a negative data-import test.

@hello-stephen

Copy link
Copy Markdown
Contributor

BE UT Coverage Report

Increment line coverage 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 63.40% (29891/47144)
Line Coverage 48.46% (313985/647964)
Region Coverage 43.96% (253253/576156)
Branch Coverage 45.58% (118109/259119)

@hello-stephen

Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 100% (0/0) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 76.44% (34907/45667)
Line Coverage 61.51% (394057/640589)
Region Coverage 57.62% (330696/573953)
Branch Coverage 58.50% (151143/258378)

None

- Test: Manual test
    - Static audit of Java/Python UDF loading and symbol lookup paths
    - ./build.sh --be attempted but stopped at Java version detection because this macOS environment has no Java runtime

- Behavior changed: Yes; dlopened libraries can no longer bind arbitrary doris_be symbols

- Does this need documentation: No
@yiguolei

yiguolei commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

/review

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-H: Total hot run time: 16810 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 4e4e6e11f0b585915cc7a97f4a1a8cdb8b04984a, data reload: false

------ Round 1 ----------------------------------
============================================
q1	17581	3006	3000	3000
q2	2158	262	222	222
q3	10187	893	507	507
q4	4679	251	208	208
q5	7662	589	386	386
q6	132	115	96	96
q7	520	515	386	386
q8	9236	949	941	941
q9	3470	2450	2395	2395
q10	6532	876	732	732
q11	402	194	181	181
q12	615	256	201	201
q13	18135	1549	1175	1175
q14	159	154	140	140
q15	q16	447	400	375	375
q17	1350	906	790	790
q18	3098	2336	2304	2304
q19	1113	922	737	737
q20	366	278	199	199
q21	5395	1607	1809	1607
q22	333	270	228	228
Total cold run time: 93570 ms
Total hot run time: 16810 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	3358	3332	3304	3304
q2	505	399	377	377
q3	2314	2385	2171	2171
q4	1212	1198	896	896
q5	2225	2168	2156	2156
q6	168	122	88	88
q7	1066	965	891	891
q8	1584	1382	1395	1382
q9	3220	3200	3180	3180
q10	1935	1846	1662	1662
q11	366	273	252	252
q12	454	433	341	341
q13	1488	1529	1155	1155
q14	178	170	170	170
q15	q16	391	405	385	385
q17	3696	3421	3316	3316
q18	5107	4593	4912	4593
q19	987	871	857	857
q20	1017	1001	859	859
q21	3867	3149	3176	3149
q22	397	356	311	311
Total cold run time: 35535 ms
Total hot run time: 31495 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 82827 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 4e4e6e11f0b585915cc7a97f4a1a8cdb8b04984a, data reload: false

query5	4247	410	334	334
query6	381	129	117	117
query7	4971	438	248	248
query8	287	128	119	119
query9	8664	2801	2849	2801
query10	382	213	181	181
query11	5377	1042	936	936
query12	118	70	70	70
query13	1180	443	316	316
query14	6155	2250	2126	2126
query14_1	2021	2009	1998	1998
query15	172	124	112	112
query16	908	368	336	336
query17	783	460	362	362
query18	2332	320	244	244
query19	165	140	111	111
query20	72	71	69	69
query21	204	106	91	91
query22	5561	5417	5430	5417
query23	6811	6369	6100	6100
query23_1	6105	6157	6170	6157
query24	7296	1110	745	745
query24_1	747	763	764	763
query25	430	300	253	253
query26	1231	240	127	127
query27	2782	422	259	259
query28	4690	1486	1511	1486
query29	924	447	348	348
query30	257	149	132	132
query31	815	412	340	340
query32	136	79	76	76
query33	467	224	177	177
query34	982	828	480	480
query35	416	408	357	357
query36	565	578	520	520
query37	129	82	78	78
query38	1012	887	845	845
query39	498	510	478	478
query39_1	470	463	452	452
query40	203	92	78	78
query41	59	55	59	55
query42	75	71	73	71
query43	241	246	214	214
query44	1008	542	565	542
query45	115	109	103	103
query46	769	877	514	514
query47	778	780	743	743
query48	325	318	240	240
query49	543	249	189	189
query50	801	267	200	200
query51	8125	8002	8043	8002
query52	66	66	61	61
query53	192	206	186	186
query54	217	153	139	139
query55	75	62	54	54
query56	193	154	159	154
query57	681	731	674	674
query58	186	181	162	162
query59	1260	1260	1128	1128
query60	223	186	173	173
query61	122	120	122	120
query62	361	202	194	194
query63	173	138	134	134
query64	2813	665	616	616
query65	1652	1603	1711	1603
query66	1834	252	201	201
query67	10024	10217	9915	9915
query68	2977	1153	726	726
query69	340	221	205	205
query70	665	630	623	623
query71	257	177	163	163
query72	2253	1698	1490	1490
query73	618	555	333	333
query74	1978	1244	1160	1160
query75	1199	1135	965	965
query76	2324	716	515	515
query77	249	255	213	213
query78	4006	3827	3357	3357
query79	2317	804	586	586
query80	1613	332	275	275
query81	491	156	132	132
query82	625	129	96	96
query83	289	204	187	187
query84	301	107	85	85
query85	775	328	281	281
query86	389	174	166	166
query87	1040	995	910	910
query88	2783	2112	2113	2112
query89	285	196	176	176
query90	1993	124	123	123
query91	130	120	97	97
query92	79	66	70	66
query93	1399	1076	715	715
query94	634	255	212	212
query95	533	257	297	257
query96	794	583	285	285
query97	1083	1064	1043	1043
query98	155	139	131	131
query99	422	332	316	316
Total cold run time: 178293 ms
Total hot run time: 82827 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
ClickBench: Total hot run time: 14.83 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 4e4e6e11f0b585915cc7a97f4a1a8cdb8b04984a, data reload: false

query1	0.00	0.01	0.00
query2	0.08	0.04	0.03
query3	0.25	0.08	0.10
query4	1.60	0.10	0.10
query5	0.17	0.15	0.15
query6	1.27	0.69	0.68
query7	0.03	0.00	0.00
query8	0.05	0.03	0.03
query9	0.28	0.21	0.22
query10	0.34	0.34	0.34
query11	0.15	0.11	0.11
query12	0.15	0.12	0.13
query13	0.30	0.30	0.30
query14	0.47	0.48	0.46
query15	0.35	0.35	0.34
query16	0.24	0.23	0.21
query17	0.67	0.73	0.72
query18	0.19	0.17	0.17
query19	1.17	1.19	1.18
query20	0.01	0.00	0.01
query21	15.46	0.16	0.11
query22	5.07	0.04	0.04
query23	16.18	0.26	0.11
query24	2.98	0.32	0.27
query25	0.10	0.05	0.03
query26	0.83	0.17	0.14
query27	0.04	0.02	0.03
query28	3.64	0.51	0.27
query29	12.48	3.17	2.56
query30	0.26	0.11	0.12
query31	2.76	0.37	0.18
query32	3.50	0.31	0.24
query33	1.53	1.44	1.45
query34	15.41	2.24	1.84
query35	1.78	1.76	1.72
query36	0.49	0.28	0.28
query37	0.07	0.04	0.04
query38	0.05	0.03	0.03
query39	0.03	0.03	0.02
query40	0.11	0.08	0.08
query41	0.08	0.03	0.02
query42	0.04	0.02	0.02
query43	0.04	0.03	0.03
Total cold run time: 90.7 s
Total hot run time: 14.83 s

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review status: converged on c58ca63896196dc64c883c8cecc9bfbf7d1c6422 after two rounds. I found two new blocking issues and included both inline. The existing copy-relocation/version-needs issue and initial-thread TLS ordering issue also remain applicable on this head. The two earlier expf value/rounding comments are fixed by the updated upstream-style implementation. Removing executable-wide exports eliminates the supported external-DSO binding path behind the earlier DSO-lifetime concern, but it introduces the stripped-symbolization regression reported here.

Critical checkpoint conclusions:

  • Goal and proof: The forced archive roots and raw copy_file_range adapter are coherent, but the GLIBC 2.17 goal is not safely met while the final-ELF audit misses copy relocations and the forced libm definitions violate glibc's errno contract. No final-linked semantic test proves the new shims.
  • Scope: The six changed files are related to the compatibility fix, although forced public math definitions and the TLS runtime shim are process-wide changes.
  • Concurrency: pthread_once plus per-thread lists avoid a shared-list race, and callback re-registration preserves LIFO order. The worker-key ordering matches Rust's old-system fallback; no separate reachable worker defect was established. The existing initial-thread ordering issue remains.
  • Lifecycle/static state: TLS entry ownership and repeat registration are otherwise sound. The prior external-DSO scenario is no longer supported after executable exports are removed; no additional initialization-order or unload path survived review.
  • Configuration: No new runtime configuration is added. GLIBC_COMPATIBILITY and STRIP_DEBUG_INFO are existing build-time choices; the latter exposes the new symbolization regression.
  • Compatibility: The copy_file_range signature and errno fallback match Rust 1.91 on supported x86_64/aarch64 targets. There are no wire, storage-format, or rolling-upgrade changes. The remaining ELF audit, libm errno, and main-thread TLS issues are ABI blockers.
  • Parallel paths and conditions: All executable consumers of DORIS_LINK_LIBS receive the same forced roots. The package-wide shared-library concern was rechecked but not reported because no current incompatible packaged library was established. Normal/compatibility-off, test/benchmark/tool, macOS, both Linux architectures, old-kernel fallback, and stripped-package paths were considered.
  • Tests/results: No test file changed. The commit records that ./build.sh --be was attempted but stopped at Java detection; current checks confirm formatting, style, license, and secret scanning, while BE build/runtime tests are not demonstrated. Missing coverage includes copy-relocation negatives, final-linked libm errno/domain/range behavior, stripped-package symbolization, main-thread teardown ordering, and old-kernel fallback. No expected-result files are involved.
  • Error handling and observability: Registration/setup failures abort rather than continuing partially initialized, and build-hook command failures are diagnostic. Runtime observability regresses in stripped builds as reported inline.
  • Persistence/data/FE-BE variables: Not applicable; no transaction, metadata, data-write, storage, RPC, or cross-process variable behavior changes.
  • Performance/other: No separate blocking CPU, allocation, lock, or complexity regression was substantiated. The final changed-file and live-thread sweep left no unresolved or duplicate candidate.
  • User focus: No additional focus was provided; the complete PR was reviewed.

# native UDFs (runtime/user_function_cache.cpp dlopens them), and those use the Doris UDF
# ABI, which has nothing to do with RocksDB. Crash stacks do not need it either -- they are
# symbolized from debug info, which is why they name even anonymous-namespace functions.
# Keep doris_be symbols private. Java UDF callbacks are registered explicitly through JNI and

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removing executable exports also removes the fallback that keeps Doris function names in .dynsym, but the supported STRIP_DEBUG_INFO=ON package cannot load its separate symbols in-process: this file installs lib/debug_info/doris_be.dbg, while SymbolIndex only checks an adjacent doris_be.debug, /usr/lib/debug/..., or a build-id path and does not follow .gnu_debuglink. After --strip-unneeded, it therefore falls back to a stripped executable with almost no Doris symbols, so exception/crash stacks and the thread-stack endpoint render most frames as ?. Please make SymbolIndex locate the packaged .dbg file (or otherwise preserve the needed symbol source) before dropping ENABLE_EXPORTS, and cover the stripped layout in a test.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is an old problem already exsits in the previous version. And it only happens when set STRIP_DEBUG_INFO=ON, but actually doris always set STRIP_DEBUG_INFO=OFF

Comment thread be/CMakeLists.txt
# front so the linker extracts Doris' musl implementations instead of binding
# late references to the toolchain's libm.
set(DORIS_LINK_LIBS ${DORIS_LINK_LIBS}
-Wl,-u,logf

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These -u roots force musl's public math definitions into every linked executable, but the local domain/range helpers only raise floating-point exceptions and never set errno. Code compiled against glibc therefore sees regressions across this block: for example expf(100)/exp2f(128) and zero logs leave errno unchanged instead of ERANGE, while negative logs or powf(-1, 0.5) omit EDOM. Please preserve glibc's errno contract for all five forced functions and add final-linked domain/range tests; fixing only the numerical result or only expf would leave the other interposed symbols incompatible.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

musl does not make sure that, so we will not deal with it in doris.

@yiguolei

yiguolei commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

run buildall

@eldenmoon eldenmoon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@hello-stephen

Copy link
Copy Markdown
Contributor

BE UT Coverage Report

Increment line coverage 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 63.43% (29911/47157)
Line Coverage 48.50% (314317/648074)
Region Coverage 43.99% (253431/576129)
Branch Coverage 45.61% (118195/259165)

@hello-stephen

Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 100% (0/0) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 76.44% (34917/45680)
Line Coverage 61.54% (394279/640699)
Region Coverage 57.61% (330628/573926)
Branch Coverage 58.53% (151244/258424)

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-H: Total hot run time: 16906 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit c58ca63896196dc64c883c8cecc9bfbf7d1c6422, data reload: false

------ Round 1 ----------------------------------
============================================
q1	17585	3031	3025	3025
q2	2094	255	224	224
q3	10250	886	510	510
q4	4665	255	204	204
q5	7670	546	378	378
q6	134	113	95	95
q7	526	494	385	385
q8	9233	831	923	831
q9	3485	2438	2416	2416
q10	6499	890	719	719
q11	397	193	176	176
q12	613	263	201	201
q13	18147	1530	1136	1136
q14	166	150	138	138
q15	q16	435	396	362	362
q17	1302	853	829	829
q18	3128	2316	2300	2300
q19	1266	844	801	801
q20	379	290	206	206
q21	5656	1737	1893	1737
q22	331	267	233	233
Total cold run time: 93961 ms
Total hot run time: 16906 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	3376	3329	3309	3309
q2	523	397	378	378
q3	2255	2398	2167	2167
q4	1231	1192	901	901
q5	2218	2208	2156	2156
q6	169	118	87	87
q7	1078	924	872	872
q8	1606	1418	1402	1402
q9	3205	3224	3177	3177
q10	1880	1830	1674	1674
q11	362	280	255	255
q12	449	432	348	348
q13	1484	1538	1163	1163
q14	166	168	176	168
q15	q16	402	403	354	354
q17	3698	3402	3269	3269
q18	4921	4580	4833	4580
q19	1029	878	862	862
q20	1050	997	851	851
q21	3834	3181	3229	3181
q22	391	348	313	313
Total cold run time: 35327 ms
Total hot run time: 31467 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 83083 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit c58ca63896196dc64c883c8cecc9bfbf7d1c6422, data reload: false

query5	4268	405	342	342
query6	391	145	125	125
query7	4931	401	228	228
query8	290	125	125	125
query9	8690	2870	2851	2851
query10	401	225	180	180
query11	5404	1072	948	948
query12	118	69	68	68
query13	1188	411	332	332
query14	6130	2243	2136	2136
query14_1	2020	1992	2001	1992
query15	176	131	115	115
query16	907	359	346	346
query17	797	459	371	371
query18	2327	328	243	243
query19	166	138	121	121
query20	74	74	70	70
query21	230	99	85	85
query22	5581	5468	5463	5463
query23	7076	6490	6152	6152
query23_1	6217	6360	6108	6108
query24	7324	1077	780	780
query24_1	786	774	765	765
query25	406	271	221	221
query26	1226	226	128	128
query27	2798	412	256	256
query28	4674	1503	1514	1503
query29	914	417	338	338
query30	247	152	128	128
query31	813	409	332	332
query32	129	90	70	70
query33	451	221	180	180
query34	985	790	496	496
query35	398	410	361	361
query36	572	569	517	517
query37	118	81	70	70
query38	1020	867	852	852
query39	500	479	493	479
query39_1	490	477	493	477
query40	201	86	77	77
query41	55	52	51	51
query42	72	70	70	70
query43	245	240	211	211
query44	994	532	530	530
query45	110	105	99	99
query46	773	823	530	530
query47	767	767	703	703
query48	309	313	236	236
query49	542	240	193	193
query50	754	254	192	192
query51	8077	7972	8002	7972
query52	67	74	63	63
query53	197	208	157	157
query54	321	178	157	157
query55	86	62	59	59
query56	194	176	173	173
query57	708	648	646	646
query58	219	168	184	168
query59	1266	1271	1157	1157
query60	252	193	187	187
query61	166	107	106	106
query62	353	199	174	174
query63	170	141	138	138
query64	2766	717	653	653
query65	1731	1682	1704	1682
query66	1765	252	199	199
query67	10030	10033	10016	10016
query68	3012	1133	715	715
query69	348	220	196	196
query70	697	640	629	629
query71	257	182	165	165
query72	2259	1642	1555	1555
query73	641	574	362	362
query74	2006	1250	1162	1162
query75	1187	1124	961	961
query76	2381	733	528	528
query77	251	269	203	203
query78	3991	3846	3330	3330
query79	2272	831	550	550
query80	1598	324	266	266
query81	481	157	134	134
query82	629	121	93	93
query83	283	207	193	193
query84	297	111	90	90
query85	764	344	298	298
query86	392	172	167	167
query87	1049	990	899	899
query88	2784	2089	2099	2089
query89	291	200	175	175
query90	2012	129	120	120
query91	133	122	100	100
query92	77	70	62	62
query93	1419	1070	686	686
query94	666	234	219	219
query95	510	243	298	243
query96	823	564	281	281
query97	1065	1060	1035	1035
query98	156	130	130	130
query99	419	350	308	308
Total cold run time: 179033 ms
Total hot run time: 83083 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
ClickBench: Total hot run time: 14.75 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit c58ca63896196dc64c883c8cecc9bfbf7d1c6422, data reload: false

query1	0.01	0.01	0.00
query2	0.07	0.03	0.03
query3	0.25	0.11	0.11
query4	1.60	0.10	0.08
query5	0.18	0.16	0.16
query6	1.28	0.70	0.70
query7	0.03	0.00	0.01
query8	0.04	0.03	0.03
query9	0.28	0.21	0.22
query10	0.36	0.38	0.34
query11	0.16	0.12	0.11
query12	0.14	0.12	0.11
query13	0.31	0.31	0.32
query14	0.46	0.48	0.47
query15	0.36	0.35	0.34
query16	0.21	0.22	0.21
query17	0.71	0.69	0.74
query18	0.18	0.17	0.17
query19	1.20	1.19	1.08
query20	0.02	0.01	0.01
query21	15.44	0.16	0.11
query22	5.09	0.04	0.04
query23	16.16	0.26	0.10
query24	2.80	0.32	0.25
query25	0.11	0.04	0.03
query26	0.78	0.17	0.11
query27	0.04	0.03	0.02
query28	3.65	0.56	0.28
query29	12.50	3.16	2.57
query30	0.25	0.11	0.12
query31	2.76	0.37	0.17
query32	3.52	0.32	0.23
query33	1.39	1.55	1.57
query34	15.35	2.24	1.79
query35	1.76	1.79	1.73
query36	0.46	0.29	0.28
query37	0.07	0.04	0.04
query38	0.04	0.03	0.02
query39	0.03	0.02	0.03
query40	0.12	0.07	0.08
query41	0.08	0.03	0.02
query42	0.03	0.03	0.02
query43	0.03	0.03	0.03
Total cold run time: 90.31 s
Total hot run time: 14.75 s

@hello-stephen

Copy link
Copy Markdown
Contributor

BE UT Coverage Report

Increment line coverage 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 63.42% (29907/47157)
Line Coverage 48.47% (314124/648074)
Region Coverage 43.95% (253209/576129)
Branch Coverage 45.59% (118158/259165)

@hello-stephen

Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 100% (0/0) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 76.43% (34913/45680)
Line Coverage 61.51% (394085/640699)
Region Coverage 57.58% (330476/573926)
Branch Coverage 58.51% (151213/258424)

@hello-stephen

Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 100% (0/0) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 76.43% (34913/45680)
Line Coverage 61.50% (394060/640699)
Region Coverage 57.58% (330462/573926)
Branch Coverage 58.51% (151206/258424)

@hello-stephen

Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 100% (0/0) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 76.43% (34913/45680)
Line Coverage 61.51% (394070/640699)
Region Coverage 57.63% (330752/573926)
Branch Coverage 58.52% (151221/258424)

1 similar comment
@hello-stephen

Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 100% (0/0) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 76.43% (34913/45680)
Line Coverage 61.51% (394070/640699)
Region Coverage 57.63% (330752/573926)
Branch Coverage 58.52% (151221/258424)

@yiguolei
yiguolei merged commit 204eca6 into apache:master Sep 9, 2026
41 checks passed
Felix-Gong pushed a commit to Felix-Gong/doris that referenced this pull request Sep 11, 2026
### What problem does this PR solve?

Rust std weak-links this glibc 2.18 entry point and has an internal
fallback when it is absent. Since the LDB sysroot exposes it, the final
linker would otherwise record GLIBC_2.18.

See rust-lang/rust#57497 for more details.

I have checked the output.

objdump -T output/be/lib/doris_be | grep -o 'GLIBC_[0-9.]*' | sort -Vu |
tail
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10

Related PR: #xxx

Problem Summary:

### Release note

None

### Check List (For Author)

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [ ] Unit Test
    - [ ] Manual test (add detailed scripts or steps below)
    - [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
        - [ ] Previous test can cover this change.
        - [ ] No code files have been changed.
        - [ ] Other reason <!-- Add your reason?  -->

- Behavior changed:
    - [ ] No.
    - [ ] Yes. <!-- Explain the behavior change -->

- Does this need documentation?
    - [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
apache/doris-website#1214 -->

### Check List (For Reviewer who merge this PR)

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
Felix-Gong pushed a commit to Felix-Gong/doris that referenced this pull request Sep 14, 2026
### What problem does this PR solve?

Rust std weak-links this glibc 2.18 entry point and has an internal
fallback when it is absent. Since the LDB sysroot exposes it, the final
linker would otherwise record GLIBC_2.18.

See rust-lang/rust#57497 for more details.

I have checked the output.

objdump -T output/be/lib/doris_be | grep -o 'GLIBC_[0-9.]*' | sort -Vu |
tail
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10

Related PR: #xxx

Problem Summary:

### Release note

None

### Check List (For Author)

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [ ] Unit Test
    - [ ] Manual test (add detailed scripts or steps below)
    - [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
        - [ ] Previous test can cover this change.
        - [ ] No code files have been changed.
        - [ ] Other reason <!-- Add your reason?  -->

- Behavior changed:
    - [ ] No.
    - [ ] Yes. <!-- Explain the behavior change -->

- Does this need documentation?
    - [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
apache/doris-website#1214 -->

### Check List (For Reviewer who merge this PR)

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants