Skip to content

Commit d4ccb24

Browse files
[vm] Non-generic interpreter function caches (#17591)
For non-generic functions, we can keep FrameTypeCache live per the whole interpeter session - no need to re-instantiate types and re-calculate various properties. Note: non-generic caches can be cross-block, and cocnurrent. It is not clear doing so brings benefits, as we then need synchronisation on cache miss. Ideally, we pre-compute such things at load time so that synchronisation is not needed.
1 parent cb67bee commit d4ccb24

File tree

8 files changed

+231
-374
lines changed

8 files changed

+231
-374
lines changed
Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,43 @@
1-
Loop { loop_count: Some(100000), loop_type: NoOp } 3 0.999 1.006 34260.4
2-
Loop { loop_count: Some(10000), loop_type: Arithmetic } 3 0.999 1.003 21485.1
3-
CreateObjects { num_objects: 10, object_payload_size: 0 } 3 0.991 1.011 104.5
4-
CreateObjects { num_objects: 10, object_payload_size: 10240 } 3 0.987 1.002 7764.2
5-
CreateObjects { num_objects: 100, object_payload_size: 0 } 3 1.000 1.004 965.0
6-
CreateObjects { num_objects: 100, object_payload_size: 10240 } 3 0.990 1.003 9059.1
7-
InitializeVectorPicture { length: 128 } 3 0.988 1.003 138.1
8-
VectorPicture { length: 128 } 3 0.993 1.002 39.3
9-
VectorPictureRead { length: 128 } 3 0.988 1.217 32.6
10-
InitializeVectorPicture { length: 30720 } 3 0.986 1.001 23541.0
11-
VectorPicture { length: 30720 } 3 0.998 1.000 4486.4
12-
VectorPictureRead { length: 30720 } 3 0.999 1.004 4486.4
13-
SmartTablePicture { length: 30720, num_points_per_txn: 200 } 3 0.997 1.006 18783.0
14-
SmartTablePicture { length: 1048576, num_points_per_txn: 300 } 3 1.000 1.003 32998.0
15-
ResourceGroupsSenderWriteTag { string_length: 1024 } 3 0.977 1.003 16.0
16-
ResourceGroupsSenderMultiChange { string_length: 1024 } 3 0.993 1.000 29.8
17-
TokenV1MintAndTransferFT 3 0.990 1.007 358.8
18-
TokenV1MintAndTransferNFTSequential 3 0.994 1.014 503.4
19-
TokenV2AmbassadorMint { numbered: true } 3 0.998 1.012 315.6
20-
LiquidityPoolSwap { is_stable: true } 3 0.997 1.005 495.6
21-
LiquidityPoolSwap { is_stable: false } 3 0.989 1.002 460.4
22-
CoinInitAndMint 3 0.996 1.007 503.4
23-
FungibleAssetMint 3 0.998 1.029 160.4
24-
IncGlobalMilestoneAggV2 { milestone_every: 1 } 3 0.995 1.009 24.1
25-
IncGlobalMilestoneAggV2 { milestone_every: 2 } 3 0.968 1.010 14.5
26-
EmitEvents { count: 1000 } 3 0.998 1.011 5420.0
27-
APTTransferWithPermissionedSigner 3 0.991 1.002 553.3
28-
APTTransferWithMasterSigner 3 0.998 0.999 67.2
29-
VectorTrimAppend { vec_len: 3000, element_len: 1, index: 0, repeats: 0 } 3 0.994 1.032 4529.6
30-
VectorTrimAppend { vec_len: 3000, element_len: 1, index: 100, repeats: 1000 } 3 0.985 1.003 18889.3
31-
VectorTrimAppend { vec_len: 3000, element_len: 1, index: 2990, repeats: 1000 } 3 0.994 1.009 9462.4
32-
VectorRemoveInsert { vec_len: 3000, element_len: 1, index: 100, repeats: 1000 } 3 0.995 1.006 15009.6
33-
VectorRemoveInsert { vec_len: 3000, element_len: 1, index: 2998, repeats: 1000 } 3 0.997 1.004 10454.4
34-
VectorRangeMove { vec_len: 3000, element_len: 1, index: 1000, move_len: 500, repeats: 1000 } 3 0.992 1.004 21330.2
35-
VectorTrimAppend { vec_len: 100, element_len: 100, index: 0, repeats: 0 } 3 0.994 1.007 235.4
36-
VectorTrimAppend { vec_len: 100, element_len: 100, index: 10, repeats: 1000 } 3 0.990 1.009 5658.7
37-
VectorRangeMove { vec_len: 100, element_len: 100, index: 50, move_len: 10, repeats: 1000 } 3 0.993 1.005 3845.3
38-
MapInsertRemove { len: 100, repeats: 100, map_type: OrderedMap } 3 0.994 1.003 5689.1
39-
MapInsertRemove { len: 100, repeats: 100, map_type: SimpleMap } 3 0.992 1.005 18641.9
40-
MapInsertRemove { len: 100, repeats: 100, map_type: BigOrderedMap { inner_max_degree: 4, leaf_max_degree: 4 } } 3 0.997 1.004 33261.7
41-
MapInsertRemove { len: 100, repeats: 100, map_type: BigOrderedMap { inner_max_degree: 1024, leaf_max_degree: 1024 } } 3 0.999 1.008 7719.9
42-
MapInsertRemove { len: 1000, repeats: 100, map_type: OrderedMap } 3 0.993 1.001 29088.2
43-
OrderBook { state: OrderBookState { order_idx: 0 }, num_markets: 1, overlap_ratio: 0.0, buy_frequency: 0.5, max_sell_size: 1, max_buy_size: 1 } 3 0.996 1.011 399.2
1+
Loop { loop_count: Some(100000), loop_type: NoOp } 6 0.990 1.040 34731.8
2+
Loop { loop_count: Some(10000), loop_type: Arithmetic } 6 0.988 1.018 21679.8
3+
CreateObjects { num_objects: 10, object_payload_size: 0 } 6 0.989 1.007 104.0
4+
CreateObjects { num_objects: 10, object_payload_size: 10240 } 6 0.998 1.037 7793.9
5+
CreateObjects { num_objects: 100, object_payload_size: 0 } 6 0.984 1.011 957.7
6+
CreateObjects { num_objects: 100, object_payload_size: 10240 } 6 0.992 1.038 9076.4
7+
InitializeVectorPicture { length: 128 } 6 0.989 1.022 138.6
8+
VectorPicture { length: 128 } 6 0.994 1.024 33.3
9+
VectorPictureRead { length: 128 } 6 0.997 1.016 32.3
10+
InitializeVectorPicture { length: 30720 } 6 0.992 1.025 23963.8
11+
VectorPicture { length: 30720 } 6 0.996 1.006 4529.6
12+
VectorPictureRead { length: 30720 } 6 0.996 1.029 4546.9
13+
SmartTablePicture { length: 30720, num_points_per_txn: 200 } 6 0.997 1.067 18712.4
14+
SmartTablePicture { length: 1048576, num_points_per_txn: 300 } 6 0.989 1.058 33129.7
15+
ResourceGroupsSenderWriteTag { string_length: 1024 } 6 0.990 1.008 16.0
16+
ResourceGroupsSenderMultiChange { string_length: 1024 } 6 0.982 1.004 29.9
17+
TokenV1MintAndTransferFT 6 0.994 1.021 304.1
18+
TokenV1MintAndTransferNFTSequential 6 1.000 1.016 441.4
19+
TokenV2AmbassadorMint { numbered: true } 6 0.982 1.005 318.5
20+
LiquidityPoolSwap { is_stable: true } 6 0.987 1.005 487.1
21+
LiquidityPoolSwap { is_stable: false } 6 0.988 1.018 453.7
22+
CoinInitAndMint 6 0.991 1.009 415.2
23+
FungibleAssetMint 6 0.987 1.014 158.4
24+
IncGlobalMilestoneAggV2 { milestone_every: 1 } 6 0.989 1.018 24.1
25+
IncGlobalMilestoneAggV2 { milestone_every: 2 } 6 0.996 1.016 14.3
26+
EmitEvents { count: 1000 } 6 0.998 1.013 5429.7
27+
APTTransferWithPermissionedSigner 6 0.989 1.005 541.6
28+
APTTransferWithMasterSigner 6 0.987 1.014 65.6
29+
VectorTrimAppend { vec_len: 3000, element_len: 1, index: 0, repeats: 0 } 6 0.994 1.029 4573.0
30+
VectorTrimAppend { vec_len: 3000, element_len: 1, index: 100, repeats: 1000 } 6 0.982 1.038 18783.0
31+
VectorTrimAppend { vec_len: 3000, element_len: 1, index: 2990, repeats: 1000 } 6 0.994 1.017 9480.2
32+
VectorRemoveInsert { vec_len: 3000, element_len: 1, index: 100, repeats: 1000 } 6 0.995 1.017 14981.6
33+
VectorRemoveInsert { vec_len: 3000, element_len: 1, index: 2998, repeats: 1000 } 6 0.987 1.030 10492.5
34+
VectorRangeMove { vec_len: 3000, element_len: 1, index: 1000, move_len: 500, repeats: 1000 } 6 0.996 1.018 21485.1
35+
VectorTrimAppend { vec_len: 100, element_len: 100, index: 0, repeats: 0 } 6 0.998 1.046 236.3
36+
VectorTrimAppend { vec_len: 100, element_len: 100, index: 10, repeats: 1000 } 6 0.993 1.012 5638.4
37+
VectorRangeMove { vec_len: 100, element_len: 100, index: 50, move_len: 10, repeats: 1000 } 6 0.995 1.000 3882.1
38+
MapInsertRemove { len: 100, repeats: 100, map_type: OrderedMap } 6 0.993 1.031 5608.2
39+
MapInsertRemove { len: 100, repeats: 100, map_type: SimpleMap } 6 0.993 1.065 18222.3
40+
MapInsertRemove { len: 100, repeats: 100, map_type: BigOrderedMap { inner_max_degree: 4, leaf_max_degree: 4 } } 6 0.992 1.023 33261.7
41+
MapInsertRemove { len: 100, repeats: 100, map_type: BigOrderedMap { inner_max_degree: 1024, leaf_max_degree: 1024 } } 6 0.991 1.022 7719.9
42+
MapInsertRemove { len: 1000, repeats: 100, map_type: OrderedMap } 6 0.991 1.036 28612.4
43+
OrderBook { state: OrderBookState { order_idx: 0 }, num_markets: 1, overlap_ratio: 0.0, buy_frequency: 0.5, max_sell_size: 1, max_buy_size: 1 } 6 0.984 1.007 385.2
Lines changed: 50 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,50 @@
1-
no-op 1 VM 3 0.988 1.007 37992.0
2-
no-op 1000 VM 3 1.000 1.026 34799.4
3-
apt-fa-transfer 1 VM 3 0.993 1.009 28822.5
4-
apt-fa-transfer 1 NativeVM 3 0.985 1.012 40390.5
5-
account-generation 1 VM 3 0.995 1.006 23207.8
6-
account-generation 1 NativeVM 3 0.916 1.052 40168.4
7-
account-resource32-b 1 VM 3 0.990 1.006 34529.3
8-
modify-global-resource 1 VM 3 0.989 1.011 2953.1
9-
modify-global-resource 100 VM 3 0.995 1.006 33792.4
10-
publish-package 1 VM 3 0.992 1.021 2251.8
11-
mix_publish_transfer 1 VM 3 0.990 1.007 24480.7
12-
batch100-transfer 1 VM 3 0.996 1.048 1193.9
13-
batch100-transfer 1 NativeVM 3 0.973 1.011 1841.6
14-
vector-picture30k 1 VM 3 0.997 1.010 136.2
15-
vector-picture30k 100 VM 3 0.989 1.046 1851.9
16-
smart-table-picture30-k-with200-change 1 VM 3 0.995 1.008 31.0
17-
smart-table-picture30-k-with200-change 100 VM 3 0.985 1.015 369.8
18-
modify-global-resource-agg-v2 1 VM 3 0.978 1.010 34394.7
19-
modify-global-flag-agg-v2 1 VM 3 0.984 1.023 4731.2
20-
modify-global-bounded-agg-v2 1 VM 3 0.980 1.006 8348.5
21-
modify-global-milestone-agg-v2 1 VM 3 0.994 1.007 28404.4
22-
resource-groups-global-write-tag1-kb 1 VM 3 0.994 1.012 8464.8
23-
resource-groups-global-write-and-read-tag1-kb 1 VM 3 0.997 1.000 6548.5
24-
resource-groups-sender-write-tag1-kb 1 VM 3 0.981 1.020 19535.1
25-
resource-groups-sender-multi-change1-kb 1 VM 3 0.979 1.029 16564.9
26-
token-v1ft-mint-and-transfer 1 VM 3 0.995 1.009 1389.5
27-
token-v1ft-mint-and-transfer 100 VM 3 0.997 0.999 16110.4
28-
token-v1nft-mint-and-transfer-sequential 1 VM 3 0.995 1.006 970.5
29-
token-v1nft-mint-and-transfer-sequential 100 VM 3 0.993 1.013 12774.1
30-
coin-init-and-mint 1 VM 3 0.997 1.004 19426.5
31-
coin-init-and-mint 100 VM 3 0.990 1.003 17063.2
32-
fungible-asset-mint 1 VM 3 0.978 1.002 23042.7
33-
fungible-asset-mint 100 VM 3 0.997 1.009 20493.5
34-
no-op5-signers 1 VM 3 0.998 1.010 37992.0
35-
token-v2-ambassador-mint 1 VM 3 0.991 1.010 15829.9
36-
token-v2-ambassador-mint 100 VM 3 0.992 1.019 15498.8
37-
liquidity-pool-swap 1 VM 3 0.996 1.008 966.8
38-
liquidity-pool-swap 100 VM 3 0.990 1.002 11076.5
39-
liquidity-pool-swap-stable 1 VM 3 0.999 1.005 927.7
40-
liquidity-pool-swap-stable 100 VM 3 0.989 1.003 10761.9
41-
deserialize-u256 1 VM 3 0.998 1.003 36932.7
42-
no-op-fee-payer 1 VM 3 0.997 1.001 2604.1
43-
no-op-fee-payer 100 VM 3 0.998 1.012 28875.4
44-
simple-script 1 VM 3 0.983 1.002 38492.8
45-
vector-trim-append-len3000-size1 1 VM 3 0.978 1.012 902.4
46-
vector-remove-insert-len3000-size1 1 VM 3 0.991 1.012 1070.6
47-
order-book-no-matches50-markets 1 VM 3 0.995 1.004 5011.8
48-
order-book-balanced-matches25-pct50-markets 1 VM 3 0.992 1.000 5410.2
49-
order-book-balanced-matches80-pct50-markets 1 VM 3 0.988 1.019 6196.8
50-
order-book-balanced-size-skewed80-pct50-markets 1 VM 3 0.994 1.044 5361.6
1+
no-op 1 VM 6 0.971 1.012 37707.7
2+
no-op 1000 VM 6 0.989 1.033 34934.9
3+
apt-fa-transfer 1 VM 6 0.979 1.018 29034.8
4+
apt-fa-transfer 1 NativeVM 6 0.955 1.064 42046.2
5+
account-generation 1 VM 6 0.997 1.016 23667.1
6+
account-generation 1 NativeVM 6 0.985 1.046 40987.0
7+
account-resource32-b 1 VM 6 0.982 1.017 34260.4
8+
modify-global-resource 1 VM 6 0.999 1.009 2958.4
9+
modify-global-resource 100 VM 6 0.991 1.010 33859.1
10+
publish-package 1 VM 6 0.966 1.020 2282.1
11+
mix_publish_transfer 1 VM 6 0.998 1.013 25412.2
12+
batch100-transfer 1 VM 6 0.991 1.023 1257.6
13+
batch100-transfer 1 NativeVM 6 0.942 1.166 1886.8
14+
vector-picture30k 1 VM 6 0.979 1.005 135.7
15+
vector-picture30k 100 VM 6 0.907 1.016 1845.0
16+
smart-table-picture30-k-with200-change 1 VM 6 0.995 1.022 31.5
17+
smart-table-picture30-k-with200-change 100 VM 6 0.964 1.029 428.0
18+
modify-global-resource-agg-v2 1 VM 6 0.971 1.033 34193.3
19+
modify-global-flag-agg-v2 1 VM 6 0.980 1.015 4749.0
20+
modify-global-bounded-agg-v2 1 VM 6 0.960 1.029 8464.8
21+
modify-global-milestone-agg-v2 1 VM 6 0.993 1.015 28249.8
22+
resource-groups-global-write-tag1-kb 1 VM 6 0.981 1.030 8200.2
23+
resource-groups-global-write-and-read-tag1-kb 1 VM 6 0.994 1.011 6409.9
24+
resource-groups-sender-write-tag1-kb 1 VM 6 0.967 1.046 19826.7
25+
resource-groups-sender-multi-change1-kb 1 VM 6 0.956 1.107 16174.0
26+
token-v1ft-mint-and-transfer 1 VM 6 0.987 1.010 1455.7
27+
token-v1ft-mint-and-transfer 100 VM 6 0.990 1.012 16466.1
28+
token-v1nft-mint-and-transfer-sequential 1 VM 6 0.993 1.009 1004.9
29+
token-v1nft-mint-and-transfer-sequential 100 VM 6 0.997 1.024 13096.9
30+
coin-init-and-mint 1 VM 6 0.999 1.016 20870.8
31+
coin-init-and-mint 100 VM 6 0.993 1.006 18677.1
32+
fungible-asset-mint 1 VM 6 0.994 1.005 22756.4
33+
fungible-asset-mint 100 VM 6 0.987 1.017 20381.3
34+
no-op5-signers 1 VM 6 0.984 1.022 37849.7
35+
token-v2-ambassador-mint 1 VM 6 0.996 1.020 15439.9
36+
token-v2-ambassador-mint 100 VM 6 0.991 1.009 15323.2
37+
liquidity-pool-swap 1 VM 6 0.982 1.007 979.9
38+
liquidity-pool-swap 100 VM 6 0.984 1.013 11236.6
39+
liquidity-pool-swap-stable 1 VM 6 0.996 1.019 934.6
40+
liquidity-pool-swap-stable 100 VM 6 0.989 1.011 10997.2
41+
deserialize-u256 1 VM 6 0.986 1.011 37002.8
42+
no-op-fee-payer 1 VM 6 0.991 1.014 2594.6
43+
no-op-fee-payer 100 VM 6 0.991 1.016 28769.8
44+
simple-script 1 VM 6 0.994 1.023 37354.2
45+
vector-trim-append-len3000-size1 1 VM 6 0.969 1.034 905.7
46+
vector-remove-insert-len3000-size1 1 VM 6 0.997 1.014 1100.2
47+
order-book-no-matches50-markets 1 VM 6 0.989 1.025 4749.0
48+
order-book-balanced-matches25-pct50-markets 1 VM 6 0.997 1.012 5095.3
49+
order-book-balanced-matches80-pct50-markets 1 VM 6 0.978 1.041 5916.8
50+
order-book-balanced-size-skewed80-pct50-markets 1 VM 6 0.949 1.015 5161.0

third_party/move/move-vm/runtime/src/frame_type_cache.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use crate::{frame::Frame, LoadedFunction};
55
use move_binary_format::{
66
errors::*,
77
file_format::{
8-
FieldInstantiationIndex, FunctionHandleIndex, FunctionInstantiationIndex, SignatureIndex,
8+
FieldInstantiationIndex, FunctionInstantiationIndex, SignatureIndex,
99
StructDefInstantiationIndex, StructVariantInstantiationIndex,
1010
VariantFieldInstantiationIndex,
1111
},
@@ -14,7 +14,6 @@ use move_core_types::gas_algebra::NumTypeNodes;
1414
use move_vm_types::loaded_data::runtime_types::Type;
1515
use std::{cell::RefCell, collections::BTreeMap, rc::Rc};
1616

17-
#[allow(dead_code)]
1817
pub(crate) trait RuntimeCacheTraits {
1918
fn caches_enabled() -> bool;
2019
}
@@ -38,7 +37,6 @@ impl RuntimeCacheTraits for AllRuntimeCaches {
3837
/// that the memory footprint of each variant is small. This is an
3938
/// enum that is expected to grow in the future.
4039
#[derive(Clone)]
41-
#[allow(dead_code)]
4240
pub(crate) enum PerInstructionCache {
4341
Nothing,
4442
Pack(u16),
@@ -72,8 +70,6 @@ pub(crate) struct FrameTypeCache {
7270
/// structures stored in that function's frame cache do not change.
7371
pub(crate) generic_sub_frame_cache:
7472
BTreeMap<FunctionInstantiationIndex, (Rc<LoadedFunction>, Rc<RefCell<FrameTypeCache>>)>,
75-
pub(crate) sub_frame_cache:
76-
BTreeMap<FunctionHandleIndex, (Rc<LoadedFunction>, Rc<RefCell<FrameTypeCache>>)>,
7773
/// Stores a variant for each individual instruction in the
7874
/// function's bytecode. We keep the size of the variant to be
7975
/// small. The caches are indexed by the index of the given

0 commit comments

Comments
 (0)