Skip to content

Conversation

@xinyiZzz
Copy link
Contributor

@xinyiZzz xinyiZzz commented Apr 29, 2025

What problem does this PR solve?

Based on #11740

The memory size tracked in Allocator is virtual memory. If the allocated memory is not fully used, the tracked virtual memory may be larger than the actual physical memory.

PODArray does not memset 0 when allocated memory, the memory blocks allocated by PODArray (such as VOlapScanNode::_free_blocks) are usually used for memory reuse and will not be fully used.

After this PR, the unused memory in PODArray is recorded in reserve to indicate that this part of the memory is not actually used.

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

@xinyiZzz
Copy link
Contributor Author

run buildall

@Thearas
Copy link
Contributor

Thearas commented Apr 29, 2025

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?

@doris-robot
Copy link

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

------ Round 1 ----------------------------------
q1	23034	5006	4965	4965
q2	2066	286	201	201
q3	10560	1238	765	765
q4	10233	1008	527	527
q5	7770	2389	2326	2326
q6	248	172	130	130
q7	913	747	593	593
q8	9315	1279	1061	1061
q9	6838	5169	5163	5163
q10	6818	2291	1883	1883
q11	483	282	268	268
q12	362	353	212	212
q13	17790	3733	3110	3110
q14	223	226	221	221
q15	539	488	478	478
q16	416	436	372	372
q17	611	874	357	357
q18	7433	7239	7251	7239
q19	1979	970	583	583
q20	325	330	214	214
q21	4327	3370	2471	2471
q22	1057	1037	989	989
Total cold run time: 113340 ms
Total hot run time: 34128 ms

----- Round 2, with runtime_filter_mode=off -----
q1	5163	5070	5046	5046
q2	259	329	239	239
q3	2125	2638	2310	2310
q4	1436	1800	1439	1439
q5	4321	4327	4480	4327
q6	214	170	123	123
q7	2086	1954	1806	1806
q8	2610	2605	2508	2508
q9	7291	7280	6956	6956
q10	3044	3174	2806	2806
q11	594	526	514	514
q12	705	774	634	634
q13	3532	3852	3273	3273
q14	289	298	290	290
q15	566	507	504	504
q16	471	505	461	461
q17	1205	1608	1399	1399
q18	7686	7664	7421	7421
q19	844	825	961	825
q20	1974	2012	1846	1846
q21	5476	5018	5060	5018
q22	1123	1120	1027	1027
Total cold run time: 53014 ms
Total hot run time: 50772 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 198589 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 e48af9d894281e807833e70280a2d09b64bff4a5, data reload: false

query1	1416	1037	989	989
query2	6133	3014	2975	2975
query3	11141	4524	4745	4524
query4	25351	24166	23002	23002
query5	4868	664	475	475
query6	312	205	188	188
query7	3997	510	276	276
query8	298	267	244	244
query9	8515	2893	2939	2893
query10	515	326	259	259
query11	15224	15027	15172	15027
query12	166	116	110	110
query13	1558	510	397	397
query14	8942	6454	6498	6454
query15	223	208	181	181
query16	7225	702	515	515
query17	1126	746	610	610
query18	1983	422	327	327
query19	218	202	175	175
query20	135	135	129	129
query21	215	125	115	115
query22	4590	4600	4484	4484
query23	34342	33682	33534	33534
query24	7837	2533	2470	2470
query25	524	482	405	405
query26	776	277	163	163
query27	3134	516	373	373
query28	5366	5127	5165	5127
query29	665	562	451	451
query30	324	236	203	203
query31	908	890	789	789
query32	71	61	66	61
query33	537	353	326	326
query34	794	865	536	536
query35	813	844	769	769
query36	954	1032	906	906
query37	147	103	79	79
query38	4226	4298	4214	4214
query39	1515	1461	1456	1456
query40	213	127	115	115
query41	57	56	54	54
query42	121	109	117	109
query43	616	584	566	566
query44	1350	854	841	841
query45	177	176	175	175
query46	866	1048	658	658
query47	1871	1901	1888	1888
query48	398	424	310	310
query49	717	533	414	414
query50	676	732	415	415
query51	4225	4205	4156	4156
query52	111	107	100	100
query53	229	260	193	193
query54	589	603	540	540
query55	84	86	82	82
query56	339	311	307	307
query57	1187	1192	1173	1173
query58	304	267	261	261
query59	3028	2958	2907	2907
query60	325	325	311	311
query61	134	137	136	136
query62	746	732	702	702
query63	224	191	188	188
query64	2770	1107	761	761
query65	4477	4339	4308	4308
query66	898	404	326	326
query67	15807	15642	15437	15437
query68	8811	894	508	508
query69	482	304	270	270
query70	1196	1149	1129	1129
query71	475	322	288	288
query72	5680	4720	4501	4501
query73	722	598	353	353
query74	8906	9191	8896	8896
query75	4079	3227	2674	2674
query76	3638	1194	764	764
query77	804	397	287	287
query78	10060	10195	9442	9442
query79	2307	782	581	581
query80	614	515	455	455
query81	495	288	243	243
query82	499	124	99	99
query83	286	256	229	229
query84	290	113	87	87
query85	800	358	320	320
query86	358	306	306	306
query87	4453	4444	4336	4336
query88	3138	2246	2233	2233
query89	423	327	285	285
query90	1897	204	207	204
query91	151	146	123	123
query92	77	60	57	57
query93	1124	968	582	582
query94	660	422	314	314
query95	366	290	289	289
query96	495	571	274	274
query97	3308	3509	3319	3319
query98	230	208	206	206
query99	1445	1400	1291	1291
Total cold run time: 277892 ms
Total hot run time: 198589 ms

@doris-robot
Copy link

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

query1	0.04	0.04	0.03
query2	0.07	0.04	0.04
query3	0.24	0.10	0.10
query4	1.59	0.11	0.11
query5	0.56	0.56	0.56
query6	1.21	0.72	0.72
query7	0.02	0.02	0.02
query8	0.04	0.04	0.04
query9	0.57	0.51	0.51
query10	0.57	0.57	0.55
query11	0.16	0.10	0.11
query12	0.15	0.11	0.11
query13	0.62	0.60	0.59
query14	0.79	0.80	0.81
query15	0.88	0.85	0.85
query16	0.38	0.39	0.38
query17	1.02	1.06	1.05
query18	0.22	0.21	0.20
query19	1.90	1.89	1.86
query20	0.01	0.01	0.02
query21	15.42	0.88	0.56
query22	0.74	1.26	0.66
query23	14.94	1.39	0.66
query24	7.00	1.02	0.85
query25	0.50	0.23	0.16
query26	0.64	0.16	0.14
query27	0.05	0.04	0.04
query28	9.51	0.90	0.44
query29	12.52	4.03	3.30
query30	0.25	0.09	0.06
query31	3.04	0.61	0.39
query32	3.52	0.56	0.48
query33	3.18	3.02	3.06
query34	15.70	5.11	4.51
query35	4.53	4.63	4.52
query36	0.67	0.49	0.48
query37	0.09	0.06	0.06
query38	0.04	0.04	0.03
query39	0.03	0.02	0.03
query40	0.17	0.14	0.13
query41	0.09	0.03	0.03
query42	0.05	0.02	0.03
query43	0.04	0.03	0.02
Total cold run time: 103.76 s
Total hot run time: 29.21 s

@xinyiZzz xinyiZzz force-pushed the 20250429_fix_podarray branch from e48af9d to 1524e5b Compare April 29, 2025 18:20
@xinyiZzz
Copy link
Contributor Author

run buildall

@xinyiZzz xinyiZzz force-pushed the 20250429_fix_podarray branch from 1524e5b to 06383a4 Compare May 7, 2025 07:32
@xinyiZzz
Copy link
Contributor Author

xinyiZzz commented May 7, 2025

run buildall

@xinyiZzz xinyiZzz force-pushed the 20250429_fix_podarray branch from e0fdf9c to 83987d6 Compare May 8, 2025 02:19
@xinyiZzz
Copy link
Contributor Author

xinyiZzz commented May 8, 2025

run buildall

@xinyiZzz xinyiZzz force-pushed the 20250429_fix_podarray branch from 83987d6 to 7c479b7 Compare May 8, 2025 04:33
@xinyiZzz
Copy link
Contributor Author

xinyiZzz commented May 8, 2025

run buildall

@doris-robot
Copy link

BE UT Coverage Report

Increment line coverage 58.41% (198/339) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 55.61% (14878/26756)
Line Coverage 44.47% (131358/295363)
Region Coverage 43.36% (66121/152492)
Branch Coverage 38.06% (33782/88768)

@xinyiZzz xinyiZzz force-pushed the 20250429_fix_podarray branch from 7c479b7 to 4256478 Compare May 8, 2025 19:06
@xinyiZzz
Copy link
Contributor Author

xinyiZzz commented May 8, 2025

run buildall

@doris-robot
Copy link

BE UT Coverage Report

Increment line coverage 59.77% (205/343) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 55.69% (14903/26762)
Line Coverage 44.51% (131478/295407)
Region Coverage 43.41% (66255/152625)
Branch Coverage 38.08% (33828/88836)

@hello-stephen
Copy link
Contributor

BE Regression && UT Coverage Report

Increment line coverage 61.49% (206/335) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 79.43% (20858/26259)
Line Coverage 72.66% (214270/294910)
Region Coverage 70.83% (126778/178988)
Branch Coverage 64.52% (65403/101370)

@xinyiZzz xinyiZzz force-pushed the 20250429_fix_podarray branch from 4256478 to 82236d4 Compare May 9, 2025 07:07
@xinyiZzz
Copy link
Contributor Author

xinyiZzz commented May 9, 2025

run buildall

@doris-robot
Copy link

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

------ Round 1 ----------------------------------
q1	26287	5036	5041	5036
q2	2086	296	183	183
q3	10516	1267	702	702
q4	10230	1010	527	527
q5	7822	2308	2381	2308
q6	183	164	133	133
q7	917	768	629	629
q8	9322	1298	1116	1116
q9	6785	5069	5039	5039
q10	6862	2317	1929	1929
q11	493	294	273	273
q12	342	350	209	209
q13	17770	3652	3077	3077
q14	233	236	214	214
q15	523	487	499	487
q16	444	433	377	377
q17	603	871	384	384
q18	7913	7191	7123	7123
q19	1899	958	559	559
q20	320	326	218	218
q21	4174	3379	2474	2474
q22	1029	972	952	952
Total cold run time: 116753 ms
Total hot run time: 33949 ms

----- Round 2, with runtime_filter_mode=off -----
q1	5196	5104	5102	5102
q2	239	320	230	230
q3	2193	2655	2242	2242
q4	1388	1805	1486	1486
q5	4526	4448	4326	4326
q6	221	168	123	123
q7	1989	1862	1753	1753
q8	2604	2605	2548	2548
q9	7175	7153	7100	7100
q10	2982	3161	2720	2720
q11	581	508	503	503
q12	669	766	637	637
q13	3537	3859	3214	3214
q14	267	280	258	258
q15	515	472	466	466
q16	438	500	444	444
q17	1156	1519	1432	1432
q18	7727	7558	7460	7460
q19	815	820	876	820
q20	1986	1944	1817	1817
q21	4984	4560	4493	4493
q22	1047	1032	967	967
Total cold run time: 52235 ms
Total hot run time: 50141 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 186179 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 475e02dd7a6894542a340a7637be07e2bd2a0939, data reload: false

query1	997	463	497	463
query2	6553	1743	1794	1743
query3	6749	237	231	231
query4	26249	23777	23429	23429
query5	4401	628	441	441
query6	314	194	208	194
query7	4618	490	278	278
query8	278	241	224	224
query9	8545	2627	2631	2627
query10	467	338	269	269
query11	15256	14981	14818	14818
query12	159	110	105	105
query13	1673	533	401	401
query14	8570	6058	6033	6033
query15	225	196	163	163
query16	7135	616	448	448
query17	934	688	574	574
query18	1978	388	292	292
query19	188	178	153	153
query20	119	116	122	116
query21	214	126	106	106
query22	4040	4146	4034	4034
query23	34029	32968	33061	32968
query24	8489	2384	2395	2384
query25	542	465	387	387
query26	1224	267	156	156
query27	2754	505	335	335
query28	4353	2131	2081	2081
query29	777	545	443	443
query30	285	219	184	184
query31	908	857	733	733
query32	71	72	61	61
query33	552	370	318	318
query34	794	837	522	522
query35	766	805	713	713
query36	931	993	884	884
query37	112	99	75	75
query38	4097	4186	4062	4062
query39	1445	1413	1407	1407
query40	206	119	103	103
query41	57	53	52	52
query42	123	107	106	106
query43	500	498	491	491
query44	1303	807	820	807
query45	174	178	172	172
query46	829	1022	629	629
query47	1783	1774	1759	1759
query48	394	415	324	324
query49	778	521	412	412
query50	633	676	406	406
query51	4117	4128	4042	4042
query52	118	112	99	99
query53	226	257	182	182
query54	587	563	509	509
query55	87	87	87	87
query56	318	334	338	334
query57	1146	1138	1090	1090
query58	281	275	265	265
query59	2644	2660	2562	2562
query60	342	333	320	320
query61	151	148	146	146
query62	795	723	674	674
query63	230	196	200	196
query64	4491	1077	762	762
query65	4397	4238	4277	4238
query66	1155	416	325	325
query67	15923	15626	15611	15611
query68	8320	882	524	524
query69	480	309	274	274
query70	1215	1109	1117	1109
query71	453	319	310	310
query72	5881	4684	4761	4684
query73	741	630	354	354
query74	8887	8850	8793	8793
query75	3823	3195	2766	2766
query76	3646	1177	751	751
query77	804	380	304	304
query78	10147	10204	9263	9263
query79	2103	802	573	573
query80	575	524	457	457
query81	478	258	212	212
query82	457	132	96	96
query83	252	249	231	231
query84	290	108	87	87
query85	797	362	309	309
query86	384	300	297	297
query87	4593	4439	4271	4271
query88	3498	2311	2275	2275
query89	379	320	275	275
query90	1833	211	214	211
query91	152	143	111	111
query92	83	61	55	55
query93	1594	935	583	583
query94	666	399	303	303
query95	370	290	287	287
query96	487	577	277	277
query97	3114	3213	3112	3112
query98	239	209	206	206
query99	1454	1412	1261	1261
Total cold run time: 273774 ms
Total hot run time: 186179 ms

@doris-robot
Copy link

ClickBench: Total hot run time: 29.09 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 475e02dd7a6894542a340a7637be07e2bd2a0939, data reload: false

query1	0.03	0.04	0.04
query2	0.12	0.10	0.10
query3	0.26	0.19	0.19
query4	1.58	0.20	0.20
query5	0.60	0.57	0.59
query6	1.20	0.72	0.72
query7	0.02	0.02	0.01
query8	0.04	0.03	0.03
query9	0.58	0.53	0.51
query10	0.57	0.56	0.57
query11	0.16	0.11	0.12
query12	0.15	0.12	0.12
query13	0.61	0.59	0.60
query14	0.81	0.80	0.80
query15	0.87	0.84	0.85
query16	0.38	0.38	0.39
query17	1.02	1.02	1.00
query18	0.22	0.21	0.22
query19	1.90	1.75	1.83
query20	0.02	0.01	0.01
query21	15.40	0.93	0.57
query22	0.76	1.19	0.78
query23	14.78	1.36	0.68
query24	6.50	2.04	0.60
query25	0.50	0.10	0.07
query26	0.62	0.17	0.15
query27	0.06	0.06	0.05
query28	9.74	0.83	0.43
query29	12.54	3.89	3.23
query30	0.25	0.10	0.07
query31	2.81	0.61	0.39
query32	3.24	0.55	0.46
query33	3.08	3.06	3.17
query34	15.69	5.08	4.48
query35	4.50	4.53	4.54
query36	0.66	0.49	0.48
query37	0.09	0.06	0.07
query38	0.05	0.04	0.04
query39	0.03	0.02	0.02
query40	0.16	0.14	0.13
query41	0.07	0.02	0.03
query42	0.04	0.02	0.03
query43	0.04	0.03	0.03
Total cold run time: 102.75 s
Total hot run time: 29.09 s

@doris-robot
Copy link

BE UT Coverage Report

Increment line coverage 60.39% (218/361) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 55.71% (14881/26710)
Line Coverage 44.53% (131649/295639)
Region Coverage 43.59% (66205/151883)
Branch Coverage 38.17% (33904/88816)

@github-actions github-actions bot added the approved Indicates a PR has been approved by one committer. label May 9, 2025
@github-actions
Copy link
Contributor

github-actions bot commented May 9, 2025

PR approved by at least one committer and no changes requested.

@github-actions
Copy link
Contributor

github-actions bot commented May 9, 2025

PR approved by anyone and no changes requested.

@hello-stephen
Copy link
Contributor

BE Regression && UT Coverage Report

Increment line coverage 61.65% (217/352) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 79.31% (20840/26275)
Line Coverage 72.49% (214268/295567)
Region Coverage 70.67% (126054/178381)
Branch Coverage 64.36% (65273/101422)

1 similar comment
@hello-stephen
Copy link
Contributor

BE Regression && UT Coverage Report

Increment line coverage 61.65% (217/352) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 79.31% (20840/26275)
Line Coverage 72.49% (214268/295567)
Region Coverage 70.67% (126054/178381)
Branch Coverage 64.36% (65273/101422)

Copy link
Member

@mrhhsg mrhhsg left a comment

Choose a reason for hiding this comment

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

lgtm

@yiguolei yiguolei closed this May 10, 2025
@yiguolei yiguolei reopened this May 10, 2025
@xinyiZzz xinyiZzz merged commit f58e18a into apache:master May 10, 2025
27 of 30 checks passed
koarz pushed a commit to koarz/doris that referenced this pull request Jun 4, 2025
…e#50549)

### What problem does this PR solve?

Based on apache#11740

The memory size tracked in Allocator is virtual memory. If the allocated
memory is not fully used, the tracked virtual memory may be larger than
the actual physical memory.

`PODArray` does not memset 0 when allocated memory, the memory blocks
allocated by `PODArray` (such as VOlapScanNode::_free_blocks) are
usually used for memory reuse and will not be fully used.

After this PR, the unused memory in `PODArray` is recorded in reserve to
indicate that this part of the memory is not actually used.
yiguolei pushed a commit that referenced this pull request Jul 22, 2025
### What problem does this PR solve?

#50549 may cause performance loss

If capacity_bytes <= 256K, res_mem_growth = c_end_of_storage -
c_res_mem.

If capacity >= 512K:
- If `c_end_of_storage - c_res_mem < TrackingGrowthMinSize`, then
tracking to c_end_of_storage.
- `c_end_new - c_res_mem` is the size of the physical memory growth,
        which is also the minimum tracking size of this time,
`(((c_end_new - c_res_mem) >> 16) << 16)` is aligned down to 64K,
assuming `capacity_bytes >= 512K`, so `(capacity_bytes >> 3)` is at
least 64K,
so `(((c_end_new - c_res_mem) >> 16) << 16) + (capacity_bytes() >> 3)`
        must be greater than `c_end_new - c_res_mem`.

        For example:
         - 256K < capacity <= 512K,
           it will only tracking twice,
the second time `c_end_of_storage - c_res_mem < TrackingGrowthMinSize`
is true,
           so it will tracking to c_end_of_storage.
- capacity > 32M, `(((c_end_new - c_res_mem) >> 16) << 16)` align the
increased
physical memory size down to 64k, then add `(capacity_bytes() >> 3)`
equals 2M,
           so `reset_resident_memory` is tracking an additional 2M,
after that, physical memory growth within 2M does not need to
reset_resident_memory again.

 so, when PODArray is expanded by power of 2,
 the memory is checked and tracked up to 8 times between each expansion,
 because each time additional tracking `(capacity_bytes() >> 3)`.
 after each reset_resident_memory, tracking_res_memory >= used_bytes;
w41ter pushed a commit to w41ter/incubator-doris that referenced this pull request Jul 30, 2025
…2553)

### What problem does this PR solve?

apache#50549 may cause performance loss

If capacity_bytes <= 256K, res_mem_growth = c_end_of_storage -
c_res_mem.

If capacity >= 512K:
- If `c_end_of_storage - c_res_mem < TrackingGrowthMinSize`, then
tracking to c_end_of_storage.
- `c_end_new - c_res_mem` is the size of the physical memory growth,
        which is also the minimum tracking size of this time,
`(((c_end_new - c_res_mem) >> 16) << 16)` is aligned down to 64K,
assuming `capacity_bytes >= 512K`, so `(capacity_bytes >> 3)` is at
least 64K,
so `(((c_end_new - c_res_mem) >> 16) << 16) + (capacity_bytes() >> 3)`
        must be greater than `c_end_new - c_res_mem`.

        For example:
         - 256K < capacity <= 512K,
           it will only tracking twice,
the second time `c_end_of_storage - c_res_mem < TrackingGrowthMinSize`
is true,
           so it will tracking to c_end_of_storage.
- capacity > 32M, `(((c_end_new - c_res_mem) >> 16) << 16)` align the
increased
physical memory size down to 64k, then add `(capacity_bytes() >> 3)`
equals 2M,
           so `reset_resident_memory` is tracking an additional 2M,
after that, physical memory growth within 2M does not need to
reset_resident_memory again.

 so, when PODArray is expanded by power of 2,
 the memory is checked and tracked up to 8 times between each expansion,
 because each time additional tracking `(capacity_bytes() >> 3)`.
 after each reset_resident_memory, tracking_res_memory >= used_bytes;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by one committer. reviewed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants