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(1 agent) -
write(1 agent)
agent:uhCAk0FF-dGo_bow-j_U9emZrn4hxt765wBc_FBQZB4fzzpBjlDC7
agent:uhCAkTPbjAaTf05Vr_JOIwWvbfVY5wjqsaRN7GMNGQAgAj1JLi-n4
agent:uhCAkYSdDhB6ZUeNxAJqWV1NTFfZ66qsukbsLA-XRTdXQ8spTq_Jz
agent:uhCAklBKBd7O--M2bGLlqx4UUBMt8TaQXrmosqK3IyCest9VKjDU_
agent:uhCAkoQdJsjvY2vVlvQUSND-xqHLkn33K4c11KJo5SN1E5h6WMFon
agent:uhCAk6yJL8x0rtFG1edGRIqwjJcP35WPn0XKHoXCoW28kI53Olbck
agent:uhCAkCZ8agrPUKcNW5TjMDE2eBWrjXVUnynz75kp7cdmVJ3zwtVvR
agent:uhCAkQjmC9zBS-s81N7vwnaMkrxZoenK6hsNl4lX7B3PZH2AAJLkz
agent:uhCAkXXk4frLn6BohsR-Z2JOwRTTUaKmerME4a3Q1ZyOXnZlflaOw
agent:uhCAkrN-h3HYdniNfdojP-DAfVorDVfoVZuPvWjZvn6prT8COkJMA
agent:uhCAk6yJL8x0rtFG1edGRIqwjJcP35WPn0XKHoXCoW28kI53Olbck
agent:uhCAkCZ8agrPUKcNW5TjMDE2eBWrjXVUnynz75kp7cdmVJ3zwtVvR
agent:uhCAkQjmC9zBS-s81N7vwnaMkrxZoenK6hsNl4lX7B3PZH2AAJLkz
agent:uhCAkXXk4frLn6BohsR-Z2JOwRTTUaKmerME4a3Q1ZyOXnZlflaOw
agent:uhCAkrN-h3HYdniNfdojP-DAfVorDVfoVZuPvWjZvn6prT8COkJMA
post_commit durationFirst 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.Full-Arc Create (Validated) / Zero-Arc Read
A full-arc/zero-arc mixed scenario where full-arc nodes create data that gets validated and zero-arc nodes read the data. The scenario has two roles:
full: A full-arc conductor that creates entries with a timestamp field. Those entries get validated and then retrieved by zero-arc nodes.zero: A zero-arc conductor that reads the entries created by the full-arc node(s) and records the time lag between when the entry had been created and when it was first discovered.
-
full(1 agent) -
zero(1 agent)
agent:uhCAk1Mciox-WxK4OMS_ztZhui4S_bUyfz2WCrE39K78XCeXrdzKg
agent:uhCAkPNqVFDUdh5mXQcOgTsS_j4T-EFcGU4DoVTUwuGqynhXbjebN
agent:uhCAkj8GmHQ8u_wVEqk_aA0POf_bec2ZklNsx8Li0s96orxIV7CKu
agent:uhCAkotwGaOl9gu1UU2Iu5s3iMW0-vGF6x2HD1ImngPO-ucf4Jx5B
get_timed_local_entries zome function.agent:uhCAk56hrvfBG0THQg41qpB7iraoknlwfRBxcYwM2HZ8_OLGQIcj_
agent:uhCAkCSLzgmOH3KYqE5f9UmOBCYInQMxnLxaQHF24wHte5GH62Bay
agent:uhCAkM93KUG4rIPiO_aRtb0vvCNIQ36p1DV3k5Y0Rvv9HQ8kpjwcP
agent:uhCAkkaBQ-4AtshmxSmv14FukOJiR0NkAWmnwMIW5lNp4XERb2ToY
agent:uhCAk56hrvfBG0THQg41qpB7iraoknlwfRBxcYwM2HZ8_OLGQIcj_
agent:uhCAkCSLzgmOH3KYqE5f9UmOBCYInQMxnLxaQHF24wHte5GH62Bay
agent:uhCAkM93KUG4rIPiO_aRtb0vvCNIQ36p1DV3k5Y0Rvv9HQ8kpjwcP
agent:uhCAkkaBQ-4AtshmxSmv14FukOJiR0NkAWmnwMIW5lNp4XERb2ToY
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)
Mixed Arc get_agent_activity
A mixed-arc scenario that measures the DHT's ability to propagate agent activity and make it available via get_agent_activity calls. The scenario has three roles:
zero_write: A zero-arc conductor that creates entries on its source chain.full_write: A full-arc conductor that creates entries on its source chain.zero_read: A zero-arc conductor that picks a random writer and repeatedly callsget_agent_activityto observe new entries appearing on the writer's chain, measuring the lag between creation and discovery.
-
full_write(1 agent) -
zero_read(1 agent) -
zero_write(1 agent)
agent:uhCAk-667xqiiEENo8o1pjPFOBXeuUfPKJQfyoKODwJ3JAk6Tn_CHbehaviour:zero_write
agent:uhCAkF3_ZotqcoUu5YNMXnkQJ5FDhH2eDQqnSsV1Xen7MMvcod8zPbehaviour:full_write
agent:uhCAkU4vb1qOUJbfssVMql2NHN2RtJIDjKQG5DSEi-pF_7gBwcV03behaviour:full_write
action_seqget_agent_activity. This reflects the DHT's ability to propagate agent activity ops and make them available to querying peers.get_agent_activity_agent:uhCAk4wx4n4D69drmbv62_bXpbZJFtg9NC_P80-Svfvsf-EL_cwtdwrite_agent:uhCAkF3_ZotqcoUu5YNMXnkQJ5FDhH2eDQqnSsV1Xen7MMvcod8zP
get_agent_activity_agent:uhCAk65PoHsI3tKoZfuTK2Ty4kRWz7_HEcIt35MVeaapdpeYPky2Dwrite_agent:uhCAkF3_ZotqcoUu5YNMXnkQJ5FDhH2eDQqnSsV1Xen7MMvcod8zP
get_agent_activity_agent:uhCAkFAmJB07HJ94nwY7X5h1JZXF79NMO5pxVeic8mSpS13EkTSbFwrite_agent:uhCAkF3_ZotqcoUu5YNMXnkQJ5FDhH2eDQqnSsV1Xen7MMvcod8zP
get_agent_activity_agent:uhCAkFiU_EwW7svyAPWNcN9V4okpPz7RRCvMB8W4hSn_1NiOXp8zcwrite_agent:uhCAkF3_ZotqcoUu5YNMXnkQJ5FDhH2eDQqnSsV1Xen7MMvcod8zP
get_agent_activity_agent:uhCAk_yitkvAryh8tmaaz7oY0rPLwUvc1mtu4xsTMjTOM3dYFWwknwrite_agent:uhCAkF3_ZotqcoUu5YNMXnkQJ5FDhH2eDQqnSsV1Xen7MMvcod8zP
get_agent_activity_agent:uhCAknzUsLN_c1T6qUw57Y-OcqUJ5IX0ck_b4pRWd58lheqD0tAj9write_agent:uhCAkF3_ZotqcoUu5YNMXnkQJ5FDhH2eDQqnSsV1Xen7MMvcod8zP
get_agent_activity. This is measured per new action in the chain.agent:uhCAk4wx4n4D69drmbv62_bXpbZJFtg9NC_P80-Svfvsf-EL_cwtd
agent:uhCAk65PoHsI3tKoZfuTK2Ty4kRWz7_HEcIt35MVeaapdpeYPky2D
agent:uhCAkFAmJB07HJ94nwY7X5h1JZXF79NMO5pxVeic8mSpS13EkTSbF
agent:uhCAkFiU_EwW7svyAPWNcN9V4okpPz7RRCvMB8W4hSn_1NiOXp8zc
agent:uhCAk_yitkvAryh8tmaaz7oY0rPLwUvc1mtu4xsTMjTOM3dYFWwkn
agent:uhCAknzUsLN_c1T6qUw57Y-OcqUJ5IX0ck_b4pRWd58lheqD0tAj9
agent:uhCAk4wx4n4D69drmbv62_bXpbZJFtg9NC_P80-Svfvsf-EL_cwtd
agent:uhCAk65PoHsI3tKoZfuTK2Ty4kRWz7_HEcIt35MVeaapdpeYPky2D
agent:uhCAkFAmJB07HJ94nwY7X5h1JZXF79NMO5pxVeic8mSpS13EkTSbF
agent:uhCAkFiU_EwW7svyAPWNcN9V4okpPz7RRCvMB8W4hSn_1NiOXp8zc
agent:uhCAk_yitkvAryh8tmaaz7oY0rPLwUvc1mtu4xsTMjTOM3dYFWwkn
agent:uhCAknzUsLN_c1T6qUw57Y-OcqUJ5IX0ck_b4pRWd58lheqD0tAj9
get_agent_activity_full zome call timingget_agent_activity_full zome call that queries a writer's chain.agent:uhCAk4wx4n4D69drmbv62_bXpbZJFtg9NC_P80-Svfvsf-EL_cwtd
agent:uhCAk65PoHsI3tKoZfuTK2Ty4kRWz7_HEcIt35MVeaapdpeYPky2D
agent:uhCAkFAmJB07HJ94nwY7X5h1JZXF79NMO5pxVeic8mSpS13EkTSbF
agent:uhCAkFiU_EwW7svyAPWNcN9V4okpPz7RRCvMB8W4hSn_1NiOXp8zc
agent:uhCAk_yitkvAryh8tmaaz7oY0rPLwUvc1mtu4xsTMjTOM3dYFWwkn
agent:uhCAknzUsLN_c1T6qUw57Y-OcqUJ5IX0ck_b4pRWd58lheqD0tAj9
get_agent_activity.agent:uhCAk4wx4n4D69drmbv62_bXpbZJFtg9NC_P80-Svfvsf-EL_cwtd
agent:uhCAk65PoHsI3tKoZfuTK2Ty4kRWz7_HEcIt35MVeaapdpeYPky2D
agent:uhCAkFAmJB07HJ94nwY7X5h1JZXF79NMO5pxVeic8mSpS13EkTSbF
agent:uhCAkFiU_EwW7svyAPWNcN9V4okpPz7RRCvMB8W4hSn_1NiOXp8zc
agent:uhCAk_yitkvAryh8tmaaz7oY0rPLwUvc1mtu4xsTMjTOM3dYFWwkn
agent:uhCAknzUsLN_c1T6qUw57Y-OcqUJ5IX0ck_b4pRWd58lheqD0tAj9
behaviour:full_write
behaviour:zero_read
behaviour:zero_write
Mixed Arc must_get_agent_activity
A scenario where write agents create entries in batches of 10, while must_get_agent_activity agents each pick a random write agent and repeatedly attempt to create an entry that references the chain top of their latest batch. This reference means that the entry's validation function needs to make a must_get_agent_activity call.
The purpose of this scenario is to measure the time it takes for published agent activity data to be gossiped among authorities and become available to peers that query it via must_get_agent_activity.
This test is similar to Write Validated must_get_agent_activity, but some write agents are zero-arc and all must_get_agent_activity agents are zero-arc. This forces the must_get_agent_activity host call to go to the network.
-
full_write(1 agent) -
zero_must_get_agent_activity(1 agent) -
zero_write(1 agent)
action_seqaction_seq of a write agent successfully retrieved by a must_get_agent_activity agent. This reflects the DHT's ability to propagate agent activity ops and make them available to querying peers.write agent's creation of a batch and a must_get_agent_activity agent's successful discovery of the batch and creation/self-validation of a new entry that depends on it.must_get_agent_activity_agent:uhCAk-z-K7pphbyQqeS1vwPooCa1MHGUD2d9pt7C2aZZZYBzXy7Le
must_get_agent_activity_agent:uhCAk4GNJ1PINybDSjO7-cFJoM8OC6DFW-gQYoiGAICNt1ZioS225
must_get_agent_activity_agent:uhCAk4WkkSVZTWFNLSOHPHLqyYi3PQodNu-Lx1rdE2P-7wFx5EGpD
must_get_agent_activity_agent:uhCAkLIQbR8VEvybB_JHEC1QGaaGqng3Owjvtwof3DnsEgUdlslVk
must_get_agent_activity_agent:uhCAkflScdBMFeoGPtblzqzDGwoaNmVkGdYwFRAzaul-1OesK5IFZ
must_get_agent_activity agent was able to discover batches and create/self-validate new entries that depend on them.must_get_agent_activity_agent:uhCAk-z-K7pphbyQqeS1vwPooCa1MHGUD2d9pt7C2aZZZYBzXy7Le
must_get_agent_activity_agent:uhCAk4GNJ1PINybDSjO7-cFJoM8OC6DFW-gQYoiGAICNt1ZioS225
must_get_agent_activity_agent:uhCAk4WkkSVZTWFNLSOHPHLqyYi3PQodNu-Lx1rdE2P-7wFx5EGpD
must_get_agent_activity_agent:uhCAkLIQbR8VEvybB_JHEC1QGaaGqng3Owjvtwof3DnsEgUdlslVk
must_get_agent_activity_agent:uhCAkflScdBMFeoGPtblzqzDGwoaNmVkGdYwFRAzaul-1OesK5IFZ
create_validated_sample_entry zome call timingwrite agent's source chain.agent:uhCAk-z-K7pphbyQqeS1vwPooCa1MHGUD2d9pt7C2aZZZYBzXy7Le
agent:uhCAk4GNJ1PINybDSjO7-cFJoM8OC6DFW-gQYoiGAICNt1ZioS225
agent:uhCAk4WkkSVZTWFNLSOHPHLqyYi3PQodNu-Lx1rdE2P-7wFx5EGpD
agent:uhCAkLIQbR8VEvybB_JHEC1QGaaGqng3Owjvtwof3DnsEgUdlslVk
agent:uhCAkflScdBMFeoGPtblzqzDGwoaNmVkGdYwFRAzaul-1OesK5IFZ
must_get_agent_activity calls.agent:uhCAk-z-K7pphbyQqeS1vwPooCa1MHGUD2d9pt7C2aZZZYBzXy7Le
agent:uhCAk4GNJ1PINybDSjO7-cFJoM8OC6DFW-gQYoiGAICNt1ZioS225
agent:uhCAk4WkkSVZTWFNLSOHPHLqyYi3PQodNu-Lx1rdE2P-7wFx5EGpD
agent:uhCAkLIQbR8VEvybB_JHEC1QGaaGqng3Owjvtwof3DnsEgUdlslVk
agent:uhCAkflScdBMFeoGPtblzqzDGwoaNmVkGdYwFRAzaul-1OesK5IFZ
behaviour:full_write
behaviour:zero_must_get_agent_activity
behaviour:zero_write
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:uhCAk0uNn-ESX_z94vjcajj8PPniZetHsL14AEJFrXPf7Xiqvhtiq
agent:uhCAkjUV-FsSth5Cscsc7agwmY3AwQPqspwiu2-Exsa95yriEXVzj
agent:uhCAk0uNn-ESX_z94vjcajj8PPniZetHsL14AEJFrXPf7Xiqvhtiq
agent:uhCAkjUV-FsSth5Cscsc7agwmY3AwQPqspwiu2-Exsa95yriEXVzj
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)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:uhCAkU0J79YQrdzz4tClGIvtSpHCgVRTUJ64mxpEekKNdwoEMRJtm
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 in batches of 10, while must_get_agent_activity agents each pick a random write agent and repeatedly attempt to create an entry that references the chain top of their latest batch. This reference means that the entry's validation function needs to make a must_get_agent_activity call.
The purpose of this scenario is to measure the time it takes for published agent activity data to be gossiped among authorities and become available to peers that query it via must_get_agent_activity.
This test is similar to Mixed-Arc must_get_agent_activity, but all agents are full-arc.
-
must_get_agent_activity(1 agent) -
write(1 agent)
action_seqaction_seq of a write agent successfully retrieved by a must_get_agent_activity agent. This reflects the DHT's ability to propagate agent activity ops and make them available to querying peers.write agent's creation of a batch and a must_get_agent_activity agent's successful discovery of the batch and creation/self-validation of a new entry that depends on it.must_get_agent_activity_agent:uhCAkV3d3MgNSROa_gRG9qUBduPgCewSUcDYQtdEzq0HJxRoLx8Fc
must_get_agent_activity agent was able to discover batches and create/self-validate new entries that depend on them.must_get_agent_activity_agent:uhCAkV3d3MgNSROa_gRG9qUBduPgCewSUcDYQtdEzq0HJxRoLx8Fc
create_validated_sample_entry zome call timingwrite agent's source chain.agent:uhCAkV3d3MgNSROa_gRG9qUBduPgCewSUcDYQtdEzq0HJxRoLx8Fc
must_get_agent_activity calls.agent:uhCAkV3d3MgNSROa_gRG9qUBduPgCewSUcDYQtdEzq0HJxRoLx8Fc
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(1 agent) -
zero(1 agent)
agent:uhCAk5waB3styZhbItJMmCLe8J2GRw5helvmCjGaaecnU2IutBRX_
agent:uhCAk6TbpGqt1koz7Ak87Ytv_OdC4FcXWvEho8uzfXxATdAXOL7ew
agent:uhCAkIB1V2VJ0YM5dhzBK5jTecRpqQ6dG0CDH5FNhhdQk9VbR-oL4
agent:uhCAkeEQhKz053az74KRUF37jqUc7fSda8p_sQIeI9uxcDkw9AAmH
agent:uhCAkhgV4hpqwcTwJKxkfeQlJqlwe6MEKLUvDurchCpezZnCnq3i6
agent:uhCAkkZhL-cQd5YS1rwM1PnRaHoyaPyBlxvuFXtF5XwrfrEO6_INK
get_timed_local_entries zome function.agent:uhCAkCqiIAk-rwdRrVAmszVrZiuIa_4qI9zMcaGQ4y09QjQFlIw7J
agent:uhCAkqtPaFHNrkIt72PUK4B6NVWFJQGF308Js3DBEwldIt7fy_c1P
agent:uhCAkCqiIAk-rwdRrVAmszVrZiuIa_4qI9zMcaGQ4y09QjQFlIw7J
agent:uhCAkqtPaFHNrkIt72PUK4B6NVWFJQGF308Js3DBEwldIt7fy_c1P
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(1 agent) -
zero(1 agent)
agent:uhCAkA_C2zP3Tx9F84OkE34_ZvlN_rtPgm0Be9IaFFiQEVn1Zt7jN
agent:uhCAkH5MJgtukOp3Zs7p24DRk2xXVWetLokz-dgMsqCapsYJQ6Vgb
agent:uhCAkP74DJfFuOhOLfEdgg38Aeo3xjpV9F6xigej-6fCrT4H-9CT0
agent:uhCAkSIeywFNb93Q8DcrcgpLjhhKJjVenS3T9st5baIcy1PKCNNJu
agent:uhCAkcpJCoZLnrbDG0FlHKxrSnR0nCXCjA6AJZAfn4BKbgLXVpQzj
agent:uhCAkjjK0KrjO8t9Z8bq6lbAUQNpw92otCm1nFN6x3AfJ7G5-uFVm
get_timed_local_entries zome function.agent:uhCAkHG_jqGKI0Dhj3Ze5wa2fb5S-Mumr82dBrqTQEO05j18XinDQ
agent:uhCAkaR_1jirJA7ad_uIiP18WKiMLJJg6DwjV-6VrAb1N81q1Iig0
agent:uhCAksZcB8SlqKsQ5nLD5_Jd_Q1XMc1zT6UuQGmSsgdFOAzT8K8yQ
agent:uhCAkvizoQUwZIDHG4Q3swAOcli2EXvsfYLht_0K349BULlacXAdc
agent:uhCAkHG_jqGKI0Dhj3Ze5wa2fb5S-Mumr82dBrqTQEO05j18XinDQ
agent:uhCAkaR_1jirJA7ad_uIiP18WKiMLJJg6DwjV-6VrAb1N81q1Iig0
agent:uhCAksZcB8SlqKsQ5nLD5_Jd_Q1XMc1zT6UuQGmSsgdFOAzT8K8yQ
agent:uhCAkvizoQUwZIDHG4Q3swAOcli2EXvsfYLht_0K349BULlacXAdc
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)