GithubHelp home page GithubHelp logo

elastic / otel-profiling-agent Goto Github PK

View Code? Open in Web Editor NEW
2.0K 21.0 222.0 1.49 MB

The production-scale datacenter profiler (C/C++, Go, Rust, Python, Java, NodeJS, PHP, Ruby, Perl, ...)

License: Apache License 2.0

Dockerfile 0.12% Makefile 0.23% Go 83.41% C 14.69% Shell 0.26% Assembly 0.06% Python 0.62% Java 0.30% JavaScript 0.16% Perl 0.05% PHP 0.07% Ruby 0.03%
ebpf profiler

otel-profiling-agent's Introduction

Note

Please be aware that we currently won't merge 3rd party PRs because this repository is temporary. We are waiting for the decision of the OpenTelemetry technical commitee on the donation of this repository.

In case the donation gets accepted, this repository will move to the GitHub open-telemetry organization, which requires signing a different CLA. At that point we will start working on reviewing and merging 3rd party PRs.

Introduction

This repository implements a whole-system, cross-language profiler for Linux via eBPF. The repository serves as a staging space in the process of donating the agent to OpenTelementry.

Core features and strengths

  • Implements the experimental OTel profiling signal
  • Very low CPU and memory overhead (1% CPU and 250MB memory are our upper limits in testing and the agent typically manages to stay way below that)
  • Support for native C/C++ executables without the need for DWARF debug information (by leveraging .eh_frame data as described in US11604718B1)
  • Support profiling of system libraries without frame pointers and without debug symbols on the host.
  • Support for mixed stacktraces between runtimes - stacktraces go from Kernel space through unmodified system libraries all the way into high-level languages.
  • Support for native code (C/C++, Rust, Zig, Go, etc. without debug symbols on host)
  • Support for a broad set of HLLs (Hotspot JVM, Python, Ruby, PHP, Node.JS, V8, Perl), .NET is in preparation.
  • 100% non-intrusive: there's no need to load agents or libraries into the processes that are being profiled.
  • No need for any reconfiguration, instrumentation or restarts of HLL interpreters and VMs: the agent supports unwinding each of the supported languages in the default configuration.
  • ARM64 support for all unwinders except NodeJS.
  • Support for native inline frames, which provide insights into compiler optimizations and offer a higher precision of function call chains.

Building

Note

If you simply wish to take the agent for a spin with minimal effort, you can also immediately jump to the "Visualizing data locally" section, launch devfiler and follow the download links for agent binaries within its "Add data" dialogue.

The agent can be built without affecting your environment by using the provided make targets. You need to have docker installed, though. Builds on amd64 and arm64 architectures are supported.

The first step is to build the Docker image that contains the build environment:

make docker-image

Then, you can build the agent:

make agent

The resulting binary will be in the current directory as otel-profiling-agent.

Alternatively, you can build without Docker. Please see the Dockerfile for required dependencies.

After installing the dependencies, just run make to build.

Running

You can start the agent with the following command:

sudo ./otel-profiling-agent -collection-agent=127.0.0.1:11000 -disable-tls

The agent comes with a functional but work-in-progress / evolving implementation of the recently released OTel profiling signal.

The agent loads the eBPF program and its maps, starts unwinding and reports captured traces to the backend.

Visualizing data locally

We created a desktop application called "devfiler" that allows visualizing the profiling agent's output locally, making it very convenient for development use. devfiler spins up a local server that listens on 0.0.0.0:11000.

Screenshot of devfiler UI

To run it, simply download and unpack the archive from the following URL:

https://upload.elastic.co/d/0891b6a006b1ee8224e638d2454b967f7c1ac596110b5c149ac7c98107655d9b

Authentication token: a217abfdd7c438e9

The archive contains a build for each of the following platforms:

  • macOS (Intel)
  • macOS (Apple Silicon)
  • Linux AppImage (x86_64)
  • Linux AppImage (aarch64)

Note

devfiler is currently in an experimental preview stage.

macOS

This build of devfiler is currently not signed with a globally trusted Apple developer ID, but with a developer certificate. If you simply double-click the application, you'll run into an error. Instead of opening it with a double click, simply do a right-click on devfiler.app, then choose "Open". If you go this route, you'll instead be presented with the option to run it anyway.

Linux

The AppImages in the archive should run on any Linux distribution with a reasonably modern glibc and libgl installation. To run the application, simply extract the archive and then do:

./devfiler-appimage-$(uname -m).AppImage

Agent internals

The host agent is a Go application that is deployed to all machines customers wish to profile. It collects, processes and pushes observed stack traces and related meta-information to a backend collector.

Concepts

File IDs

A file ID uniquely identifies an executable, kernel or script language source file.

File IDs for native applications are created by taking the SHA256 checksum of a file's head, tail, and size, then truncating the hash digest to 16 bytes (128 bits):

Input  ← Concat(File[:4096], File[-4096:], BigEndianUInt64(Len(File)))
Digest ← SHA256(Input)
FileID ← Digest[:16]

File IDs for script and JIT languages are created in an interpreter-specific fashion.

File IDs for Linux kernels are calculated by taking the FNV128 hash of their GNU build ID.

Stack unwinding

Stack unwinding is the process of recovering the list of function calls that lead execution to the point in the program at which the profiler interrupted it.

How stacks are unwound varies depending on whether a thread is running native, JITed or interpreted code, but the basic idea is always the same: every language that supports arbitrarily nested function calls needs a way to keep track of which function it needs to return to after the current function completes. Our unwinder uses that same information to repeatedly determine the caller until we reach the thread's entry point.

In simplified pseudo-code:

pc ← interrupted_process.cpu.pc
sp ← interrupted_process.cpu.sp

while !is_entry_point(pc):
    file_id, start_addr, interp_type ← file_id_at_pc(pc)
    push_frame(interp_type, file_id, pc - start_addr)
    unwinder ← unwinder_for_interp(interp_type)
    pc, sp ← unwinder.next_frame(pc, sp)

Symbolization

Symbolization is the process of assigning source line information to the raw addresses extracted during stack unwinding.

For script and JIT languages that always have symbol information available on the customer machines, the host agent is responsible for symbolizing frames.

For native code the symbolization occurs in the backend. Stack frames are sent as file IDs and the offset within the file and the symbolization service is then responsible for assigning the correct function name, source file and lines in the background. Symbols for open-source software installed from OS package repos are pulled in from our global symbolization infrastructure and symbols for private executables can be manually uploaded by the customer.

The primary reason for doing native symbolization in the backend is that native executables in production will often be stripped. Asking the customer to deploy symbols to production would be both wasteful in terms of disk usage and also a major friction point in initial adoption.

Stack trace representation

We have two major representations for our stack traces.

The raw trace format produced by our BPF unwinders:

https://github.com/elastic/otel-profiling-agent/blob/0945fe6/host/host.go#L60-L66

The final format produced after additional processing in user-land:

https://github.com/elastic/otel-profiling-agent/blob/0945fe6/libpf/libpf.go#L458-L463

The two might look rather similar at first glance, but there are some important differences:

  • the BPF variant uses truncated 64-bit file IDs to save precious kernel memory
  • for interpreter frames the BPF variant uses the file ID and line number fields to store more or less arbitrary interpreter-specific data that is needed by the user-mode code to conduct symbolization

A third trace representation exists within our network protocol, but it essentially just a deduplicated, compressed representation of the user-land trace format.

Trace hashing

In profiling it is common to see the same trace many times. Traces can be up to 128 entries long, and repeatedly symbolizing and sending the same traces over the network would be very wasteful. We use trace hashing to avoid this. Different hashing schemes are used for the BPF and user-mode trace representations. Multiple 64 bit hashes can end up being mapped to the same 128 bit hash, but not vice-versa.

BPF trace hash (64 bit):

H(kernel_stack_id, frames_user, PID)

User-land trace hash (128 bit)

H(frames_user_kernel)

User-land sub-components

Tracer

The tracer is a central user-land component that loads and attaches our BPF programs to their corresponding BPF probes during startup and then continues to serve as the primary event pump for BPF <-> user-land communication. It further instantiates and owns other important subcomponents like the process manager.

Trace handler

The trace handler is responsible for converting traces from the BPF format to the user-space format. It receives raw traces tracer, converts them to the user-space format and then sends them on to the reporter. The majority of the conversion logic happens via a call into the process manager's ConvertTrace function.

Since converting and enriching BPF-format traces is not a cheap operation, the trace handler is also responsible for keeping a cache (mapping) of trace hashes: from 64bit BPF hash to the user-space 128bit hash.

Reporter

The reporter receives traces and trace counts in the user-mode format from the trace handler, converts them to the gRPC representation and then sends them out to a backend collector.

It also receives additional meta-information (such as metrics and host metadata) which it also converts and sends out to a backend collector over gRPC.

The reporter does not offer strong guarantees regarding reliability of network operations and may drop data at any point, an "eventual consistency" model.

Process manager

The process manager receives process creation/termination events from tracer and is responsible for making available any information to the BPF code that it needs to conduct unwinding. It maintains a map of the executables mapped into each process, loads stack unwinding deltas for native modules and creates interpreter handlers for each memory mapping that belongs to a supported language interpreter.

During trace conversion the process manager is further responsible for routing symbolization requests to the correct interpreter handlers.

Interpreter handlers

Each interpreted or JITed language that we support has a corresponding type that implements the interpreter handler interface. It is responsible for:

  • detecting the interpreter's version and structure layouts
  • placing information that the corresponding BPF interpreter unwinder needs into BPF maps
  • translating interpreter frames from the BPF format to the user-land format by symbolizing them

Stack delta provider

Unwinding the stack of native executables compiled without frame pointers requires stack deltas. These deltas are essentially a mapping from each PC in an executable to instructions describing how to find the caller and how to adjust the unwinder machine state in preparation of locating the next frame. Typically these instructions consist of a register that is used as a base address and an offset (delta) that needs to be added to it -- hence the name. The stack delta provider is responsible for analyzing executables and creating stack deltas for them.

For most native executables, we rely on the information present in .eh_frame. .eh_frame was originally meant only for C++ exception unwinding, but it has since been repurposed for stack unwinding in general. Even applications written in many other native languages like C, Zig or Rust will typically come with .eh_frame.

One important exception to this general pattern is Go. As of writing, Go executables do not come with .eh_frame sections unless they are built with CGo enabled. Even with CGo the .eh_frame section will only contain information for a small subset of functions that are either written in C/C++ or part of the CGo runtime. For Go executables we extract the stack delta information from the Go-specific section called .gopclntab. In-depth documentation on the format is available in a separate document).

BPF components

The BPF portion of the host agent implements the actual stack unwinding. It uses the eBPF virtual machine to execute our code directly in the Linux kernel. The components are implemented in BPF C and live in the otel-profiling-agent/support/ebpf directory.

Limitations

BPF programs must adhere to various restrictions imposed by the verifier. Many of these limitations are significantly relaxed in newer kernel versions, but we still have to stick to the old limits because we wish to continue supporting older kernels.

The minimum supported Linux kernel versions are

  • 4.19 for amd64/x86_64
  • 5.5 for arm64/aarch64

The most notable limitations are the following two:

  • 4096 instructions per program
    A single BPF program can consist of a maximum of 4096 instructions, otherwise older kernels will refuse to load it. Since BPF does not allow for loops, they instead need to be unrolled.
  • 32 tail-calls
    Linux allows BPF programs to do a tail-call to another BPF program. A tail call is essentially a jmp into another BPF program, ending execution of the current handler and starting a new one. This allows us to circumvent the 4096 instruction limit a bit by doing a tail-call before we run into the limit. There's a maximum of 32 tail calls that a BPF program can do.

These limitations mean that we generally try to prepare as much work as possible in user-land and then only do the minimal work necessary within BPF. We can only use $O(\log{n})$ algorithms at worst and try to stick with $O(1)$ for most things. All processing that cannot be implemented like this must be delegated to user-land. As a general rule of thumb, anything that needs more than 32 iterations in a loop is out of the question for BPF.

Unwinders

Unwinding always begins in native_tracer_entry. This entry point for our tracer starts by reading the register state of the thread that we just interrupted and initializes the PerCPURecord structure. The per-CPU record persists data between tail-calls of the same unwinder invocation. The unwinder's current PC, SP etc. values are initialized from register values.

After the initial setup the entry point consults a BPF map that is maintained by the user-land portion of the agent to determine which interpreter unwinder is responsible for unwinding the code at PC. If a record for the memory region is found, we then tail-call to the corresponding interpreter unwinder.

Each interpreter unwinder has their own BPF program. The interpreter unwinders typically have an unrolled main loop where they try to unwind as many frames for that interpreter as they can without going over the instruction limit. After each iteration the unwinders will typically check whether the current PC value still belongs to the current unwinder and tail-call to the right unwinder otherwise.

When an unwinder detects that we've reached the last frame in the trace, unwinding is terminated with a tail call to unwind_stop. For most traces this call will happen in the native unwinder, since even JITed languages usually call through a few layers of native C/C++ code before entering the VM. We detect the end of a trace by heuristically marking certain functions with PROG_UNWIND_STOP in the BPF maps prepared by user-land. unwind_stop then sends the completed BPF trace to user-land.

If any frame in the trace requires symbolization in user-mode, we additionally send a BPF event to request an expedited read from user-land. For all other traces user-land will simply read and then clear this map on a timer.

PID events

The BPF components are responsible for notifying user-land about new and exiting processes. An event about a new process is produced when we first interrupt it with the unwinders. Events about exiting processes are created with a sched_process_exit probe. In both cases the BPF code sends a perf event to notify user-land. We also re-report a PID if we detect execution in previously unknown memory region to prompt re-scan of the mappings.

Network protocol

All collected information is reported to a backend collector via a push-based, stateless, one-way gRPC protocol.

All data to be transmitted is stored in bounded FIFO queues (ring buffers). Old data is overwritten when the queues fill up (e.g. due to a lagging or offline backend collector). There is no explicit reliability or redundancy (besides retries internal to gRPC) and the assumption is that data will be resent (eventually consistent).

Trace processing pipeline

The host agent contains an internal pipeline that incrementally processes the raw traces that are produced by the BPF unwinders, enriches them with additional information (e.g. symbols for interpreter frames and container info), deduplicates known traces and combines trace counts that occurred in the same update period.

The traces produced in BPF start out with the information shown in the following diagram.

Note: please read this if you wish to update the diagrams

The diagrams in this section were created via draw.io. The SVGs can be loaded into draw.io for editing. When you're done, make sure to export via File -> Export As -> SVG and then select a zoom level of 200%. If you simply save the diagram via CTRL+S, it won't fill the whole width of the documentation page. Also make sure that "Include a copy of my diagram" remains ticked to keep the diagram editable.

bpf-trace-diagram

Our backend collector expects to receive trace information in a normalized and enriched format. This diagram below is relatively close to the data-structures that are actually sent over the network, minus the batching and domain-specific deduplication that we apply prior to sending it out.

net-trace-diagram

The diagram below provides a detailed overview on how the various components of the host agent interact to transform raw traces into the network format. It is focused around our data structures and how data flows through them. Dotted lines represent indirect interaction with data structures, solid ones correspond to code flow. "UM" is short for "user mode".

trace-pipe-diagram

Testing strategy

The host agent code is tested with three test suites:

  • Go unit tests
    Functionality of individual functions and types is tested with regular Go unit tests. This works great for the user-land portion of the agent, but is unable to test any of the unwinding logic and BPF interaction.
  • coredump test suite
    The coredump test suite (utils/coredump) we compile the whole BPF unwinder code into a user-mode executable, then use the information from a coredump to simulate a realistic environment to test the unwinder code in. The coredump suite essentially implements all required BPF helper functions in user-space, reading memory and thread contexts from the coredump. The resulting traces are then compared to a frame list in a JSON file, serving as regression tests.
  • BPF integration tests
    A special build of the host agent with the integration tag is created that enables specialized test cases that actually load BPF tracers into the kernel. These test cases require root privileges and thus cannot be part of the regular unit test suite. The test cases focus on covering the interaction and communication of BPF with user-mode code, as well as testing that our BPF code passes the BPF verifier. Our CI builds the integration test executable once and then executes it on a wide range of different Linux kernel versions via qemu.

Probabilistic profiling

Probabilistic profiling allows you to reduce storage costs by collecting a representative sample of profiling data. This method decreases storage costs with a visibility trade-off, as not all Profiling Host Agents will have profile collection enabled at all times.

Profiling Events linearly correlate with the probabilistic profiling value. The lower the value, the fewer events are collected.

Configure probabilistic profiling

To configure probabilistic profiling, set the -probabilistic-threshold and -probabilistic-interval options.

Set the -probabilistic-threshold option to a unsigned integer between 1 and 99 to enable probabilistic profiling. At every probabilistic interval, a random number between 0 and 99 is chosen. If the probabilistic threshold that you've set is greater than this random number, the agent collects profiles from this system for the duration of the interval. The default value is 100.

Set the -probabilistic-interval option to a time duration to define the time interval for which probabilistic profiling is either enabled or disabled. The default value is 1 minute.

Example

The following example shows how to configure the profiling agent with a threshold of 50 and an interval of 2 minutes and 30 seconds:

sudo ./otel-profiling-agent -probabilistic-threshold=50 -probabilistic-interval=2m30s

Legal

Licensing Information

This project is licensed under the Apache License 2.0 (Apache-2.0). Apache License 2.0

The eBPF source code is licensed under the GPL 2.0 license. GPL 2.0

Licenses of dependencies

To display a summary of the dependencies' licenses:

make legal

Details can be found in the generated deps.profiling-agent.csv file.

At the time of writing this, the summary is

  Count License
     52 Apache-2.0
     17 BSD-3-Clause
     17 MIT
      3 BSD-2-Clause
      1 ISC

otel-profiling-agent's People

Contributors

athre0z avatar bobrik avatar christos68k avatar rockdaboot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

otel-profiling-agent's Issues

Failure to compile ebpf on aarch64

The following works on x86_64, but fails on aarch64:

$ make docker-image
$ docker run --rm -it -v $(pwd):/agent -w /agent/support/ebpf --entrypoint /bin/bash profiling-agent
# make tsd.ebpf.o

The error from aarch64:

clang -D__KERNEL__ -D__BPF_TRACING__ -target aarch64-linux-gnu -O2 -emit-llvm -c tsd.ebpf.c -Wall -Wextra -Werror -Wno-address-of-packed-member -Wno-unused-label -Wno-unused-parameter -Wno-sign-compare -fno-stack-protector -fno-jump-tables -isystem /lib/modules/6.6.15-arm64/source/arch/arm64/include -isystem /lib/modules/6.6.15-arm64/source/arch/arm64/include/generated -isystem /lib/modules/6.6.15-arm64/build/include -isystem /lib/modules/6.6.15-arm64/build/include/uapi -isystem /lib/modules/6.6.15-arm64/build/arch/arm64/include -isystem /lib/modules/6.6.15-arm64/build/arch/arm64/include/generated -isystem /lib/modules/6.6.15-arm64/source/include -o tsd.ebpf.o
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:26:
/usr/include/aarch64-linux-gnu/bits/types/struct_iovec.h:26:8: error: redefinition of 'iovec'
struct iovec
       ^
/lib/modules/6.6.15-arm64/source/include/uapi/linux/uio.h:17:8: note: previous definition is here
struct iovec
       ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
In file included from /usr/include/aarch64-linux-gnu/bits/socket.h:29:
/usr/include/aarch64-linux-gnu/sys/types.h:42:18: error: typedef redefinition with different types ('__loff_t' (aka 'long') vs '__kernel_loff_t' (aka 'long long'))
typedef __loff_t loff_t;
                 ^
/lib/modules/6.6.15-arm64/source/include/linux/types.h:52:26: note: previous definition is here
typedef __kernel_loff_t         loff_t;
                                ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
In file included from /usr/include/aarch64-linux-gnu/bits/socket.h:29:
/usr/include/aarch64-linux-gnu/sys/types.h:59:17: error: typedef redefinition with different types ('__dev_t' (aka 'unsigned long') vs '__kernel_dev_t' (aka 'unsigned int'))
typedef __dev_t dev_t;
                ^
/lib/modules/6.6.15-arm64/source/include/linux/types.h:21:25: note: previous definition is here
typedef __kernel_dev_t          dev_t;
                                ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
In file included from /usr/include/aarch64-linux-gnu/bits/socket.h:29:
In file included from /usr/include/aarch64-linux-gnu/sys/types.h:130:
/usr/include/aarch64-linux-gnu/bits/types/timer_t.h:7:19: error: typedef redefinition with different types ('__timer_t' (aka 'void *') vs '__kernel_timer_t' (aka 'int'))
typedef __timer_t timer_t;
                  ^
/lib/modules/6.6.15-arm64/source/include/linux/types.h:31:26: note: previous definition is here
typedef __kernel_timer_t        timer_t;
                                ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
In file included from /usr/include/aarch64-linux-gnu/bits/socket.h:29:
In file included from /usr/include/aarch64-linux-gnu/sys/types.h:155:
/usr/include/aarch64-linux-gnu/bits/stdint-intn.h:27:19: error: typedef redefinition with different types ('__int64_t' (aka 'long') vs 's64' (aka 'long long'))
typedef __int64_t int64_t;
                  ^
/lib/modules/6.6.15-arm64/source/include/linux/types.h:115:15: note: previous definition is here
typedef s64                     int64_t;
                                ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
In file included from /usr/include/aarch64-linux-gnu/bits/socket.h:29:
/usr/include/aarch64-linux-gnu/sys/types.h:161:20: error: typedef redefinition with different types ('__uint64_t' (aka 'unsigned long') vs 'u64' (aka 'unsigned long long'))
typedef __uint64_t u_int64_t;
                   ^
/lib/modules/6.6.15-arm64/source/include/linux/types.h:114:15: note: previous definition is here
typedef u64                     u_int64_t;
                                ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
In file included from /usr/include/aarch64-linux-gnu/bits/socket.h:29:
In file included from /usr/include/aarch64-linux-gnu/sys/types.h:179:
In file included from /usr/include/aarch64-linux-gnu/sys/select.h:33:
/usr/include/aarch64-linux-gnu/bits/types/sigset_t.h:7:20: error: typedef redefinition with different types ('__sigset_t' vs 'struct sigset_t')
typedef __sigset_t sigset_t;
                   ^
/lib/modules/6.6.15-arm64/source/include/uapi/asm-generic/signal.h:63:3: note: previous definition is here
} sigset_t;
  ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
In file included from /usr/include/aarch64-linux-gnu/bits/socket.h:29:
In file included from /usr/include/aarch64-linux-gnu/sys/types.h:179:
/usr/include/aarch64-linux-gnu/sys/select.h:70:5: error: typedef redefinition with different types ('struct fd_set' vs '__kernel_fd_set')
  } fd_set;
    ^
/lib/modules/6.6.15-arm64/source/include/linux/types.h:20:26: note: previous definition is here
typedef __kernel_fd_set         fd_set;
                                ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
In file included from /usr/include/aarch64-linux-gnu/bits/socket.h:29:
/usr/include/aarch64-linux-gnu/sys/types.h:192:20: error: typedef redefinition with different types ('__blkcnt_t' (aka 'long') vs 'u64' (aka 'unsigned long long'))
typedef __blkcnt_t blkcnt_t;     /* Type to count number of disk blocks.  */
                   ^
/lib/modules/6.6.15-arm64/source/include/linux/types.h:132:13: note: previous definition is here
typedef u64 blkcnt_t;
            ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
/usr/include/aarch64-linux-gnu/bits/socket.h:183:8: error: redefinition of 'sockaddr'
struct sockaddr
       ^
/lib/modules/6.6.15-arm64/source/include/linux/socket.h:34:8: note: previous definition is here
struct sockaddr {
       ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
/usr/include/aarch64-linux-gnu/bits/socket.h:196:8: error: redefinition of '__kernel_sockaddr_storage'
struct sockaddr_storage
       ^
/lib/modules/6.6.15-arm64/source/include/linux/socket.h:47:26: note: expanded from macro 'sockaddr_storage'
#define sockaddr_storage __kernel_sockaddr_storage
                         ^
/lib/modules/6.6.15-arm64/source/include/uapi/linux/socket.h:16:8: note: previous definition is here
struct __kernel_sockaddr_storage {
       ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
/usr/include/aarch64-linux-gnu/bits/socket.h:207:5: error: expected identifier
    MSG_OOB             = 0x01, /* Process out-of-band data.  */
    ^
/lib/modules/6.6.15-arm64/source/include/linux/socket.h:303:18: note: expanded from macro 'MSG_OOB'
#define MSG_OOB         1
                        ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
/usr/include/aarch64-linux-gnu/bits/socket.h:209:5: error: expected identifier
    MSG_PEEK            = 0x02, /* Peek at incoming messages.  */
    ^
/lib/modules/6.6.15-arm64/source/include/linux/socket.h:304:18: note: expanded from macro 'MSG_PEEK'
#define MSG_PEEK        2
                        ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
/usr/include/aarch64-linux-gnu/bits/socket.h:211:5: error: expected identifier
    MSG_DONTROUTE       = 0x04, /* Don't use local routing.  */
    ^
/lib/modules/6.6.15-arm64/source/include/linux/socket.h:305:23: note: expanded from macro 'MSG_DONTROUTE'
#define MSG_DONTROUTE   4
                        ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
/usr/include/aarch64-linux-gnu/bits/socket.h:218:5: error: expected identifier
    MSG_CTRUNC          = 0x08, /* Control data lost before delivery.  */
    ^
/lib/modules/6.6.15-arm64/source/include/linux/socket.h:307:20: note: expanded from macro 'MSG_CTRUNC'
#define MSG_CTRUNC      8
                        ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
/usr/include/aarch64-linux-gnu/bits/socket.h:222:5: error: expected identifier
    MSG_TRUNC           = 0x20,
    ^
/lib/modules/6.6.15-arm64/source/include/linux/socket.h:309:19: note: expanded from macro 'MSG_TRUNC'
#define MSG_TRUNC       0x20
                        ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
/usr/include/aarch64-linux-gnu/bits/socket.h:224:5: error: expected identifier
    MSG_DONTWAIT        = 0x40, /* Nonblocking IO.  */
    ^
/lib/modules/6.6.15-arm64/source/include/linux/socket.h:310:22: note: expanded from macro 'MSG_DONTWAIT'
#define MSG_DONTWAIT    0x40    /* Nonblocking io                */
                        ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
/usr/include/aarch64-linux-gnu/bits/socket.h:226:5: error: expected identifier
    MSG_EOR             = 0x80, /* End of record.  */
    ^
/lib/modules/6.6.15-arm64/source/include/linux/socket.h:311:25: note: expanded from macro 'MSG_EOR'
#define MSG_EOR         0x80    /* End of record */
                        ^
In file included from tsd.ebpf.c:6:
In file included from ./bpfdefs.h:145:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bpf.h:31:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/memcontrol.h:22:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/writeback.h:13:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/blk_types.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/bvec.h:10:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/highmem.h:8:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/cacheflush.h:5:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/cacheflush.h:11:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kgdb.h:19:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/kprobes.h:28:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/ftrace.h:23:
In file included from /lib/modules/6.6.15-arm64/source/arch/arm64/include/asm/ftrace.h:52:
In file included from /lib/modules/6.6.15-arm64/source/include/linux/compat.h:16:
In file included from /usr/include/linux/if.h:28:
In file included from /usr/include/aarch64-linux-gnu/sys/socket.h:33:
/usr/include/aarch64-linux-gnu/bits/socket.h:228:5: error: expected identifier
    MSG_WAITALL         = 0x100, /* Wait for a full request.  */
    ^
/lib/modules/6.6.15-arm64/source/include/linux/socket.h:312:21: note: expanded from macro 'MSG_WAITALL'
#define MSG_WAITALL     0x100   /* Wait for a full request */
                        ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make: *** [Makefile:78: tsd.ebpf.o] Error 1

Devfiler macOS viewer doesn't work due to looking for a dylib in a nix store

dyld[56719]: Library not loaded: /nix/store/9pqgglls92szg4pksajafi8sq1nxxk28-libiconv-50/lib/libiconv.dylib
  Referenced from: <B9A7E9BE-4340-386B-8D00-13BC83A5CB2F> /Applications/devfiler.app/Contents/MacOS/devfiler
  Reason: tried: '/nix/store/9pqgglls92szg4pksajafi8sq1nxxk28-libiconv-50/lib/libiconv.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/nix/store/9pqgglls92szg4pksajafi8sq1nxxk28-libiconv-50/lib/libiconv.dylib' (no such file), '/nix/store/9pqgglls92szg4pksajafi8sq1nxxk28-libiconv-50/lib/libiconv.dylib' (no such file)
[1]    56719 abort      ./devfiler

Seems to be looking for a dylib in a nix store which isn't present on my system

java questions

I want to know if I can get the specific value entered by the user in the java program

AppImage run error

./devfiler-appimage-$(uname -m).AppImage
/nix/store/f004k9qdr6ms8xq8gq6qswwg076d1bfr-devfiler-stripped/bin/devfiler: /usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.26' not found (required by /nix/store/f004k9qdr6ms8xq8gq6qswwg076d1bfr-devfiler-stripped/bin/devfiler) /nix/store/f004k9qdr6ms8xq8gq6qswwg076d1bfr-devfiler-stripped/bin/devfiler: /usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.29' not found (required by /nix/store/f004k9qdr6ms8xq8gq6qswwg076d1bfr-devfiler-stripped/bin/devfiler)
/nix/store/f004k9qdr6ms8xq8gq6qswwg076d1bfr-devfiler-stripped/bin/devfiler: /usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.30' not found (required by /nix/store/f004k9qdr6ms8xq8gq6qswwg076d1bfr-devfiler-stripped/bin/devfiler) /nix/store/f004k9qdr6ms8xq8gq6qswwg076d1bfr-devfiler-stripped/bin/devfiler: /usr/lib64/libstdc++.so.6: version CXXABI_1.3.13' not found (required by /nix/store/f004k9qdr6ms8xq8gq6qswwg076d1bfr-devfiler-stripped/bin/devfiler)

also agent run error

./otel-profiling-agent -disable-tls -collection-agent=0.0.0.0:11000 -bpf-log-level 2 -verbose
time="2024-04-18T08:34:32.057604323Z" level=debug msg="Config:"
time="2024-04-18T08:34:32.057761503Z" level=debug msg="bpf-log-level: 2"
time="2024-04-18T08:34:32.057786270Z" level=debug msg="bpf-log-size: 65536"
time="2024-04-18T08:34:32.057804997Z" level=debug msg="cache-directory: /var/cache/otel/profiling-agent"
time="2024-04-18T08:34:32.057824927Z" level=debug msg="collection-agent: 0.0.0.0:11000"
time="2024-04-18T08:34:32.057840633Z" level=debug msg="config: /etc/otel/profiling-agent/agent.conf"
time="2024-04-18T08:34:32.057868231Z" level=debug msg="copyright: false"
time="2024-04-18T08:34:32.057878160Z" level=debug msg="disable-tls: true"
time="2024-04-18T08:34:32.057888442Z" level=debug msg="map-scale-factor: 0"
time="2024-04-18T08:34:32.057898090Z" level=debug msg="no-kernel-version-check: false"
time="2024-04-18T08:34:32.057910669Z" level=debug msg="probabilistic-interval: 1m0s"
time="2024-04-18T08:34:32.057920608Z" level=debug msg="probabilistic-threshold: 100"
time="2024-04-18T08:34:32.057930438Z" level=debug msg="project-id: 1"
time="2024-04-18T08:34:32.057939619Z" level=debug msg="secret-token: abc123"
time="2024-04-18T08:34:32.057949204Z" level=debug msg="t: all"
time="2024-04-18T08:34:32.057959168Z" level=debug msg="tags: "
time="2024-04-18T08:34:32.057968497Z" level=debug msg="tracers: all"
time="2024-04-18T08:34:32.057978131Z" level=debug msg="v: true"
time="2024-04-18T08:34:32.057987110Z" level=debug msg="verbose: true"
time="2024-04-18T08:34:32.057996204Z" level=debug msg="version: false"
time="2024-04-18T08:34:32.058007268Z" level=info msg="Starting OTEL profiling agent 1.0.0 (revision OTEL-review, build timestamp N/A)"
time="2024-04-18T08:34:32.066764829Z" level=debug msg="Validated tags: "
time="2024-04-18T08:34:32.084189854Z" level=debug msg="Traffic to 0.0.0.0 is routed from 127.0.0.1"
time="2024-04-18T08:34:32.084326097Z" level=debug msg="Reading the configuration"
time="2024-04-18T08:34:32.084385632Z" level=debug msg="Done setting configuration"
time="2024-04-18T08:34:32.084399834Z" level=debug msg="Determining tracers to include"
time="2024-04-18T08:34:32.084414601Z" level=debug msg="Tracer string: all"
time="2024-04-18T08:34:32.084425643Z" level=info msg="Interpreter tracers: perl,php,python,hotspot,ruby,v8"
time="2024-04-18T08:34:32.084436565Z" level=info msg="Automatically determining environment and machine ID ..."
time="2024-04-18T08:34:35.085739723Z" level=debug msg="Environment tester (azure) failed: failed to get azure metadata: Get "http://169.254.169.254/metadata/instance/compute?api-version=2020-09-01&format=json\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)"

time="2024-04-18T08:34:44.633481537Z" level=debug msg="Environment tester (aws) failed: failed to get aws metadata: EC2MetadataRequestError: failed to get EC2 instance identity document\ncaused by: RequestError: send request failed\ncaused by: Get "http://169.254.169.254/latest/dynamic/instance-identity/document\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)"
time="2024-04-18T08:34:46.549829839Z" level=debug msg="Environment tester (gcp) failed: failed to get GCP metadata: Get "http://169.254.169.254/computeMetadata/v1/instance/id\": dial tcp 169.254.169.254:80: i/o timeout"
time="2024-04-18T08:34:46.553658401Z" level=debug msg="Using MAC: 0x120F95D4E9F4"
time="2024-04-18T08:34:46.553711072Z" level=info msg="Environment: hardware, machine ID: 0x13947a896189adc7"
time="2024-04-18T08:34:46.553725672Z" level=info msg="Assigned ProjectID: 1 HostID: 1410887313739328967"
time="2024-04-18T08:34:46.570770645Z" level=debug msg="Traffic to 0.0.0.0 is routed from 127.0.0.1"
time="2024-04-18T08:34:49.586417179Z" level=warning msg="Failed to setup gRPC connection (try 1 of 5): context deadline exceeded: connection error: desc = "transport: Error while dialing: dial tcp 0.0.0.0:11000: connect: connection refused""

Is there any otel collector version that supports this new feature?

I tried to run my own otel collector to collect the data, however, it shows that some of the new features of signal is not implemented.

time="2024-04-17T20:41:17.626067005Z" level=error msg="Failed to handle mapping for PID 1700136, file /usr/bin/clickhouse: failed to load deltas: failed UpdateExeIDToStackDeltas for FileID e71a2d0df314abcd: no map available for 3256297 stack deltas"
time="2024-04-17T20:41:18.285213757Z" level=error msg="Failed to handle mapping for PID 1700137, file /usr/bin/clickhouse: failed to load deltas: failed UpdateExeIDToStackDeltas for FileID e71a2d0df314abcd: no map available for 3256297 stack deltas"
time="2024-04-17T20:41:23.997951426Z" level=info msg="Attached tracer program"
time="2024-04-17T20:41:24.050963144Z" level=info msg="Attached sched monitor"
time="2024-04-17T20:41:24.052807028Z" level=info msg="Environment variable KUBERNETES_SERVICE_HOST not set"
time="2024-04-17T20:41:24.632531045Z" level=error msg="Request failed: rpc error: code = Unimplemented desc = unknown service opentelemetry.proto.collector.profiles.v1.ProfilesService"
time="2024-04-17T20:41:25.882740002Z" level=error msg="Failed to handle mapping for PID 1700137, file /usr/bin/clickhouse: failed to load deltas: failed UpdateExeIDToStackDeltas for FileID e71a2d0df314abcd: no map available for 3256297 stack deltas"
time="2024-04-17T20:41:29.133657342Z" level=error msg="Request failed: rpc error: code = Unimplemented desc = unknown service opentelemetry.proto.collector.profiles.v1.ProfilesService"
time="2024-04-17T20:41:33.961619601Z" level=error msg="Request failed: rpc error: code = Unimplemented desc = unknown service opentelemetry.proto.collector.profiles.v1.ProfilesService"
time="2024-04-17T20:41:43.844658570Z" level=error msg="Request failed: rpc error: code = Unimplemented desc = unknown service opentelemetry.proto.collector.profiles.v1.ProfilesService"
time="2024-04-17T20:41:49.753826484Z" level=error msg="Request failed: rpc error: code = Unimplemented desc = unknown service opentelemetry.proto.collector.profiles.v1.ProfilesService"
^Ctime="2024-04-17T20:41:51.601494731Z" level=info msg="Stop processing ..."
time="2024-04-17T20:41:51.601518358Z" level=info msg="Exiting ..."

failed to load unwind_stop

I tried to run it, but the program reported an error.
I tested on three different kernels and found that this issue exists in all of them.
centos7.9(5.4.219)Ubuntu(5.15-101、5.15-102)

root@ubuntu2204:/opt/github/otel-profiling-agent# ./otel-profiling-agent -disable-tls -bpf-log-level 2 -verbose -collection-agent=127.0.0.1:4317
time="2024-04-17T16:02:29.307804792Z" level=debug msg="Config:"
time="2024-04-17T16:02:29.307939433Z" level=debug msg="bpf-log-level: 2"
time="2024-04-17T16:02:29.307954760Z" level=debug msg="bpf-log-size: 65536"
time="2024-04-17T16:02:29.307963528Z" level=debug msg="cache-directory: /var/cache/otel/profiling-agent"
time="2024-04-17T16:02:29.307969970Z" level=debug msg="collection-agent: 127.0.0.1:4317"
time="2024-04-17T16:02:29.307976497Z" level=debug msg="config: /etc/otel/profiling-agent/agent.conf"
time="2024-04-17T16:02:29.307983778Z" level=debug msg="copyright: false"
time="2024-04-17T16:02:29.307989514Z" level=debug msg="disable-tls: true"
time="2024-04-17T16:02:29.307995965Z" level=debug msg="map-scale-factor: 0"
time="2024-04-17T16:02:29.308001980Z" level=debug msg="no-kernel-version-check: false"
time="2024-04-17T16:02:29.308009793Z" level=debug msg="probabilistic-interval: 1m0s"
time="2024-04-17T16:02:29.308015631Z" level=debug msg="probabilistic-threshold: 100"
time="2024-04-17T16:02:29.308021349Z" level=debug msg="project-id: 1"
time="2024-04-17T16:02:29.308027161Z" level=debug msg="secret-token: abc123"
time="2024-04-17T16:02:29.308033036Z" level=debug msg="t: all"
time="2024-04-17T16:02:29.308045268Z" level=debug msg="tags: "
time="2024-04-17T16:02:29.308053173Z" level=debug msg="tracers: all"
time="2024-04-17T16:02:29.308060595Z" level=debug msg="v: true"
time="2024-04-17T16:02:29.308068020Z" level=debug msg="verbose: true"
time="2024-04-17T16:02:29.308076287Z" level=debug msg="version: false"
time="2024-04-17T16:02:29.308088410Z" level=info msg="Starting OTEL profiling agent 1.0.0 (revision OTEL-review, build timestamp N/A)"
time="2024-04-17T16:02:29.338636218Z" level=debug msg="Validated tags: "
time="2024-04-17T16:02:29.345399048Z" level=debug msg="Traffic to 127.0.0.1 is routed from 127.0.0.1"
time="2024-04-17T16:02:29.345491693Z" level=debug msg="Reading the configuration"
time="2024-04-17T16:02:29.345521530Z" level=debug msg="Done setting configuration"
time="2024-04-17T16:02:29.345531389Z" level=debug msg="Determining tracers to include"
time="2024-04-17T16:02:29.345541098Z" level=debug msg="Tracer string: all"
time="2024-04-17T16:02:29.345547283Z" level=info msg="Interpreter tracers: perl,php,python,hotspot,ruby,v8"
time="2024-04-17T16:02:29.345553853Z" level=info msg="Automatically determining environment and machine ID ..."
time="2024-04-17T16:02:32.353551340Z" level=debug msg="Environment tester (azure) failed: failed to get azure metadata: Get \"http://169.254.169.254/metadata/instance/compute?api-version=2020-09-01&format=json\": dial tcp 169.254.169.254:80: i/o timeout (Client.Timeout exceeded while awaiting headers)"
time="2024-04-17T16:02:32.952574146Z" level=debug msg="Environment tester (aws) failed: failed to get aws metadata: EC2MetadataRequestError: failed to get EC2 instance identity document\ncaused by: RequestError: send request failed\ncaused by: Get \"http://169.254.169.254/latest/dynamic/instance-identity/document\": dial tcp 169.254.169.254:80: connect: connection refused"
time="2024-04-17T16:02:35.486060964Z" level=debug msg="Environment tester (gcp) failed: failed to get GCP metadata: Get \"http://169.254.169.254/computeMetadata/v1/instance/id\": dial tcp 169.254.169.254:80: connect: connection refused"
time="2024-04-17T16:02:35.488877079Z" level=debug msg="Using MAC: 0x7EC699421C00"
time="2024-04-17T16:02:35.488927322Z" level=info msg="Environment: hardware, machine ID: 0xa1cd2c49e140a32f"
time="2024-04-17T16:02:35.489000264Z" level=info msg="Assigned ProjectID: 1 HostID: 1282730164693803823"
time="2024-04-17T16:02:35.492509164Z" level=debug msg="Traffic to 127.0.0.1 is routed from 127.0.0.1"
time="2024-04-17T16:02:35.661166452Z" level=debug msg="Size of eBPF map exe_id_to_10_stack_deltas: 65536"
time="2024-04-17T16:02:35.663494266Z" level=debug msg="Size of eBPF map exe_id_to_17_stack_deltas: 65536"
time="2024-04-17T16:02:35.666997122Z" level=debug msg="Size of eBPF map exe_id_to_15_stack_deltas: 65536"
time="2024-04-17T16:02:35.668244665Z" level=debug msg="Size of eBPF map exe_id_to_9_stack_deltas: 65536"
time="2024-04-17T16:02:35.669474442Z" level=debug msg="Size of eBPF map exe_id_to_16_stack_deltas: 65536"
time="2024-04-17T16:02:35.670690660Z" level=debug msg="Size of eBPF map exe_id_to_18_stack_deltas: 65536"
time="2024-04-17T16:02:35.672137478Z" level=debug msg="Size of eBPF map stack_delta_page_to_info: 65536"
time="2024-04-17T16:02:35.674369999Z" level=debug msg="Size of eBPF map exe_id_to_19_stack_deltas: 65536"
time="2024-04-17T16:02:35.676152405Z" level=debug msg="Size of eBPF map pid_page_to_mapping_info: 1048576"
time="2024-04-17T16:02:35.676185824Z" level=debug msg="Size of eBPF map exe_id_to_11_stack_deltas: 65536"
time="2024-04-17T16:02:35.677494926Z" level=debug msg="Size of eBPF map exe_id_to_13_stack_deltas: 65536"
time="2024-04-17T16:02:35.678897886Z" level=debug msg="Size of eBPF map exe_id_to_14_stack_deltas: 65536"
time="2024-04-17T16:02:35.680522577Z" level=debug msg="Size of eBPF map exe_id_to_21_stack_deltas: 65536"
time="2024-04-17T16:02:35.684883263Z" level=debug msg="Size of eBPF map exe_id_to_8_stack_deltas: 65536"
time="2024-04-17T16:02:35.686383625Z" level=debug msg="Size of eBPF map exe_id_to_12_stack_deltas: 65536"
time="2024-04-17T16:02:35.687660328Z" level=debug msg="Size of eBPF map exe_id_to_20_stack_deltas: 65536"
time="2024-04-17T16:02:35.694821056Z" level=error msg="load program: no space left on device: 174: (79) r1 = *(u64 *)(r0 +0): R0_w=map_value(id=0,off=0,ks=4,vs=8,imm=0) R6=c (truncated, 557 line(s) omitted)"
time="2024-04-17T16:02:35.694876996Z" level=error msg="Failed to load eBPF tracer: failed to load eBPF code: failed to load eBPF programs: failed to load unwind_stop"
root@ubuntu2204:/opt/github/otel-profiling-agent# ./otel-profiling-agent -disable-tls -bpf-log-level 2 -verbose -collection-agent=127.0.0.1:4317
time="2024-04-17T16:02:39.694513357Z" level=debug msg="Config:"
time="2024-04-17T16:02:39.694580570Z" level=debug msg="bpf-log-level: 2"
time="2024-04-17T16:02:39.694588005Z" level=debug msg="bpf-log-size: 65536"
time="2024-04-17T16:02:39.694593251Z" level=debug msg="cache-directory: /var/cache/otel/profiling-agent"
time="2024-04-17T16:02:39.694597447Z" level=debug msg="collection-agent: 127.0.0.1:4317"
time="2024-04-17T16:02:39.694601336Z" level=debug msg="config: /etc/otel/profiling-agent/agent.conf"
time="2024-04-17T16:02:39.694606120Z" level=debug msg="copyright: false"
time="2024-04-17T16:02:39.694609660Z" level=debug msg="disable-tls: true"
time="2024-04-17T16:02:39.694613448Z" level=debug msg="map-scale-factor: 0"
time="2024-04-17T16:02:39.694619625Z" level=debug msg="no-kernel-version-check: false"
time="2024-04-17T16:02:39.694724803Z" level=debug msg="probabilistic-interval: 1m0s"
time="2024-04-17T16:02:39.694731576Z" level=debug msg="probabilistic-threshold: 100"
time="2024-04-17T16:02:39.694735492Z" level=debug msg="project-id: 1"
time="2024-04-17T16:02:39.694739222Z" level=debug msg="secret-token: abc123"
time="2024-04-17T16:02:39.694742845Z" level=debug msg="t: all"
time="2024-04-17T16:02:39.694774500Z" level=debug msg="tags: "
time="2024-04-17T16:02:39.694779276Z" level=debug msg="tracers: all"
time="2024-04-17T16:02:39.694783254Z" level=debug msg="v: true"
time="2024-04-17T16:02:39.694786710Z" level=debug msg="verbose: true"
time="2024-04-17T16:02:39.694790439Z" level=debug msg="version: false"
time="2024-04-17T16:02:39.694795228Z" level=info msg="Starting OTEL profiling agent 1.0.0 (revision OTEL-review, build timestamp N/A)"
time="2024-04-17T16:02:39.726198380Z" level=debug msg="Validated tags: "
time="2024-04-17T16:02:39.728971090Z" level=debug msg="Traffic to 127.0.0.1 is routed from 127.0.0.1"
time="2024-04-17T16:02:39.729163735Z" level=debug msg="Reading the configuration"
time="2024-04-17T16:02:39.729240813Z" level=debug msg="Done setting configuration"
time="2024-04-17T16:02:39.729259307Z" level=debug msg="Determining tracers to include"
time="2024-04-17T16:02:39.729322476Z" level=debug msg="Tracer string: all"
time="2024-04-17T16:02:39.729352425Z" level=info msg="Interpreter tracers: perl,php,python,hotspot,ruby,v8"
time="2024-04-17T16:02:39.729362097Z" level=info msg="Automatically determining environment and machine ID ..."
time="2024-04-17T16:02:39.730364517Z" level=debug msg="Environment tester (azure) failed: failed to get azure metadata: Get \"http://169.254.169.254/metadata/instance/compute?api-version=2020-09-01&format=json\": dial tcp 169.254.169.254:80: connect: connection refused"
time="2024-04-17T16:02:40.304691298Z" level=debug msg="Environment tester (aws) failed: failed to get aws metadata: EC2MetadataRequestError: failed to get EC2 instance identity document\ncaused by: RequestError: send request failed\ncaused by: Get \"http://169.254.169.254/latest/dynamic/instance-identity/document\": dial tcp 169.254.169.254:80: connect: connection refused"
time="2024-04-17T16:02:40.672310810Z" level=debug msg="Environment tester (gcp) failed: failed to get GCP metadata: Get \"http://169.254.169.254/computeMetadata/v1/instance/id\": dial tcp 169.254.169.254:80: connect: connection refused"
time="2024-04-17T16:02:40.675907642Z" level=debug msg="Using MAC: 0x7EC699421C00"
time="2024-04-17T16:02:40.676237785Z" level=info msg="Environment: hardware, machine ID: 0xa1cd2c49e140a32f"
time="2024-04-17T16:02:40.676469358Z" level=info msg="Assigned ProjectID: 1 HostID: 1282730164693803823"
time="2024-04-17T16:02:40.679220758Z" level=debug msg="Traffic to 127.0.0.1 is routed from 127.0.0.1"
time="2024-04-17T16:02:40.857821007Z" level=debug msg="Size of eBPF map exe_id_to_14_stack_deltas: 65536"
time="2024-04-17T16:02:40.859576805Z" level=debug msg="Size of eBPF map exe_id_to_17_stack_deltas: 65536"
time="2024-04-17T16:02:40.861715648Z" level=debug msg="Size of eBPF map exe_id_to_18_stack_deltas: 65536"
time="2024-04-17T16:02:40.863167962Z" level=debug msg="Size of eBPF map exe_id_to_20_stack_deltas: 65536"
time="2024-04-17T16:02:40.865345841Z" level=debug msg="Size of eBPF map exe_id_to_9_stack_deltas: 65536"
time="2024-04-17T16:02:40.866614450Z" level=debug msg="Size of eBPF map exe_id_to_11_stack_deltas: 65536"
time="2024-04-17T16:02:40.868232931Z" level=debug msg="Size of eBPF map exe_id_to_16_stack_deltas: 65536"
time="2024-04-17T16:02:40.870837090Z" level=debug msg="Size of eBPF map exe_id_to_8_stack_deltas: 65536"
time="2024-04-17T16:02:40.872606707Z" level=debug msg="Size of eBPF map exe_id_to_15_stack_deltas: 65536"
time="2024-04-17T16:02:40.876671278Z" level=debug msg="Size of eBPF map exe_id_to_12_stack_deltas: 65536"
time="2024-04-17T16:02:40.878139667Z" level=debug msg="Size of eBPF map exe_id_to_21_stack_deltas: 65536"
time="2024-04-17T16:02:40.881467085Z" level=debug msg="Size of eBPF map pid_page_to_mapping_info: 1048576"
time="2024-04-17T16:02:40.881500935Z" level=debug msg="Size of eBPF map exe_id_to_13_stack_deltas: 65536"
time="2024-04-17T16:02:40.883343122Z" level=debug msg="Size of eBPF map exe_id_to_19_stack_deltas: 65536"
time="2024-04-17T16:02:40.885034327Z" level=debug msg="Size of eBPF map stack_delta_page_to_info: 65536"
time="2024-04-17T16:02:40.886369072Z" level=debug msg="Size of eBPF map exe_id_to_10_stack_deltas: 65536"
time="2024-04-17T16:02:40.893914976Z" level=error msg="load program: no space left on device: 174: (79) r1 = *(u64 *)(r0 +0): R0_w=map_value(id=0,off=0,ks=4,vs=8,imm=0) R6=c (truncated, 557 line(s) omitted)"
time="2024-04-17T16:02:40.893953659Z" level=error msg="Failed to load eBPF tracer: failed to load eBPF code: failed to load eBPF programs: failed to load unwind_stop"
root@ubuntu2204:/opt/github/otel-profiling-agent#

WechatIMG2934

Ubuntu, sudo make docker-image failed.

I tried to run sudo make docker-image on my Ubuntu 22.04.3 LTS, but failed at "returned a non-zero code: 100".

After an investigation, I found that it is due to these commands in Dockerfile

"RUN apt-get update && apt-get dist-upgrade -y ..."

I didn't find any solution for that. Could you confirm it?

Thank you.

Failure to compile on 3.10.0-693.el7.x86_64

docker version:

Client: Docker Engine - Community
 Version:           23.0.1
 API version:       1.42
 Go version:        go1.19.5
 Git commit:        a5ee5b1
 Built:             Thu Feb  9 19:51:00 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          23.0.1
  API version:      1.42 (minimum version 1.12)
  Go version:       go1.19.5
  Git commit:       bc3805a
  Built:            Thu Feb  9 19:48:42 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.9
  GitCommit:        1c90a442489720eec95342e1789ee8a5e1b9536f
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

When I run make docker-image, I get the following error:

#0 17.40 Setting up libdevmapper1.02.1:amd64 (2:1.02.196-1+b1) ...
#0 17.40 Setting up libcryptsetup12:amd64 (2:2.6.1-6+b1) ...
#0 17.40 Setting up systemd (255.4-1) ...
#0 17.42 Created symlink /etc/systemd/system/getty.target.wants/[email protected] → /usr/lib/systemd/system/[email protected].
#0 17.42 Created symlink /etc/systemd/system/multi-user.target.wants/remote-fs.target → /usr/lib/systemd/system/remote-fs.target.
#0 17.42 Created symlink /etc/systemd/system/sysinit.target.wants/systemd-pstore.service → /usr/lib/systemd/system/systemd-pstore.service.
#0 17.43 Initializing machine ID from random generator.
#0 17.44 Failed to take /etc/passwd lock: Invalid argument
#0 17.45 dpkg: error processing package systemd (--configure):
#0 17.45  installed systemd package post-installation script subprocess returned error exit status 1
#0 17.45 Setting up dmsetup (2:1.02.196-1+b1) ...
#0 17.46 Errors were encountered while processing:
#0 17.46  systemd
#0 17.50 E: Sub-process /usr/bin/dpkg returned an error code (1)
------
Dockerfile:7
--------------------
   6 |     
   7 | >>> RUN apt-get update -y && apt-get dist-upgrade -y && apt-get install -y \
   8 | >>>     curl wget cmake dwz lsb-release software-properties-common gnupg git clang llvm \
   9 | >>>     golang unzip
  10 |     
--------------------
ERROR: failed to solve: process "/bin/sh -c apt-get update -y && apt-get dist-upgrade -y && apt-get install -y     curl wget cmake dwz lsb-release software-properties-common gnupg git clang llvm     golang unzip" did not complete successfully: exit code: 100
make: *** [Makefile:57: docker-image] Error 1

unable to open /proc/sys/kernel/bpf_stats_enabled

Describe

When running the profiling agent
image

How to reproduce ?

The machine kernel version was originally 3.10, but the agent supports a minimum kernel version of 4.19, so the machine kernel was upgraded
image

However, I found that there is no /proc/sys/kernel/bpf_status_enabled after the upgrade
image

This kernel parameter is only available in the 5.1 kernel
image

What did you expect to see?

I want to run the agent successfully on a kernel 4.19 machine

Environment (please complete the following information)

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.