Skip to content

Commit

Permalink
Improvements for recording mode metering of module cache (#1401)
Browse files Browse the repository at this point in the history
### What

This involves several improvements around various module cache usage
edge cases:

- Use the initial storage state to build the cache 'post-hoc' in order
to not build cache for Wasms that wouldn't be cached in enforcing mode
- Only charge the module parse costs to 'shadow' budget when we would be
using the cached module in enforcing mode
- Only rebuild the module cache in recording mode when it would be built
in the enforcing mode.

### Why

Improving simulation accuracy.

### Known limitations

N/A

---------

Co-authored-by: Graydon Hoare <[email protected]>
  • Loading branch information
dmkozh and graydon authored Apr 12, 2024
1 parent 134b5b9 commit 4d9b102
Show file tree
Hide file tree
Showing 276 changed files with 75,844 additions and 75,770 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@
" 11 ret get_ledger_network_id -> Ok(Bytes(obj#11))": "cpu:1162714, mem:417671, objs:-/6@ab14f9cc",
" 12 ret create_contract -> Ok(Address(obj#13))": "cpu:1180847, mem:420745, objs:-/7@1e4a62db, store:-/2@edf8e766, foot:2@1d6142e6, auth:-/1@aab5fab0",
" 13 call call(Address(obj#13), Symbol(test), Vec(obj#15))": "cpu:1181808, mem:420825, objs:-/8@62399339, auth:-/-",
" 14 push VM:ff1c9ef0:test()": "cpu:1261926, mem:561944, objs:-/9@b80298fc, vm:65536@6644521a/2@2f94d90d, stk:1@6824a1a6, auth:1@d7dc1364/-",
" 15 call bytes_new_from_linear_memory(U32(0), U32(100))": "cpu:1264395, mem:561974, vm:-/-",
" 16 ret bytes_new_from_linear_memory -> Ok(Bytes(obj#19))": "cpu:1265929, mem:562154, objs:-/10@b0024b5c",
" 17 pop VM:ff1c9ef0:test -> Ok(Bytes(obj#19))": "cpu:1266425, mem:562178, objs:1@7f18fa80/10@b0024b5c, vm:65536@6644521a/2@2f94d90d, stk:1@a26e6bf7",
" 18 ret call -> Ok(Bytes(obj#19))": "cpu:1408593, mem:589697, objs:-/10@b0024b5c, vm:-/-, stk:-, auth:-/-",
" 14 push VM:ff1c9ef0:test()": "cpu:1402039, mem:589279, objs:-/9@b80298fc, vm:65536@6644521a/2@2f94d90d, stk:1@6824a1a6, auth:1@d7dc1364/-",
" 15 call bytes_new_from_linear_memory(U32(0), U32(100))": "cpu:1404508, mem:589309, vm:-/-",
" 16 ret bytes_new_from_linear_memory -> Ok(Bytes(obj#19))": "cpu:1406042, mem:589489, objs:-/10@b0024b5c",
" 17 pop VM:ff1c9ef0:test -> Ok(Bytes(obj#19))": "cpu:1406538, mem:589513, objs:1@7f18fa80/10@b0024b5c, vm:65536@6644521a/2@2f94d90d, stk:1@a26e6bf7",
" 18 ret call -> Ok(Bytes(obj#19))": "cpu:1407221, mem:589529, objs:-/10@b0024b5c, vm:-/-, stk:-, auth:-/-",
" 19 call bytes_len(Bytes(obj#19))": "",
" 20 ret bytes_len -> Ok(U32(100))": "cpu:1408715",
" 20 ret bytes_len -> Ok(U32(100))": "cpu:1407343",
" 21 call bytes_new_from_slice(8000140)": "cpu:47, mem:0",
" 22 ret bytes_new_from_slice -> Ok(Bytes(obj#21))": "cpu:2001042, mem:8000220, objs:-/11@96b48057",
" 23 call upload_wasm(Bytes(obj#21))": "",
Expand All @@ -33,10 +33,10 @@
" 31 ret get_ledger_network_id -> Ok(Bytes(obj#31))": "cpu:6159577426, mem:733467597, objs:-/16@cf9e0e6c",
" 32 ret create_contract -> Ok(Address(obj#33))": "cpu:6159596697, mem:733471043, objs:-/17@f39b8131, store:-/4@9cba52, foot:4@e112475d, auth:-/1@31ca3153",
" 33 call call(Address(obj#33), Symbol(test), Vec(obj#35))": "cpu:961, mem:80, objs:-/18@b9c1b082, auth:-/-",
" 34 push VM:4ff8463e:test()": "cpu:3955854, mem:24011537, objs:-/19@2a08da74, vm:8060928@feaf4cb9/2@2f94d90d, stk:1@c588d116, auth:1@a916afbc/-",
" 35 call bytes_new_from_linear_memory(U32(0), U32(8000000))": "cpu:3958323, mem:24011567, vm:-/-",
" 36 ret bytes_new_from_linear_memory -> Ok(Bytes(obj#39))": "cpu:5959833, mem:32011647, objs:-/20@bd76a425",
" 37 pop VM:4ff8463e:test -> Ok(Bytes(obj#39))": "cpu:5960329, mem:32011671, objs:1@4ea2c9ec/20@bd76a425, vm:8060928@feaf4cb9/2@2f94d90d, stk:1@67ece5e5",
" 38 ret call -> Err(Error(Budget, ExceededLimit))": "cpu:7850593, mem:48101306, objs:-/20@bd76a425, vm:-/-, stk:-",
" 39 end": "cpu:7850593, mem:48101306, prngs:-/9b4a753, objs:-/20@bd76a425, vm:-/-, evt:-, store:-/4@9cba52, foot:4@e112475d, stk:-, auth:1@a916afbc/-"
" 34 push VM:4ff8463e:test()": "cpu:5845946, mem:40101172, objs:-/19@2a08da74, vm:8060928@feaf4cb9/2@2f94d90d, stk:1@c588d116, auth:1@a916afbc/-",
" 35 call bytes_new_from_linear_memory(U32(0), U32(8000000))": "cpu:5848415, mem:40101202, vm:-/-",
" 36 ret bytes_new_from_linear_memory -> Err(Error(Budget, ExceededLimit))": "cpu:6849443, mem:48101218",
" 37 pop VM:4ff8463e:test -> Err(Error(Budget, ExceededLimit))": " vm:8060928@feaf4cb9/2@2f94d90d",
" 38 ret call -> Err(Error(Budget, ExceededLimit))": "cpu:6849519, vm:-/-, stk:-",
" 39 end": "cpu:6849519, mem:48101218, prngs:-/9b4a753, objs:-/19@2a08da74, vm:-/-, evt:-, store:-/4@9cba52, foot:4@e112475d, stk:-, auth:1@a916afbc/-"
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,28 +13,28 @@
" 11 ret get_ledger_network_id -> Ok(Bytes(obj#11))": "cpu:2721673, mem:1634850, objs:-/6@f5a2751f",
" 12 ret create_contract -> Ok(Address(obj#13))": "cpu:2739806, mem:1637924, objs:-/7@e8892517, store:-/2@619f32b5, foot:2@73444153, auth:-/1@233e284a",
" 13 call call(Address(obj#13), Symbol(bin_word), Vec(obj#15))": "cpu:2740769, mem:1638012, objs:-/8@4c0b0eb3, auth:-/-",
" 14 push VM:75130317:bin_word(U32(2864434397))": "cpu:3012265, mem:2836061, objs:-/9@181ddb96, vm:1114112@67b8985c/12@d32baa7b, stk:1@be273e0f, auth:1@b86eb558/-",
" 15 call bytes_new_from_linear_memory(U32(1048572), U32(4))": "cpu:3014738, mem:2836107, vm:-/-",
" 16 ret bytes_new_from_linear_memory -> Ok(Bytes(obj#19))": "cpu:3016720, mem:2836191, objs:-/10@8f3713f0",
" 17 pop VM:75130317:bin_word -> Ok(Bytes(obj#19))": "cpu:3017216, mem:2836215, objs:1@7f18fa80/10@8f3713f0, vm:1114112@a2a6f9c8/12@d32baa7b, stk:1@b4a13456",
" 18 ret call -> Ok(Bytes(obj#19))": "cpu:3399061, mem:2896666, objs:-/10@8f3713f0, vm:-/-, stk:-, auth:-/-",
" 19 call obj_cmp(Bytes(obj#19), Bytes(obj#21))": "cpu:3400022, mem:2896750, objs:-/11@3023d359",
" 20 ret obj_cmp -> Ok(0)": "cpu:3400310",
" 21 call vec_new()": "cpu:3401271, mem:2896834, objs:-/12@82e455c7",
" 22 ret vec_new -> Ok(Vec(obj#25))": "cpu:3401772, mem:2896898, objs:-/13@40e25a5c",
" 14 push VM:75130317:bin_word(U32(2864434397))": "cpu:3391935, mem:2895848, objs:-/9@181ddb96, vm:1114112@67b8985c/12@d32baa7b, stk:1@be273e0f, auth:1@b86eb558/-",
" 15 call bytes_new_from_linear_memory(U32(1048572), U32(4))": "cpu:3394408, mem:2895894, vm:-/-",
" 16 ret bytes_new_from_linear_memory -> Ok(Bytes(obj#19))": "cpu:3396390, mem:2895978, objs:-/10@8f3713f0",
" 17 pop VM:75130317:bin_word -> Ok(Bytes(obj#19))": "cpu:3396886, mem:2896002, objs:1@7f18fa80/10@8f3713f0, vm:1114112@a2a6f9c8/12@d32baa7b, stk:1@b4a13456",
" 18 ret call -> Ok(Bytes(obj#19))": "cpu:3397569, mem:2896018, objs:-/10@8f3713f0, vm:-/-, stk:-, auth:-/-",
" 19 call obj_cmp(Bytes(obj#19), Bytes(obj#21))": "cpu:3398530, mem:2896102, objs:-/11@3023d359",
" 20 ret obj_cmp -> Ok(0)": "cpu:3398818",
" 21 call vec_new()": "cpu:3399779, mem:2896186, objs:-/12@82e455c7",
" 22 ret vec_new -> Ok(Vec(obj#25))": "cpu:3400280, mem:2896250, objs:-/13@40e25a5c",
" 23 call vec_push_back(Vec(obj#25), Bytes(obj#23))": "",
" 24 ret vec_push_back -> Ok(Vec(obj#27))": "cpu:3402979, mem:2896986, objs:-/14@b6924a77",
" 24 ret vec_push_back -> Ok(Vec(obj#27))": "cpu:3401487, mem:2896338, objs:-/14@b6924a77",
" 25 call call(Address(obj#13), Symbol(bin_inc), Vec(obj#27))": "",
" 26 push VM:75130317:bin_inc(Bytes(obj#23))": "cpu:3672949, mem:4092636, objs:-/15@c506ccd2, vm:1114112@67b8985c/12@d32baa7b, stk:1@47d8fa40, auth:1@251a9ba2/-",
" 27 call bytes_len(Bytes(obj#23))": "cpu:3675857, mem:4092706, objs:1@b5962073/15@c506ccd2, vm:-/-, stk:1@1e1dc600",
" 28 ret bytes_len -> Ok(U32(4))": "cpu:3677297",
" 26 push VM:75130317:bin_inc(Bytes(obj#23))": "cpu:4053621, mem:4154310, objs:-/15@c506ccd2, vm:1114112@67b8985c/12@d32baa7b, stk:1@47d8fa40, auth:1@251a9ba2/-",
" 27 call bytes_len(Bytes(obj#23))": "cpu:4056529, mem:4154380, objs:1@b5962073/15@c506ccd2, vm:-/-, stk:1@1e1dc600",
" 28 ret bytes_len -> Ok(U32(4))": "cpu:4057969",
" 29 call bytes_copy_to_linear_memory(Bytes(obj#23), U32(0), U32(1048572), U32(4))": "",
" 30 ret bytes_copy_to_linear_memory -> Ok(Void)": "cpu:3677771",
" 30 ret bytes_copy_to_linear_memory -> Ok(Void)": "cpu:4058443",
" 31 call bytes_new_from_linear_memory(U32(1048572), U32(4))": "",
" 32 ret bytes_new_from_linear_memory -> Ok(Bytes(obj#31))": "cpu:3679865, mem:4092790, objs:1@b5962073/16@4c245c5f",
" 33 pop VM:75130317:bin_inc -> Ok(Bytes(obj#31))": "cpu:3680361, mem:4092814, objs:2@a8b6a51c/16@4c245c5f, vm:1114112@2206e62e/12@d32baa7b, stk:1@aa3c8413",
" 34 ret call -> Ok(Bytes(obj#31))": "cpu:4062206, mem:4153265, objs:-/16@4c245c5f, vm:-/-, stk:-, auth:-/-",
" 35 call obj_cmp(Bytes(obj#31), Bytes(obj#33))": "cpu:4063167, mem:4153349, objs:-/17@397f6f02",
" 36 ret obj_cmp -> Ok(0)": "cpu:4063455",
" 37 end": "cpu:4063455, mem:4153349, prngs:-/9b4a753, objs:-/17@397f6f02, vm:-/-, evt:-, store:-/2@619f32b5, foot:2@73444153, stk:-, auth:-/-"
" 32 ret bytes_new_from_linear_memory -> Ok(Bytes(obj#31))": "cpu:4060537, mem:4154464, objs:1@b5962073/16@4c245c5f",
" 33 pop VM:75130317:bin_inc -> Ok(Bytes(obj#31))": "cpu:4061033, mem:4154488, objs:2@a8b6a51c/16@4c245c5f, vm:1114112@2206e62e/12@d32baa7b, stk:1@aa3c8413",
" 34 ret call -> Ok(Bytes(obj#31))": "cpu:4061716, mem:4154504, objs:-/16@4c245c5f, vm:-/-, stk:-, auth:-/-",
" 35 call obj_cmp(Bytes(obj#31), Bytes(obj#33))": "cpu:4062677, mem:4154588, objs:-/17@397f6f02",
" 36 ret obj_cmp -> Ok(0)": "cpu:4062965",
" 37 end": "cpu:4062965, mem:4154588, prngs:-/9b4a753, objs:-/17@397f6f02, vm:-/-, evt:-, store:-/2@619f32b5, foot:2@73444153, stk:-, auth:-/-"
}
52 changes: 26 additions & 26 deletions soroban-env-host/observations/21/test__complex__run_complex_1.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,36 +13,36 @@
" 11 ret get_ledger_network_id -> Ok(Bytes(obj#11))": "cpu:1787436, mem:1525464, objs:-/6@af28baea",
" 12 ret create_contract -> Ok(Address(obj#13))": "cpu:1805569, mem:1528538, objs:-/7@622c8fae, store:-/2@f22a0462, foot:2@af07657d, auth:-/1@ff5d84b5",
" 13 call call(Address(obj#13), Symbol(go), Vec(obj#15))": "cpu:1806009, mem:1528602, objs:-/8@52c37e3f, auth:-/-",
" 14 push VM:2c0dcac5:go()": "cpu:2112193, mem:2730102, objs:-/9@cbedd2d9, vm:1114112@c58cc467/5@8d05851, stk:1@34f84bc5, auth:1@afe23e00/-",
" 15 call get_ledger_network_id()": "cpu:2114662, mem:2730132, vm:-/-",
" 16 ret get_ledger_network_id -> Ok(Bytes(obj#19))": "cpu:2119933, mem:2730244, objs:-/10@e159b064",
" 17 call get_ledger_version()": "cpu:2120429, mem:2730268, objs:1@7f18fa80/10@e159b064, stk:1@31469f88",
" 18 ret get_ledger_version -> Ok(U32(21))": "cpu:2120739",
" 14 push VM:2c0dcac5:go()": "cpu:2384422, mem:2774733, objs:-/9@cbedd2d9, vm:1114112@c58cc467/5@8d05851, stk:1@34f84bc5, auth:1@afe23e00/-",
" 15 call get_ledger_network_id()": "cpu:2386891, mem:2774763, vm:-/-",
" 16 ret get_ledger_network_id -> Ok(Bytes(obj#19))": "cpu:2392162, mem:2774875, objs:-/10@e159b064",
" 17 call get_ledger_version()": "cpu:2392658, mem:2774899, objs:1@7f18fa80/10@e159b064, stk:1@31469f88",
" 18 ret get_ledger_version -> Ok(U32(21))": "cpu:2392968",
" 19 call get_ledger_sequence()": "",
" 20 ret get_ledger_sequence -> Ok(U32(1234))": "cpu:2121049",
" 20 ret get_ledger_sequence -> Ok(U32(1234))": "cpu:2393278",
" 21 call get_ledger_timestamp()": "",
" 22 ret get_ledger_timestamp -> Ok(U64(1234))": "cpu:2121359",
" 22 ret get_ledger_timestamp -> Ok(U64(1234))": "cpu:2393588",
" 23 call compute_hash_sha256(Bytes(obj#19))": "",
" 24 ret compute_hash_sha256 -> Ok(Bytes(obj#21))": "cpu:2128291, mem:2730380, objs:1@7f18fa80/11@b06b5764",
" 25 call bytes_copy_to_linear_memory(Bytes(obj#21), U32(0), U32(1048504), U32(32))": "cpu:2128787, mem:2730404, objs:2@6b9b82ef/11@b06b5764, stk:1@f9a1a92",
" 26 ret bytes_copy_to_linear_memory -> Ok(Void)": "cpu:2129265",
" 24 ret compute_hash_sha256 -> Ok(Bytes(obj#21))": "cpu:2400520, mem:2775011, objs:1@7f18fa80/11@b06b5764",
" 25 call bytes_copy_to_linear_memory(Bytes(obj#21), U32(0), U32(1048504), U32(32))": "cpu:2401016, mem:2775035, objs:2@6b9b82ef/11@b06b5764, stk:1@f9a1a92",
" 26 ret bytes_copy_to_linear_memory -> Ok(Void)": "cpu:2401494",
" 27 call bytes_new_from_linear_memory(U32(1048504), U32(16))": "",
" 28 ret bytes_new_from_linear_memory -> Ok(Bytes(obj#23))": "cpu:2130495, mem:2730500, objs:2@6b9b82ef/12@445b4c2d",
" 29 call vec_new()": "cpu:2130991, mem:2730524, objs:3@6a4b7989/12@445b4c2d, stk:1@b861e0c9",
" 30 ret vec_new -> Ok(Vec(obj#25))": "cpu:2131741, mem:2730588, objs:3@6a4b7989/13@9ebb839d",
" 31 call vec_push_back(Vec(obj#25), Bytes(obj#23))": "cpu:2132237, mem:2730612, objs:4@93597833/13@9ebb839d, stk:1@8bc54bac",
" 32 ret vec_push_back -> Ok(Vec(obj#27))": "cpu:2134013, mem:2730700, objs:4@93597833/14@5f2c3dea",
" 33 call vec_new_from_linear_memory(U32(1048544), U32(1))": "cpu:2134509, mem:2730724, objs:5@93e8cf26/14@5f2c3dea, stk:1@6a9a3154",
" 34 ret vec_new_from_linear_memory -> Ok(Vec(obj#29))": "cpu:2135948, mem:2730812, objs:5@93e8cf26/15@42aa2aeb",
" 35 call contract_event(Vec(obj#29), Bytes(obj#21))": "cpu:2136444, mem:2730836, objs:6@e37e9bd8/15@42aa2aeb, stk:1@a1d9300d",
" 36 ret contract_event -> Ok(Void)": "cpu:2138424, mem:2731013, objs:6@e37e9bd8/16@8c92b752, evt:1@4403228c",
" 28 ret bytes_new_from_linear_memory -> Ok(Bytes(obj#23))": "cpu:2402724, mem:2775131, objs:2@6b9b82ef/12@445b4c2d",
" 29 call vec_new()": "cpu:2403220, mem:2775155, objs:3@6a4b7989/12@445b4c2d, stk:1@b861e0c9",
" 30 ret vec_new -> Ok(Vec(obj#25))": "cpu:2403970, mem:2775219, objs:3@6a4b7989/13@9ebb839d",
" 31 call vec_push_back(Vec(obj#25), Bytes(obj#23))": "cpu:2404466, mem:2775243, objs:4@93597833/13@9ebb839d, stk:1@8bc54bac",
" 32 ret vec_push_back -> Ok(Vec(obj#27))": "cpu:2406242, mem:2775331, objs:4@93597833/14@5f2c3dea",
" 33 call vec_new_from_linear_memory(U32(1048544), U32(1))": "cpu:2406738, mem:2775355, objs:5@93e8cf26/14@5f2c3dea, stk:1@6a9a3154",
" 34 ret vec_new_from_linear_memory -> Ok(Vec(obj#29))": "cpu:2408177, mem:2775443, objs:5@93e8cf26/15@42aa2aeb",
" 35 call contract_event(Vec(obj#29), Bytes(obj#21))": "cpu:2408673, mem:2775467, objs:6@e37e9bd8/15@42aa2aeb, stk:1@a1d9300d",
" 36 ret contract_event -> Ok(Void)": "cpu:2410653, mem:2775644, objs:6@e37e9bd8/16@8c92b752, evt:1@4403228c",
" 37 call map_new_from_linear_memory(U32(1048600), U32(1048544), U32(4))": "",
" 38 call obj_cmp(Symbol(obj#33), Symbol(seq))": "cpu:2141746, mem:2731311, objs:6@e37e9bd8/17@82f590b9",
" 39 ret obj_cmp -> Ok(-1)": "cpu:2141912",
" 40 ret map_new_from_linear_memory -> Ok(Map(obj#35))": "cpu:2142352, mem:2731375, objs:6@e37e9bd8/18@2fb4e829",
" 41 call put_contract_data(Symbol(data), Map(obj#35), Temporary)": "cpu:2142848, mem:2731399, objs:7@929806d2/18@2fb4e829, stk:1@8b608bf2",
" 42 ret put_contract_data -> Ok(Void)": "cpu:2150497, mem:2733031, store:-/3@b9af2282, foot:3@2f0e11c9",
" 38 call obj_cmp(Symbol(obj#33), Symbol(seq))": "cpu:2413975, mem:2775942, objs:6@e37e9bd8/17@82f590b9",
" 39 ret obj_cmp -> Ok(-1)": "cpu:2414141",
" 40 ret map_new_from_linear_memory -> Ok(Map(obj#35))": "cpu:2414581, mem:2776006, objs:6@e37e9bd8/18@2fb4e829",
" 41 call put_contract_data(Symbol(data), Map(obj#35), Temporary)": "cpu:2415077, mem:2776030, objs:7@929806d2/18@2fb4e829, stk:1@8b608bf2",
" 42 ret put_contract_data -> Ok(Void)": "cpu:2422726, mem:2777662, store:-/3@b9af2282, foot:3@2f0e11c9",
" 43 pop VM:2c0dcac5:go -> Ok(Void)": " vm:1114112@589dff27/5@8d05851",
" 44 ret call -> Ok(Void)": "cpu:2425008, mem:2778966, objs:-/18@2fb4e829, vm:-/-, stk:-, auth:-/-",
" 45 end": "cpu:2425008, mem:2778966, prngs:-/9b4a753, objs:-/18@2fb4e829, vm:-/-, evt:1@4403228c, store:-/3@b9af2282, foot:3@2f0e11c9, stk:-, auth:-/-"
" 44 ret call -> Ok(Void)": "cpu:2423356, mem:2777678, objs:-/18@2fb4e829, vm:-/-, stk:-, auth:-/-",
" 45 end": "cpu:2423356, mem:2777678, prngs:-/9b4a753, objs:-/18@2fb4e829, vm:-/-, evt:1@4403228c, store:-/3@b9af2282, foot:3@2f0e11c9, stk:-, auth:-/-"
}
Loading

0 comments on commit 4d9b102

Please sign in to comment.