Skip to content

Commit 30179a2

Browse files
riptlripatel-fd
authored andcommitted
runtime: fix txn_account perf issue
fd_wksp_containing is expensive. txn_account needs to be rewritten entirely at some point, but this is good enough for now.
1 parent c0e569b commit 30179a2

File tree

2 files changed

+6
-30
lines changed

2 files changed

+6
-30
lines changed

src/flamenco/runtime/fd_txn_account.c

Lines changed: 5 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -30,26 +30,14 @@ fd_txn_account_new( void * mem,
3030

3131
fd_memcpy( txn_account->pubkey, pubkey, sizeof(fd_pubkey_t) );
3232

33-
fd_wksp_t * wksp = fd_wksp_containing( meta );
34-
3533
txn_account->magic = FD_TXN_ACCOUNT_MAGIC;
3634

3735
txn_account->starting_dlen = meta->dlen;
3836
txn_account->starting_lamports = meta->lamports;
3937

4038
uchar * data = (uchar *)meta + sizeof(fd_account_meta_t);
4139

42-
txn_account->meta_gaddr = fd_wksp_gaddr( wksp, meta );
43-
if( FD_UNLIKELY( !txn_account->meta_gaddr ) ) {
44-
FD_LOG_WARNING(( "meta_gaddr is 0" ));
45-
return NULL;
46-
}
47-
48-
txn_account->data_gaddr = fd_wksp_gaddr( wksp, data );
49-
if( FD_UNLIKELY( !txn_account->data_gaddr ) ) {
50-
FD_LOG_WARNING(( "data_gaddr is 0" ));
51-
return NULL;
52-
}
40+
txn_account->meta_soff = (long)( (ulong)meta - (ulong)mem );
5341

5442
txn_account->meta = meta;
5543
txn_account->data = data;
@@ -82,22 +70,12 @@ fd_txn_account_join( void * mem, fd_wksp_t * data_wksp ) {
8270
return NULL;
8371
}
8472

85-
if( FD_UNLIKELY( txn_account->meta_gaddr==0UL ) ) {
86-
FD_LOG_WARNING(( "`meta gaddr is 0" ));
87-
return NULL;
88-
}
89-
90-
txn_account->meta = fd_wksp_laddr( data_wksp, txn_account->meta_gaddr );
91-
if( FD_UNLIKELY( !txn_account->meta ) ) {
92-
FD_LOG_WARNING(( "meta is NULL" ));
93-
return NULL;
73+
if( FD_UNLIKELY( txn_account->meta_soff==0UL ) ) {
74+
FD_LOG_CRIT(( "invalid meta_soff" ));
9475
}
9576

96-
txn_account->data = fd_wksp_laddr( data_wksp, txn_account->data_gaddr );
97-
if( FD_UNLIKELY( !txn_account->data && txn_account->meta->dlen ) ) {
98-
FD_LOG_WARNING(( "data is NULL" ));
99-
return NULL;
100-
}
77+
txn_account->meta = (void *)( (ulong)mem + (ulong)txn_account->meta_soff );
78+
txn_account->data = (void *)( (ulong)txn_account->meta + sizeof(fd_account_meta_t) );
10179

10280
return txn_account;
10381
}

src/flamenco/runtime/fd_txn_account.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,7 @@ struct __attribute__((aligned(8UL))) fd_txn_account {
3636
uchar * data;
3737

3838
int is_mutable;
39-
40-
ulong meta_gaddr;
41-
ulong data_gaddr;
39+
long meta_soff;
4240

4341
ulong starting_dlen;
4442
ulong starting_lamports;

0 commit comments

Comments
 (0)