entry_sigverify.rs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #![feature(test)]
  2. extern crate test;
  3. use {
  4. agave_reserved_account_keys::ReservedAccountKeys,
  5. solana_entry::entry,
  6. solana_hash::Hash,
  7. solana_message::SimpleAddressLoader,
  8. solana_perf::test_tx::test_tx,
  9. solana_runtime_transaction::runtime_transaction::RuntimeTransaction,
  10. solana_transaction::{
  11. sanitized::{MessageHash, SanitizedTransaction},
  12. versioned::VersionedTransaction,
  13. },
  14. solana_transaction_error::TransactionResult as Result,
  15. std::sync::Arc,
  16. test::Bencher,
  17. };
  18. #[bench]
  19. fn bench_cpusigverify(bencher: &mut Bencher) {
  20. let thread_pool = entry::thread_pool_for_benches();
  21. let entries = (0..131072)
  22. .map(|_| {
  23. let transaction = test_tx();
  24. entry::next_entry_mut(&mut Hash::default(), 0, vec![transaction])
  25. })
  26. .collect::<Vec<_>>();
  27. let verify_transaction = {
  28. move |versioned_tx: VersionedTransaction| -> Result<RuntimeTransaction<SanitizedTransaction>> {
  29. let sanitized_tx = {
  30. let message_hash = versioned_tx.verify_and_hash_message()?;
  31. RuntimeTransaction::try_create(
  32. versioned_tx,
  33. MessageHash::Precomputed(message_hash),
  34. None,
  35. SimpleAddressLoader::Disabled,
  36. &ReservedAccountKeys::empty_key_set(),
  37. true,
  38. )
  39. }?;
  40. Ok(sanitized_tx)
  41. }
  42. };
  43. bencher.iter(|| {
  44. let _ans =
  45. entry::verify_transactions(entries.clone(), &thread_pool, Arc::new(verify_transaction));
  46. })
  47. }