Commit Graph

25059 Commits

Author SHA1 Message Date
Joe C 4b0e7d6ba3
Test Validator: Set deployment slot to `0` for cloned upgradeable programs (#501)
test-validator: clone upgradeable programs with slot 0
2024-03-29 17:05:53 -05:00
samkim-crypto fb1ee7842f
[zk-token-sdk] Allow discrete log to be executed in the current thread (#443) 2024-03-30 06:37:43 +09:00
samkim-crypto c5b9196df7
[clap-v3-utils] Use `Arg::new` in place of `Arg::with_name` (#491) 2024-03-30 06:37:19 +09:00
Jeff Washington (jwash) 18c32aba35
disable read cache while populating stakes cache on load (#482)
* dsiable read cache while populating stakes cache on load

* use struct with drop as api

* use LoadHint

* remove disable_read_cache_updates_count

* add comment

* fmt
2024-03-29 15:20:38 -05:00
Greg Cusack 04feed2cf5
add metric for duplicate push messages (#321)
* add metric for duplicate push messages

* add in num_total_push

* address comments. don't lock stats each time

* address comments. remove num_total_push

* change dup push message name in code to reflect metric name
2024-03-29 12:12:12 -07:00
Andrew Fitzgerald a41210f898
Scheduler: remove allow(dead_code) markers (#481)
remove allow(dead_code) markers
2024-03-29 10:27:41 -07:00
Yihau Chen b1e17998b6
ci: fix some issues for the release pipeline (#493)
* add TRIGGERED_BUILDKITE_TAG to the pipeline

* publish a pre-release for the release id
2024-03-29 20:56:54 +08:00
steviez 9076348ef4
Make CostTracker aware of inflight transactions (#437)
When a leader is packing a Bank, transactions costs are added to the
CostTracker and then later updated or removed, depending on if the
tx is committed. However, it is possible for a Bank to be frozen while
there are several tx's in flight.

CostUpdateService submits a metric with cost information almost
immediately after a Bank has been frozen. The result is that we have
observed cost details being submitted before some cost removals take
place, which causes a massive over-reporting of the block cost
compared to actual.

This PR adds a field to track the number of transactions that are
inflight, and adds a simple mechanism to try to allow that value to
settle to zero before submitting the datapoint. The number of inflight
tx's is submitted with the datapoint, so even if the value does not
settle to zero, we can still detect this case and know the metric is
tainted.

Co-authored-by: Andrew Fitzgerald <apfitzge@gmail.com>
2024-03-29 07:34:12 -05:00
Tyera d140cdbeab
Update crate check to new crates.io error string (#484) 2024-03-29 00:42:09 -06:00
Ryo Onodera ae327c0156
Bump blake3 from v1.5.0 to v1.5.1 (#488) 2024-03-29 15:30:42 +09:00
Yihau Chen 212cbdbc4e
ci: add release pipeline (#466) 2024-03-29 11:41:53 +08:00
Jeff Washington (jwash) e261e2704a
store only removes from read cache if slot is possibly present (#452)
* store only removes from read cache if slot is possibly present

* remove_assume_not_present
2024-03-28 17:00:48 -05:00
Brooks d5c0c0b1c2
Removes support for loading snapshots with > 1 append vec per slot (#474) 2024-03-28 16:32:17 -04:00
Alessandro Decina f36a45a971
ledger-tool: name rayon threads (#464)
ledger-tool: name and shame rayon threads
2024-03-29 06:13:01 +11:00
Brooks 8822aaa67e
Do not purge all bank snapshots after fastboot (#345) 2024-03-28 15:10:50 -04:00
Joe C b9a998a69b
config: deprecate date instructions (#465) 2024-03-28 13:41:09 -05:00
Will Hickey 1ded5a875a
Update RELEASE.md to reflect current release process (#444)
* Update RELEASE.md to reflect current release process

* Changed a few Solana -> agave
2024-03-28 13:13:27 -05:00
Brooks 182d27f718
Checks if bank snapshot is loadable before fastbooting (#343) 2024-03-28 11:14:23 -04:00
samkim-crypto b1919bd9e4
[keygen] Remove deprecated functions from `keygen` cli (minus `grind` command) (#438) 2024-03-28 13:31:43 +09:00
Tyera ecb4f62887
Simd 118: extend EpochRewards sysvar (#428)
* Update EpochRewards sysvar

* Update Clone trait

* Update doctests

* Update bank to new sysvar fields

* Update runtime tests

* Update syscall test

* Update tests

* Clean up doctest EpochRewards construction
2024-03-27 19:24:06 -06:00
Jon C 8246590f47
clap-utils: Add more compute unit helpers (#440)
* clap-utils: Refactor compute_unit_price into compute_budget

* clap-utils: Validate compute unit price as a u64

* clap-utils: Add compute unit limit arg

* clap-v3-utils: Add compute unit price and limit helpers

* Add deprecation on `pub use` even though it isn't triggered
2024-03-28 01:58:20 +01:00
steviez 10d06773cd
Share the threadpool for tx execution and entry verifification (#216)
Previously, entry verification had a dedicated threadpool used to verify
PoH hashes as well as some basic transaction verification via
Bank::verify_transaction(). It should also be noted that the entry
verification code provides logic to offload to a GPU if one is present.

Regardless of whether a GPU is present or not, some of the verification
must be done on a CPU. Moreso, the CPU verification of entries and
transaction execution are serial operations; entry verification finishes
first before moving onto transaction execution.

So, tx execution and entry verification are not competing for CPU cycles
at the same time and can use the same pool.

One exception to the above statement is that if someone is using the
feature to replay forks in parallel, then hypothetically, different
forks may end up competing for the same resources at the same time.
However, that is already true given that we had pools that were shared
between replay of multiple forks. So, this change doesn't really change
much for that case, but will reduce overhead in the single fork case
which is the vast majority of the time.
2024-03-27 16:33:21 -05:00
Lucas Steuernagel e70ff38f35
Use loader v3 instead of v2 in the SVM (#454) 2024-03-27 15:47:34 -03:00
Kirill Fomichev ba9c25c41e
prioritization fee cache: remove lru crate (#30) 2024-03-27 11:09:17 -06:00
Ashwin Sekar cfd5b71b28
shred: expose chained merkle root (#435)
* shred: expose chained merkle root

* pr feedback: macro, pub(super), _=> none
2024-03-27 10:06:43 -07:00
Lucas Steuernagel 02918a5af1
Update sysvar API in SVM integration test (#451) 2024-03-27 13:49:43 -03:00
Yueh-Hsuan Chiang 4b9e1e0ab3
[TieredStorage] Exclude NotFound in reporting storage leakage on drop() (#446)
#### Problem
TieredStorage::drop() currently panic when it fails to delete the
underlying file to raise awareness of possible storage resource
leakage, including io::ErrorKind::NotFound.  But sometimes the
TieredStorage (or AccountsFile in general) instance is created
then dropped without any file being created.  This causes some
false-alarms including unit-tests.

#### Summary of Changes
This PR excludes NotFound in reporting storage leakage on
TieredStorage::drop().
2024-03-27 09:43:38 -07:00
Lucas Steuernagel 9cd90751f0
Add `SanitizedTransaction` builder to SVM (#442)
Add SanitizedTransaction builder
2024-03-27 10:00:04 -03:00
Kirill Fomichev 80d3200f4a
prioritization fee cache: remove not required locks (#272)
* prioritization fee cache: remove not required locks

* update HashMap to BTreeMap

* fix clippy

* add type alias

* apply name change

* check that cache is empty

* remove sleep

* remove outdated commented tests

* fmt

* extra warn
2024-03-26 17:19:26 -06:00
Andrew Fitzgerald 7c8a287ff2
Bugfix: Report scheduler slot timing metrics under correct name (#376) 2024-03-26 13:52:45 -07:00
Brooks 21fbde741a
Uses Into<PathBuf> for path in AccountsFile::new_from_file() (#434) 2024-03-26 16:19:06 -04:00
Kevin Heavey 24c55f39ee
Replace Vec::new() with Vec::with_capacity(2) (#413) 2024-03-26 17:08:56 -03:00
Brooks 21b6821885
Uses Into<PathBuf> for path in AppendVec::new() (#433) 2024-03-26 14:44:17 -04:00
samkim-crypto 01314a4fc3
[clap-v3-utils] Add `try_get_language` and deprecate `acquire_language` (#430) 2024-03-27 02:51:54 +09:00
Tyera bcf3d809c9
Simd 118: rekey partitioned epoch rewards feature (#427)
Rekey partitioned epoch rewards feature
2024-03-26 10:13:25 -06:00
Brooks b2b159ad92
Adds bench for writing accounts to append vecs and hot storage (#421) 2024-03-26 10:44:23 -04:00
Brooks 8e37ad7665
Removes unused dependencies from accounts-db crate (#416) 2024-03-26 09:30:06 -04:00
Joe C 3627038541
Runtime: Core BPF Migration: Struct for loading and checking source BPF program accounts (#332)
* runtime: core_bpf_migration: add source_bpf_upgradeable config

* runtime: core_bpf_migration: add source_bpf_upgradeable config tests

* renamings

* bincode error

* drop `total_size`
2024-03-26 07:05:10 -05:00
samkim-crypto a3bc406b55
[zk-token-sdk] Remove `std::thread` from wasm target (#379) 2024-03-26 19:54:06 +09:00
kirill lykov 1261f1f900
Add analysis for bench-tps transactions (#92)
* save progress

* rename threads handler

* added writer for txs

* after extracting structure to handle tx confirmations

* extract LogWriter

* Replace pair TimestampedTransaction with struct

* add compute_unit_price to TimestampedTransaction

* add cu_price to LogWriter

* add block time to the logs

* Fix warnings

* add comments and restructure code

* some small improvements

* Renamed conformation_processing.rs to log_transaction_service.rs

* address numerous PR comments

* split LogWriter into two structs

* simplify code of LogWriters

* extract process_blocks

* specify commitment in LogTransactionService

* break thread loop if receiver happens to be dropped

* update start_slot when processing blocks

* address pr comments

* fix clippy error

* minor changes

* fix ms problem

* fix bug with time in clear transaction map
2024-03-26 11:47:24 +01:00
behzad nouri 30eecd62b1
implements weighted shuffle using N-ary tree (#259)
This is port of firedancer's implementation of weighted shuffle:
https://github.com/firedancer-io/firedancer/blob/3401bfc26/src/ballet/wsample/fd_wsample.c

https://github.com/anza-xyz/agave/pull/185
implemented weighted shuffle using binary tree. Though asymptotically a
binary tree has better performance, compared to a Fenwick tree, it has
less cache locality resulting in smaller improvements and in particular
slower WeightedShuffle::new.

In order to improve cache locality and reduce the overheads of
traversing the tree, this commit instead uses a generalized N-ary tree
with fanout of 16, showing significant improvements in both
WeightedShuffle::new and WeightedShuffle::shuffle.

With 4000 weights:

N-ary tree (fanout 16):

    test bench_weighted_shuffle_new     ... bench:      36,244 ns/iter (+/- 243)
    test bench_weighted_shuffle_shuffle ... bench:     149,082 ns/iter (+/- 1,474)

Binary tree:

    test bench_weighted_shuffle_new     ... bench:      58,514 ns/iter (+/- 229)
    test bench_weighted_shuffle_shuffle ... bench:     269,961 ns/iter (+/- 16,446)

Fenwick tree:

    test bench_weighted_shuffle_new     ... bench:      39,413 ns/iter (+/- 179)
    test bench_weighted_shuffle_shuffle ... bench:     364,771 ns/iter (+/- 2,078)

The improvements become even more significant as there are more items to
shuffle. With 20_000 weights:

N-ary tree (fanout 16):

    test bench_weighted_shuffle_new     ... bench:     200,659 ns/iter (+/- 4,395)
    test bench_weighted_shuffle_shuffle ... bench:     941,928 ns/iter (+/- 26,492)

Binary tree:

    test bench_weighted_shuffle_new     ... bench:     881,114 ns/iter (+/- 12,343)
    test bench_weighted_shuffle_shuffle ... bench:   1,822,257 ns/iter (+/- 12,772)

Fenwick tree:

    test bench_weighted_shuffle_new     ... bench:     276,936 ns/iter (+/- 14,692)
    test bench_weighted_shuffle_shuffle ... bench:   2,644,713 ns/iter (+/- 49,252)
2024-03-26 05:21:54 +00:00
carllin b01d7923fc
Add local cluster utitlity functions (#355) 2024-03-26 00:34:15 -04:00
samkim-crypto f6a3608981
[clap-v3-utils] Add `try_get_word_count` (#411) 2024-03-26 13:25:57 +09:00
samkim-crypto c867522de8
[clap-v3-utils] Make `SignerSource::parse` public (#410)
make `SignerSource::parse` public
2024-03-26 07:42:31 +09:00
Yueh-Hsuan Chiang c7dba30f4f
[TieredStorage] Disable accounts-file type check before enabling tiered-storage (#418)
#### Problem
As #72 introduced AccountsFile::TieredStorage, it also performs
file-type check when opening an accounts-file to determine whether
it is a tiered-storage or an append-vec.  But before tiered-storage is
enabled, this opening check is unnecessary.

#### Summary of Changes
Remove the accounts-file type check code and simply assume everything
is append-vec on AccountsFile::new_from_file().
2024-03-25 12:08:48 -07:00
Lucas Steuernagel b884ea8011
Add examples of failing transactions to SVM integration tests (#417)
Add examples of failing transactions
2024-03-25 16:02:58 -03:00
Yueh-Hsuan Chiang a916edb7a2
[TieredStorage] Add AccountsFile::TieredStorage (#72)
#### Problem
AccountsFile currently doesn't have an implementation for TieredStorage.
To enable AccountsDB tests for the TieredStorage, we need AccountsFile
to support TieredStorage.

#### Summary of Changes
This PR implements a AccountsFile::TieredStorage, a thin wrapper between
AccountsFile and TieredStorage.
2024-03-24 16:41:36 -07:00
Yueh-Hsuan Chiang 602471257e
[TieredStorage] Add capacity() API and limit file size to 16GB (#401)
#### Problem
The TieredStorage has not yet implemented the AccountsFile::capacity()
API.

#### Summary of Changes
Implement capacity() API for TieredStorage and limit file size to 16GB,
same as the append-vec file.
2024-03-23 22:14:19 -07:00
behzad nouri b6d2237403
implements weighted shuffle using binary tree (#185)
This is partial port of firedancer's implementation of weighted shuffle:
https://github.com/firedancer-io/firedancer/blob/3401bfc26/src/ballet/wsample/fd_wsample.c

Though Fenwick trees use less space, inverse queries require an
additional O(log n) factor for binary search resulting an overall
O(n log n log n) performance for weighted shuffle.

This commit instead uses a binary tree where each node contains the sum
of all weights in its left sub-tree. The weights themselves are
implicitly stored at the leaves. Inverse queries and updates to the tree
all can be done O(log n) resulting an overall O(n log n) weighted
shuffle implementation.

Based on benchmarks, this results in 24% improvement in
WeightedShuffle::shuffle:

Fenwick tree:
    test bench_weighted_shuffle_new     ... bench:      36,686 ns/iter (+/- 191)
    test bench_weighted_shuffle_shuffle ... bench:     342,625 ns/iter (+/- 4,067)

Binary tree:
    test bench_weighted_shuffle_new     ... bench:      59,131 ns/iter (+/- 362)
    test bench_weighted_shuffle_shuffle ... bench:     260,194 ns/iter (+/- 11,195)

Though WeightedShuffle::new is now slower, it generally can be cached
and reused as in Turbine:
https://github.com/anza-xyz/agave/blob/b3fd87fe8/turbine/src/cluster_nodes.rs#L68

Additionally the new code has better asymptotic performance. For
example with 20_000 weights WeightedShuffle::shuffle is 31% faster:

Fenwick tree:
    test bench_weighted_shuffle_new     ... bench:     255,071 ns/iter (+/- 9,591)
    test bench_weighted_shuffle_shuffle ... bench:   2,466,058 ns/iter (+/- 9,873)

Binary tree:
    test bench_weighted_shuffle_new     ... bench:     830,727 ns/iter (+/- 10,210)
    test bench_weighted_shuffle_shuffle ... bench:   1,696,160 ns/iter (+/- 75,271)
2024-03-23 13:53:46 +00:00
Joe C bfdfc6cef2
frozen-abi-macro: use `log` from `solana_frozen_abi` (#153)
* frozen-abi-macro: use `log` from `solana_frozen_abi`

* use private module approach
2024-03-23 07:38:57 -05:00