Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
14 changes: 7 additions & 7 deletions benches/concurrent/contention.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use criterion::{BenchmarkId, Criterion};
use pricelevel::{
Hash32, OrderId, OrderType, OrderUpdate, PriceLevel, Side, TimeInForce, UuidGenerator,
Hash32, Id, OrderType, OrderUpdate, PriceLevel, Side, TimeInForce, UuidGenerator,
};
use std::sync::{Arc, Barrier};
use std::thread;
Expand Down Expand Up @@ -105,12 +105,12 @@ fn measure_read_write_contention(
}
1 => {
// Match against existing orders
let taker_id = OrderId::from_u64(thread_id as u64 * 1_000_000 + i);
let taker_id = Id::from_u64(thread_id as u64 * 1_000_000 + i);
thread_price_level.match_order(2, taker_id, &thread_transaction_id_gen);
}
_ => {
// Cancel an order
let order_id = OrderId::from_u64(i % 500);
let order_id = Id::from_u64(i % 500);
let _ =
thread_price_level.update_order(OrderUpdate::Cancel { order_id });
}
Expand Down Expand Up @@ -197,7 +197,7 @@ fn measure_hot_spot_contention(
0 => {
// Cancel an order
let _ = thread_price_level.update_order(OrderUpdate::Cancel {
order_id: OrderId::from_u64(order_idx),
order_id: Id::from_u64(order_idx),
});
}
1 => {
Expand All @@ -209,13 +209,13 @@ fn measure_hot_spot_contention(
2 => {
// Update quantity
let _ = thread_price_level.update_order(OrderUpdate::UpdateQuantity {
order_id: OrderId::from_u64(order_idx),
order_id: Id::from_u64(order_idx),
new_quantity: 15,
});
}
_ => {
// Match operations
let taker_id = OrderId::from_u64(thread_id as u64 * 1_000_000 + i);
let taker_id = Id::from_u64(thread_id as u64 * 1_000_000 + i);
thread_price_level.match_order(1, taker_id, &thread_transaction_id_gen);
}
}
Expand Down Expand Up @@ -246,7 +246,7 @@ fn measure_hot_spot_contention(
#[allow(dead_code)]
fn create_standard_order(id: u64, price: u128, quantity: u64) -> OrderType<()> {
OrderType::Standard {
id: OrderId::from_u64(id),
id: Id::from_u64(id),
price,
quantity,
side: Side::Buy,
Expand Down
26 changes: 12 additions & 14 deletions benches/concurrent/register.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use criterion::{BenchmarkId, Criterion, criterion_group};
use pricelevel::{
Hash32, OrderId, OrderType, OrderUpdate, PegReferenceType, PriceLevel, Side, TimeInForce,
Hash32, Id, OrderType, OrderUpdate, PegReferenceType, PriceLevel, Side, TimeInForce,
UuidGenerator,
};
use std::sync::{Arc, Barrier};
Expand Down Expand Up @@ -71,8 +71,7 @@ pub fn register_benchmarks(c: &mut Criterion) {
Uuid::parse_str("6ba7b810-9dad-11d1-80b4-00c04fd430c8").unwrap();
let transaction_id_generator = UuidGenerator::new(namespace);
// Use different taker order IDs for each thread/iteration
let taker_id =
OrderId::from_u64(thread_id as u64 * 1_000_000 + iteration);
let taker_id = Id::from_u64(thread_id as u64 * 1_000_000 + iteration);
price_level.match_order(5, taker_id, &transaction_id_generator);
},
)
Expand All @@ -98,8 +97,7 @@ pub fn register_benchmarks(c: &mut Criterion) {
iters,
|price_level, thread_id, iteration| {
// Each thread cancels a different order
let order_id =
OrderId::from_u64(thread_id as u64 * 100 + iteration % 100);
let order_id = Id::from_u64(thread_id as u64 * 100 + iteration % 100);
let _ = price_level.update_order(OrderUpdate::Cancel { order_id });
},
)
Expand Down Expand Up @@ -307,19 +305,19 @@ fn measure_concurrent_mixed_operations(thread_count: usize, iterations: u64) ->
}
1 => {
// Match against existing orders
let taker_id = OrderId::from_u64(thread_id as u64 * 1_000_000 + i);
let taker_id = Id::from_u64(thread_id as u64 * 1_000_000 + i);
thread_price_level.match_order(5, taker_id, &thread_transaction_id_gen);
}
2 => {
// Cancel one of the initial orders
let order_id = OrderId::from_u64(i % 200);
let order_id = Id::from_u64(i % 200);
let _ = thread_price_level.update_order(OrderUpdate::Cancel { order_id });
}
_ => {
// Update quantity
let base_id = thread_id as u64 * 1_000_000 + (i - 1);
let _ = thread_price_level.update_order(OrderUpdate::UpdateQuantity {
order_id: OrderId::from_u64(base_id),
order_id: Id::from_u64(base_id),
new_quantity: 20,
});
}
Expand Down Expand Up @@ -352,7 +350,7 @@ fn measure_concurrent_mixed_operations(thread_count: usize, iterations: u64) ->
/// Create a standard limit order for testing
fn create_standard_order(id: u64, price: u128, quantity: u64) -> OrderType<()> {
OrderType::Standard {
id: OrderId::from_u64(id),
id: Id::from_u64(id),
price,
quantity,
side: Side::Buy,
Expand All @@ -366,7 +364,7 @@ fn create_standard_order(id: u64, price: u128, quantity: u64) -> OrderType<()> {
/// Create an iceberg order for testing
fn create_iceberg_order(id: u64, price: u128, visible: u64, hidden: u64) -> OrderType<()> {
OrderType::IcebergOrder {
id: OrderId::from_u64(id),
id: Id::from_u64(id),
price,
visible_quantity: visible,
hidden_quantity: hidden,
Expand All @@ -381,7 +379,7 @@ fn create_iceberg_order(id: u64, price: u128, visible: u64, hidden: u64) -> Orde
/// Create a post-only order for testing
fn create_post_only_order(id: u64, price: u128, quantity: u64) -> OrderType<()> {
OrderType::PostOnly {
id: OrderId::from_u64(id),
id: Id::from_u64(id),
price,
quantity,
side: Side::Buy,
Expand All @@ -403,7 +401,7 @@ fn create_reserve_order(
replenish_amount: Option<u64>,
) -> OrderType<()> {
OrderType::ReserveOrder {
id: OrderId::from_u64(id),
id: Id::from_u64(id),
price,
visible_quantity: visible,
hidden_quantity: hidden,
Expand All @@ -421,7 +419,7 @@ fn create_reserve_order(
/// Create a pegged order for testing
fn create_pegged_order(id: u64, price: u128, quantity: u64) -> OrderType<()> {
OrderType::PeggedOrder {
id: OrderId::from_u64(id),
id: Id::from_u64(id),
price,
quantity,
side: Side::Buy,
Expand All @@ -440,7 +438,7 @@ fn setup_standard_orders(order_count: u64) -> PriceLevel {

for i in 0..order_count {
let order = OrderType::Standard {
id: OrderId::from_u64(i),
id: Id::from_u64(i),
price: 10000u128,
quantity: 10,
side: Side::Buy,
Expand Down
12 changes: 6 additions & 6 deletions benches/price_level/add_orders.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use criterion::{BenchmarkId, Criterion};
use pricelevel::{Hash32, OrderId, OrderType, PriceLevel, Side, TimeInForce};
use pricelevel::{Hash32, Id, OrderType, PriceLevel, Side, TimeInForce};
use std::hint::black_box;

/// Register all benchmarks for adding orders to a price level
Expand Down Expand Up @@ -81,7 +81,7 @@ pub fn register_benchmarks(c: &mut Criterion) {
/// Create a standard limit order for testing
fn create_standard_order(id: u64, price: u128, quantity: u64) -> OrderType<()> {
OrderType::Standard {
id: OrderId::from_u64(id),
id: Id::from_u64(id),
price,
quantity,
side: Side::Buy,
Expand All @@ -95,7 +95,7 @@ fn create_standard_order(id: u64, price: u128, quantity: u64) -> OrderType<()> {
/// Create an iceberg order for testing
fn create_iceberg_order(id: u64, price: u128, visible: u64, hidden: u64) -> OrderType<()> {
OrderType::IcebergOrder {
id: OrderId::from_u64(id),
id: Id::from_u64(id),
price,
visible_quantity: visible,
hidden_quantity: hidden,
Expand All @@ -110,7 +110,7 @@ fn create_iceberg_order(id: u64, price: u128, visible: u64, hidden: u64) -> Orde
/// Create a post-only order for testing
fn create_post_only_order(id: u64, price: u128, quantity: u64) -> OrderType<()> {
OrderType::PostOnly {
id: OrderId::from_u64(id),
id: Id::from_u64(id),
price,
quantity,
side: Side::Buy,
Expand All @@ -132,7 +132,7 @@ fn create_reserve_order(
replenish_amount: Option<u64>,
) -> OrderType<()> {
OrderType::ReserveOrder {
id: OrderId::from_u64(id),
id: Id::from_u64(id),
price,
visible_quantity: visible,
hidden_quantity: hidden,
Expand All @@ -152,7 +152,7 @@ fn create_pegged_order(id: u64, price: u128, quantity: u64) -> OrderType<()> {
use pricelevel::PegReferenceType;

OrderType::PeggedOrder {
id: OrderId::from_u64(id),
id: Id::from_u64(id),
price,
quantity,
side: Side::Buy,
Expand Down
42 changes: 13 additions & 29 deletions benches/price_level/match_orders.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use criterion::{BenchmarkId, Criterion};
use pricelevel::{Hash32, OrderId, OrderType, PriceLevel, Side, TimeInForce, UuidGenerator};
use pricelevel::{Hash32, Id, OrderType, PriceLevel, Side, TimeInForce, UuidGenerator};
use std::hint::black_box;
use uuid::Uuid;

Expand All @@ -14,11 +14,7 @@ pub fn register_benchmarks(c: &mut Criterion) {
let price_level = setup_standard_orders(100);
let namespace = Uuid::parse_str("6ba7b810-9dad-11d1-80b4-00c04fd430c8").unwrap();
let transaction_id_generator = UuidGenerator::new(namespace);
black_box(price_level.match_order(
50,
OrderId::from_u64(999),
&transaction_id_generator,
));
black_box(price_level.match_order(50, Id::from_u64(999), &transaction_id_generator));
})
});

Expand All @@ -28,11 +24,7 @@ pub fn register_benchmarks(c: &mut Criterion) {
let price_level = setup_iceberg_orders(100);
let namespace = Uuid::parse_str("6ba7b810-9dad-11d1-80b4-00c04fd430c8").unwrap();
let transaction_id_generator = UuidGenerator::new(namespace);
black_box(price_level.match_order(
75,
OrderId::from_u64(999),
&transaction_id_generator,
));
black_box(price_level.match_order(75, Id::from_u64(999), &transaction_id_generator));
})
});

Expand All @@ -42,11 +34,7 @@ pub fn register_benchmarks(c: &mut Criterion) {
let price_level = setup_reserve_orders(100);
let namespace = Uuid::parse_str("6ba7b810-9dad-11d1-80b4-00c04fd430c8").unwrap();
let transaction_id_generator = UuidGenerator::new(namespace);
black_box(price_level.match_order(
60,
OrderId::from_u64(999),
&transaction_id_generator,
));
black_box(price_level.match_order(60, Id::from_u64(999), &transaction_id_generator));
})
});

Expand All @@ -56,11 +44,7 @@ pub fn register_benchmarks(c: &mut Criterion) {
let price_level = setup_mixed_orders(100);
let namespace = Uuid::parse_str("6ba7b810-9dad-11d1-80b4-00c04fd430c8").unwrap();
let transaction_id_generator = UuidGenerator::new(namespace);
black_box(price_level.match_order(
100,
OrderId::from_u64(999),
&transaction_id_generator,
));
black_box(price_level.match_order(100, Id::from_u64(999), &transaction_id_generator));
})
});

Expand All @@ -77,7 +61,7 @@ pub fn register_benchmarks(c: &mut Criterion) {
let transaction_id_generator = UuidGenerator::new(namespace);
black_box(price_level.match_order(
match_quantity,
OrderId::from_u64(999),
Id::from_u64(999),
&transaction_id_generator,
));
})
Expand All @@ -98,7 +82,7 @@ pub fn register_benchmarks(c: &mut Criterion) {
let transaction_id_generator = UuidGenerator::new(namespace);
black_box(price_level.match_order(
match_quantity,
OrderId::from_u64(999),
Id::from_u64(999),
&transaction_id_generator,
));
})
Expand All @@ -117,7 +101,7 @@ fn setup_standard_orders(order_count: u64) -> PriceLevel {

for i in 0..order_count {
let order = OrderType::Standard {
id: OrderId::from_u64(i),
id: Id::from_u64(i),
price: 10000u128,
quantity: 10,
side: Side::Buy,
Expand All @@ -138,7 +122,7 @@ fn setup_iceberg_orders(order_count: u64) -> PriceLevel {

for i in 0..order_count {
let order = OrderType::IcebergOrder {
id: OrderId::from_u64(i),
id: Id::from_u64(i),
price: 10000u128,
visible_quantity: 5,
hidden_quantity: 15,
Expand All @@ -160,7 +144,7 @@ fn setup_reserve_orders(order_count: u64) -> PriceLevel {

for i in 0..order_count {
let order = OrderType::ReserveOrder {
id: OrderId::from_u64(i),
id: Id::from_u64(i),
price: 10000u128,
visible_quantity: 5,
hidden_quantity: 15,
Expand All @@ -186,7 +170,7 @@ fn setup_mixed_orders(order_count: u64) -> PriceLevel {
for i in 0..order_count {
let order = match i % 3 {
0 => OrderType::Standard {
id: OrderId::from_u64(i),
id: Id::from_u64(i),
price: 10000u128,
quantity: 10,
side: Side::Buy,
Expand All @@ -196,7 +180,7 @@ fn setup_mixed_orders(order_count: u64) -> PriceLevel {
extra_fields: (),
},
1 => OrderType::IcebergOrder {
id: OrderId::from_u64(i),
id: Id::from_u64(i),
price: 10000u128,
visible_quantity: 5,
hidden_quantity: 15,
Expand All @@ -207,7 +191,7 @@ fn setup_mixed_orders(order_count: u64) -> PriceLevel {
extra_fields: (),
},
_ => OrderType::ReserveOrder {
id: OrderId::from_u64(i),
id: Id::from_u64(i),
price: 10000u128,
visible_quantity: 5,
hidden_quantity: 15,
Expand Down
Loading
Loading