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

reduced allocation v04 span representation #598

Merged
merged 19 commits into from
Sep 19, 2024
Merged
Show file tree
Hide file tree
Changes from 18 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 14 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions LICENSE-3rdparty.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
root_name: datadog-alloc, builder, build_common, datadog-profiling-ffi, data-pipeline-ffi, data-pipeline, datadog-ddsketch, datadog-trace-normalization, datadog-trace-protobuf, datadog-trace-utils, ddcommon, ddcommon-ffi, datadog-crashtracker-ffi, datadog-crashtracker, ddtelemetry, datadog-profiling, ddtelemetry-ffi, symbolizer-ffi, tools, datadog-profiling-replayer, dogstatsd, datadog-ipc, datadog-ipc-macros, tarpc, tarpc-plugins, spawn_worker, cc_utils, datadog-sidecar, datadog-remote-config, datadog-dynamic-configuration, datadog-sidecar-macros, datadog-sidecar-ffi, sidecar_mockgen, datadog-trace-obfuscation, test_spawn_from_lib, datadog-serverless-trace-mini-agent, datadog-trace-mini-agent, bin_tests
root_name: datadog-alloc, builder, build_common, datadog-profiling-ffi, data-pipeline-ffi, data-pipeline, datadog-ddsketch, datadog-trace-normalization, datadog-trace-protobuf, datadog-trace-utils, ddcommon, tinybytes, ddcommon-ffi, datadog-crashtracker-ffi, datadog-crashtracker, ddtelemetry, datadog-profiling, ddtelemetry-ffi, symbolizer-ffi, tools, datadog-profiling-replayer, dogstatsd, datadog-ipc, datadog-ipc-macros, tarpc, tarpc-plugins, spawn_worker, cc_utils, datadog-sidecar, datadog-remote-config, datadog-dynamic-configuration, datadog-sidecar-macros, datadog-sidecar-ffi, sidecar_mockgen, datadog-trace-obfuscation, test_spawn_from_lib, datadog-serverless-trace-mini-agent, datadog-trace-mini-agent
third_party_libraries:
- package_name: addr2line
package_version: 0.21.0
Expand Down Expand Up @@ -24432,7 +24432,7 @@ third_party_libraries:
- license: BSD-3-Clause
text: NOT FOUND
- package_name: serde
package_version: 1.0.197
package_version: 1.0.209
repository: https://github.com/serde-rs/serde
license: MIT OR Apache-2.0
licenses:
Expand Down Expand Up @@ -24848,7 +24848,7 @@ third_party_libraries:

END OF TERMS AND CONDITIONS
- package_name: serde_derive
package_version: 1.0.197
package_version: 1.0.209
repository: https://github.com/serde-rs/serde
license: MIT OR Apache-2.0
licenses:
Expand Down Expand Up @@ -25056,7 +25056,7 @@ third_party_libraries:

END OF TERMS AND CONDITIONS
- package_name: serde_json
package_version: 1.0.120
package_version: 1.0.127
repository: https://github.com/serde-rs/json
license: MIT OR Apache-2.0
licenses:
Expand Down
5 changes: 2 additions & 3 deletions data-pipeline/src/trace_exporter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use bytes::Bytes;
use datadog_trace_protobuf::pb;
use datadog_trace_utils::trace_utils::{self, SendData, TracerHeaderTags};
use datadog_trace_utils::tracer_payload;
use datadog_trace_utils::tracer_payload::TraceEncoding;
use datadog_trace_utils::tracer_payload::TraceCollection;
use ddcommon::{connector, Endpoint};
use hyper::http::uri::PathAndQuery;
use hyper::{Body, Client, Method, Uri};
Expand Down Expand Up @@ -231,11 +231,10 @@ impl TraceExporter {
),
TraceExporterOutputFormat::V07 => {
let tracer_payload = trace_utils::collect_trace_chunks(
traces,
TraceCollection::V07(traces),
&header_tags,
&mut tracer_payload::DefaultTraceChunkProcessor,
self.endpoint.api_key.is_some(),
TraceEncoding::V07,
);

let endpoint = Endpoint {
Expand Down
4 changes: 4 additions & 0 deletions ipc/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ serde = { version = "1.0", default-features = false, features = ["derive"] }
tokio-serde = { version = "0.8", features = ["bincode"] }
tokio-util = { version = "0.6.9", features = ["codec"] }
libc = { version = "0.2" }
tinybytes = { path = "../tinybytes", optional = true }

# tarpc needed extensions to allow 1 way communication and to export some internal structs
tarpc = { path = "tarpc/tarpc", default-features = false, features = ["serde-transport"], package = "tarpc" }
Expand Down Expand Up @@ -63,3 +64,6 @@ path = "benches/ipc.rs"

[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(polyfill_glibc_memfd)'] }

[features]
tiny-bytes = ["tinybytes"]
11 changes: 11 additions & 0 deletions ipc/src/platform/mem_handle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ use serde::{Deserialize, Serialize};
#[cfg(all(unix, not(target_os = "macos")))]
use std::os::unix::prelude::AsRawFd;
use std::{ffi::CString, io};
#[cfg(feature = "tiny-bytes")]
use tinybytes::UnderlyingBytes;

#[derive(Clone, Serialize, Deserialize, Debug)]
pub struct ShmHandle {
Expand Down Expand Up @@ -203,6 +205,15 @@ impl From<ShmHandle> for PlatformHandle<OwnedFileHandle> {
unsafe impl<T> Sync for MappedMem<T> where T: FileBackedHandle {}
unsafe impl<T> Send for MappedMem<T> where T: FileBackedHandle {}

impl AsRef<[u8]> for MappedMem<ShmHandle> {
fn as_ref(&self) -> &[u8] {
self.as_slice()
}
}

#[cfg(feature = "tiny-bytes")]
impl UnderlyingBytes for MappedMem<ShmHandle> {}

#[cfg(test)]
mod tests {
use crate::platform::{FileBackedHandle, NamedShmHandle, ShmHandle};
Expand Down
3 changes: 2 additions & 1 deletion sidecar/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ datadog-trace-utils = { path = "../trace-utils" }
datadog-trace-normalization = { path = "../trace-normalization" }
datadog-remote-config = { path = "../remote-config" }
datadog-crashtracker = { path = "../crashtracker" }
tinybytes = { path = "../tinybytes" }

futures = { version = "0.3", default-features = false }
manual_future = "0.1.1"
Expand All @@ -34,7 +35,7 @@ hyper = { version = "0.14", features = ["client"], default-features = false }
lazy_static = "1.4"
pin-project = "1"

datadog-ipc = { path = "../ipc" }
datadog-ipc = { path = "../ipc", features = ["tiny-bytes"] }
datadog-ipc-macros = { path = "../ipc/macros" }

rand = "0.8.3"
Expand Down
16 changes: 12 additions & 4 deletions sidecar/src/service/sidecar_server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ use datadog_ipc::platform::FileBackedHandle;
use datadog_ipc::tarpc::server::{Channel, InFlightRequest};
use datadog_remote_config::fetch::ConfigInvariants;
use datadog_trace_utils::tracer_header_tags::TracerHeaderTags;
use tinybytes;

type NoResponse = Ready<()>;

Expand Down Expand Up @@ -248,7 +249,12 @@ impl SidecarServer {
.expect("Unable to acquire lock on sessions")
}

fn send_trace_v04(&self, headers: &SerializedTracerHeaderTags, data: &[u8], target: &Endpoint) {
fn send_trace_v04(
&self,
headers: &SerializedTracerHeaderTags,
data: tinybytes::Bytes,
target: &Endpoint,
) {
let headers: TracerHeaderTags = match headers.try_into() {
Ok(headers) => headers,
Err(e) => {
Expand Down Expand Up @@ -741,7 +747,7 @@ impl SidecarInterface for SidecarServer {
_: Context,
instance_id: InstanceId,
handle: ShmHandle,
len: usize,
_len: usize,
headers: SerializedTracerHeaderTags,
) -> Self::SendTraceV04ShmFut {
if let Some(endpoint) = self
Expand All @@ -753,7 +759,8 @@ impl SidecarInterface for SidecarServer {
tokio::spawn(async move {
match handle.map() {
Ok(mapped) => {
self.send_trace_v04(&headers, &mapped.as_slice()[..len], &endpoint);
let bytes = tinybytes::Bytes::from(mapped);
self.send_trace_v04(&headers, bytes, &endpoint);
}
Err(e) => error!("Failed mapping shared trace data memory: {}", e),
}
Expand All @@ -779,7 +786,8 @@ impl SidecarInterface for SidecarServer {
.clone()
{
tokio::spawn(async move {
self.send_trace_v04(&headers, data.as_slice(), &endpoint);
let bytes = tinybytes::Bytes::from(data);
self.send_trace_v04(&headers, bytes, &endpoint);
});
}

Expand Down
11 changes: 11 additions & 0 deletions tinybytes/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,14 @@ once_cell = "1.8"
pretty_assertions = "1.3"
proptest = {version = "1.5", features = ["std"], default-features = false}
test-case = "2.2"
serde_json = "1.0.127"
tinybytes = { path = ".", features = ["bytes_string", "serialization"] }

[dependencies]
serde = { version = "1.0.209", optional = true }
#datadog-ipc = { path = "../ipc", optional = true }

[features]
bytes_string = []
serialization = ["serde"]
#ipc = ["datadog-ipc"]
ekump marked this conversation as resolved.
Show resolved Hide resolved
Loading
Loading