App Install
Measure app installation speed. This scenario has two roles:
minimal: Installs a simple app which implements initialisation callbacks but otherwise doesn't contain a lot of code.large: Installs a larger app that contains some dependencies and some generated data as padding to make the bundle larger.
These are intended to catch a compilation slowdown or issues with copying around large WASMs (e.g. accidental cloning or tracing). In each case, the behaviour will uninstall the app it installed so that it can re-install it on the next iteration.
-
minimal(1 agent)
App Install
Measure app installation speed. This scenario has two roles:
minimal: Installs a simple app which implements initialisation callbacks but otherwise doesn't contain a lot of code.large: Installs a larger app that contains some dependencies and some generated data as padding to make the bundle larger.
These are intended to catch a compilation slowdown or issues with copying around large WASMs (e.g. accidental cloning or tracing). In each case, the behaviour will uninstall the app it installed so that it can re-install it on the next iteration.
-
large(1 agent)
DHT Sync Lag
Measure lag time between an agent publishing data and other peers being able to see it. This scenario has two roles:
write: A simple job that just creates entries with a timestamp field. Those entries are linked to a known base hash. For each write, the metricws.custom.dht_sync_sent_countis incremented.record_lag: A job that repeatedly queries for links from the known base hash. It keeps track of records that it has seen and when a new record is found, and calculates the time difference between the timestamp of the new record and the current time. That time difference is then recorded as a custom metric calledwt.custom.dht_sync_lag.
After each behaviour loop the metric ws.custom.dht_sync_recv_count is incremented.
-
record_lag(5 agents) -
write(5 agents)
agent:uhCAk1ab_ez-gqy6n5d2yfwXAKBYLeP5_w1MrdyMb1tS2FvcRjSoi
agent:uhCAk32ArYysdjfQx0idyhr0KhGCWO_9LpikGEflzpJklftcAUJ2Z
agent:uhCAkRaJY48Ki8BmBHngl8CC7pxrswVeH_MkMkIlsEOTLv-_Yk9S7
agent:uhCAkXxVvYstzkXWBF5oOO9wSJFIBcPtCVL_qIi3s9VBUmVpIAHRW
agent:uhCAkiJd9N7KnNkF9ZmRpOlC6SR5sZo6pRMOBxb4m5NE7xnXzyxNI
agent:uhCAk5tBKpJmdjMvdU0O6EH6IxD3skRLVdUA0GHHyl1DXKYai69-V
agent:uhCAkEH3fI7flTe3Jak8Gzj1-KY1tPWJNqx0YFDPQIMDsGntlF6jN
agent:uhCAkO95w6siJr-HOqEitq4Pm7ZcsufFLyZ1UnOSvD9KzcXjgIFCZ
agent:uhCAkPTr8wwJ29hITz7EGYSCNfFNCHo_BDW9LYxpqhtjm1Qire1a8
agent:uhCAkzcldr0t7prWic0Fl4ohmTf8qhAOljsuyfwHyJo53KUmCa1xz
agent:uhCAk5tBKpJmdjMvdU0O6EH6IxD3skRLVdUA0GHHyl1DXKYai69-V
agent:uhCAkEH3fI7flTe3Jak8Gzj1-KY1tPWJNqx0YFDPQIMDsGntlF6jN
agent:uhCAkO95w6siJr-HOqEitq4Pm7ZcsufFLyZ1UnOSvD9KzcXjgIFCZ
agent:uhCAkPTr8wwJ29hITz7EGYSCNfFNCHo_BDW9LYxpqhtjm1Qire1a8
agent:uhCAkzcldr0t7prWic0Fl4ohmTf8qhAOljsuyfwHyJo53KUmCa1xz
First Call
This scenario installs a simple app which implements the init callback, and measures the time elapsed between start of install and calling init. It will uninstall the app it installed so that it can re-install it on the next iteration. This is required to re-run the initialisation callback.
- Default (1 agent)
init.Local Signals
This scenario is for testing the speed and reliability of local signals. It uses a zome with a function that will emit 10,000 signals. The scenario measures how long it takes to send the signals and how many have been received by the time the zome call ends.
- Default (1 agent)
No scenario template for mixed_arc_get_agent_activity!
No scenario template for mixed_arc_must_get_agent_activity!
Remote Call Rate
Test the throughput of remote_call operations. Each agent in this scenario waits for a certain number of peers to be available or for up to two minutes, whichever happens first, before starting its behaviour.
- Default (1 agent)
agent:uhCAk3ZyVvHWyb6J9Jx5ZuA0v13Q18LomOJlorp6yTzmoMmMI9JL8
agent:uhCAkdSEWdfT_unXL419MvgYZu4xA4Gm1FluEKMfbJhcWnBCGJtyS
agent:uhCAk3ZyVvHWyb6J9Jx5ZuA0v13Q18LomOJlorp6yTzmoMmMI9JL8
agent:uhCAkdSEWdfT_unXL419MvgYZu4xA4Gm1FluEKMfbJhcWnBCGJtyS
Remote Signals
This scenario tests the throughput of remote_signals operations.
- Default (1 agent)
Single-write, many-read
Creates an entry in the agent setup, then read one's own record back. This tests the maximum read performance for reading back local data when the chain is short.
- Default (1 agent)
read call timingread call rate (10s)Two-party countersigning
This scenario tests the performance of countersigning operations. There are two roles: initiate and participate. The participants commit an entry to advertise that they are willing to participate in sessions. They listen for sessions and participate in one at a time.
-
initiate(1 agent) -
participate(2 agents)
agent:uhCAkqrZ9G26as6L8o-oLRGswYHoDSTq3OJ-PVqTl9IqGE5Uc08dL
agent:uhCAkzhx2HsX3C7GMoxszwuhY20AX9BLWr-C7p7nKAiK1n33DLzZ9
agent:uhCAkqrZ9G26as6L8o-oLRGswYHoDSTq3OJ-PVqTl9IqGE5Uc08dL
agent:uhCAkzhx2HsX3C7GMoxszwuhY20AX9BLWr-C7p7nKAiK1n33DLzZ9
agent:uhCAkqrZ9G26as6L8o-oLRGswYHoDSTq3OJ-PVqTl9IqGE5Uc08dL
agent:uhCAkzhx2HsX3C7GMoxszwuhY20AX9BLWr-C7p7nKAiK1n33DLzZ9
agent:uhCAkxPRW6xn529lK6t4DmDf8AUum_kf6fPZ6D5ZtYi0euM0GmVFy
agent:uhCAkxPRW6xn529lK6t4DmDf8AUum_kf6fPZ6D5ZtYi0euM0GmVFy
agent:uhCAkxPRW6xn529lK6t4DmDf8AUum_kf6fPZ6D5ZtYi0euM0GmVFy
Validation Receipts
Creates an entry, wait for required validation receipts, then repeat. Records the amount of time it took to accumulate the required number of receipts for all DHT operations. This is measured to the nearest 20ms so that we don't keep the agent too busy checking for receipts.
Each agent in this scenario waits for a certain number of peers to be available or for up to two minutes, whichever happens first, before starting its behaviour.
By default, this scenario will wait for a complete set of validation receipts before committing the next record. If the NO_VALIDATION_COMPLETE environment variable is set, it will instead publish new records on every round, building up an ever-growing list of action hashes to check on.
- Default (1 agent)
agent:uhCAk05NTXFqgJhdW_Tj_u-_o1C3u8POVuM5WF7MkN8eZ4fYod72lop_type:RegisterAgentActivity
agent:uhCAk05NTXFqgJhdW_Tj_u-_o1C3u8POVuM5WF7MkN8eZ4fYod72lop_type:StoreEntry
agent:uhCAk05NTXFqgJhdW_Tj_u-_o1C3u8POVuM5WF7MkN8eZ4fYod72lop_type:StoreRecord
agent:uhCAk5CqYaS9iN7yK29zdLYddBHhX8ESpuz6X_BSxuMWSbAzjKD8oop_type:RegisterAgentActivity
agent:uhCAk5CqYaS9iN7yK29zdLYddBHhX8ESpuz6X_BSxuMWSbAzjKD8oop_type:StoreEntry
agent:uhCAk5CqYaS9iN7yK29zdLYddBHhX8ESpuz6X_BSxuMWSbAzjKD8oop_type:StoreRecord
agent:uhCAk7BrIqRbD55QwbWyh1rDQpN2Nwl-WnVPHbmRLRxydoD2I4sG0op_type:RegisterAgentActivity
agent:uhCAk7BrIqRbD55QwbWyh1rDQpN2Nwl-WnVPHbmRLRxydoD2I4sG0op_type:StoreEntry
agent:uhCAk7BrIqRbD55QwbWyh1rDQpN2Nwl-WnVPHbmRLRxydoD2I4sG0op_type:StoreRecord
agent:uhCAkAECi_OPtkiAxdo_A1VCgWC1xk3q2pbvRt9qRFnnJNA_QwT9rop_type:RegisterAgentActivity
agent:uhCAkAECi_OPtkiAxdo_A1VCgWC1xk3q2pbvRt9qRFnnJNA_QwT9rop_type:StoreEntry
agent:uhCAkAECi_OPtkiAxdo_A1VCgWC1xk3q2pbvRt9qRFnnJNA_QwT9rop_type:StoreRecord
agent:uhCAkD9hHJFqA_Z5bWr_XIUpZSlvA-HuW5vkHfnWhUv9zV23GaSDdop_type:RegisterAgentActivity
agent:uhCAkD9hHJFqA_Z5bWr_XIUpZSlvA-HuW5vkHfnWhUv9zV23GaSDdop_type:StoreEntry
agent:uhCAkD9hHJFqA_Z5bWr_XIUpZSlvA-HuW5vkHfnWhUv9zV23GaSDdop_type:StoreRecord
agent:uhCAkRPjxXpCmLmlG5fRR_TTyvzV61ZRHzu6zkIOocyROx8YeVE9Wop_type:RegisterAgentActivity
agent:uhCAkRPjxXpCmLmlG5fRR_TTyvzV61ZRHzu6zkIOocyROx8YeVE9Wop_type:StoreEntry
agent:uhCAkRPjxXpCmLmlG5fRR_TTyvzV61ZRHzu6zkIOocyROx8YeVE9Wop_type:StoreRecord
agent:uhCAkmLFp0clrABKlNlTJCoXX0poLrBzVklD027XUsh3vCLtNBb-_op_type:RegisterAgentActivity
agent:uhCAkmLFp0clrABKlNlTJCoXX0poLrBzVklD027XUsh3vCLtNBb-_op_type:StoreEntry
agent:uhCAkmLFp0clrABKlNlTJCoXX0poLrBzVklD027XUsh3vCLtNBb-_op_type:StoreRecord
agent:uhCAknzLTzZgcjqZbkeCWZjKyJ2t2moCOW4B8Twhc750VS-lUtF_-op_type:RegisterAgentActivity
agent:uhCAknzLTzZgcjqZbkeCWZjKyJ2t2moCOW4B8Twhc750VS-lUtF_-op_type:StoreEntry
agent:uhCAknzLTzZgcjqZbkeCWZjKyJ2t2moCOW4B8Twhc750VS-lUtF_-op_type:StoreRecord
agent:uhCAkoM2gyGVLZXyqcF6U_jZFuECi_S4olpJWj0An_PGW8oQLSrv9op_type:RegisterAgentActivity
agent:uhCAkoM2gyGVLZXyqcF6U_jZFuECi_S4olpJWj0An_PGW8oQLSrv9op_type:StoreEntry
agent:uhCAkoM2gyGVLZXyqcF6U_jZFuECi_S4olpJWj0An_PGW8oQLSrv9op_type:StoreRecord
agent:uhCAkulLdbb-eD3MQO4Lb5sXfXEGqqgk_z6y2eH_lZvIYsmNG_aI5op_type:RegisterAgentActivity
agent:uhCAkulLdbb-eD3MQO4Lb5sXfXEGqqgk_z6y2eH_lZvIYsmNG_aI5op_type:StoreEntry
agent:uhCAkulLdbb-eD3MQO4Lb5sXfXEGqqgk_z6y2eH_lZvIYsmNG_aI5op_type:StoreRecord
agent:uhCAk05NTXFqgJhdW_Tj_u-_o1C3u8POVuM5WF7MkN8eZ4fYod72lop_type:RegisterAgentActivity
agent:uhCAk05NTXFqgJhdW_Tj_u-_o1C3u8POVuM5WF7MkN8eZ4fYod72lop_type:StoreEntry
agent:uhCAk05NTXFqgJhdW_Tj_u-_o1C3u8POVuM5WF7MkN8eZ4fYod72lop_type:StoreRecord
agent:uhCAk5CqYaS9iN7yK29zdLYddBHhX8ESpuz6X_BSxuMWSbAzjKD8oop_type:RegisterAgentActivity
agent:uhCAk5CqYaS9iN7yK29zdLYddBHhX8ESpuz6X_BSxuMWSbAzjKD8oop_type:StoreEntry
agent:uhCAk5CqYaS9iN7yK29zdLYddBHhX8ESpuz6X_BSxuMWSbAzjKD8oop_type:StoreRecord
agent:uhCAk7BrIqRbD55QwbWyh1rDQpN2Nwl-WnVPHbmRLRxydoD2I4sG0op_type:RegisterAgentActivity
agent:uhCAk7BrIqRbD55QwbWyh1rDQpN2Nwl-WnVPHbmRLRxydoD2I4sG0op_type:StoreEntry
agent:uhCAk7BrIqRbD55QwbWyh1rDQpN2Nwl-WnVPHbmRLRxydoD2I4sG0op_type:StoreRecord
agent:uhCAkAECi_OPtkiAxdo_A1VCgWC1xk3q2pbvRt9qRFnnJNA_QwT9rop_type:RegisterAgentActivity
agent:uhCAkAECi_OPtkiAxdo_A1VCgWC1xk3q2pbvRt9qRFnnJNA_QwT9rop_type:StoreEntry
agent:uhCAkAECi_OPtkiAxdo_A1VCgWC1xk3q2pbvRt9qRFnnJNA_QwT9rop_type:StoreRecord
agent:uhCAkD9hHJFqA_Z5bWr_XIUpZSlvA-HuW5vkHfnWhUv9zV23GaSDdop_type:RegisterAgentActivity
agent:uhCAkD9hHJFqA_Z5bWr_XIUpZSlvA-HuW5vkHfnWhUv9zV23GaSDdop_type:StoreEntry
agent:uhCAkD9hHJFqA_Z5bWr_XIUpZSlvA-HuW5vkHfnWhUv9zV23GaSDdop_type:StoreRecord
agent:uhCAkRPjxXpCmLmlG5fRR_TTyvzV61ZRHzu6zkIOocyROx8YeVE9Wop_type:RegisterAgentActivity
agent:uhCAkRPjxXpCmLmlG5fRR_TTyvzV61ZRHzu6zkIOocyROx8YeVE9Wop_type:StoreEntry
agent:uhCAkRPjxXpCmLmlG5fRR_TTyvzV61ZRHzu6zkIOocyROx8YeVE9Wop_type:StoreRecord
agent:uhCAkmLFp0clrABKlNlTJCoXX0poLrBzVklD027XUsh3vCLtNBb-_op_type:RegisterAgentActivity
agent:uhCAkmLFp0clrABKlNlTJCoXX0poLrBzVklD027XUsh3vCLtNBb-_op_type:StoreEntry
agent:uhCAkmLFp0clrABKlNlTJCoXX0poLrBzVklD027XUsh3vCLtNBb-_op_type:StoreRecord
agent:uhCAknzLTzZgcjqZbkeCWZjKyJ2t2moCOW4B8Twhc750VS-lUtF_-op_type:RegisterAgentActivity
agent:uhCAknzLTzZgcjqZbkeCWZjKyJ2t2moCOW4B8Twhc750VS-lUtF_-op_type:StoreEntry
agent:uhCAknzLTzZgcjqZbkeCWZjKyJ2t2moCOW4B8Twhc750VS-lUtF_-op_type:StoreRecord
agent:uhCAkoM2gyGVLZXyqcF6U_jZFuECi_S4olpJWj0An_PGW8oQLSrv9op_type:RegisterAgentActivity
agent:uhCAkoM2gyGVLZXyqcF6U_jZFuECi_S4olpJWj0An_PGW8oQLSrv9op_type:StoreEntry
agent:uhCAkoM2gyGVLZXyqcF6U_jZFuECi_S4olpJWj0An_PGW8oQLSrv9op_type:StoreRecord
agent:uhCAkulLdbb-eD3MQO4Lb5sXfXEGqqgk_z6y2eH_lZvIYsmNG_aI5op_type:RegisterAgentActivity
agent:uhCAkulLdbb-eD3MQO4Lb5sXfXEGqqgk_z6y2eH_lZvIYsmNG_aI5op_type:StoreEntry
agent:uhCAkulLdbb-eD3MQO4Lb5sXfXEGqqgk_z6y2eH_lZvIYsmNG_aI5op_type:StoreRecord
Write/get_agent_activity
A scenario where write peers write entries, while get_agent_activity peers each query a single write agent's activity with get_agent_activity.
Before a target write peer and the requesting get_agent_activity peer are in sync, this will measure the get_agent_activity call performance over a network. Once a write peer reaches sync with a get_agent_activity peer, the write peer will publish their actions and entries, and so the get_agent_activity calls will likely have most of the data they need locally. At that point this measures the database query performance and code paths through host functions.
-
get_agent_activity(1 agent) -
write(1 agent)
action_seqwrite peer's source chain.get_agent_activity_full zome call timingwrite peer's source chain.agent:uhCAkWy959_WCLz2yeMWc2s997tc22pGbXnykcWl9MOY8xEooAvQ1
Write/Query
Creates an entry, then queries the source chain and performs a simple operation on the entries, then repeats.
- Default (1 agent)
Write/Read
Creates an entry and reads it back, then repeats.
- Default (1 agent)
Write validated
Creates an entry, updates it and links the create to the update, then repeats. Each of the three actions is validated by the included hApp.
- Default (1 agent)
Write Validated must_get_agent_activity
A scenario where write agents create entries, while must_get_agent_activity agents create entries which are validated with a must_get_agent_activity call for a single write agent's activity.
Before a target write peer and the requesting peer are in sync, the must_get_agent_activity request will go over the network. Once a write peer reaches sync with the requesting must_get_agent_activity peer, the write peer will publish their actions and entries, and so the must_get_agent_activity calls will likely have the data it needs locally. At that point this measures the database query performance and code paths through host functions.
-
must_get_agent_activity(1 agent) -
write(1 agent)
action_seqmust_get_agent_activity peer's source chain top over the run.create_validated_sample_entry zome call timingwrite agent's source chain.agent:uhCAktCk25on7GvX-tfakFSl12GO3c8bv4SzTerVuo7eP1vN0xbwv
Zero-Arc Create Data
zero: A zero-arc conductor that just creates entries with a timestamp field. Those entries are linked to a known base hash so that full-arc nodes can retrieve them.full: A full-arc conductor that reads the entries created by the zero-arc node(s) and records the time lag between when the entry had been created and when it was first discovered.
-
full(4 agents) -
zero(6 agents)
agent:uhCAk39qWTtkV26gGpYIm0idYKHey7oz07UO7CnHvUFM8Iooegk7C
agent:uhCAkBvbRtCbOBjJqXabPSq4l-6LHdIkMqalmZynNQsGnu4wG1ZPY
agent:uhCAkMQvB7IP0tgg-VSRNEDGT1IPlBy15T5g3dSgnq3IE-5ixYomY
agent:uhCAknjLwGQKt52ZnR9sw7b7O9Jhvk4Vnnh8b7n_on4EVheoOeybn
agent:uhCAkqxTTBrVfesBV08E8w_GE2pQeh7MlzE7_8bPwkk1DKIzjUdm7
agent:uhCAkzqYD5DbLVW9pPYDSi7hUxP4gQ23m33QnGTeG2jsT7reTnuCq
get_timed_local_entries zome function.agent:uhCAk57uawGmlsH_YD1LMXwrV4ooVXXl-_i_a6USmo_sYoifWQLaQ
agent:uhCAk7kg8FQhV1suid4KoE-FW2-d6Z3kz4Dp8wQSwRX9EDtAT9mxo
agent:uhCAkRbYV784LCC2v_ZM88rt7au6ClRnCQqGgC3yg3jCzv0SFr_8s
agent:uhCAkgXbBzlhymmh0PQRU4WQEsizDTj1-Q9DWYlY0Ik5qqmiCWvGw
agent:uhCAk57uawGmlsH_YD1LMXwrV4ooVXXl-_i_a6USmo_sYoifWQLaQ
agent:uhCAk7kg8FQhV1suid4KoE-FW2-d6Z3kz4Dp8wQSwRX9EDtAT9mxo
agent:uhCAkRbYV784LCC2v_ZM88rt7au6ClRnCQqGgC3yg3jCzv0SFr_8s
agent:uhCAkgXbBzlhymmh0PQRU4WQEsizDTj1-Q9DWYlY0Ik5qqmiCWvGw
Zero-arc Create Data (Validated)
A zero-arc/full-arc mixed scenario where zero-arc nodes create data that gets validated and full-arc nodes read the data. The scenario has two roles:
zero: A zero-arc conductor that just creates entries with a timestamp field. Those entries are linked to a known base hash so that full-arc nodes can retrieve them.full: A full-arc conductor that reads the entries created by the zero-arc node(s) and records the time lag between when the entry had been created and when it was first discovered.
-
full(4 agents) -
zero(6 agents)
agent:uhCAkYQHu1pXJnHID21SWMUf73UNd4QqkYcTuzZMXxFBgCzdRodFJ
agent:uhCAkj5lAoX18HWUi3_9jb5IckF2rgjvHKh582BtKHEQ5mT-XNiBX
agent:uhCAkjR2aziPv74zQWdirqIib8C7QyW5KT0PO4znq9SZoNzj4CTN4
agent:uhCAkk-Jb--v62oppPrX3DBa27oCT5PynkJLfBbnZ9FNz9_XhJPDp
agent:uhCAkpUicJKS8040F0uQq-4a7V2ZbGWlHgDzpTSeHxjBlk8eSNXM9
agent:uhCAkv9fzixJXBl3-gNk93hladRcj0ARsLa9uWvn-5ndHJoUtw2rI
get_timed_local_entries zome function.agent:uhCAkHIy5Q-ccPPdAgtD6z1QQ7he2Hr3y__iXS9PPdVp0viK31VAT
agent:uhCAkKC8xPkKLSUoUNqmyFnxPiq4KjkeKj0Ssm0-M23C53vyg1xlO
agent:uhCAkWCbRa9Il_qFSxOwWpWc2dFgFZJrDyMeJJoyCQu5Do_wxBUxo
agent:uhCAkySSi0pDPG9I0zAxT9cUqZIs1XsIv3VeURtp1w8XKAPf0faFz
agent:uhCAkHIy5Q-ccPPdAgtD6z1QQ7he2Hr3y__iXS9PPdVp0viK31VAT
agent:uhCAkKC8xPkKLSUoUNqmyFnxPiq4KjkeKj0Ssm0-M23C53vyg1xlO
agent:uhCAkWCbRa9Il_qFSxOwWpWc2dFgFZJrDyMeJJoyCQu5Do_wxBUxo
agent:uhCAkySSi0pDPG9I0zAxT9cUqZIs1XsIv3VeURtp1w8XKAPf0faFz
Zome Call, Single Value
Calls a zome function that returns a fixed value. This tests the maximum performance of zome calls when the zome function is not calling into Holochain other otherwise doing any work.
- Default (1 agent)