Fix pinning (#6604)

Remove Deref implementations and add more pass-throughs to the PinnedVec
wrapper.
Warm recyclers
set_pinnable
This commit is contained in:
sakridge
2019-11-07 19:48:33 -08:00
committed by GitHub
parent 80a89b5e6d
commit 8e81bc1b49
15 changed files with 170 additions and 88 deletions

View File

@ -921,7 +921,7 @@ impl Archiver {
let res = r_reader.recv_timeout(Duration::new(1, 0));
if let Ok(mut packets) = res {
while let Ok(mut more) = r_reader.try_recv() {
packets.packets.append(&mut more.packets);
packets.packets.append_pinned(&mut more.packets);
}
let shreds: Vec<Shred> = packets
.packets

View File

@ -16,6 +16,7 @@ use solana_ledger::{
};
use solana_measure::measure::Measure;
use solana_metrics::{inc_new_counter_debug, inc_new_counter_info, inc_new_counter_warn};
use solana_perf::cuda_runtime::PinnedVec;
use solana_perf::perf_libs;
use solana_runtime::{accounts_db::ErrorCounters, bank::Bank, transaction_batch::TransactionBatch};
use solana_sdk::{
@ -789,7 +790,7 @@ impl BankingStage {
filtered_unprocessed_packet_indexes
}
fn generate_packet_indexes(vers: &[Packet]) -> Vec<usize> {
fn generate_packet_indexes(vers: &PinnedVec<Packet>) -> Vec<usize> {
vers.iter()
.enumerate()
.filter_map(

View File

@ -1,6 +1,7 @@
//! The `fetch_stage` batches input from a UDP socket and sends it to a channel.
use crate::banking_stage::FORWARD_TRANSACTIONS_TO_LEADER_AT_SLOT_OFFSET;
use crate::packet::PacketsRecycler;
use crate::poh_recorder::PohRecorder;
use crate::result::{Error, Result};
use crate::service::Service;
@ -92,7 +93,8 @@ impl FetchStage {
sender: &PacketSender,
poh_recorder: &Arc<Mutex<PohRecorder>>,
) -> Self {
let recycler = Recycler::default();
let recycler: PacketsRecycler = Recycler::warmed(1000, 1024);
let tpu_threads = sockets.into_iter().map(|socket| {
streamer::receiver(
socket,

View File

@ -1,6 +1,6 @@
//! The `shred_fetch_stage` pulls shreds from UDP sockets and sends it to a channel.
use crate::packet::Packet;
use crate::packet::{Packet, PacketsRecycler};
use crate::service::Service;
use crate::streamer::{self, PacketReceiver, PacketSender};
use solana_perf::cuda_runtime::PinnedVec;
@ -67,7 +67,8 @@ impl ShredFetchStage {
sender: &PacketSender,
exit: &Arc<AtomicBool>,
) -> Self {
let recycler = Recycler::default();
let recycler: PacketsRecycler = Recycler::warmed(100, 1024);
let tvu_threads = sockets.into_iter().map(|socket| {
streamer::receiver(
socket,

View File

@ -23,8 +23,8 @@ impl Default for TransactionSigVerifier {
fn default() -> Self {
init();
Self {
recycler: Recycler::default(),
recycler_out: Recycler::default(),
recycler: Recycler::warmed(50, 4096),
recycler_out: Recycler::warmed(50, 4096),
}
}
}

View File

@ -30,8 +30,8 @@ impl ShredSigVerifier {
Self {
bank_forks,
leader_schedule_cache,
recycler_offsets: Recycler::default(),
recycler_out: Recycler::default(),
recycler_offsets: Recycler::warmed(50, 4096),
recycler_out: Recycler::warmed(50, 4096),
}
}
fn read_slots(batches: &[Packets]) -> HashSet<u64> {

View File

@ -287,7 +287,7 @@ mod test {
service::Service,
};
use crossbeam_channel::unbounded;
use rand::{seq::SliceRandom, thread_rng};
use rand::thread_rng;
use solana_ledger::shred::DataShredHeader;
use solana_ledger::{
blocktree::{get_tmp_ledger_path, make_many_slot_entries, Blocktree},