diff options
| author | eunhhu <[email protected]> | 2026-09-26 07:47:57 +0100 |
|---|---|---|
| committer | eunhhu <[email protected]> | 2026-09-26 07:47:57 +0100 |
| commit | 0c47bc2bc2497771740410bcd965d4d4fd0e3524 (patch) | |
| tree | 85e9c24eb25f7f01f465a23cbe3995133e472152 /prototypes/connections/module.h | |
| parent | 4ebd1cd9108b135c1216bc6ae17832b77dcacaf3 (diff) | |
| download | pure-0c47bc2bc2497771740410bcd965d4d4fd0e3524.tar.gz pure-0c47bc2bc2497771740410bcd965d4d4fd0e3524.zip | |
Let a burst hold up to 256 documents
A burst ended once 16 keys had joined it, so 64 writers needed four
commits a round and some waited through several (p50 17.4 ms). The
pending documents now grow on demand up to 256 keys, which also makes
PureApp 1.3 KB smaller (3,128 bytes). With 64 connections a commit now
carries 26 events on average instead of 12 and the median PUT waits
9.2 ms; throughput moves less, since each commit writes more and the SD
card's syncs take most of the time.
Diffstat (limited to 'prototypes/connections/module.h')
| -rw-r--r-- | prototypes/connections/module.h | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/prototypes/connections/module.h b/prototypes/connections/module.h index c5d4f52..c9fb606 100644 --- a/prototypes/connections/module.h +++ b/prototypes/connections/module.h @@ -19,7 +19,7 @@ enum { PURE_MODULE_NAME = 32, PURE_MODULE_STRINGS = 32768, PURE_MODULE_HEADER = 40, PURE_MODULE_FIELDS = 32, PURE_MODULE_COLLECTIONS = 1, PURE_MODULE_CONSTANTS = 64, PURE_MODULE_CONSTANT_BYTES = 8192, PURE_MODULE_RECORDS = 8, PURE_MODULE_RECORD_FIELDS = 64, - PURE_RECORD_FIELDS = 16, PURE_MODULE_JOINS = 8, PURE_APP_PENDING = 16 + PURE_RECORD_FIELDS = 16, PURE_MODULE_JOINS = 8, PURE_APP_PENDING = 256 }; typedef enum { @@ -147,7 +147,7 @@ typedef struct { unsigned char *bytes; size_t used, capacity; } PureArena; * before it returns (a frame waits for the next one). Deferred, events apply * at once and a host saves a burst with one commit: an event is durable once * a later save succeeds, and each key's document joins a burst once (a second - * message for it saves the burst first). */ + * message for it, or one past PURE_APP_PENDING keys, saves the burst first). */ typedef struct { const PureModule *module; PureData data; @@ -164,8 +164,8 @@ typedef struct { double durable_values[PURE_MODULE_STATES]; PureVersion durable_texts[PURE_MODULE_STATES], durable_lists[PURE_MODULE_STATES]; uint64_t durable_ticks, durable_events; - struct { void *document; char key[65]; bool edited; } pending[PURE_APP_PENDING]; - unsigned pending_count; + struct PurePending { void *document; char key[65]; bool edited; } *pending; /* grows to PURE_APP_PENDING */ + unsigned pending_count, pending_capacity; PureFault fault; uint32_t fault_pc; uint64_t ticks, events; |
