Open dotnwat opened 1 year ago
That debug print should probably not be there TBH.
@eli-schwartz fwiw I commented out that line from your referenced PR and the meson setup
step still takes 2.5 minutes.
strace shows that meson is sitting in some sort of loop
09:56:24.894164 mmap(NULL, 10166272, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f09533fc000
09:56:24.897452 mremap(0x7f09533fc000, 10166272, 11767808, MREMAP_MAYMOVE) = 0x7f094998a000
09:56:24.897979 mremap(0x7f094998a000, 11767808, 13254656, MREMAP_MAYMOVE) = 0x7f095310a000
09:56:24.898743 mremap(0x7f095310a000, 13254656, 17043456, MREMAP_MAYMOVE) = 0x7f0949482000
09:56:24.899990 mremap(0x7f0949482000, 17043456, 20103168, MREMAP_MAYMOVE) = 0x7f0928ede000
09:56:25.974846 mmap(NULL, 10166272, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f09533fc000
09:56:25.978206 mremap(0x7f09533fc000, 10166272, 11767808, MREMAP_MAYMOVE) = 0x7f094998a000
09:56:25.978759 mremap(0x7f094998a000, 11767808, 13254656, MREMAP_MAYMOVE) = 0x7f095310a000
09:56:25.979525 mremap(0x7f095310a000, 13254656, 17043456, MREMAP_MAYMOVE) = 0x7f0949482000
09:56:25.980778 mremap(0x7f0949482000, 17043456, 20103168, MREMAP_MAYMOVE) = 0x7f0927bb2000
09:56:27.231332 mmap(NULL, 10166272, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f09533fc000
09:56:27.234899 mremap(0x7f09533fc000, 10166272, 11767808, MREMAP_MAYMOVE) = 0x7f094998a000
09:56:27.235446 mremap(0x7f094998a000, 11767808, 13254656, MREMAP_MAYMOVE) = 0x7f095310a000
09:56:27.236224 mremap(0x7f095310a000, 13254656, 17043456, MREMAP_MAYMOVE) = 0x7f0949482000
09:56:27.237504 mremap(0x7f0949482000, 17043456, 20103168, MREMAP_MAYMOVE) = 0x7f0926886000
09:56:28.334355 brk(0x55b9da934000) = 0x55b9da934000
which looks like something is just sitting in a loop malloc/freeing.
is there a way to get a trace at the python/meson level of whats going on?
meson setup --profile-self
.
On the other hand, if we're spending significant enough time repeating this file write that you'd think it's the cause of the slowdown, we shouldn't be logging it that many times anyway as it clutters the log. :P
On the other hand, if we're spending significant enough time repeating this file write that you'd think it's the cause of the slowdown, we shouldn't be logging it that many times anyway as it clutters the log. :P
I agree it shouldn't be logged, but writing like this doesn't account for 2 minutes of time. I think it is merely pointing at the area of Meson that is eating up the time. For example, I'm waiting on meson setup --profile-self
to finish (with the log line commented out), and I've been waiting over 5 minutes. Meson is running at 100% CPU utilization.
The --profile-self
run finished. I ran it under time
and we can see it ended up taking nearly 10 minutes to exit.
[2.525] Subprojects
[2.525] avro : [2.525] YES
[2.525] base64 : [2.525] YES
[2.525] crc32c : [2.525] YES
[2.525] ctre : [2.525] YES
[2.525] fmt : [2.525] YES
[2.525] hdr_histogram : [2.525] YES
[2.525] rapidjson : [2.525] YES
[2.525] roaring : [2.525] YES
[2.525] seastar : [2.525] YES
[2.525]
[2.525] User defined options
[2.525] default_library: [2.525]
shared
[2.525]
[2.550] Found ninja-1.10.2 at /usr/bin/ninja
532.04user 1.13system 8:53.82elapsed 99%CPU (0avgtext+0avgdata 1281728maxresident)k
40inputs+29128outputs (38major+770934minor)pagefaults 0swaps
There should now be a file in the build directory called meson-private/profile-introspector.log
.
Ok got it. How to decode?
ok i think this is what you are looking for?
ncalls tottime percall cumtime percall filename:lineno(function)
130 0.000 0.000 0.000 0.000 /usr/lib64/python3.11/copyreg.py:113(_slotnames)
2080 0.000 0.000 0.000 0.000 /usr/lib64/python3.11/platform.py:823(uname)
127 0.000 0.000 0.001 0.000 /usr/lib64/python3.11/pathlib.py:56(parse_parts)
127 0.000 0.000 0.001 0.000 /usr/lib64/python3.11/pathlib.py:484(_parse_args)
260/130 0.001 0.000 0.004 0.000 /usr/lib64/python3.11/copy.py:259(_reconstruct)
1047/130 0.002 0.000 0.005 0.000 /usr/lib64/python3.11/copy.py:128(deepcopy)
41935 0.003 0.000 0.025 0.000 /usr/lib64/python3.11/json/encoder.py:414(_iterencode)
308 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:2095(_classify_argument)
9 0.000 0.000 0.000 0.000 /usr/lib64/python3.11/json/encoder.py:205(iterencode)
75351/41911 0.009 0.000 0.021 0.000 /usr/lib64/python3.11/json/encoder.py:278(_iterencode_list)
59434/41796 0.008 0.000 0.017 0.000 /usr/lib64/python3.11/json/encoder.py:334(_iterencode_dict)
2 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:359(get_test_list)
1 0.000 0.000 266.491 266.491 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:59(get_meson_introspection_types)
1 0.000 0.000 0.034 0.034 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:506(write_intro_info)
308 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:2132(__init__)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:107(list_installed)
1 0.001 0.001 0.005 0.005 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:214(list_targets)
306 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/coredata.py:616(get_option)
260 0.001 0.000 0.003 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/environment.py:279(detect_cpu_family)
18 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/dependencies/base.py:133(get_compile_args)
7 0.000 0.000 0.001 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:286(add_keys)
1 0.000 0.000 0.002 0.002 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:264(list_buildoptions)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:126(list_install_plan)
130 0.000 0.000 0.000 0.000 <string>:2(__init__)
130 0.000 0.000 0.001 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/backend/backends.py:283(get_target_filename)
2 91.762 45.881 266.491 133.245 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/backend/backends.py:1087(create_test_serialisation)
110 0.000 0.000 0.001 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/backend/backends.py:1796(get_introspection_data)
1 0.000 0.000 266.533 266.533 <string>:1(<module>)
306 0.000 0.000 0.001 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/backend/ninjabackend.py:3461(get_introspection_data)
130 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/backend/backends.py:95(__str__)
130 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/backend/backends.py:218(__post_init__)
130 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/interpreter/interpreterobjects.py:671(get_exe)
130 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/interpreter/interpreterobjects.py:674(get_name)
130 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/backend/backends.py:1089(<lambda>)
110 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/backend/backends.py:1821(<listcomp>)
3 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/backend/backends.py:1820(<listcomp>)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:386(list_benchmarks)
157 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:313(<lambda>)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:383(list_tests)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/interpreter/interpreter.py:524(get_build_def_files)
130 0.000 0.000 0.002 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/backend/backends.py:1161(<listcomp>)
306 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:247(<listcomp>)
1 0.000 0.000 0.001 0.001 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:330(list_buildsystem_files)
306 0.000 0.000 0.001 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:244(<listcomp>)
1 0.000 0.000 0.001 0.001 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:333(<listcomp>)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:313(<dictcomp>)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:317(<dictcomp>)
18 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/dependencies/base.py:157(get_link_args)
18 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/dependencies/base.py:167(found)
18 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/dependencies/base.py:178(get_version)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:389(list_projinfo)
131 0.000 0.000 0.000 0.000 {method 'update' of '_hashlib.HASH' objects}
131 0.000 0.000 0.000 0.000 {method 'hexdigest' of '_hashlib.HASH' objects}
131 0.000 0.000 0.000 0.000 {built-in method _hashlib.openssl_sha256}
131 0.000 0.000 0.001 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:599(construct_id_from_path)
196 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:1273(should_install)
110 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:2492(should_install)
113 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:2501(get_outputs)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/environment.py:740(get_coredata)
2 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/environment.py:778(get_source_dir)
150316869 8.414 0.000 8.414 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/environment.py:781(get_build_dir)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:349(list_deps)
19 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/coredata.py:376(values)
130 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/coredata.py:787(is_cross_build)
157 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/coredata.py:743(is_per_machine_option)
260 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/envconfig.py:253(get)
1 0.000 0.000 266.533 266.533 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:516(generate_introspection_file)
260 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/envconfig.py:287(is_windows)
260 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/envconfig.py:293(is_cygwin)
130 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/envconfig.py:305(is_darwin)
21537 0.002 0.000 0.002 0.000 {built-in method _json.encode_basestring_ascii}
11 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:51(__init__)
260 0.000 0.000 0.001 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/environment.py:387(detect_system)
108 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:435(relative_name)
708 0.001 0.000 0.001 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:480(__getitem__)
260 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:621(is_openbsd)
260 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:625(is_windows)
260 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:644(is_netbsd)
260 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:648(is_freebsd)
9 0.000 0.000 0.000 0.000 /usr/lib64/python3.11/json/encoder.py:260(_make_iterencode)
216 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:432(__hash__)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:74(<lambda>)
58 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:476(__init__)
1 0.000 0.000 0.002 0.002 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:75(<lambda>)
131 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:1035(has_path_sep)
1 0.000 0.000 0.001 0.001 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:76(<lambda>)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:77(<lambda>)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:79(<lambda>)
157 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:2272(is_backend)
142 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:2276(is_builtin)
157 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:2280(is_compiler)
157 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:2284(is_project)
157 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:2288(is_base)
58 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:468(get_lower_case_name)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:1756(__len__)
130 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:1875(type_suffix)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:2568(type_suffix)
260 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:657(is_qnx)
260 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:660(is_aix)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:1753(__iter__)
2906 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:2178(_to_tuple)
306 0.000 0.000 0.001 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:156(get_target_dir)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:128(<dictcomp>)
260 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/environment.py:269(any_compiler_has_define)
260 0.000 0.000 0.004 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/environment.py:848(need_exe_wrapper)
792 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:2175(__hash__)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:310(get_targets)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:313(get_tests)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:316(get_benchmarks)
306 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:580(get_basename)
150316741 7.923 0.000 7.923 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:583(get_subdir)
306 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:586(get_typename)
130 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:1240(get_filename)
196 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:1243(get_outputs)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:310(<dictcomp>)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:311(<dictcomp>)
130 0.000 0.000 0.001 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/environment.py:854(get_exe_wrapper)
131 0.000 0.000 0.001 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:618(get_id)
131 0.000 0.000 0.001 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:589(_get_id_hash)
260 0.000 0.000 0.003 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/environment.py:411(machine_info_can_run)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:80(<lambda>)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:81(<lambda>)
1 0.000 0.000 0.005 0.005 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:82(<lambda>)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/mintro.py:83(<lambda>)
130 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:1007(get_all_link_deps)
130 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/environment.py:731(is_cross_build)
18 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/coredata.py:321(values)
108 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:405(absolute_path)
157 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:2191(__str__)
887 0.000 0.000 0.001 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:2181(__eq__)
566 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/universal.py:2186(__lt__)
261/260 0.000 0.000 0.000 0.000 /usr/lib64/python3.11/copy.py:201(_deepcopy_list)
395 0.000 0.000 0.000 0.000 /usr/lib64/python3.11/copy.py:182(_deepcopy_atomic)
129 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/core.py:117(prepend)
130 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/core.py:135(get_env)
130 0.000 0.000 0.003 0.000 /usr/lib64/python3.11/copy.py:227(_deepcopy_dict)
129 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/core.py:130(_prepend)
1 0.000 0.000 0.000 0.000 /usr/lib64/python3.11/copy.py:211(<listcomp>)
520 0.000 0.000 0.001 0.000 /usr/lib64/python3.11/copy.py:264(<genexpr>)
1 0.000 0.000 0.000 0.000 /usr/lib64/python3.11/copy.py:210(_deepcopy_tuple)
652 0.000 0.000 0.000 0.000 /usr/lib64/python3.11/copy.py:243(_keep_alive)
9 0.006 0.001 0.033 0.004 /usr/lib64/python3.11/json/__init__.py:120(dump)
127 0.000 0.000 0.000 0.000 /usr/lib64/python3.11/pathlib.py:549(as_posix)
1 0.000 0.000 0.000 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/utils/core.py:121(_set)
130 0.000 0.000 0.000 0.000 /usr/lib64/python3.11/copyreg.py:104(__newobj__)
1820 0.000 0.000 0.001 0.000 /usr/lib64/python3.11/platform.py:912(system)
260 0.000 0.000 0.000 0.000 /usr/lib64/python3.11/platform.py:949(machine)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
254 0.000 0.000 0.000 0.000 /usr/lib64/python3.11/pathlib.py:239(splitroot)
127 0.000 0.000 0.001 0.000 /usr/lib64/python3.11/pathlib.py:469(__new__)
127 0.000 0.000 0.001 0.000 /usr/lib64/python3.11/pathlib.py:504(_from_parts)
127 0.000 0.000 0.000 0.000 /usr/lib64/python3.11/pathlib.py:523(_format_parsed_parts)
127 0.000 0.000 0.000 0.000 /usr/lib64/python3.11/pathlib.py:536(__str__)
2263 0.000 0.000 0.000 0.000 {built-in method _abc._abc_instancecheck}
22/18 0.000 0.000 0.000 0.000 {built-in method _abc._abc_subclasscheck}
41926 0.002 0.000 0.002 0.000 {method 'write' of '_io.TextIOWrapper' objects}
9 0.000 0.000 0.000 0.000 {method 'flush' of '_io.TextIOWrapper' objects}
9 0.000 0.000 0.000 0.000 {method '__exit__' of '_io._IOBase' objects}
9 0.000 0.000 0.000 0.000 {built-in method io.open}
9 0.000 0.000 0.000 0.000 {built-in method posix.replace}
417 0.000 0.000 0.000 0.000 {built-in method posix._path_normpath}
150318588 4.965 0.000 4.965 0.000 {built-in method posix.fspath}
1131 0.000 0.000 0.000 0.000 {built-in method sys.intern}
1 0.000 0.000 266.533 266.533 {built-in method builtins.exec}
520 0.000 0.000 0.000 0.000 {built-in method builtins.getattr}
260 0.000 0.000 0.000 0.000 {built-in method builtins.hasattr}
308 0.000 0.000 0.000 0.000 {built-in method builtins.hash}
5449 0.000 0.000 0.000 0.000 {built-in method builtins.id}
300680304 11.216 0.000 11.217 0.000 {built-in method builtins.isinstance}
390 0.000 0.000 0.000 0.000 {built-in method builtins.issubclass}
1 0.000 0.000 0.000 0.000 {built-in method builtins.iter}
581 0.000 0.000 0.000 0.000 {built-in method builtins.len}
10 0.000 0.000 0.001 0.000 {built-in method builtins.sorted}
131 0.000 0.000 0.000 0.000 {method 'encode' of 'str' objects}
389 0.000 0.000 0.000 0.000 {method 'replace' of 'str' objects}
252 0.000 0.000 0.000 0.000 {method 'split' of 'str' objects}
257 0.000 0.000 0.000 0.000 {method 'join' of 'str' objects}
2080 0.000 0.000 0.000 0.000 {method 'lower' of 'str' objects}
127 0.000 0.000 0.000 0.000 {method 'lstrip' of 'str' objects}
150320730 9.521 0.000 9.521 0.000 {method 'startswith' of 'str' objects}
150318602 9.390 0.000 9.390 0.000 {method 'endswith' of 'str' objects}
260 0.000 0.000 0.001 0.000 {method '__reduce_ex__' of 'object' objects}
257 0.000 0.000 0.000 0.000 {built-in method __new__ of type object at 0x7f42c9cee700}
1 0.000 0.000 0.000 0.000 {method 'keys' of 'collections.OrderedDict' objects}
1 0.000 0.000 0.000 0.000 {method 'values' of 'collections.OrderedDict' objects}
2 0.000 0.000 0.000 0.000 {method 'items' of 'collections.OrderedDict' objects}
417 0.000 0.000 0.000 0.000 <frozen posixpath>:389(normpath)
150317917 96.161 0.000 144.483 0.000 <frozen posixpath>:71(join)
150317917 17.864 0.000 24.447 0.000 <frozen posixpath>:41(_get_sep)
9 0.000 0.000 0.000 0.000 <frozen codecs>:186(__init__)
22/18 0.000 0.000 0.000 0.000 <frozen abc>:121(__subclasscheck__)
2263 0.000 0.000 0.001 0.000 <frozen abc>:117(__instancecheck__)
150316997 9.266 0.000 9.266 0.000 {method 'add' of 'set' objects}
2752 0.000 0.000 0.000 0.000 {method 'get' of 'dict' objects}
1201 0.000 0.000 0.000 0.000 {method 'items' of 'dict' objects}
474 0.000 0.000 0.000 0.000 {method 'values' of 'dict' objects}
130 0.000 0.000 0.000 0.000 {method 'update' of 'dict' objects}
130 0.000 0.000 0.000 0.000 {method 'copy' of 'dict' objects}
2936 0.000 0.000 0.000 0.000 {method 'append' of 'list' objects}
127 0.000 0.000 0.000 0.000 {method 'reverse' of 'list' objects}
130 0.000 0.000 0.000 0.000 {method 'get' of 'mappingproxy' objects}
@dcbaker i don't think that #11323 should close this issue. can we reopen it?
Sorry, I had intended to update that PR to not mark this as closed, but got distracted by another bug report instead. :D
That’s a lot of time in path.join
we’re doing something really dumb here, not sure what yet though
I think this might be helpful. Ran with python3 -m trace --trace -g $(which meson) setup ...
. And see this repeated thousands of times
--- modulename: posixpath, funcname: join
89.55 <frozen posixpath>(76): 89.55 <frozen posixpath>(77): --- modulename: posixpath, funcname: _get_sep
89.55 <frozen posixpath>(42): 89.55 <frozen posixpath>(45): 89.55 <frozen posixpath>(78): 89.55 <frozen posixpath>(79): 89.55 <frozen posixpath>(80): 89.55 <frozen posixpath>(82): 89.55 <frozen posixpath>(83): 89.55 <frozen posixpath>(85): 89.55 <frozen posixpath>(88): 89.55 <frozen posixpath>(82): 89.55 <frozen posixpath>(92): 89.55 backends.py(1148): for
l in d.get_all_link_deps():
89.55 backends.py(1149): if isinstance(l, build.SharedLibrary): 89.55 backends.py(1150): ld_lib_path.add(os.path.join(self.environment.get_build_dir(), l.get_subdir()))
--- modulename: environment, funcname: get_build_dir
89.55 environment.py(782): return self.build_dir
--- modulename: build, funcname: get_subdir
89.55 build.py(584): return self.subdir
--- modulename: posixpath, funcname: join
89.55 <frozen posixpath>(76): 89.55 <frozen posixpath>(77): --- modulename: posixpath, funcname: _get_sep
89.55 <frozen posixpath>(42): 89.55 <frozen posixpath>(45): 89.55 <frozen posixpath>(78): 89.55 <frozen posixpath>(79): 89.55 <frozen posixpath>(80): 89.55 <frozen posixpath>(82): 89.55 <frozen posixpath>(83): 89.55 <frozen posixpath>(85): 89.55 <frozen posixpath>(88): 89.55 <frozen posixpath>(82): 89.55 <frozen posixpath>(92): 89.55 backends.py(1148): for
l in d.get_all_link_deps():
89.55 backends.py(1149): if isinstance(l, build.SharedLibrary): 89.55 backends.py(1150): ld_lib_path.add(os.path.join(self.environment.get_build_dir(), l.get_subdir()))
--- modulename: environment, funcname: get_build_dir
89.55 environment.py(782): return self.build_dir
--- modulename: build, funcname: get_subdir
89.55 build.py(584): return self.subdir
--- modulename: posixpath, funcname: join
89.55 <frozen posixpath>(76): 89.55 <frozen posixpath>(77): --- modulename: posixpath, funcname: _get_sep
89.55 <frozen posixpath>(42): 89.55 <frozen posixpath>(45): 89.55 <frozen posixpath>(78): 89.55 <frozen posixpath>(79): 89.55 <frozen posixpath>(80): 89.55 <frozen posixpath>(82): 89.55 <frozen posixpath>(83): 89.55 <frozen posixpath>(85): 89.55 <frozen posixpath>(88): 89.55 <frozen posixpath>(82): 89.55 <frozen posixpath>(92): 89.55 backends.py(1148): for
l in d.get_all_link_deps():
89.55 backends.py(1149): if isinstance(l, build.SharedLibrary): 89.55 backends.py(1150): ld_lib_path.add(os.path.join(self.environment.get_build_dir(), l.get_subdir()))
--- modulename: environment, funcname: get_build_dir
89.55 environment.py(782): return self.build_dir
--- modulename: build, funcname: get_subdir
89.55 build.py(584): return self.subdir
--- modulename: posixpath, funcname: join
89.55 <frozen posixpath>(76): 89.55 <frozen posixpath>(77): --- modulename: posixpath, funcname: _get_sep
89.55 <frozen posixpath>(42): 89.55 <frozen posixpath>(45): 89.55 <frozen posixpath>(78): 89.55 <frozen posixpath>(79): 89.55 <frozen posixpath>(80): 89.55 <frozen posixpath>(82): 89.55 <frozen posixpath>(83): 89.55 <frozen posixpath>(85): 89.55 <frozen posixpath>(88): 89.55 <frozen posixpath>(82): 89.55 <frozen posixpath>(92): 89.55 backends.py(1148): for
l in d.get_all_link_deps():
89.55 backends.py(1149): if isinstance(l, build.SharedLibrary): 89.55 backends.py(1150): ld_lib_path.add(os.path.join(self.environment.get_build_dir(), l.get_subdir()))
--- modulename: environment, funcname: get_build_dir
89.55 environment.py(782): return self.build_dir
--- modulename: build, funcname: get_subdir
89.55 build.py(584): return self.subdir
--- modulename: posixpath, funcname: join
@dotnwat Can you provide any more specifics about your project? How many targets are there, what are there huge amounts of interdependencies?
The 150M calls to get_build_dir
, get_subdir
, join
and 'set.add'
ncalls tottime percall cumtime percall filename:lineno(function)
...
150316869 8.414 0.000 8.414 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/environment.py:781(get_build_dir)
150316741 7.923 0.000 7.923 0.000 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/build.py:583(get_subdir)
150317917 96.161 0.000 144.483 0.000 <frozen posixpath>:71(join)
150316997 9.266 0.000 9.266 0.000 {method 'add' of 'set' objects}
plus the high cumtime in create_test_serialisation
2 91.762 45.881 266.491 133.245 /home/nwatkins/.local/lib/python3.11/site-packages/mesonbuild/backend/backends.py:1087(create_test_serialisation)
strongly indicate all the time is spent in this loop: https://github.com/mesonbuild/meson/blob/b85ffbacb12701382da3404c9bd5aaf56e2c883f/mesonbuild/backend/backends.py#L1158-L1160
Which also explains why not using shared libraries makes things a lot faster.
I'd probably just stick a print(d, d.get_all_link_deps(), file=sys.stderr) in there and see if that tells us more.
Describe the bug
meson setup
takes 2.5 minutes for a shared library build, compared to 3 seconds for a static library build.This is
meson setup
step for a shared library build of a project taking nearly 2.5 minutes to complete.The same exact setup with static library configuration takes 3 seconds.
Looking at the strace output it seems that over 1 minute is spent repeating this:
Then there is a second phase of this same pattern later in the trace. Together that accounts for over 2 minutes.
To Reproduce
Upon request. This is potentially difficult for our private build, but also perhaps unnecessary if this is as simple as perhaps adding in a new CPU family?
Expected behavior
Fast setup step.
system parameters
Linux panda 6.1.6-200.fc37.x86_64 #1 SMP PREEMPT_DYNAMIC Sat Jan 14 16:55:06 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux