Skip to content

Commit

Permalink
Always send recording_id as part of LogMsg (#1778)
Browse files Browse the repository at this point in the history
* Always send recording_id as part of LogMsg

* Rename build_chunk_from_components -> build_data_table_from_components

* Don't make RecordingInfo optional

* Always default the recording id

* Log an error if we hit the initialization issue
  • Loading branch information
jleibs authored Apr 6, 2023
1 parent 3be747c commit aedf1c0
Show file tree
Hide file tree
Showing 13 changed files with 205 additions and 126 deletions.
13 changes: 10 additions & 3 deletions crates/re_data_store/examples/memory_usage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ fn live_bytes() -> usize {

// ----------------------------------------------------------------------------

use re_log_types::{entity_path, DataRow, MsgId};
use re_log_types::{entity_path, DataRow, MsgId, RecordingId};

fn main() {
log_messages();
Expand Down Expand Up @@ -91,6 +91,7 @@ fn log_messages() {

const NUM_POINTS: usize = 1_000;

let recording_id = RecordingId::random();
let timeline = Timeline::new_sequence("frame_nr");
let mut time_point = TimePoint::default();
time_point.insert(timeline, TimeInt::from(0));
Expand All @@ -116,7 +117,10 @@ fn log_messages() {
.into_table(),
);
let table_bytes = live_bytes() - used_bytes_start;
let log_msg = Box::new(LogMsg::ArrowMsg(ArrowMsg::try_from(&*table).unwrap()));
let log_msg = Box::new(LogMsg::ArrowMsg(
recording_id,
ArrowMsg::try_from(&*table).unwrap(),
));
let log_msg_bytes = live_bytes() - used_bytes_start;
println!("Arrow payload containing a Pos2 uses {table_bytes} bytes in RAM");
let encoded = encode_log_msg(&log_msg);
Expand All @@ -139,7 +143,10 @@ fn log_messages() {
.into_table(),
);
let table_bytes = live_bytes() - used_bytes_start;
let log_msg = Box::new(LogMsg::ArrowMsg(ArrowMsg::try_from(&*table).unwrap()));
let log_msg = Box::new(LogMsg::ArrowMsg(
recording_id,
ArrowMsg::try_from(&*table).unwrap(),
));
let log_msg_bytes = live_bytes() - used_bytes_start;
println!("Arrow payload containing a Pos2 uses {table_bytes} bytes in RAM");
let encoded = encode_log_msg(&log_msg);
Expand Down
4 changes: 2 additions & 2 deletions crates/re_data_store/src/log_db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -235,15 +235,15 @@ impl LogDb {

match &msg {
LogMsg::BeginRecordingMsg(msg) => self.add_begin_recording_msg(msg),
LogMsg::EntityPathOpMsg(msg) => {
LogMsg::EntityPathOpMsg(_, msg) => {
let EntityPathOpMsg {
msg_id,
time_point,
path_op,
} = msg;
self.entity_db.add_path_op(*msg_id, time_point, path_op);
}
LogMsg::ArrowMsg(inner) => self.entity_db.try_add_arrow_msg(inner)?,
LogMsg::ArrowMsg(_, inner) => self.entity_db.try_add_arrow_msg(inner)?,
LogMsg::Goodbye(_) => {}
}

Expand Down
29 changes: 16 additions & 13 deletions crates/re_log_types/benches/msg_encode_benchmark.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;

use re_log_types::{
datagen::{build_frame_nr, build_some_colors, build_some_point2d},
entity_path, ArrowMsg, DataRow, DataTable, Index, LogMsg, MsgId,
entity_path, ArrowMsg, DataRow, DataTable, Index, LogMsg, MsgId, RecordingId,
};

use criterion::{criterion_group, criterion_main, Criterion};
Expand Down Expand Up @@ -42,18 +42,18 @@ fn decode_log_msgs(mut bytes: &[u8]) -> Vec<LogMsg> {
messages
}

fn generate_messages(tables: &[DataTable]) -> Vec<LogMsg> {
fn generate_messages(recording_id: RecordingId, tables: &[DataTable]) -> Vec<LogMsg> {
tables
.iter()
.map(|table| LogMsg::ArrowMsg(ArrowMsg::try_from(table).unwrap()))
.map(|table| LogMsg::ArrowMsg(recording_id, ArrowMsg::try_from(table).unwrap()))
.collect()
}

fn decode_tables(messages: &[LogMsg]) -> Vec<DataTable> {
messages
.iter()
.map(|log_msg| {
if let LogMsg::ArrowMsg(arrow_msg) = log_msg {
if let LogMsg::ArrowMsg(_, arrow_msg) = log_msg {
DataTable::try_from(arrow_msg).unwrap()
} else {
unreachable!()
Expand Down Expand Up @@ -81,21 +81,22 @@ fn mono_points_arrow(c: &mut Criterion) {
}

{
let recording_id = RecordingId::random();
let mut group = c.benchmark_group("mono_points_arrow");
group.throughput(criterion::Throughput::Elements(NUM_POINTS as _));
group.bench_function("generate_message_bundles", |b| {
b.iter(generate_tables);
});
let tables = generate_tables();
group.bench_function("generate_messages", |b| {
b.iter(|| generate_messages(&tables));
b.iter(|| generate_messages(recording_id, &tables));
});
let messages = generate_messages(&tables);
let messages = generate_messages(recording_id, &tables);
group.bench_function("encode_log_msg", |b| {
b.iter(|| encode_log_msgs(&messages));
});
group.bench_function("encode_total", |b| {
b.iter(|| encode_log_msgs(&generate_messages(&generate_tables())));
b.iter(|| encode_log_msgs(&generate_messages(recording_id, &generate_tables())));
});

let encoded = encode_log_msgs(&messages);
Expand Down Expand Up @@ -136,21 +137,22 @@ fn mono_points_arrow_batched(c: &mut Criterion) {
}

{
let recording_id = RecordingId::random();
let mut group = c.benchmark_group("mono_points_arrow_batched");
group.throughput(criterion::Throughput::Elements(NUM_POINTS as _));
group.bench_function("generate_message_bundles", |b| {
b.iter(generate_table);
});
let tables = [generate_table()];
group.bench_function("generate_messages", |b| {
b.iter(|| generate_messages(&tables));
b.iter(|| generate_messages(recording_id, &tables));
});
let messages = generate_messages(&tables);
let messages = generate_messages(recording_id, &tables);
group.bench_function("encode_log_msg", |b| {
b.iter(|| encode_log_msgs(&messages));
});
group.bench_function("encode_total", |b| {
b.iter(|| encode_log_msgs(&generate_messages(&[generate_table()])));
b.iter(|| encode_log_msgs(&generate_messages(recording_id, &[generate_table()])));
});

let encoded = encode_log_msgs(&messages);
Expand Down Expand Up @@ -192,21 +194,22 @@ fn batch_points_arrow(c: &mut Criterion) {
}

{
let recording_id = RecordingId::random();
let mut group = c.benchmark_group("batch_points_arrow");
group.throughput(criterion::Throughput::Elements(NUM_POINTS as _));
group.bench_function("generate_message_bundles", |b| {
b.iter(generate_tables);
});
let tables = generate_tables();
group.bench_function("generate_messages", |b| {
b.iter(|| generate_messages(&tables));
b.iter(|| generate_messages(recording_id, &tables));
});
let messages = generate_messages(&tables);
let messages = generate_messages(recording_id, &tables);
group.bench_function("encode_log_msg", |b| {
b.iter(|| encode_log_msgs(&messages));
});
group.bench_function("encode_total", |b| {
b.iter(|| encode_log_msgs(&generate_messages(&generate_tables())));
b.iter(|| encode_log_msgs(&generate_messages(recording_id, &generate_tables())));
});

let encoded = encode_log_msgs(&messages);
Expand Down
20 changes: 14 additions & 6 deletions crates/re_log_types/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -173,10 +173,10 @@ pub enum LogMsg {
BeginRecordingMsg(BeginRecordingMsg),

/// Server-backed operation on an [`EntityPath`].
EntityPathOpMsg(EntityPathOpMsg),
EntityPathOpMsg(RecordingId, EntityPathOpMsg),

/// Log an entity using an [`ArrowMsg`].
ArrowMsg(ArrowMsg),
ArrowMsg(RecordingId, ArrowMsg),

/// Sent when the client shuts down the connection.
Goodbye(MsgId),
Expand All @@ -186,19 +186,27 @@ impl LogMsg {
pub fn id(&self) -> MsgId {
match self {
Self::BeginRecordingMsg(msg) => msg.msg_id,
Self::EntityPathOpMsg(msg) => msg.msg_id,
Self::EntityPathOpMsg(_, msg) => msg.msg_id,
Self::Goodbye(msg_id) => *msg_id,
// TODO(#1619): the following only makes sense because, while we support sending and
// receiving batches, we don't actually do so yet.
// We need to stop storing raw `LogMsg`s before we can benefit from our batching.
Self::ArrowMsg(msg) => msg.table_id,
Self::ArrowMsg(_, msg) => msg.table_id,
}
}

pub fn recording_id(&self) -> Option<&RecordingId> {
match self {
Self::BeginRecordingMsg(msg) => Some(&msg.info.recording_id),
Self::EntityPathOpMsg(recording_id, _) | Self::ArrowMsg(recording_id, _) => {
Some(recording_id)
}
Self::Goodbye(_) => None,
}
}
}

impl_into_enum!(BeginRecordingMsg, LogMsg, BeginRecordingMsg);
impl_into_enum!(EntityPathOpMsg, LogMsg, EntityPathOpMsg);
impl_into_enum!(ArrowMsg, LogMsg, ArrowMsg);

// ----------------------------------------------------------------------------

Expand Down
31 changes: 23 additions & 8 deletions crates/re_sdk/src/msg_sender.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
use re_log_types::{component_types::InstanceKey, DataRow, DataTableError};
use std::borrow::Borrow;

use re_log_types::{component_types::InstanceKey, DataRow, DataTableError, RecordingId};

use crate::{
components::Transform,
log::{DataCell, LogMsg, MsgId},
sink::LogSink,
time::{Time, TimeInt, TimePoint, Timeline},
Component, EntityPath, SerializableComponent,
Component, EntityPath, SerializableComponent, Session,
};

// TODO(#1619): Rust SDK batching
Expand Down Expand Up @@ -229,29 +231,42 @@ impl MsgSender {

/// Consumes, packs, sanity checks and finally sends the message to the currently configured
/// target of the SDK.
pub fn send(self, sink: &impl std::borrow::Borrow<dyn LogSink>) -> Result<(), DataTableError> {
self.send_to_sink(sink.borrow())
pub fn send(self, session: &Session) -> Result<(), DataTableError> {
self.send_to_sink(session.recording_id(), session.borrow())
}

/// Consumes, packs, sanity checks and finally sends the message to the currently configured
/// target of the SDK.
fn send_to_sink(self, sink: &dyn LogSink) -> Result<(), DataTableError> {
fn send_to_sink(
self,
recording_id: RecordingId,
sink: &dyn LogSink,
) -> Result<(), DataTableError> {
if !sink.is_enabled() {
return Ok(()); // silently drop the message
}

let [row_standard, row_transforms, row_splats] = self.into_rows();

if let Some(row_transforms) = row_transforms {
sink.send(LogMsg::ArrowMsg((&row_transforms.into_table()).try_into()?));
sink.send(LogMsg::ArrowMsg(
recording_id,
(&row_transforms.into_table()).try_into()?,
));
}
if let Some(row_splats) = row_splats {
sink.send(LogMsg::ArrowMsg((&row_splats.into_table()).try_into()?));
sink.send(LogMsg::ArrowMsg(
recording_id,
(&row_splats.into_table()).try_into()?,
));
}
// Always the primary component last so range-based queries will include the other data.
// Since the primary component can't be splatted it must be in msg_standard, see(#1215).
if let Some(row_standard) = row_standard {
sink.send(LogMsg::ArrowMsg((&row_standard.into_table()).try_into()?));
sink.send(LogMsg::ArrowMsg(
recording_id,
(&row_standard.into_table()).try_into()?,
));
}

Ok(())
Expand Down
36 changes: 29 additions & 7 deletions crates/re_sdk/src/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@ impl SessionBuilder {
#[must_use]
#[derive(Clone)]
pub struct Session {
recording_info: RecordingInfo,
sink: Arc<dyn LogSink>,
// TODO(emilk): add convenience `TimePoint` here so that users can
// do things like `session.set_time_sequence("frame", frame_idx);`
Expand Down Expand Up @@ -222,20 +223,33 @@ impl Session {
sink.send(
re_log_types::BeginRecordingMsg {
msg_id: re_log_types::MsgId::random(),
info: recording_info,
info: recording_info.clone(),
}
.into(),
);
}

Self { sink: sink.into() }
Self {
recording_info,
sink: sink.into(),
}
}

/// Construct a new session with a disabled "dummy" sink that drops all logging messages.
///
/// [`Self::is_enabled`] will return `false`.
pub fn disabled() -> Self {
Self {
recording_info: RecordingInfo {
application_id: ApplicationId::unknown(),
recording_id: Default::default(),
is_official_example: crate::called_from_official_rust_example(),
started: Time::now(),
recording_source: RecordingSource::RustSdk {
rustc_version: env!("RE_BUILD_RUSTC_VERSION").into(),
llvm_version: env!("RE_BUILD_LLVM_VERSION").into(),
},
},
sink: crate::sink::disabled().into(),
}
}
Expand Down Expand Up @@ -272,17 +286,25 @@ impl Session {
time_point: &re_log_types::TimePoint,
path_op: re_log_types::PathOp,
) {
self.send(LogMsg::EntityPathOpMsg(re_log_types::EntityPathOpMsg {
msg_id: re_log_types::MsgId::random(),
time_point: time_point.clone(),
path_op,
}));
self.send(LogMsg::EntityPathOpMsg(
self.recording_id(),
re_log_types::EntityPathOpMsg {
msg_id: re_log_types::MsgId::random(),
time_point: time_point.clone(),
path_op,
},
));
}

/// Drain all buffered [`LogMsg`]es and return them.
pub fn drain_backlog(&self) -> Vec<LogMsg> {
self.sink.drain_backlog()
}

/// The current [`RecordingId`].
pub fn recording_id(&self) -> RecordingId {
self.recording_info.recording_id
}
}

impl AsRef<dyn LogSink> for Session {
Expand Down
6 changes: 4 additions & 2 deletions crates/re_sdk_comms/src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -209,9 +209,11 @@ impl CongestionManager {
#[allow(clippy::match_same_arms)]
match msg {
// we don't want to drop any of these
LogMsg::BeginRecordingMsg(_) | LogMsg::EntityPathOpMsg(_) | LogMsg::Goodbye(_) => true,
LogMsg::BeginRecordingMsg(_) | LogMsg::EntityPathOpMsg(_, _) | LogMsg::Goodbye(_) => {
true
}

LogMsg::ArrowMsg(arrow_msg) => self.should_send_time_point(&arrow_msg.timepoint_max),
LogMsg::ArrowMsg(_, arrow_msg) => self.should_send_time_point(&arrow_msg.timepoint_max),
}
}

Expand Down
Loading

1 comment on commit aedf1c0

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rust Benchmark

Benchmark suite Current: aedf1c0 Previous: 3be747c Ratio
datastore/num_rows=1000/num_instances=1000/packed=false/insert/default 11124028 ns/iter (± 545736) 11306682 ns/iter (± 440609) 0.98
datastore/num_rows=1000/num_instances=1000/packed=false/insert/bucketsz=0 13298890 ns/iter (± 868552) 14126657 ns/iter (± 757077) 0.94
datastore/num_rows=1000/num_instances=1000/packed=false/insert/bucketsz=2 12888246 ns/iter (± 589875) 12912141 ns/iter (± 576516) 1.00
datastore/num_rows=1000/num_instances=1000/packed=false/insert/bucketsz=32 11199002 ns/iter (± 416568) 11403049 ns/iter (± 516850) 0.98
datastore/num_rows=1000/num_instances=1000/packed=false/insert/bucketsz=2048 10986473 ns/iter (± 539404) 11443930 ns/iter (± 698372) 0.96
datastore/num_rows=1000/num_instances=1000/packed=true/insert/default 10796480 ns/iter (± 472414) 11023654 ns/iter (± 579959) 0.98
datastore/num_rows=1000/num_instances=1000/packed=true/insert/bucketsz=0 13971972 ns/iter (± 935649) 13756804 ns/iter (± 638643) 1.02
datastore/num_rows=1000/num_instances=1000/packed=true/insert/bucketsz=2 12756803 ns/iter (± 701149) 12641013 ns/iter (± 665367) 1.01
datastore/num_rows=1000/num_instances=1000/packed=true/insert/bucketsz=32 11242130 ns/iter (± 552942) 11187066 ns/iter (± 541598) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/insert/bucketsz=2048 10991314 ns/iter (± 525770) 10790959 ns/iter (± 427863) 1.02
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at/default 1839 ns/iter (± 17) 1851 ns/iter (± 18) 0.99
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at/bucketsz=0 1872 ns/iter (± 5) 1858 ns/iter (± 8) 1.01
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at/bucketsz=2 1843 ns/iter (± 3) 1854 ns/iter (± 11) 0.99
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at/bucketsz=32 1842 ns/iter (± 4) 1879 ns/iter (± 10) 0.98
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at/bucketsz=2048 1834 ns/iter (± 6) 1850 ns/iter (± 9) 0.99
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at/default 1856 ns/iter (± 19) 1855 ns/iter (± 21) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at/bucketsz=0 1851 ns/iter (± 10) 1859 ns/iter (± 10) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at/bucketsz=2 1858 ns/iter (± 8) 1860 ns/iter (± 12) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at/bucketsz=32 1830 ns/iter (± 7) 1838 ns/iter (± 11) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at/bucketsz=2048 1832 ns/iter (± 6) 1832 ns/iter (± 10) 1
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/primary/default 281 ns/iter (± 0) 283 ns/iter (± 0) 0.99
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/secondaries/default 435 ns/iter (± 0) 435 ns/iter (± 0) 1
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/primary/bucketsz=0 281 ns/iter (± 0) 281 ns/iter (± 0) 1
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/secondaries/bucketsz=0 444 ns/iter (± 0) 443 ns/iter (± 1) 1.00
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/primary/bucketsz=2 281 ns/iter (± 0) 281 ns/iter (± 0) 1
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/secondaries/bucketsz=2 444 ns/iter (± 0) 443 ns/iter (± 0) 1.00
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/primary/bucketsz=32 281 ns/iter (± 0) 283 ns/iter (± 0) 0.99
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/secondaries/bucketsz=32 439 ns/iter (± 0) 440 ns/iter (± 0) 1.00
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/primary/bucketsz=2048 281 ns/iter (± 0) 283 ns/iter (± 0) 0.99
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/secondaries/bucketsz=2048 435 ns/iter (± 0) 439 ns/iter (± 2) 0.99
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/primary/default 282 ns/iter (± 0) 283 ns/iter (± 0) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/secondaries/default 435 ns/iter (± 0) 435 ns/iter (± 1) 1
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/primary/bucketsz=0 281 ns/iter (± 0) 281 ns/iter (± 0) 1
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/secondaries/bucketsz=0 442 ns/iter (± 0) 443 ns/iter (± 0) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/primary/bucketsz=2 281 ns/iter (± 0) 281 ns/iter (± 0) 1
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/secondaries/bucketsz=2 442 ns/iter (± 0) 442 ns/iter (± 0) 1
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/primary/bucketsz=32 282 ns/iter (± 0) 283 ns/iter (± 0) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/secondaries/bucketsz=32 440 ns/iter (± 1) 440 ns/iter (± 0) 1
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/primary/bucketsz=2048 281 ns/iter (± 0) 283 ns/iter (± 0) 0.99
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/secondaries/bucketsz=2048 435 ns/iter (± 0) 436 ns/iter (± 0) 1.00
datastore/num_rows=1000/num_instances=1000/packed=false/range/default 13013954 ns/iter (± 914184) 15200439 ns/iter (± 438260) 0.86
datastore/num_rows=1000/num_instances=1000/packed=false/range/bucketsz=0 2177465 ns/iter (± 11865) 2334572 ns/iter (± 55634) 0.93
datastore/num_rows=1000/num_instances=1000/packed=false/range/bucketsz=2 2125993 ns/iter (± 17009) 2216958 ns/iter (± 17591) 0.96
datastore/num_rows=1000/num_instances=1000/packed=false/range/bucketsz=32 1942170 ns/iter (± 12206) 1914231 ns/iter (± 9892) 1.01
datastore/num_rows=1000/num_instances=1000/packed=false/range/bucketsz=2048 1852445 ns/iter (± 46096) 1871361 ns/iter (± 8271) 0.99
datastore/num_rows=1000/num_instances=1000/packed=true/range/default 11500691 ns/iter (± 470741) 11614774 ns/iter (± 623175) 0.99
datastore/num_rows=1000/num_instances=1000/packed=true/range/bucketsz=0 2191050 ns/iter (± 8215) 2131867 ns/iter (± 7752) 1.03
datastore/num_rows=1000/num_instances=1000/packed=true/range/bucketsz=2 2108115 ns/iter (± 42885) 2140570 ns/iter (± 26386) 0.98
datastore/num_rows=1000/num_instances=1000/packed=true/range/bucketsz=32 1867731 ns/iter (± 7327) 1844897 ns/iter (± 17501) 1.01
datastore/num_rows=1000/num_instances=1000/packed=true/range/bucketsz=2048 1847999 ns/iter (± 9415) 1829034 ns/iter (± 7480) 1.01
mono_points_arrow/generate_message_bundles 46219650 ns/iter (± 501669) 47289809 ns/iter (± 542415) 0.98
mono_points_arrow/generate_messages 150704994 ns/iter (± 1097138) 152778242 ns/iter (± 1095428) 0.99
mono_points_arrow/encode_log_msg 185868787 ns/iter (± 1379264) 183527207 ns/iter (± 992678) 1.01
mono_points_arrow/encode_total 380900460 ns/iter (± 1699524) 382694293 ns/iter (± 1594018) 1.00
mono_points_arrow/decode_log_msg 229719289 ns/iter (± 950455) 232177493 ns/iter (± 825811) 0.99
mono_points_arrow/decode_message_bundles 72131554 ns/iter (± 814385) 72181790 ns/iter (± 601140) 1.00
mono_points_arrow/decode_total 307506573 ns/iter (± 1565973) 309659930 ns/iter (± 1525146) 0.99
mono_points_arrow_batched/generate_message_bundles 39855428 ns/iter (± 1133909) 40495454 ns/iter (± 1242825) 0.98
mono_points_arrow_batched/generate_messages 8178592 ns/iter (± 704181) 8347288 ns/iter (± 532005) 0.98
mono_points_arrow_batched/encode_log_msg 1488672 ns/iter (± 5221) 1489499 ns/iter (± 10777) 1.00
mono_points_arrow_batched/encode_total 50010094 ns/iter (± 1500823) 52148625 ns/iter (± 1713979) 0.96
mono_points_arrow_batched/decode_log_msg 854696 ns/iter (± 2147) 860449 ns/iter (± 3058) 0.99
mono_points_arrow_batched/decode_message_bundles 12974920 ns/iter (± 956692) 13220882 ns/iter (± 911097) 0.98
mono_points_arrow_batched/decode_total 13404586 ns/iter (± 622594) 13732058 ns/iter (± 777944) 0.98
batch_points_arrow/generate_message_bundles 290531 ns/iter (± 765) 285834 ns/iter (± 913) 1.02
batch_points_arrow/generate_messages 6336 ns/iter (± 12) 6409 ns/iter (± 17) 0.99
batch_points_arrow/encode_log_msg 392563 ns/iter (± 1460) 383397 ns/iter (± 1670) 1.02
batch_points_arrow/encode_total 705362 ns/iter (± 2469) 693670 ns/iter (± 3268) 1.02
batch_points_arrow/decode_log_msg 340823 ns/iter (± 2014) 359561 ns/iter (± 1013) 0.95
batch_points_arrow/decode_message_bundles 2347 ns/iter (± 8) 2378 ns/iter (± 5) 0.99
batch_points_arrow/decode_total 348071 ns/iter (± 3330) 366973 ns/iter (± 878) 0.95
arrow_mono_points/insert 6344097421 ns/iter (± 17255353) 6478369758 ns/iter (± 26784240) 0.98
arrow_mono_points/query 1773561 ns/iter (± 9441) 1824473 ns/iter (± 17579) 0.97
arrow_batch_points/insert 3146877 ns/iter (± 14047) 3180948 ns/iter (± 16051) 0.99
arrow_batch_points/query 17203 ns/iter (± 47) 17197 ns/iter (± 29) 1.00
arrow_batch_vecs/insert 44533 ns/iter (± 133) 45543 ns/iter (± 322) 0.98
arrow_batch_vecs/query 506150 ns/iter (± 389) 506252 ns/iter (± 578) 1.00
tuid/Tuid::random 34 ns/iter (± 0) 46 ns/iter (± 5) 0.74

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.