-
Notifications
You must be signed in to change notification settings - Fork 88
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Use a single client per node in benchmarks #910
Conversation
A while ago we introduced the `withNewClient` function to submit transactions in the benchmark because we wanted to increase concurrency and be able to load the server with more than one client. We ended up dropping that capability from the benchmarks but kept having a separate connection between the main body of the benchmark and the transaction submission process. This actually introduces a subtle bug that does only surface for sufficiently large loads. Here is what's happening: 1. The benchmark opens a connection to control the head 2. For each separate list of transaction in the workload, we open a connection and starts sending txs and reading results 3. Because all Server outputs are broadcast to all clients, the first connection is also sent the messages but does not read it 4. After a while, which depends on parameters of the machine, the TCP buffer is full and the TCP protocol triggers a close of the server -> client part of the connection 5. The client -> server part is still valid so the client can send the close once the transaction processing ends 6. But as soon as we want to receive something, we start reading stale messages accumulated in some buffer and then it the closed connection
Transactions CostsSizes and execution budgets for Hydra protocol transactions. Note that unlisted parameters are currently using
Script summary
Cost of Init Transaction
Cost of Commit TransactionThis is using ada-only outputs for better comparability.
Cost of CollectCom Transaction
Cost of Close Transaction
Cost of Contest Transaction
Cost of Abort TransactionSome variation because of random mixture of still initial and already committed outputs.
Cost of FanOut TransactionInvolves spending head output and burning head tokens. Uses ada-only UTxO for better comparability.
|
A while ago we introduced the
withNewClient
function to submit transactions in the benchmark because we wanted to increase concurrency and be able to load the server with more than one client. We ended up dropping that capability from the benchmarks but kept having a separate connection between the main body of the benchmark and the transaction submission process.This actually introduces a subtle bug that does only surface for sufficiently large loads. Here is what's happening: