From c74d16a6be26f44bc19970d1f562ec0c749813ae Mon Sep 17 00:00:00 2001 From: Rainer Zaiser Date: Fri, 4 Oct 2024 22:27:05 +0200 Subject: [PATCH] README.md added --- benches/README.md | 38 +++++++++++++++++++++++++ benches/image-1.png | Bin 0 -> 52599 bytes benches/image.png | Bin 0 -> 58055 bytes benches/xcp_benchmark.rs | 60 ++++++++++++++++++++++++++++++++------- xcplib/src/xcpLite.c | 17 ++++++++++- xcplib/src/xcpTlQueue.c | 2 +- 6 files changed, 105 insertions(+), 12 deletions(-) create mode 100644 benches/README.md create mode 100644 benches/image-1.png create mode 100644 benches/image.png diff --git a/benches/README.md b/benches/README.md new file mode 100644 index 0000000..14686dc --- /dev/null +++ b/benches/README.md @@ -0,0 +1,38 @@ + + +# Benchmarking the 2 performance critical functions DaqEvent::trigger and CalSeg::sync + +## DaqEvent::trigger + +memcpy versus this: + +''' + if (n==8) { + *(uint64_t*)d = *(uint64_t*)&base[OdtEntryAddr(e)]; + d += 8; + } + else if (n==4) { + *(uint32_t*)d = *(uint32_t*)&base[OdtEntryAddr(e)]; + d += 4; + } + else if (n<4) { + uint8_t *s = &base[OdtEntryAddr(e)]; + do { *d++ = *s++; } while (--n); + } + else + { + memcpy((uint8_t*)d, &base[OdtEntryAddr(e)], n); + d += n; + } + e++; +''' + + +![trigger bench](image.png) + + + +## CalSeg::Sync + + +![sync bench](image-1.png) \ No newline at end of file diff --git a/benches/image-1.png b/benches/image-1.png new file mode 100644 index 0000000000000000000000000000000000000000..35d7d99d913d7229c15eec73b16fcf3ba88aef87 GIT binary patch literal 52599 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 literal 0 HcmV?d00001 diff --git a/benches/xcp_benchmark.rs b/benches/xcp_benchmark.rs index 599016f..5025281 100644 --- a/benches/xcp_benchmark.rs +++ b/benches/xcp_benchmark.rs @@ -1,7 +1,17 @@ -use criterion::{criterion_group, criterion_main, Criterion}; +// cargo bench -- --save-baseline parking_lot +// cargo bench -- --baseline parking_lot +// cargo bench -- --save-baseline parking_lot +// cargo bench -- --load-baseline new --baseline parking_lot +// --warm-up-time 0 +// --nresamples +// +// + +#![allow(unused_assignments)] +#![allow(unused_imports)] -#[allow(unused_imports)] use log::{debug, error, info, trace, warn}; + use std::{ fmt::Debug, sync::{Arc, Mutex}, @@ -11,10 +21,10 @@ use std::{ use serde::{Deserialize, Serialize}; use xcp::*; -use xcp_type_description::prelude::*; - use xcp_client::xcp_client::*; +use xcp_type_description::prelude::*; +use criterion::{criterion_group, criterion_main, Criterion}; //----------------------------------------------------------------------------- // Calibration parameters @@ -112,8 +122,15 @@ async fn xcp_client(dest_addr: std::net::SocketAddr, local_addr: std::net::Socke match current_mode { ClientMode::Measure => { info!("Start Measurement"); - // Measurement of signal - xcp_client.create_measurement_object("signal").expect("measurmeent signal not found"); + // Measurement signals + xcp_client.create_measurement_object("signal1").expect("measurement signal not found"); + xcp_client.create_measurement_object("signal2").expect("measurement signal not found"); + xcp_client.create_measurement_object("signal3").expect("measurement signal not found"); + xcp_client.create_measurement_object("signal4").expect("measurement signal not found"); + xcp_client.create_measurement_object("signal5").expect("measurement signal not found"); + xcp_client.create_measurement_object("signal6").expect("measurement signal not found"); + xcp_client.create_measurement_object("signal7").expect("measurement signal not found"); + xcp_client.create_measurement_object("signal8").expect("measurement signal not found"); // Measure start xcp_client.start_measurement().await.expect("could not start measurement"); } @@ -209,11 +226,25 @@ fn xcp_benchmark(c: &mut Criterion) { let cal_page = xcp.create_calseg("CalPage", &CAL_PAGE, true); // Measurement signal - let mut signal: f64 = 0.0; + let mut signal1: u32 = 0; + let mut signal2: u64 = 0; + let mut signal3: u8 = 0; + let mut signal4: u16 = 0; + let mut signal5: u64 = 0; + let mut signal6: u32 = 0; + let mut signal7: u16 = 0; + let mut signal8: u64 = 0; // Register a measurement event and bind it to the counter signal let event = daq_create_event!("mainloop"); - daq_register!(signal, event); + daq_register!(signal1, event); + daq_register!(signal2, event); + daq_register!(signal3, event); + daq_register!(signal4, event); + daq_register!(signal5, event); + daq_register!(signal6, event); + daq_register!(signal7, event); + daq_register!(signal8, event); // Wait a moment thread::sleep(Duration::from_millis(100)); @@ -247,17 +278,26 @@ fn xcp_benchmark(c: &mut Criterion) { thread::sleep(Duration::from_millis(100)); // Bench measurement trigger + signal1 += 1; + signal2 += 1; + signal3 += 1; + signal4 += 1; + signal5 += 1; + signal6 += 1; + signal7 += 1; + signal8 += 1; info!("Start measurement bench"); + let mut count: u32 = 0; *mode.lock() = ClientMode::Measure; c.bench_function("trigger", |b| { b.iter(|| { - signal += 1.0; + count += 1; event.trigger() }) }); *mode.lock() = ClientMode::Wait; thread::sleep(Duration::from_millis(100)); - info!("Measurement bench done, count = {}", signal); + info!("Measurement bench done, count = {}", count); // Wait a moment thread::sleep(Duration::from_millis(100)); diff --git a/xcplib/src/xcpLite.c b/xcplib/src/xcpLite.c index 751dfac..95778fa 100644 --- a/xcplib/src/xcpLite.c +++ b/xcplib/src/xcpLite.c @@ -893,9 +893,24 @@ static void XcpTriggerDaq(uint16_t daq, const uint8_t* base, uint64_t clock) { #ifdef XCP_ENABLE_PACKED_MODE if (sc>1) n *= sc; // packed mode #endif + + if (n==8) { + *(uint64_t*)d = *(uint64_t*)&base[OdtEntryAddr(e)]; + d += 8; + } + else if (n==4) { + *(uint32_t*)d = *(uint32_t*)&base[OdtEntryAddr(e)]; + d += 4; + } + else if (n<4) { + uint8_t *s = &base[OdtEntryAddr(e)]; + do { *d++ = *s++; } while (--n); + } else + { memcpy((uint8_t*)d, &base[OdtEntryAddr(e)], n); d += n; - e++; + } + e++; } // ODT entry } // Dynamic length diff --git a/xcplib/src/xcpTlQueue.c b/xcplib/src/xcpTlQueue.c index 4e9a3e5..79badab 100644 --- a/xcplib/src/xcpTlQueue.c +++ b/xcplib/src/xcpTlQueue.c @@ -297,7 +297,7 @@ const uint8_t * XcpTlTransmitQueuePeekMsg( uint16_t* msg_len ) { assert(entry1->dlc<=XCPTL_MAX_DTO_SIZE); // Max DTO size if (gXcpTlQueue.overruns) { // Add the number of overruns - DBG_PRINTF3("XcpTlTransmitQueuePeekMsg: overruns=%u\n", gXcpTlQueue.overruns); + DBG_PRINTF4("XcpTlTransmitQueuePeekMsg: overruns=%u\n", gXcpTlQueue.overruns); gXcpTlQueue.ctr += gXcpTlQueue.overruns; gXcpTlQueue.overruns = 0; }