This might be problematic for performance. Performance impact of said synchronous usercalls needs to be measured and/or fixed by converting them to async-usercalls.
Currently known instances of this behaviour (sometimes implicit, sometimes explicit):
potentially other places as well. This task should be re-evaluated upon picking up, it is possible that we may want to start with performance measurements first, especially for the less obvious places.
Currently, there are usages of synchronous usercalls in the async-usercalls module (to be merged to
master
with PR https://github.com/fortanix/rust-sgx/pull/515).This might be problematic for performance. Performance impact of said synchronous usercalls needs to be measured and/or fixed by converting them to async-usercalls.
Currently known instances of this behaviour (sometimes implicit, sometimes explicit):
impl AsyncUsercallProvider
,pub fn read
User::<[u8]>::uninitialized
leads to a synchronous usercallbind_stream
, sync usercall upon being dropped_addr_buf
is of typeMakeSend<User<[u8]>>
which will lead to a synchronous usercall upon being dropped