Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

After version 0.23 is unable to resolve symbols #2096

Closed
gipi opened this issue Oct 3, 2023 · 27 comments · Fixed by parca-dev/parca#3903
Closed

After version 0.23 is unable to resolve symbols #2096

gipi opened this issue Oct 3, 2023 · 27 comments · Fixed by parca-dev/parca#3903

Comments

@gipi
Copy link

gipi commented Oct 3, 2023

Describe the bug
previous versions resolved symbols correctly

To Reproduce
in our test environment I switched between the version 0.25 and 0.23 and the first it's not showing any simbol.

Also tried version 0.24 but it's the same as 0.25

Screenshots

you can see 0.25 (left) and 0.23 (right), by luck the flamegraphs are aligned with the version

image

Logs
no obvious error is coming out from the log (by the application and by ebpf)

Software (please complete the following information):

  • Parca Agent Version: [parca-agent --version] 0.25.1
  • Parca Server Version (if applicable): [parca --version] 0.19 (but it's the same for 0.18)

Workload (please complete the following information):

  • Runtime (if applicable):
  • Compiler (if applicable):

Environment (please complete the following information):

  • Linux Distribution: [cat /etc/*-release] rhel9
  • Linux Version: [uname -r] 5.14.0-162.6.1.el9_1.x86_64
  • Arch: [uname -m] x86_64
  • Kubernetes Version (if applicable): [kubectl --version]
  • Container Runtime (if applicable):

Additional context

@brancz
Copy link
Member

brancz commented Oct 3, 2023

Parca Server Version (if applicable): [parca --version] 0.9 (but it's the same for 0.8)

Sorry just to make sure, you meant v0.19 here, right?

@gipi
Copy link
Author

gipi commented Oct 3, 2023

yeah sorry :), I'll fix the report

@brancz
Copy link
Member

brancz commented Oct 3, 2023

The 0.23 version that works that you tried is 0.23.3?

@brancz
Copy link
Member

brancz commented Oct 3, 2023

Could you also turn on debug logging on the v0.25.1 agent and look for log lines that say failed to normalize address? A dump of metrics from the HTTP /metrics endpoint would be useful as well for troubleshooting.

@gipi
Copy link
Author

gipi commented Oct 3, 2023

I don't see any line with failed to normalize address (I enabled debug and I'm using the latest main).

The dump of /metrics it's the following

# HELP cache_evictions_total Total number of cache evictions.
# TYPE cache_evictions_total counter
cache_evictions_total{cache="cpu_map"} 0
cache_evictions_total{cache="debuginfo_find"} 0
cache_evictions_total{cache="debuginfo_hash"} 0
cache_evictions_total{cache="debuginfo_should_initiate"} 0
cache_evictions_total{cache="frame_pointer"} 0
cache_evictions_total{cache="jitdump_cache"} 0
cache_evictions_total{cache="label"} 35
cache_evictions_total{cache="label_provider"} 38
cache_evictions_total{cache="metadata_compiler"} 0
cache_evictions_total{cache="no_text_section_error_tracker"} 0
cache_evictions_total{cache="objectfile"} 0
cache_evictions_total{cache="objectfile_key"} 939
cache_evictions_total{cache="perf_map_cache"} 0
cache_evictions_total{cache="process_info"} 10
cache_evictions_total{cache="process_namespace"} 2
# HELP cache_load_duration_seconds Total time spent loading cache.
# TYPE cache_load_duration_seconds histogram
cache_load_duration_seconds_bucket{cache="process_namespace",le="+Inf"} 282
cache_load_duration_seconds_sum{cache="process_namespace"} 0.010164184999999997
cache_load_duration_seconds_count{cache="process_namespace"} 282
# HELP cache_load_total Total number of successful cache loads.
# TYPE cache_load_total counter
cache_load_total{cache="process_namespace",result="success"} 282
# HELP cache_requests_total Total number of cache requests.
# TYPE cache_requests_total counter
cache_requests_total{cache="cpu_map",result="hit"} 8
cache_requests_total{cache="cpu_map",result="miss"} 13
cache_requests_total{cache="debuginfo_find",result="hit"} 0
cache_requests_total{cache="debuginfo_find",result="miss"} 0
cache_requests_total{cache="debuginfo_hash",result="hit"} 0
cache_requests_total{cache="debuginfo_hash",result="miss"} 0
cache_requests_total{cache="debuginfo_should_initiate",result="hit"} 12259
cache_requests_total{cache="debuginfo_should_initiate",result="miss"} 41
cache_requests_total{cache="frame_pointer",result="hit"} 20
cache_requests_total{cache="frame_pointer",result="miss"} 1
cache_requests_total{cache="jitdump_cache",result="hit"} 0
cache_requests_total{cache="jitdump_cache",result="miss"} 0
cache_requests_total{cache="label",result="hit"} 131
cache_requests_total{cache="label",result="miss"} 285
cache_requests_total{cache="label_provider",result="hit"} 228
cache_requests_total{cache="label_provider",result="miss"} 1128
cache_requests_total{cache="metadata_compiler",result="hit"} 59
cache_requests_total{cache="metadata_compiler",result="miss"} 140
cache_requests_total{cache="no_text_section_error_tracker",result="hit"} 0
cache_requests_total{cache="no_text_section_error_tracker",result="miss"} 0
cache_requests_total{cache="objectfile",result="hit"} 1111
cache_requests_total{cache="objectfile",result="miss"} 175
cache_requests_total{cache="objectfile_key",result="hit"} 158
cache_requests_total{cache="objectfile_key",result="miss"} 1072
cache_requests_total{cache="perf_map_cache",result="hit"} 0
cache_requests_total{cache="perf_map_cache",result="miss"} 0
cache_requests_total{cache="process_info",result="hit"} 132
cache_requests_total{cache="process_info",result="miss"} 5
cache_requests_total{cache="process_namespace",result="hit"} 2
cache_requests_total{cache="process_namespace",result="miss"} 280
# HELP go_build_info Build information about the main Go module.
# TYPE go_build_info gauge
go_build_info{checksum="",path="github.com/parca-dev/parca-agent",version="(devel)"} 1
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 6.6205e-05
go_gc_duration_seconds{quantile="0.25"} 7.4168e-05
go_gc_duration_seconds{quantile="0.5"} 0.000103082
go_gc_duration_seconds{quantile="0.75"} 0.000142608
go_gc_duration_seconds{quantile="1"} 0.004457483
go_gc_duration_seconds_sum 0.006430339
go_gc_duration_seconds_count 18
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 52
# HELP go_info Information about the Go environment.
# TYPE go_info gauge
go_info{version="go1.21.1"} 1
# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use.
# TYPE go_memstats_alloc_bytes gauge
go_memstats_alloc_bytes 2.5647232e+07
# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed.
# TYPE go_memstats_alloc_bytes_total counter
go_memstats_alloc_bytes_total 2.28632608e+08
# HELP go_memstats_buck_hash_sys_bytes Number of bytes used by the profiling bucket hash table.
# TYPE go_memstats_buck_hash_sys_bytes gauge
go_memstats_buck_hash_sys_bytes 1.50148e+06
# HELP go_memstats_frees_total Total number of frees.
# TYPE go_memstats_frees_total counter
go_memstats_frees_total 1.867563e+06
# HELP go_memstats_gc_sys_bytes Number of bytes used for garbage collection system metadata.
# TYPE go_memstats_gc_sys_bytes gauge
go_memstats_gc_sys_bytes 5.128392e+06
# HELP go_memstats_heap_alloc_bytes Number of heap bytes allocated and still in use.
# TYPE go_memstats_heap_alloc_bytes gauge
go_memstats_heap_alloc_bytes 2.5647232e+07
# HELP go_memstats_heap_idle_bytes Number of heap bytes waiting to be used.
# TYPE go_memstats_heap_idle_bytes gauge
go_memstats_heap_idle_bytes 3.076096e+07
# HELP go_memstats_heap_inuse_bytes Number of heap bytes that are in use.
# TYPE go_memstats_heap_inuse_bytes gauge
go_memstats_heap_inuse_bytes 3.1203328e+07
# HELP go_memstats_heap_objects Number of allocated objects.
# TYPE go_memstats_heap_objects gauge
go_memstats_heap_objects 63509
# HELP go_memstats_heap_released_bytes Number of heap bytes released to OS.
# TYPE go_memstats_heap_released_bytes gauge
go_memstats_heap_released_bytes 2.4035328e+07
# HELP go_memstats_heap_sys_bytes Number of heap bytes obtained from system.
# TYPE go_memstats_heap_sys_bytes gauge
go_memstats_heap_sys_bytes 6.1964288e+07
# HELP go_memstats_last_gc_time_seconds Number of seconds since 1970 of last garbage collection.
# TYPE go_memstats_last_gc_time_seconds gauge
go_memstats_last_gc_time_seconds 1.6963560435129945e+09
# HELP go_memstats_lookups_total Total number of pointer lookups.
# TYPE go_memstats_lookups_total counter
go_memstats_lookups_total 0
# HELP go_memstats_mallocs_total Total number of mallocs.
# TYPE go_memstats_mallocs_total counter
go_memstats_mallocs_total 1.931072e+06
# HELP go_memstats_mcache_inuse_bytes Number of bytes in use by mcache structures.
# TYPE go_memstats_mcache_inuse_bytes gauge
go_memstats_mcache_inuse_bytes 9600
# HELP go_memstats_mcache_sys_bytes Number of bytes used for mcache structures obtained from system.
# TYPE go_memstats_mcache_sys_bytes gauge
go_memstats_mcache_sys_bytes 15600
# HELP go_memstats_mspan_inuse_bytes Number of bytes in use by mspan structures.
# TYPE go_memstats_mspan_inuse_bytes gauge
go_memstats_mspan_inuse_bytes 326424
# HELP go_memstats_mspan_sys_bytes Number of bytes used for mspan structures obtained from system.
# TYPE go_memstats_mspan_sys_bytes gauge
go_memstats_mspan_sys_bytes 505176
# HELP go_memstats_next_gc_bytes Number of heap bytes when next garbage collection will take place.
# TYPE go_memstats_next_gc_bytes gauge
go_memstats_next_gc_bytes 4.2156816e+07
# HELP go_memstats_other_sys_bytes Number of bytes used for other system allocations.
# TYPE go_memstats_other_sys_bytes gauge
go_memstats_other_sys_bytes 1.47272e+06
# HELP go_memstats_stack_inuse_bytes Number of bytes in use by the stack allocator.
# TYPE go_memstats_stack_inuse_bytes gauge
go_memstats_stack_inuse_bytes 950272
# HELP go_memstats_stack_sys_bytes Number of bytes obtained from system for stack allocator.
# TYPE go_memstats_stack_sys_bytes gauge
go_memstats_stack_sys_bytes 950272
# HELP go_memstats_sys_bytes Number of bytes obtained from system.
# TYPE go_memstats_sys_bytes gauge
go_memstats_sys_bytes 7.1537928e+07
# HELP go_threads Number of OS threads created.
# TYPE go_threads gauge
go_threads 15
# HELP grpc_client_handled_total Total number of RPCs completed by the client, regardless of success or failure.
# TYPE grpc_client_handled_total counter
grpc_client_handled_total{grpc_code="OK",grpc_method="ShouldInitiateUpload",grpc_service="parca.debuginfo.v1alpha1.DebuginfoService",grpc_type="unary"} 41
grpc_client_handled_total{grpc_code="OK",grpc_method="WriteRaw",grpc_service="parca.profilestore.v1alpha1.ProfileStoreService",grpc_type="unary"} 13
# HELP grpc_client_handling_seconds Histogram of response latency (seconds) of the gRPC until it is finished by the application.
# TYPE grpc_client_handling_seconds histogram
grpc_client_handling_seconds_bucket{grpc_method="ShouldInitiateUpload",grpc_service="parca.debuginfo.v1alpha1.DebuginfoService",grpc_type="unary",le="+Inf"} 41
grpc_client_handling_seconds_sum{grpc_method="ShouldInitiateUpload",grpc_service="parca.debuginfo.v1alpha1.DebuginfoService",grpc_type="unary"} 0.1257434
grpc_client_handling_seconds_count{grpc_method="ShouldInitiateUpload",grpc_service="parca.debuginfo.v1alpha1.DebuginfoService",grpc_type="unary"} 41
grpc_client_handling_seconds_bucket{grpc_method="WriteRaw",grpc_service="parca.profilestore.v1alpha1.ProfileStoreService",grpc_type="unary",le="+Inf"} 13
grpc_client_handling_seconds_sum{grpc_method="WriteRaw",grpc_service="parca.profilestore.v1alpha1.ProfileStoreService",grpc_type="unary"} 1.216557526
grpc_client_handling_seconds_count{grpc_method="WriteRaw",grpc_service="parca.profilestore.v1alpha1.ProfileStoreService",grpc_type="unary"} 13
# HELP grpc_client_msg_received_total Total number of RPC stream messages received by the client.
# TYPE grpc_client_msg_received_total counter
grpc_client_msg_received_total{grpc_method="ShouldInitiateUpload",grpc_service="parca.debuginfo.v1alpha1.DebuginfoService",grpc_type="unary"} 41
grpc_client_msg_received_total{grpc_method="WriteRaw",grpc_service="parca.profilestore.v1alpha1.ProfileStoreService",grpc_type="unary"} 13
# HELP grpc_client_msg_sent_total Total number of gRPC stream messages sent by the client.
# TYPE grpc_client_msg_sent_total counter
grpc_client_msg_sent_total{grpc_method="ShouldInitiateUpload",grpc_service="parca.debuginfo.v1alpha1.DebuginfoService",grpc_type="unary"} 41
grpc_client_msg_sent_total{grpc_method="WriteRaw",grpc_service="parca.profilestore.v1alpha1.ProfileStoreService",grpc_type="unary"} 13
# HELP grpc_client_started_total Total number of RPCs started on the client.
# TYPE grpc_client_started_total counter
grpc_client_started_total{grpc_method="ShouldInitiateUpload",grpc_service="parca.debuginfo.v1alpha1.DebuginfoService",grpc_type="unary"} 41
grpc_client_started_total{grpc_method="WriteRaw",grpc_service="parca.profilestore.v1alpha1.ProfileStoreService",grpc_type="unary"} 13
# HELP http_client_in_flight_requests A gauge of in-flight requests.
# TYPE http_client_in_flight_requests gauge
http_client_in_flight_requests 0
# HELP parca_agent_batch_writer_latency_seconds Histogram of overall latency when sending WriteRaw gRPC request with retries
# TYPE parca_agent_batch_writer_latency_seconds histogram
parca_agent_batch_writer_latency_seconds_bucket{le="+Inf"} 13
parca_agent_batch_writer_latency_seconds_sum 1.219160328
parca_agent_batch_writer_latency_seconds_count 13
# HELP parca_agent_batch_writer_retries_total Total number of retries when sending WriteRaw gRPC request.
# TYPE parca_agent_batch_writer_retries_total counter
parca_agent_batch_writer_retries_total 0
# HELP parca_agent_bpf_map_key_size Key size for BPF map
# TYPE parca_agent_bpf_map_key_size gauge
parca_agent_bpf_map_key_size{bpf_map_name="debug_pids"} 4
parca_agent_bpf_map_key_size{bpf_map_name="dwarf_stack_traces"} 4
parca_agent_bpf_map_key_size{bpf_map_name="events"} 4
parca_agent_bpf_map_key_size{bpf_map_name="events_count"} 8
parca_agent_bpf_map_key_size{bpf_map_name="heap"} 4
parca_agent_bpf_map_key_size{bpf_map_name="interpreter_stack_traces"} 4
parca_agent_bpf_map_key_size{bpf_map_name="parca_na.rodata"} 4
parca_agent_bpf_map_key_size{bpf_map_name="percpu_stats"} 4
parca_agent_bpf_map_key_size{bpf_map_name="process_info"} 4
parca_agent_bpf_map_key_size{bpf_map_name="programs"} 4
parca_agent_bpf_map_key_size{bpf_map_name="stack_counts"} 24
parca_agent_bpf_map_key_size{bpf_map_name="stack_traces"} 4
parca_agent_bpf_map_key_size{bpf_map_name="symbol_index_storage"} 4
parca_agent_bpf_map_key_size{bpf_map_name="symbol_table"} 228
parca_agent_bpf_map_key_size{bpf_map_name="unwind_info_chunks"} 8
parca_agent_bpf_map_key_size{bpf_map_name="unwind_tables"} 8
# HELP parca_agent_bpf_map_max_entries Maximum entries in BPF map
# TYPE parca_agent_bpf_map_max_entries gauge
parca_agent_bpf_map_max_entries{bpf_map_name="debug_pids"} 5000
parca_agent_bpf_map_max_entries{bpf_map_name="dwarf_stack_traces"} 64000
parca_agent_bpf_map_max_entries{bpf_map_name="events"} 8192
parca_agent_bpf_map_max_entries{bpf_map_name="events_count"} 5000
parca_agent_bpf_map_max_entries{bpf_map_name="heap"} 1
parca_agent_bpf_map_max_entries{bpf_map_name="interpreter_stack_traces"} 10240
parca_agent_bpf_map_max_entries{bpf_map_name="parca_na.rodata"} 1
parca_agent_bpf_map_max_entries{bpf_map_name="percpu_stats"} 1
parca_agent_bpf_map_max_entries{bpf_map_name="process_info"} 5000
parca_agent_bpf_map_max_entries{bpf_map_name="programs"} 3
parca_agent_bpf_map_max_entries{bpf_map_name="stack_counts"} 10240
parca_agent_bpf_map_max_entries{bpf_map_name="stack_traces"} 64000
parca_agent_bpf_map_max_entries{bpf_map_name="symbol_index_storage"} 1
parca_agent_bpf_map_max_entries{bpf_map_name="symbol_table"} 1
parca_agent_bpf_map_max_entries{bpf_map_name="unwind_info_chunks"} 5000
parca_agent_bpf_map_max_entries{bpf_map_name="unwind_tables"} 50
# HELP parca_agent_bpf_map_memlock Memlock value held by BPF map
# TYPE parca_agent_bpf_map_memlock gauge
parca_agent_bpf_map_memlock{bpf_map_name="debug_pids"} 40960
parca_agent_bpf_map_memlock{bpf_map_name="dwarf_stack_traces"} 6.6048e+07
parca_agent_bpf_map_memlock{bpf_map_name="events"} 65536
parca_agent_bpf_map_memlock{bpf_map_name="events_count"} 81920
parca_agent_bpf_map_memlock{bpf_map_name="heap"} 12288
parca_agent_bpf_map_memlock{bpf_map_name="interpreter_stack_traces"} 1.056768e+07
parca_agent_bpf_map_memlock{bpf_map_name="parca_na.rodata"} 4096
parca_agent_bpf_map_memlock{bpf_map_name="percpu_stats"} 4096
parca_agent_bpf_map_memlock{bpf_map_name="process_info"} 5.0163712e+07
parca_agent_bpf_map_memlock{bpf_map_name="programs"} 4096
parca_agent_bpf_map_memlock{bpf_map_name="stack_counts"} 327680
parca_agent_bpf_map_memlock{bpf_map_name="stack_traces"} 6.5536e+07
parca_agent_bpf_map_memlock{bpf_map_name="symbol_index_storage"} 4096
parca_agent_bpf_map_memlock{bpf_map_name="symbol_table"} 4096
parca_agent_bpf_map_memlock{bpf_map_name="unwind_info_chunks"} 6.0416e+06
parca_agent_bpf_map_memlock{bpf_map_name="unwind_tables"} 1.750016e+08
# HELP parca_agent_bpf_map_value_size Value size BPF map
# TYPE parca_agent_bpf_map_value_size gauge
parca_agent_bpf_map_value_size{bpf_map_name="debug_pids"} 1
parca_agent_bpf_map_value_size{bpf_map_name="dwarf_stack_traces"} 1024
parca_agent_bpf_map_value_size{bpf_map_name="events"} 4
parca_agent_bpf_map_value_size{bpf_map_name="events_count"} 4
parca_agent_bpf_map_value_size{bpf_map_name="heap"} 1096
parca_agent_bpf_map_value_size{bpf_map_name="interpreter_stack_traces"} 1024
parca_agent_bpf_map_value_size{bpf_map_name="parca_na.rodata"} 3501
parca_agent_bpf_map_value_size{bpf_map_name="percpu_stats"} 136
parca_agent_bpf_map_value_size{bpf_map_name="process_info"} 10024
parca_agent_bpf_map_value_size{bpf_map_name="programs"} 4
parca_agent_bpf_map_value_size{bpf_map_name="stack_counts"} 8
parca_agent_bpf_map_value_size{bpf_map_name="stack_traces"} 1016
parca_agent_bpf_map_value_size{bpf_map_name="symbol_index_storage"} 8
parca_agent_bpf_map_value_size{bpf_map_name="symbol_table"} 4
parca_agent_bpf_map_value_size{bpf_map_name="unwind_info_chunks"} 1200
parca_agent_bpf_map_value_size{bpf_map_name="unwind_tables"} 3.5e+06
# HELP parca_agent_debuginfo_extract_duration_seconds Total time spent extracting debuginfo.
# TYPE parca_agent_debuginfo_extract_duration_seconds histogram
parca_agent_debuginfo_extract_duration_seconds_bucket{le="+Inf"} 0
parca_agent_debuginfo_extract_duration_seconds_sum 0
parca_agent_debuginfo_extract_duration_seconds_count 0
# HELP parca_agent_debuginfo_extracted_total Total number of debug information extracted.
# TYPE parca_agent_debuginfo_extracted_total counter
parca_agent_debuginfo_extracted_total{result="fail"} 0
parca_agent_debuginfo_extracted_total{result="success"} 0
# HELP parca_agent_debuginfo_find_duration_seconds Total time spent finding debuginfo.
# TYPE parca_agent_debuginfo_find_duration_seconds histogram
parca_agent_debuginfo_find_duration_seconds_bucket{le="+Inf"} 0
parca_agent_debuginfo_find_duration_seconds_sum 0
parca_agent_debuginfo_find_duration_seconds_count 0
# HELP parca_agent_debuginfo_found_total Total number of debug information found.
# TYPE parca_agent_debuginfo_found_total counter
parca_agent_debuginfo_found_total{result="fail"} 0
parca_agent_debuginfo_found_total{result="success"} 0
# HELP parca_agent_debuginfo_upload_attempts_total Total number of actual attempts to upload debuginfo.
# TYPE parca_agent_debuginfo_upload_attempts_total counter
parca_agent_debuginfo_upload_attempts_total 0
# HELP parca_agent_debuginfo_upload_duration_seconds Total time spent loading cache.
# TYPE parca_agent_debuginfo_upload_duration_seconds histogram
parca_agent_debuginfo_upload_duration_seconds_bucket{le="+Inf"} 0
parca_agent_debuginfo_upload_duration_seconds_sum 0
parca_agent_debuginfo_upload_duration_seconds_count 0
# HELP parca_agent_debuginfo_upload_inflight_requests Total number of debuginfo uploads in flight.
# TYPE parca_agent_debuginfo_upload_inflight_requests gauge
parca_agent_debuginfo_upload_inflight_requests 0
# HELP parca_agent_debuginfo_upload_initiated_total Total number of debuginfo uploads initiated.
# TYPE parca_agent_debuginfo_upload_initiated_total counter
parca_agent_debuginfo_upload_initiated_total 0
# HELP parca_agent_debuginfo_upload_request_wait_duration_seconds Total time spent waiting for upload.
# TYPE parca_agent_debuginfo_upload_request_wait_duration_seconds histogram
parca_agent_debuginfo_upload_request_wait_duration_seconds_bucket{le="+Inf"} 0
parca_agent_debuginfo_upload_request_wait_duration_seconds_sum 0
parca_agent_debuginfo_upload_request_wait_duration_seconds_count 0
# HELP parca_agent_debuginfo_upload_requests_total Total number of requests to upload debuginfo.
# TYPE parca_agent_debuginfo_upload_requests_total counter
parca_agent_debuginfo_upload_requests_total 0
# HELP parca_agent_debuginfo_uploaded_total Number of debuginfo successfully uploaded
# TYPE parca_agent_debuginfo_uploaded_total counter
parca_agent_debuginfo_uploaded_total{result="fail"} 0
parca_agent_debuginfo_uploaded_total{result="shared"} 0
parca_agent_debuginfo_uploaded_total{result="success"} 0
# HELP parca_agent_executable_info_extraction_total Total number of base calculation attempts by stage.
# TYPE parca_agent_executable_info_extraction_total counter
parca_agent_executable_info_extraction_total{result="error",stage="addr"} 0
parca_agent_executable_info_extraction_total{result="success",stage="addr"} 291
# HELP parca_agent_native_unwinder_error_total There was an error while unwinding the stack.
# TYPE parca_agent_native_unwinder_error_total counter
parca_agent_native_unwinder_error_total{reason="catchall"} 0
parca_agent_native_unwinder_error_total{reason="frame_pointer_action"} 0
parca_agent_native_unwinder_error_total{reason="jit_mixed_mode_disabled"} 0
parca_agent_native_unwinder_error_total{reason="jit_unupdated_mapping"} 0
parca_agent_native_unwinder_error_total{reason="pc_not_covered"} 0
parca_agent_native_unwinder_error_total{reason="pc_not_covered_jit"} 0
parca_agent_native_unwinder_error_total{reason="should_never_happen"} 0
parca_agent_native_unwinder_error_total{reason="truncated"} 2
parca_agent_native_unwinder_error_total{reason="unsupported_cfa_register"} 0
parca_agent_native_unwinder_error_total{reason="unsupported_expression"} 0
# HELP parca_agent_native_unwinder_samples_total Total samples.
# TYPE parca_agent_native_unwinder_samples_total counter
parca_agent_native_unwinder_samples_total{unwinder="dwarf"} 1853
# HELP parca_agent_native_unwinder_success_total Samples that unwound successfully reaching the bottom frame.
# TYPE parca_agent_native_unwinder_success_total counter
parca_agent_native_unwinder_success_total{unwinder="dwarf"} 1851
parca_agent_native_unwinder_success_total{unwinder="dwarf_reach_bottom"} 1851
parca_agent_native_unwinder_success_total{unwinder="dwarf_to_jit"} 0
parca_agent_native_unwinder_success_total{unwinder="jit_frame"} 0
parca_agent_native_unwinder_success_total{unwinder="jit_reach_bottom"} 0
parca_agent_native_unwinder_success_total{unwinder="jit_to_dwarf"} 0
# HELP parca_agent_objectfile_close_attempts_total Total number of object file attempts to close.
# TYPE parca_agent_objectfile_close_attempts_total counter
parca_agent_objectfile_close_attempts_total 0
# HELP parca_agent_objectfile_closed_total Total number of object file close operations.
# TYPE parca_agent_objectfile_closed_total counter
parca_agent_objectfile_closed_total{result="error"} 0
parca_agent_objectfile_closed_total{result="success"} 0
# HELP parca_agent_objectfile_kept_open_duration_seconds Duration of object files kept open.
# TYPE parca_agent_objectfile_kept_open_duration_seconds histogram
parca_agent_objectfile_kept_open_duration_seconds_bucket{le="+Inf"} 0
parca_agent_objectfile_kept_open_duration_seconds_sum 0
parca_agent_objectfile_kept_open_duration_seconds_count 0
# HELP parca_agent_objectfile_open Total number of object files open.
# TYPE parca_agent_objectfile_open gauge
parca_agent_objectfile_open 87
# HELP parca_agent_objectfile_open_errors_total Total number of object file open errors.
# TYPE parca_agent_objectfile_open_errors_total counter
parca_agent_objectfile_open_errors_total{type="build_id"} 0
parca_agent_objectfile_open_errors_total{type="not_elf"} 0
parca_agent_objectfile_open_errors_total{type="not_found"} 32
parca_agent_objectfile_open_errors_total{type="open_unknown"} 0
parca_agent_objectfile_open_errors_total{type="rewind"} 0
parca_agent_objectfile_open_errors_total{type="stat"} 0
# HELP parca_agent_objectfile_opened_total Total number of object file attempts to open.
# TYPE parca_agent_objectfile_opened_total counter
parca_agent_objectfile_opened_total{result="error"} 32
parca_agent_objectfile_opened_total{result="shared"} 1111
parca_agent_objectfile_opened_total{result="success"} 87
# HELP parca_agent_process_info_fetch_attempts_total Total number of debug information load attempts.
# TYPE parca_agent_process_info_fetch_attempts_total counter
parca_agent_process_info_fetch_attempts_total 294
# HELP parca_agent_process_info_fetch_duration_seconds Duration of debug information loads.
# TYPE parca_agent_process_info_fetch_duration_seconds histogram
parca_agent_process_info_fetch_duration_seconds_bucket{le="+Inf"} 19
parca_agent_process_info_fetch_duration_seconds_sum 0.012334338000000002
parca_agent_process_info_fetch_duration_seconds_count 19
# HELP parca_agent_process_info_fetched_total Total number of debug information loads.
# TYPE parca_agent_process_info_fetched_total counter
parca_agent_process_info_fetched_total{result="fail"} 0
parca_agent_process_info_fetched_total{result="shared"} 0
parca_agent_process_info_fetched_total{result="success"} 19
# HELP parca_agent_process_info_get_total Total number of debug information gets.
# TYPE parca_agent_process_info_get_total counter
parca_agent_process_info_get_total 137
# HELP parca_agent_process_info_upload_errors_total Total number of debug information upload errors.
# TYPE parca_agent_process_info_upload_errors_total counter
parca_agent_process_info_upload_errors_total{type="already_closed"} 0
parca_agent_process_info_upload_errors_total{type="should_initiate_upload"} 0
parca_agent_process_info_upload_errors_total{type="unknown"} 0
# HELP parca_agent_profiler_attempt_duration_seconds The duration it takes to collect profiles from the BPF maps
# TYPE parca_agent_profiler_attempt_duration_seconds histogram
parca_agent_profiler_attempt_duration_seconds_bucket{type="cpu",le="+Inf"} 13
parca_agent_profiler_attempt_duration_seconds_sum{type="cpu"} 0.09734596899999999
parca_agent_profiler_attempt_duration_seconds_count{type="cpu"} 13
# HELP parca_agent_profiler_attempts_total Total number of attempts to obtain a profile.
# TYPE parca_agent_profiler_attempts_total counter
parca_agent_profiler_attempts_total{status="error",type="cpu"} 0
parca_agent_profiler_attempts_total{status="success",type="cpu"} 13
# HELP parca_agent_profiler_bpf_maps_clean_errors_total Number of errors cleaning BPF maps
# TYPE parca_agent_profiler_bpf_maps_clean_errors_total counter
parca_agent_profiler_bpf_maps_clean_errors_total{map="dwarf_stack_traces",type="cpu"} 0
parca_agent_profiler_bpf_maps_clean_errors_total{map="process_info",type="cpu"} 0
parca_agent_profiler_bpf_maps_clean_errors_total{map="stack_counts",type="cpu"} 0
parca_agent_profiler_bpf_maps_clean_errors_total{map="stack_traces",type="cpu"} 0
parca_agent_profiler_bpf_maps_clean_errors_total{map="unwind_info_chunks",type="cpu"} 0
# HELP parca_agent_profiler_bpf_maps_refresh_proc_info_errors_total Number of errors refreshing process info
# TYPE parca_agent_profiler_bpf_maps_refresh_proc_info_errors_total counter
parca_agent_profiler_bpf_maps_refresh_proc_info_errors_total{error="hash",type="cpu"} 0
parca_agent_profiler_bpf_maps_refresh_proc_info_errors_total{error="unwind_table_add",type="cpu"} 0
# HELP parca_agent_profiler_events_lost_total Total number of profile events lost.
# TYPE parca_agent_profiler_events_lost_total counter
parca_agent_profiler_events_lost_total{type="cpu"} 0
# HELP parca_agent_profiler_events_received_total Total number of profile events received.
# TYPE parca_agent_profiler_events_received_total counter
parca_agent_profiler_events_received_total{event="empty",type="cpu"} 0
parca_agent_profiler_events_received_total{event="process_mappings",type="cpu"} 274
parca_agent_profiler_events_received_total{event="refresh_proc_info",type="cpu"} 0
parca_agent_profiler_events_received_total{event="unwind_info",type="cpu"} 21
# HELP parca_agent_profiler_frame_drop_total Number of addresses dropped from the profile.
# TYPE parca_agent_profiler_frame_drop_total counter
parca_agent_profiler_frame_drop_total{reason="mapping_nil",type="cpu"} 5
# HELP parca_agent_profiler_map_read_attempts_total Number of attempts to read from the BPF maps.
# TYPE parca_agent_profiler_map_read_attempts_total counter
parca_agent_profiler_map_read_attempts_total{action="dwarf_unwind",stack="user",status="error",type="cpu"} 0
parca_agent_profiler_map_read_attempts_total{action="dwarf_unwind",stack="user",status="failed",type="cpu"} 0
parca_agent_profiler_map_read_attempts_total{action="dwarf_unwind",stack="user",status="missing",type="cpu"} 0
parca_agent_profiler_map_read_attempts_total{action="dwarf_unwind",stack="user",status="success",type="cpu"} 1830
parca_agent_profiler_map_read_attempts_total{action="kernel_unwind",stack="kernel",status="error",type="cpu"} 0
parca_agent_profiler_map_read_attempts_total{action="kernel_unwind",stack="kernel",status="failed",type="cpu"} 0
parca_agent_profiler_map_read_attempts_total{action="kernel_unwind",stack="kernel",status="missing",type="cpu"} 1522
parca_agent_profiler_map_read_attempts_total{action="kernel_unwind",stack="kernel",status="success",type="cpu"} 312
parca_agent_profiler_map_read_attempts_total{action="kernel_unwind",stack="user",status="error",type="cpu"} 0
parca_agent_profiler_map_read_attempts_total{action="kernel_unwind",stack="user",status="failed",type="cpu"} 0
parca_agent_profiler_map_read_attempts_total{action="kernel_unwind",stack="user",status="missing",type="cpu"} 0
parca_agent_profiler_map_read_attempts_total{action="kernel_unwind",stack="user",status="success",type="cpu"} 4
# HELP parca_agent_profiler_profiles_drop_total Number of profiles dropped from the profile (one profile represents 1 process in a profiling duration).
# TYPE parca_agent_profiler_profiles_drop_total counter
parca_agent_profiler_profiles_drop_total{reason="process_info",type="cpu"} 0
# HELP parca_agent_profiler_stack_drop_total Total number of stacks dropped from the profile.
# TYPE parca_agent_profiler_stack_drop_total counter
parca_agent_profiler_stack_drop_total{reason="iterator",type="cpu"} 0
parca_agent_profiler_stack_drop_total{reason="read_kernel_stack",type="cpu"} 1522
parca_agent_profiler_stack_drop_total{reason="read_stack_count",type="cpu"} 0
parca_agent_profiler_stack_drop_total{reason="read_stack_count_zero",type="cpu"} 0
parca_agent_profiler_stack_drop_total{reason="read_stack_key",type="cpu"} 0
parca_agent_profiler_stack_drop_total{reason="read_user_stack_with_dwarf",type="cpu"} 0
parca_agent_profiler_stack_drop_total{reason="read_user_stack_with_frame_pointer",type="cpu"} 0
# HELP parca_agent_profiler_unwind_table_add_errors_total Total number of errors adding entries to the unwind table.
# TYPE parca_agent_profiler_unwind_table_add_errors_total counter
parca_agent_profiler_unwind_table_add_errors_total{error="need_more_rounds",type="cpu"} 0
parca_agent_profiler_unwind_table_add_errors_total{error="other",type="cpu"} 0
parca_agent_profiler_unwind_table_add_errors_total{error="procfs_race",type="cpu"} 0
parca_agent_profiler_unwind_table_add_errors_total{error="too_many_mappings",type="cpu"} 0
# HELP parca_agent_profiler_unwind_table_persist_errors_total Total number of errors persisting the unwind table.
# TYPE parca_agent_profiler_unwind_table_persist_errors_total counter
parca_agent_profiler_unwind_table_persist_errors_total{error="need_more_rounds",type="cpu"} 0
parca_agent_profiler_unwind_table_persist_errors_total{error="other",type="cpu"} 0
# HELP parca_agent_profiler_vdso_lookup_errors_total Total number of errors while looking up vdso symbols.
# TYPE parca_agent_profiler_vdso_lookup_errors_total counter
parca_agent_profiler_vdso_lookup_errors_total{type="normalization"} 0
parca_agent_profiler_vdso_lookup_errors_total{type="not_found"} 0
# HELP parca_agent_profiler_vdso_lookup_total Total number of operations of looking up vdso symbols.
# TYPE parca_agent_profiler_vdso_lookup_total counter
parca_agent_profiler_vdso_lookup_total{result="error"} 0
parca_agent_profiler_vdso_lookup_total{result="success"} 0
# HELP parca_agent_sd_discovered_targets Current number of discovered targets.
# TYPE parca_agent_sd_discovered_targets gauge
parca_agent_sd_discovered_targets{config="all"} 133
# HELP parca_agent_sd_failed_configs Current number of service discovery configurations that failed to load.
# TYPE parca_agent_sd_failed_configs gauge
parca_agent_sd_failed_configs 1
# HELP parca_agent_sd_received_updates_total Total number of update events received from the SD providers.
# TYPE parca_agent_sd_received_updates_total counter
parca_agent_sd_received_updates_total 4
# HELP parca_agent_sd_updates_delayed_total Total number of update events that couldn't be sent immediately.
# TYPE parca_agent_sd_updates_delayed_total counter
parca_agent_sd_updates_delayed_total 0
# HELP parca_agent_sd_updates_total Total number of update events sent to the SD consumers.
# TYPE parca_agent_sd_updates_total counter
parca_agent_sd_updates_total 4
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
# TYPE process_cpu_seconds_total counter
process_cpu_seconds_total 4.49
# HELP process_max_fds Maximum number of open file descriptors.
# TYPE process_max_fds gauge
process_max_fds 524288
# HELP process_open_fds Number of open file descriptors.
# TYPE process_open_fds gauge
process_open_fds 320
# HELP process_resident_memory_bytes Resident memory size in bytes.
# TYPE process_resident_memory_bytes gauge
process_resident_memory_bytes 8.8276992e+07
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
# TYPE process_start_time_seconds gauge
process_start_time_seconds 1.69635591067e+09
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
# TYPE process_virtual_memory_bytes gauge
process_virtual_memory_bytes 2.306973696e+09
# HELP process_virtual_memory_max_bytes Maximum amount of virtual memory available in bytes.
# TYPE process_virtual_memory_max_bytes gauge
process_virtual_memory_max_bytes 1.8446744073709552e+19

@gipi
Copy link
Author

gipi commented Oct 3, 2023

The 0.23 version that works that you tried is 0.23.3?

yes

@gipi
Copy link
Author

gipi commented Oct 4, 2023

more information: the addresses seem wrong, attaching the debugger I see they don't correspond with the running process (a part for the least significant 3 nibbles): this is a couple of addresses from the UI of parca

image

meanwhile from the debugger

(gdb) bt
#0  0x00007f4b338ff76a in epoll_wait () from target:/lib64/libc.so.6
#1  0x00007f4b33aeba5d in io_loop_handler_run_internal (ioloop=0x55f6ee3a65b0) at ../lib/ioloop-epoll.c:183
#2  0x00007f4b33aebb94 in io_loop_handler_run (ioloop=0x55f6ee3a65b0) at ../lib/ioloop.c:789
#3  0x00007f4b33aebd70 in io_loop_run (ioloop=0x55f6ee3a65b0) at ../lib/ioloop.c:762
#4  0x00007f4b33a4ebe7 in master_service_run (service=0x55f6ee3a5eb0, callback=<optimized out>) 
#5  0x000055f6ec733ba6 in main (argc=<optimized out>, argv=<optimized out>) 

with some mappings

process 40401                                                                                                                      
Mapped address spaces:                                           
                                                                 
          Start Addr           End Addr       Size     Offset objfile
      0x55f6ec71e000     0x55f6ec72d000     0xf000        0x0 imap
      0x55f6ec72d000     0x55f6ec75b000    0x2e000     0xf000 imap                    
      0x55f6ec75b000     0x55f6ec76b000    0x10000    0x3d000 imap     
      0x55f6ec76b000     0x55f6ec76e000     0x3000    0x4c000 imap
      0x55f6ec76e000     0x55f6ec76f000     0x1000    0x4f000 imap

@gipi
Copy link
Author

gipi commented Oct 4, 2023

I'm trying with a very simple executable and If I patch with the following

@@ -232,13 +234,22 @@ func (c *Converter) Convert(ctx context.Context, rawData []profile.RawSample) (*
                                pprofSample.Location = append(pprofSample.Location, c.addJITDumpLocation(pprofMapping, addr, pprofMapping.File))
                        default:
                                ei := c.addExecutableInfo(processMapping, addr)
+                               level.Debug(c.logger).Log("msg",
+                                       "trying to normalize",
+                                       "addr", fmt.Sprintf("%x", addr),
+                                       "elf type", elf.Type(ei.ElfType),
+                                       "load segment", ei.LoadSegment,
+                                       "limit", fmt.Sprintf("%x", pprofMapping.Limit),
+                                       "offset", fmt.Sprintf("%x", pprofMapping.Offset),
+                               )
                                c.executableInfos[mappingIndex] = ei
-                               _, err := parcacol.NormalizeAddress(addr, ei, pprofMapping.Start, pprofMapping.Limit, pprofMapping.Offset)
+                               normalizedAddress, err := parcacol.NormalizeAddress(addr, ei, pprofMapping.Start, pprofMapping.Limit, pprofMapping.Offset)
                                if err != nil {
                                        level.Debug(c.logger).Log("msg", "failed to normalize address", "addr", addr, "err", err)
                                        failedToNormalize = true
                                        break
                                }
+                               level.Debug(c.logger).Log("msg", "normalized address", "addr", fmt.Sprintf("%x", normalizedAddress))
                                pprofSample.Location = append(pprofSample.Location, c.addAddrLocation(pprofMapping, addr))
                        }
                }

I obtain the following log

msg="trying to normalize" addr=40118d elftype=ET_EXEC loadsegment="offset:4096  vaddr:4198400" limit=402000 offset=1000    
msg="normalized address" addr=40118d                                                                                       
msg="trying to normalize" addr=7ffff7df1eb0 elftype=ET_DYN loadsegment="offset:163840  vaddr:163840" limit=7ffff7f4f000 offset=28000                                                                                                                                                                                                                                                                                                         
msg="normalized address" addr=3feb0                                                                                        
msg="trying to normalize" addr=7ffff7df1f60 elftype=ET_DYN loadsegment="offset:163840  vaddr:163840" limit=7ffff7f4f000 offset=28000                                                                                                                                                                                                                                                                                                         
msg="normalized address" addr=3ff60                                                                                         
msg="trying to normalize" addr=7ffff7e49887 elftype=ET_DYN loadsegment="offset:163840  vaddr:163840" limit=7ffff7f4f000 offset=28000                                                                                                                                                                                                                                                                                                         
msg="normalized address" addr=97887                                                                                        
msg="trying to normalize" addr=7ffff7e35276 elftype=ET_DYN loadsegment="offset:163840  vaddr:163840" limit=7ffff7f4f000 offset=28000                                                                                                                                                                                                                                                                                                          
msg="normalized address" addr=83276                                                                                        
msg="trying to normalize" addr=7ffff7e2147f elftype=ET_DYN loadsegment="offset:163840  vaddr:163840" limit=7ffff7f4f000 offset=28000                                                                                                                                                                                                                                                                                                         
msg="normalized address" addr=6f47f 

note that in this case the main it's resolved (the ET_EXEC one) but not the other.

I have a question, parcacol.NormalizeAddress() it's supposed only to check if it's possible to normalize the address? If my understanding it's correct we are sending to parca all the information for resolving itself the symbols, but are the addresses normalized?

@brancz
Copy link
Member

brancz commented Oct 4, 2023

The addresses are not normalized (anymore), we just send enough information for the backend to normalize.

@brancz
Copy link
Member

brancz commented Oct 4, 2023

Maybe we're not handling ET_DYN correctly on the backend (only v0.19 supports server-side normalization btw)?

Amazing debugging by the way! It would make a ton of sense that this is the culprit as this is exactly one of the things that changed from 0.23.3 to 0.24.

@gipi
Copy link
Author

gipi commented Oct 4, 2023

and the server how knows if the address is normalized or not?

@brancz
Copy link
Member

brancz commented Oct 4, 2023

The client sends whether the addresses are normalized, which Parca-Agent since 0.24 always sets to false.

@brancz
Copy link
Member

brancz commented Oct 4, 2023

bd65f33#diff-7276397f96515c11ca49f4f72de2237d63936ab985888a5a4fe07ccf8c371d42L124 always sets normalized to false (since it's the default value)

@brancz
Copy link
Member

brancz commented Oct 4, 2023

@brancz
Copy link
Member

brancz commented Oct 4, 2023

Do you have your example binary that you can share? That would make debugging on our side much easier. It's odd that we haven't noticed this with our customers who have long been on 0.24.0+ (though if it ends up being a backend bug then maybe not so surprising since symbolization is entirely different in Polar Signals Cloud).

@gipi
Copy link
Author

gipi commented Oct 4, 2023

sure, but I think whatever binary will work (zipped for uploading), in particular the problem it's in the libraries, main it's resolved correctly

# file /lib64/libc.so.6 
/lib64/libc.so.6: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=b439a356c78dfa4bd24c75a16f564540db2a30ad, for GNU/Linux 3.2.0, not stripped

imap.zip

@gipi
Copy link
Author

gipi commented Oct 4, 2023

Another update, with the debugger I see at the end of NormalizeMapping (take in mind that the line number is a little off since I added log lines everywhere)

(dlv) b
Breakpoint 4 set at 0x4799106 for github.com/parca-dev/parca/pkg/parcacol.(*MetastoreNormalizer).NormalizeMappings() ./pkg/parcacol/normalizer.go:300
(dlv) print mapInfos
[]github.com/parca-dev/parca/pkg/parcacol.mappingNormalizationInfo len: 7, cap: 7, [
        {
                id: "9cWusMs4FCsMeBZcQKxbJeoS5ALlDteGnZdmlKqjSRQ=",
                offset: 0,},
        {
                id: "G_khpQnUgAPTAuomydU46SB64fnCSaICaZC1aSrPGB8=",
                offset: 973081600000,},
        {
                id: "VdTdOPrDfQTjzjjUtoVW9vKhg1RDPfVU2B44aj9UiSQ=",
                offset: 9202282496,},
        {
                id: "aemI2hwOW8GP-LiC2Xl72DwX0Y0QZjRMeKmY4z_7cTE=",
                offset: 973077954560,},
        {
                id: "xhpTSDPoCwsaLpQ8VUKz1q2g_7eKd_JF9e4g1THb36k=",
                offset: 0,},
        {
                id: "3sdUUPQv2GQCHh5VO9ttzxUCWRgssFlYqwIBNb72xrc=",
                offset: 0,},
        {
                id: "Q-4s65JLQNqB1gBBNuTdvTUGWgHfgfkteSlUAxj8f9Y=",
                offset: 0,},
]

with for example 973081600000 it's the strange offset 0xe2902ee000 that I see in my flamegraph

@gipi
Copy link
Author

gipi commented Oct 4, 2023

What I don't understand is the concept of normalized mapping, with to respect to what is normalized?

@gipi
Copy link
Author

gipi commented Oct 5, 2023

with a position independent executable not even main it's resolved.

Were you able to reproduce from your side?

@brancz
Copy link
Member

brancz commented Oct 5, 2023

Sorry we had a big launch yesterday which ate up most of our time, I haven't found the time to reproduce yet, but we're gonna be on top of this today!

The mapping normalization is to account for address space layout randomization (ASLR), basically even if the layout is different between two processes on two different machines, if the same binaries were used we want to only save the mapping once. If that's the case though we need to normalize all addresses we store to the first layout we've ever observed.

Now that you say it though, not sure it can make a difference, but maybe we need to do the part where we normalize the address to the normalized mapping first, before we perform the second normalization which is to the start of the mapping and offset.

@brancz
Copy link
Member

brancz commented Oct 6, 2023

Ok I can also reproduce this with our PIE test binary.

@brancz
Copy link
Member

brancz commented Oct 6, 2023

I think I found at least one problem, we'll see if that fixes things.

@brancz
Copy link
Member

brancz commented Oct 6, 2023

Ok found it. There were two reasons why we might double normalize:

  1. Locations are potentially accessed multiple times because the same location object might be reused in multiple stack traces
  2. When locations are normalized to their base address the "second" normalization is incorrect to be applied because it will have already been normalized. And so we double normalized.

This all didn't matter with non-PIEs because all offsets are 0 therefore subtracting/adding 0s didn't make a difference.

Opened parca-dev/parca#3903 to fix

@brancz
Copy link
Member

brancz commented Oct 6, 2023

Can you test that and let me know if it works for you? If it does then I'll cut a patch release.

@gipi
Copy link
Author

gipi commented Oct 6, 2023

It seems to work, there is a couple of <unknown> and ? more than before but I don't really know if it's a problem (maybe some changes regarding visualization symbols in 0.19)

@brancz
Copy link
Member

brancz commented Oct 6, 2023

That should be fine, that just means that we couldn't symbolize, we'll be improving the symbolization quality over the next weeks and months. If some are symbolized that means normalization is done correctly again though.

Thank you so much for reporting this and bearing with us!

@gipi
Copy link
Author

gipi commented Oct 23, 2023

After having upgraded to 0.20 the problem with symbol resolution persists, there are a lot more of functions that are not resolved but I don't see a specific pattern.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants