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)
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)
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:uhCAkGmxsm_C-pfw3c12KhMZuwDn70QoeTWAtoqmHYQxDeX1aA35j
agent:uhCAkSpRP87nVfPu0pqI5S6lJ_8OywFCxrkFzgezGBaJyPNZ2ioG3
agent:uhCAkXBJb6PGBuXmLASjS5DLCRcf7bH468wQss6jj6rR8GzuPTJN7
agent:uhCAkZkHDYD-J7BV4v9LtHI4sT-DA9Ji-mKWTuf9gvWiz9Wl4XRFh
agent:uhCAkzskT-TzPVzjo8THdVsa7Jg1nDICoIY4g8KWawF9dEaxXRmk2
agent:uhCAk233HEAb0wBCGT9ltIPybl_4GxRTPfZUDApI7vTEd5864p-UD
agent:uhCAkUi4O0xD07exPKwQFTs6lzS4tv9IQjgph8qVa0jMLvHCynvEc
agent:uhCAkarfyflAwLgFFZ57i3BUFOpye09lxo5B3qfQitvSN_Qvg_DUJ
agent:uhCAkeIMDvAXScEjIYWOiRXjlcopAvNgoi_lGhxwVX29We7cZ7rvn
agent:uhCAkqRBBJfERfLvAJ3UhPel2XCVtK9lgRjKz359mMB3qsiJtWETg
agent:uhCAk233HEAb0wBCGT9ltIPybl_4GxRTPfZUDApI7vTEd5864p-UD
agent:uhCAkUi4O0xD07exPKwQFTs6lzS4tv9IQjgph8qVa0jMLvHCynvEc
agent:uhCAkarfyflAwLgFFZ57i3BUFOpye09lxo5B3qfQitvSN_Qvg_DUJ
agent:uhCAkeIMDvAXScEjIYWOiRXjlcopAvNgoi_lGhxwVX29We7cZ7rvn
agent:uhCAkqRBBJfERfLvAJ3UhPel2XCVtK9lgRjKz359mMB3qsiJtWETg
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.No scenario template for full_arc_create_validated_zero_arc_read!
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:uhCAkb6RMVnWVh5EU2gNMwE6LzvcDmc5seh1xH_M4P3LQo2gfuX_R
agent:uhCAkrR-2nCmm6rqmw_L-nOZ-nzxOgXlMQ26f89kvH9GEoZhFu0dU
agent:uhCAkb6RMVnWVh5EU2gNMwE6LzvcDmc5seh1xH_M4P3LQo2gfuX_R
agent:uhCAkrR-2nCmm6rqmw_L-nOZ-nzxOgXlMQ26f89kvH9GEoZhFu0dU
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:uhCAk2hypIkjoCr77-ENu1dYjr-Bg5XVIKKfTgBhyIwlFdfFbNdoB
agent:uhCAkIFf6E2LVEVY9MDCswiszJIYPV_hZqwefhPqKc9Np9VVKu4xJ
agent:uhCAk2hypIkjoCr77-ENu1dYjr-Bg5XVIKKfTgBhyIwlFdfFbNdoB
agent:uhCAkIFf6E2LVEVY9MDCswiszJIYPV_hZqwefhPqKc9Np9VVKu4xJ
agent:uhCAk2hypIkjoCr77-ENu1dYjr-Bg5XVIKKfTgBhyIwlFdfFbNdoB
agent:uhCAkIFf6E2LVEVY9MDCswiszJIYPV_hZqwefhPqKc9Np9VVKu4xJ
agent:uhCAkr5jvZ123QpaGprwH6ApU9IpPOdBTl_yLBD76QujjsOOgNGDy
agent:uhCAkr5jvZ123QpaGprwH6ApU9IpPOdBTl_yLBD76QujjsOOgNGDy
agent:uhCAkr5jvZ123QpaGprwH6ApU9IpPOdBTl_yLBD76QujjsOOgNGDy
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:uhCAkXciTVc6lIt3qCjZt1wlIdDNFY4R87o6aiJHEDnAIV7WMmyTV
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:uhCAkw5AIHBR6nSGI3oPXNyYU0o5b2sgqHZfiTy53eG56T2hVoWRo
Zero-Arc Create and Read
A zero-arc/full-arc mixed scenario with two types of zero-arc nodes -- ones that create data and ones that read data -- as well as full arc nodes to "relay" the data. The scenario has three roles:
zero_write: A zero-arc conductor that just creates entries with a timestamp field. Those entries are linked to a known base hash so thatzero_readnodes can retrieve them.zero_read: A zero-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: A full-arc conductor that is just here to serve entries to zero arc nodes.
-
full(3 agents) -
zero_read(3 agents) -
zero_write(3 agents)
agent:uhCAkKayVjY19Wn1AOmttsnZIw3fueT6Qbq1xxHyZOxOBnTaZWAZh
agent:uhCAkhu23p6PBcPaKZi9vWUbK_IvxvnvAeuKJaLt3X63qF-EKAxdS
agent:uhCAkt6OSZSJjJpjHFWvOS8OVzo1M8NeIxPHgMRV88yfnMyLHO_88
get_timed_local_entries zome function.agent:uhCAkc4bq4ba0Qu5pF3QImc4s_cBbCdaprU8JQsn0_pr88pABqkmV
agent:uhCAkhUMFOy2wvC2QzMKCm5zBjcNuSRnwqcuh5VugGQRLPqdazF6Y
agent:uhCAkxS9VXYCAOyTa5f3Aa8FqAvRDL70OIj09h_q1sMOojeFsAqfd
agent:uhCAkc4bq4ba0Qu5pF3QImc4s_cBbCdaprU8JQsn0_pr88pABqkmV
agent:uhCAkhUMFOy2wvC2QzMKCm5zBjcNuSRnwqcuh5VugGQRLPqdazF6Y
agent:uhCAkxS9VXYCAOyTa5f3Aa8FqAvRDL70OIj09h_q1sMOojeFsAqfd
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:uhCAk1qbSEfC8_9jLwex3mZlSG_h0Bb4YV_bK7_wi8D9RQe9Ssm1c
agent:uhCAk2bd4_5LDrlcyYr0qeiRNuBlPlE8lIvAzznomQj63shxayXSX
agent:uhCAkY0Xnadskxjb4D4qjJWC-zsDSXF-geBjCt5e-hMlVv3WCEBiO
agent:uhCAkYPx7yCivUYyf72FvxYZ28VU5YpLYWSX8w2OtquBMDWepRHwG
agent:uhCAklf4JN0iAB9SCGaCkRszSyd8_3Q04jIYkJTdmnQhzRLpDSsmp
agent:uhCAkp0HXG3oHSPWycf-yJ_kLJkFSGUaHZ8NKfuyo1I3CINjw0-cY
get_timed_local_entries zome function.agent:uhCAkOcfuajXTrZyBq1eoRggpAZuSdWzIJeyrphYmHD69Iy3QMPXh
agent:uhCAkVGEu_wKGFXC5sNviYwStkUrPjn3rotWSmk3-dap_Vk91TxNF
agent:uhCAkcSi2EFwHzyh5TTkDUuapf885vD4rtlCA0QoGos5xrgRJm4Zw
agent:uhCAke9otMj9WmMRd9kgre-VqcIcFx8Fu7C3vSFOxSjGydtATRR2G
agent:uhCAkOcfuajXTrZyBq1eoRggpAZuSdWzIJeyrphYmHD69Iy3QMPXh
agent:uhCAkVGEu_wKGFXC5sNviYwStkUrPjn3rotWSmk3-dap_Vk91TxNF
agent:uhCAkcSi2EFwHzyh5TTkDUuapf885vD4rtlCA0QoGos5xrgRJm4Zw
agent:uhCAke9otMj9WmMRd9kgre-VqcIcFx8Fu7C3vSFOxSjGydtATRR2G
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:uhCAkBRrpoWVCEcs_Jmvce4HFLfJnUY62Na8cbUm0LUGCyyuYPFmO
agent:uhCAkJJuU1gNeJU0lKMhJB3jUMrdceE9N1MNVVYrjoCUyoH7v8bWa
agent:uhCAkkhkg0V7bN53QN5z8-45h-TgmI1WmUH4au-LSf4p9asNs_rje
agent:uhCAkqZYnCneqenvauasTLuDCgJwmncE-q5alVL2VRg12Six9o9DD
agent:uhCAkr1eleH8m1SZX3BIoO2N0oNFL_Z5zEa3JsEKgDM3ZjjJokt4K
agent:uhCAkyrkofjNocQPYdCZnJ3V72TsAdG5gm_QXWxwNzV5rfWzfG_P4
get_timed_local_entries zome function.agent:uhCAk-R8fq1yl0wQ504SydrCkX1sXSVfsn60T8mXOe0mGPq2ZiWEM
agent:uhCAkbZbPqcltxfKprQAVJfSwY1L_ctvGr4PCgB5HGjHum94qqzQa
agent:uhCAkjK3bkx8wVND6KYAKw0G2NPgxxd1j_4TX2nDOZsRa3ic65n6-
agent:uhCAkwhLoacUeCFkaIp3HugnvPVxdIqyo2IXFE27Kz3o0ZH_TdtNd
agent:uhCAk-R8fq1yl0wQ504SydrCkX1sXSVfsn60T8mXOe0mGPq2ZiWEM
agent:uhCAkbZbPqcltxfKprQAVJfSwY1L_ctvGr4PCgB5HGjHum94qqzQa
agent:uhCAkjK3bkx8wVND6KYAKw0G2NPgxxd1j_4TX2nDOZsRa3ic65n6-
agent:uhCAkwhLoacUeCFkaIp3HugnvPVxdIqyo2IXFE27Kz3o0ZH_TdtNd
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)