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:uhCAk1zd92d0-Y9WLZxRzCIcq_TeSdyd1N3KmC9hA4_RJ4Og2WKDO
agent:uhCAk7Jso53JRB1b3KpjRwxqm-rvXSJyLKA9Rr0Kdv83nyS_vqk4t
agent:uhCAkBxxHERWpemsUaxrX308C5r5Crcc6dGn4RXN4_b-90QROFnsc
agent:uhCAkVdJpIL7CCXgkwAZ3zTgTff3RM0IXTc3fAYTLdFpExeG3ot6G
agent:uhCAkYQeCUpCHNG9siyKao-TMy-Lewctp78dfOkc31ox6BiQ38Zsm
agent:uhCAk6p-MBTODeC09JAyHFwf1swNeYtA5_PLwmyAG-FlAcaGRcnwA
agent:uhCAkECuVKk0dlnTfpJJIbQKU24HoAyjQzzniCj1pbV60Orb0QnfN
agent:uhCAkHwKlMKE6l9ZL6Wcq2hlC4ddniWsTYH9CIAsahUVMBQqPzOZr
agent:uhCAkM1vBVMsZxQmR9ODx6uJCFZzea43fLb7OP9V9u54wVhJe0sPh
agent:uhCAkRFs3JFV4AT4Ac7c2zpAjyi9vDyIzLCMMV7emdSExpea4naZy
agent:uhCAk6p-MBTODeC09JAyHFwf1swNeYtA5_PLwmyAG-FlAcaGRcnwA
agent:uhCAkECuVKk0dlnTfpJJIbQKU24HoAyjQzzniCj1pbV60Orb0QnfN
agent:uhCAkHwKlMKE6l9ZL6Wcq2hlC4ddniWsTYH9CIAsahUVMBQqPzOZr
agent:uhCAkM1vBVMsZxQmR9ODx6uJCFZzea43fLb7OP9V9u54wVhJe0sPh
agent:uhCAkRFs3JFV4AT4Ac7c2zpAjyi9vDyIzLCMMV7emdSExpea4naZy
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_must_get_agent_activity!
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)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:uhCAk1KS72QVLc0oGrsjbqzBGDfRsH1Fx_GlNDPs1S80n1bGg5TgAop_type:RegisterAgentActivity
agent:uhCAk1KS72QVLc0oGrsjbqzBGDfRsH1Fx_GlNDPs1S80n1bGg5TgAop_type:StoreEntry
agent:uhCAk1KS72QVLc0oGrsjbqzBGDfRsH1Fx_GlNDPs1S80n1bGg5TgAop_type:StoreRecord
agent:uhCAk23PrbQcIu1pjftXvtNa5gl5kLybT2GfGxFj-9kfMpkdm9y9aop_type:RegisterAgentActivity
agent:uhCAk23PrbQcIu1pjftXvtNa5gl5kLybT2GfGxFj-9kfMpkdm9y9aop_type:StoreEntry
agent:uhCAk23PrbQcIu1pjftXvtNa5gl5kLybT2GfGxFj-9kfMpkdm9y9aop_type:StoreRecord
agent:uhCAkKu9-Yjdr9vS7efP338U_dO8IVnRhlKIMJm1MuCu0dIXIDezfop_type:RegisterAgentActivity
agent:uhCAkKu9-Yjdr9vS7efP338U_dO8IVnRhlKIMJm1MuCu0dIXIDezfop_type:StoreEntry
agent:uhCAkKu9-Yjdr9vS7efP338U_dO8IVnRhlKIMJm1MuCu0dIXIDezfop_type:StoreRecord
agent:uhCAkL5K7QR9raRNnABI3b97upE1mlFlAg5vGhST3sBDfZCk61kbvop_type:RegisterAgentActivity
agent:uhCAkL5K7QR9raRNnABI3b97upE1mlFlAg5vGhST3sBDfZCk61kbvop_type:StoreEntry
agent:uhCAkL5K7QR9raRNnABI3b97upE1mlFlAg5vGhST3sBDfZCk61kbvop_type:StoreRecord
agent:uhCAkR-yP6frWTqIewxL4YKNX_StNth6flXLwFFbMQXZ14WVO0HzLop_type:RegisterAgentActivity
agent:uhCAkR-yP6frWTqIewxL4YKNX_StNth6flXLwFFbMQXZ14WVO0HzLop_type:StoreEntry
agent:uhCAkR-yP6frWTqIewxL4YKNX_StNth6flXLwFFbMQXZ14WVO0HzLop_type:StoreRecord
agent:uhCAkZV8165z3kS_z3RXNl2DphHd10O8VOZUUBEhG-cBI0kJEtsnZop_type:RegisterAgentActivity
agent:uhCAkZV8165z3kS_z3RXNl2DphHd10O8VOZUUBEhG-cBI0kJEtsnZop_type:StoreEntry
agent:uhCAkZV8165z3kS_z3RXNl2DphHd10O8VOZUUBEhG-cBI0kJEtsnZop_type:StoreRecord
agent:uhCAkZka5k_mYf4XijCQxYNmuiGe2mMp-fk5X7k1cCUQ8viX-gdtaop_type:RegisterAgentActivity
agent:uhCAkZka5k_mYf4XijCQxYNmuiGe2mMp-fk5X7k1cCUQ8viX-gdtaop_type:StoreEntry
agent:uhCAkZka5k_mYf4XijCQxYNmuiGe2mMp-fk5X7k1cCUQ8viX-gdtaop_type:StoreRecord
agent:uhCAksIHh2V9e68DgmvTijHTkmzKBYSkxRHSS5AihqoVXSWcK4cpNop_type:RegisterAgentActivity
agent:uhCAksIHh2V9e68DgmvTijHTkmzKBYSkxRHSS5AihqoVXSWcK4cpNop_type:StoreEntry
agent:uhCAksIHh2V9e68DgmvTijHTkmzKBYSkxRHSS5AihqoVXSWcK4cpNop_type:StoreRecord
agent:uhCAkwW-QGwwN7bDEbsIitemDT_3agY5-1qrDrG5nYyXpBgTXH7xNop_type:RegisterAgentActivity
agent:uhCAkwW-QGwwN7bDEbsIitemDT_3agY5-1qrDrG5nYyXpBgTXH7xNop_type:StoreEntry
agent:uhCAkwW-QGwwN7bDEbsIitemDT_3agY5-1qrDrG5nYyXpBgTXH7xNop_type:StoreRecord
agent:uhCAkyGUyVF4GibGUl7ma_wP3HFgSHZ6GcA5C4Jj3BfBIhpLD5bHsop_type:RegisterAgentActivity
agent:uhCAkyGUyVF4GibGUl7ma_wP3HFgSHZ6GcA5C4Jj3BfBIhpLD5bHsop_type:StoreEntry
agent:uhCAkyGUyVF4GibGUl7ma_wP3HFgSHZ6GcA5C4Jj3BfBIhpLD5bHsop_type:StoreRecord
agent:uhCAk1KS72QVLc0oGrsjbqzBGDfRsH1Fx_GlNDPs1S80n1bGg5TgAop_type:RegisterAgentActivity
agent:uhCAk1KS72QVLc0oGrsjbqzBGDfRsH1Fx_GlNDPs1S80n1bGg5TgAop_type:StoreEntry
agent:uhCAk1KS72QVLc0oGrsjbqzBGDfRsH1Fx_GlNDPs1S80n1bGg5TgAop_type:StoreRecord
agent:uhCAk23PrbQcIu1pjftXvtNa5gl5kLybT2GfGxFj-9kfMpkdm9y9aop_type:RegisterAgentActivity
agent:uhCAk23PrbQcIu1pjftXvtNa5gl5kLybT2GfGxFj-9kfMpkdm9y9aop_type:StoreEntry
agent:uhCAk23PrbQcIu1pjftXvtNa5gl5kLybT2GfGxFj-9kfMpkdm9y9aop_type:StoreRecord
agent:uhCAkKu9-Yjdr9vS7efP338U_dO8IVnRhlKIMJm1MuCu0dIXIDezfop_type:RegisterAgentActivity
agent:uhCAkKu9-Yjdr9vS7efP338U_dO8IVnRhlKIMJm1MuCu0dIXIDezfop_type:StoreEntry
agent:uhCAkKu9-Yjdr9vS7efP338U_dO8IVnRhlKIMJm1MuCu0dIXIDezfop_type:StoreRecord
agent:uhCAkL5K7QR9raRNnABI3b97upE1mlFlAg5vGhST3sBDfZCk61kbvop_type:RegisterAgentActivity
agent:uhCAkL5K7QR9raRNnABI3b97upE1mlFlAg5vGhST3sBDfZCk61kbvop_type:StoreEntry
agent:uhCAkL5K7QR9raRNnABI3b97upE1mlFlAg5vGhST3sBDfZCk61kbvop_type:StoreRecord
agent:uhCAkR-yP6frWTqIewxL4YKNX_StNth6flXLwFFbMQXZ14WVO0HzLop_type:RegisterAgentActivity
agent:uhCAkR-yP6frWTqIewxL4YKNX_StNth6flXLwFFbMQXZ14WVO0HzLop_type:StoreEntry
agent:uhCAkR-yP6frWTqIewxL4YKNX_StNth6flXLwFFbMQXZ14WVO0HzLop_type:StoreRecord
agent:uhCAkZV8165z3kS_z3RXNl2DphHd10O8VOZUUBEhG-cBI0kJEtsnZop_type:RegisterAgentActivity
agent:uhCAkZV8165z3kS_z3RXNl2DphHd10O8VOZUUBEhG-cBI0kJEtsnZop_type:StoreEntry
agent:uhCAkZV8165z3kS_z3RXNl2DphHd10O8VOZUUBEhG-cBI0kJEtsnZop_type:StoreRecord
agent:uhCAkZka5k_mYf4XijCQxYNmuiGe2mMp-fk5X7k1cCUQ8viX-gdtaop_type:RegisterAgentActivity
agent:uhCAkZka5k_mYf4XijCQxYNmuiGe2mMp-fk5X7k1cCUQ8viX-gdtaop_type:StoreEntry
agent:uhCAkZka5k_mYf4XijCQxYNmuiGe2mMp-fk5X7k1cCUQ8viX-gdtaop_type:StoreRecord
agent:uhCAksIHh2V9e68DgmvTijHTkmzKBYSkxRHSS5AihqoVXSWcK4cpNop_type:RegisterAgentActivity
agent:uhCAksIHh2V9e68DgmvTijHTkmzKBYSkxRHSS5AihqoVXSWcK4cpNop_type:StoreEntry
agent:uhCAksIHh2V9e68DgmvTijHTkmzKBYSkxRHSS5AihqoVXSWcK4cpNop_type:StoreRecord
agent:uhCAkwW-QGwwN7bDEbsIitemDT_3agY5-1qrDrG5nYyXpBgTXH7xNop_type:RegisterAgentActivity
agent:uhCAkwW-QGwwN7bDEbsIitemDT_3agY5-1qrDrG5nYyXpBgTXH7xNop_type:StoreEntry
agent:uhCAkwW-QGwwN7bDEbsIitemDT_3agY5-1qrDrG5nYyXpBgTXH7xNop_type:StoreRecord
agent:uhCAkyGUyVF4GibGUl7ma_wP3HFgSHZ6GcA5C4Jj3BfBIhpLD5bHsop_type:RegisterAgentActivity
agent:uhCAkyGUyVF4GibGUl7ma_wP3HFgSHZ6GcA5C4Jj3BfBIhpLD5bHsop_type:StoreEntry
agent:uhCAkyGUyVF4GibGUl7ma_wP3HFgSHZ6GcA5C4Jj3BfBIhpLD5bHsop_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:uhCAkpBplva9OTdkFfwcbOyzl7EHIKhndgqyNa_nBPEW7Ltw-9N2V
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)
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:uhCAkBpoAZbIq7kYT9AEIPBexBjM73pk_Pr7-ty8IkVwwE02EjoB0
agent:uhCAkr-_9hCOUhRifGV8zg0l48C1RtqDKr5UdH6o-h7ZWuT-QJoH9
agent:uhCAkszQza3XlIWjpkJJKGeXyCmE3PMV7WSUO4JZhTWSPGCdtnlVo
get_timed_local_entries zome function.agent:uhCAk1yfMscroP4dE4bReYsrl68f6teSCUnv1P1mETjMYnfS3W16A
agent:uhCAkI1rjDw4CFuogf1S76vsp0yWzY2NNqcK2yPa5Xa5RSpm3lb9d
agent:uhCAkmrmfIIpRLOR_gTZMOc4LRvDjyyO8kwJu_JdI6nc2YlAYUjQp
agent:uhCAk1yfMscroP4dE4bReYsrl68f6teSCUnv1P1mETjMYnfS3W16A
agent:uhCAkI1rjDw4CFuogf1S76vsp0yWzY2NNqcK2yPa5Xa5RSpm3lb9d
agent:uhCAkmrmfIIpRLOR_gTZMOc4LRvDjyyO8kwJu_JdI6nc2YlAYUjQp
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:uhCAk1qPIaCZCE8skxYXzhU5INd4pCDNYuWjN-lIqPdyY8udNf-vd
agent:uhCAk642oEg3Ii2yAhMEAnCvItJW_P5Gs-AQ446iL5VfoN7mJK583
agent:uhCAkINWae-eVsib3PM7f7Ux6iWZfuRsBZVIXQPnDqbTmOdTA0f96
agent:uhCAkN0qS3NxeP35jDvIvxIK2vereUURRS-LwQXTSx_51C_CoZZQp
agent:uhCAkR99iywrQrsuzo5pGH14xxs0vkCyYW8G2JgBc1UZ-Bbn14hnc
agent:uhCAkYQ6b1z5MMviSfdy1qMVrMzBWebYIK68soztSNMIbZhg9iAMA
get_timed_local_entries zome function.agent:uhCAkMu_x2DIhtFkoC4epoHhaacyIyONPAiw77sUOUmZq9h25agwb
agent:uhCAkXVHvTKI58Lo69bFzOa4RY1dkbkgtles5hxvlghVd3oV3WEg9
agent:uhCAkwc-Iosk5vISwfiXhhjeYkUCP7W_VV46X6r-dhu8b_a3ZW6Y-
agent:uhCAkyUT6GyhnZDykSsmL8ZmUksZQIj53mGmZaeykpZTDYhDEUoFU
agent:uhCAkMu_x2DIhtFkoC4epoHhaacyIyONPAiw77sUOUmZq9h25agwb
agent:uhCAkXVHvTKI58Lo69bFzOa4RY1dkbkgtles5hxvlghVd3oV3WEg9
agent:uhCAkwc-Iosk5vISwfiXhhjeYkUCP7W_VV46X6r-dhu8b_a3ZW6Y-
agent:uhCAkyUT6GyhnZDykSsmL8ZmUksZQIj53mGmZaeykpZTDYhDEUoFU
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:uhCAk5aGNqG9DzZ7Eb5QbIHgXowyzXA4xEVsTgIaIbT8AV1oc9nmC
agent:uhCAkMu0pMOUe1yC02pXD2s-zukGW5ZLAlkJsKauTxQh1cGwTnT5A
agent:uhCAkUW6SCb8-BqIVdzccf_nSmNfclCXF0LmHAZ_TB5-PVcPkTFhN
agent:uhCAkWjImzdoBBY6SrOQb_RyBR4UdZ55v1CdVXyEHc6p4m7lOpH41
agent:uhCAkXQTyaGbHrFUoy1_zzEXTUn_BW2WWjJ4VEpPJCHZ7FdmcidFo
agent:uhCAkwpZY4ls6848oiCLNGr_tyULRx9xatxaEg4oR6cPF-G6p3Ba-
get_timed_local_entries zome function.agent:uhCAkbxt_D-s2TRH-4CrKNW2EaxpBobFj8wmfxFu4H0AoIwGu45xi
agent:uhCAkhJzghw_a8lKVXjKQHJFwcrSo8fw-o46c0qHcI2rnyKCnp1ep
agent:uhCAkrWJUSQg26J1Xh6XdUjSzFUpToPfj6BRqsIjfhRcKg2Jl1C4X
agent:uhCAkuQKHH_1iQw7KXGzm1Ba_fI6PoyIBVFY5rpkhOPYdff2iTGbS
agent:uhCAkbxt_D-s2TRH-4CrKNW2EaxpBobFj8wmfxFu4H0AoIwGu45xi
agent:uhCAkhJzghw_a8lKVXjKQHJFwcrSo8fw-o46c0qHcI2rnyKCnp1ep
agent:uhCAkrWJUSQg26J1Xh6XdUjSzFUpToPfj6BRqsIjfhRcKg2Jl1C4X
agent:uhCAkuQKHH_1iQw7KXGzm1Ba_fI6PoyIBVFY5rpkhOPYdff2iTGbS
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)