Remove potentially too costly Packets::default() (#14821)
* Remove potentially too costly Packets::default() * Fix test... * Restore Packets::default() * Restore Packets::default() more
This commit is contained in:
@ -1121,7 +1121,7 @@ mod tests {
|
|||||||
genesis_utils::{create_genesis_config, GenesisConfigInfo},
|
genesis_utils::{create_genesis_config, GenesisConfigInfo},
|
||||||
get_tmp_ledger_path,
|
get_tmp_ledger_path,
|
||||||
};
|
};
|
||||||
use solana_perf::packet::to_packets;
|
use solana_perf::packet::to_packets_chunked;
|
||||||
use solana_sdk::{
|
use solana_sdk::{
|
||||||
instruction::InstructionError,
|
instruction::InstructionError,
|
||||||
signature::{Keypair, Signer},
|
signature::{Keypair, Signer},
|
||||||
@ -1292,7 +1292,7 @@ mod tests {
|
|||||||
let tx_anf = system_transaction::transfer(&keypair, &to3, 1, start_hash);
|
let tx_anf = system_transaction::transfer(&keypair, &to3, 1, start_hash);
|
||||||
|
|
||||||
// send 'em over
|
// send 'em over
|
||||||
let packets = to_packets(&[tx_no_ver, tx_anf, tx]);
|
let packets = to_packets_chunked(&[tx_no_ver, tx_anf, tx], 3);
|
||||||
|
|
||||||
// glad they all fit
|
// glad they all fit
|
||||||
assert_eq!(packets.len(), 1);
|
assert_eq!(packets.len(), 1);
|
||||||
@ -1368,7 +1368,7 @@ mod tests {
|
|||||||
let tx =
|
let tx =
|
||||||
system_transaction::transfer(&mint_keypair, &alice.pubkey(), 2, genesis_config.hash());
|
system_transaction::transfer(&mint_keypair, &alice.pubkey(), 2, genesis_config.hash());
|
||||||
|
|
||||||
let packets = to_packets(&[tx]);
|
let packets = to_packets_chunked(&[tx], 1);
|
||||||
let packets = packets
|
let packets = packets
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|packets| (packets, vec![1u8]))
|
.map(|packets| (packets, vec![1u8]))
|
||||||
@ -1379,7 +1379,7 @@ mod tests {
|
|||||||
// Process a second batch that uses the same from account, so conflicts with above TX
|
// Process a second batch that uses the same from account, so conflicts with above TX
|
||||||
let tx =
|
let tx =
|
||||||
system_transaction::transfer(&mint_keypair, &alice.pubkey(), 1, genesis_config.hash());
|
system_transaction::transfer(&mint_keypair, &alice.pubkey(), 1, genesis_config.hash());
|
||||||
let packets = to_packets(&[tx]);
|
let packets = to_packets_chunked(&[tx], 1);
|
||||||
let packets = packets
|
let packets = packets
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|packets| (packets, vec![1u8]))
|
.map(|packets| (packets, vec![1u8]))
|
||||||
|
@ -825,7 +825,7 @@ mod tests {
|
|||||||
use bincode::serialized_size;
|
use bincode::serialized_size;
|
||||||
info!("max vote size {}", serialized_size(&vote_tx).unwrap());
|
info!("max vote size {}", serialized_size(&vote_tx).unwrap());
|
||||||
|
|
||||||
let msgs = packet::to_packets(&[vote_tx]); // panics if won't fit
|
let msgs = packet::to_packets_chunked(&[vote_tx], 1); // panics if won't fit
|
||||||
|
|
||||||
assert_eq!(msgs.len(), 1);
|
assert_eq!(msgs.len(), 1);
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
extern crate test;
|
extern crate test;
|
||||||
|
|
||||||
use solana_perf::packet::to_packets;
|
use solana_perf::packet::to_packets_chunked;
|
||||||
use solana_perf::recycler::Recycler;
|
use solana_perf::recycler::Recycler;
|
||||||
use solana_perf::sigverify;
|
use solana_perf::sigverify;
|
||||||
use solana_perf::test_tx::test_tx;
|
use solana_perf::test_tx::test_tx;
|
||||||
@ -13,7 +13,7 @@ fn bench_sigverify(bencher: &mut Bencher) {
|
|||||||
let tx = test_tx();
|
let tx = test_tx();
|
||||||
|
|
||||||
// generate packet vector
|
// generate packet vector
|
||||||
let batches = to_packets(&std::iter::repeat(tx).take(128).collect::<Vec<_>>());
|
let batches = to_packets_chunked(&std::iter::repeat(tx).take(128).collect::<Vec<_>>(), 128);
|
||||||
|
|
||||||
let recycler = Recycler::default();
|
let recycler = Recycler::default();
|
||||||
let recycler_out = Recycler::default();
|
let recycler_out = Recycler::default();
|
||||||
@ -28,7 +28,7 @@ fn bench_get_offsets(bencher: &mut Bencher) {
|
|||||||
let tx = test_tx();
|
let tx = test_tx();
|
||||||
|
|
||||||
// generate packet vector
|
// generate packet vector
|
||||||
let batches = to_packets(&std::iter::repeat(tx).take(1024).collect::<Vec<_>>());
|
let batches = to_packets_chunked(&std::iter::repeat(tx).take(1024).collect::<Vec<_>>(), 1024);
|
||||||
|
|
||||||
let recycler = Recycler::default();
|
let recycler = Recycler::default();
|
||||||
// verify packets
|
// verify packets
|
||||||
|
@ -11,18 +11,11 @@ pub const PACKETS_PER_BATCH: usize = 256;
|
|||||||
pub const NUM_RCVMMSGS: usize = 128;
|
pub const NUM_RCVMMSGS: usize = 128;
|
||||||
pub const PACKETS_BATCH_SIZE: usize = PACKETS_PER_BATCH * PACKET_DATA_SIZE;
|
pub const PACKETS_BATCH_SIZE: usize = PACKETS_PER_BATCH * PACKET_DATA_SIZE;
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Default, Clone)]
|
||||||
pub struct Packets {
|
pub struct Packets {
|
||||||
pub packets: PinnedVec<Packet>,
|
pub packets: PinnedVec<Packet>,
|
||||||
}
|
}
|
||||||
|
|
||||||
//auto derive doesn't support large arrays
|
|
||||||
impl Default for Packets {
|
|
||||||
fn default() -> Packets {
|
|
||||||
Self::with_capacity(NUM_RCVMMSGS)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub type PacketsRecycler = Recycler<PinnedVec<Packet>>;
|
pub type PacketsRecycler = Recycler<PinnedVec<Packet>>;
|
||||||
|
|
||||||
impl Packets {
|
impl Packets {
|
||||||
@ -75,6 +68,7 @@ pub fn to_packets_chunked<T: Serialize>(xs: &[T], chunks: usize) -> Vec<Packets>
|
|||||||
out
|
out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
pub fn to_packets<T: Serialize>(xs: &[T]) -> Vec<Packets> {
|
pub fn to_packets<T: Serialize>(xs: &[T]) -> Vec<Packets> {
|
||||||
to_packets_chunked(xs, NUM_PACKETS)
|
to_packets_chunked(xs, NUM_PACKETS)
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
//! The `packet` module defines data structures and methods to pull data from the network.
|
//! The `packet` module defines data structures and methods to pull data from the network.
|
||||||
use crate::recvmmsg::{recv_mmsg, NUM_RCVMMSGS};
|
use crate::recvmmsg::{recv_mmsg, NUM_RCVMMSGS};
|
||||||
pub use solana_perf::packet::{
|
pub use solana_perf::packet::{
|
||||||
limited_deserialize, to_packets, to_packets_chunked, Packets, PacketsRecycler, NUM_PACKETS,
|
limited_deserialize, to_packets_chunked, Packets, PacketsRecycler, NUM_PACKETS,
|
||||||
PACKETS_BATCH_SIZE, PACKETS_PER_BATCH,
|
PACKETS_BATCH_SIZE, PACKETS_PER_BATCH,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user