Skip to content

Commit

Permalink
doc: restructure and extend README
Browse files Browse the repository at this point in the history
  • Loading branch information
athre0z committed Apr 15, 2024
1 parent 0945fe6 commit 527745e
Showing 1 changed file with 59 additions and 41 deletions.
100 changes: 59 additions & 41 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,46 +1,35 @@
# Introduction

This repository contains the profiling host agent, extracted from the
Elastic Universal Profiling private repository.

The profiling host agent gathers trace counts and pushes them to the reporter
subsystem. It loads an eBPF program, and its related maps, from an ELF file then
monitors those maps for new traces and trace count updates.

# TODO

See open [issues](https://github.com/elastic/otel-profiling-agent/issues).

# Legal

## Licensing Information

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

The eBPF source code is licensed under the GPL 2.0 license.
[GPL 2.0](support/ebpf/LICENSE)

## Licenses of dependencies

To display a summary of the dependencies' licenses:
```sh
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
```

# The Profiling Agent
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](https://github.com/open-telemetry/opentelemetry-proto/pull/534)
- 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](https://patents.google.com/patent/US11604718B1/en?inventor=thomas+dullien&oq=thomas+dullien))
- 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

Expand Down Expand Up @@ -502,3 +491,32 @@ The following example shows how to configure the profiling agent with a threshol
```bash
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](LICENSE)

The eBPF source code is licensed under the GPL 2.0 license.
[GPL 2.0](support/ebpf/LICENSE)

## Licenses of dependencies

To display a summary of the dependencies' licenses:
```sh
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
```

0 comments on commit 527745e

Please sign in to comment.