diff options
author | Divy Srivastava <dj.srivastava23@gmail.com> | 2022-12-01 22:05:18 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-02 11:35:18 +0530 |
commit | 6982c74e11ec8294ed5bd53d2a9d316d7e20e7d2 (patch) | |
tree | 8bc1447379c010914c84f793ad7cef43a232a7e8 /runtime/ops | |
parent | 9b2b8df927ac23cfa99016a684179f2a3198ba2e (diff) |
perf: use fast api for io read/write sync (#15863)
```
$ dd if=/dev/zero bs=65536 count=500000 | ./stdio # C baseline
500000+0 records in
500000+0 records out
32768000000 bytes transferred in 4.126087 secs (7941664827 bytes/sec)
c: size 32768000000 reads 500000 blocksize 65536
```
```
$ dd if=/dev/zero bs=65536 count=500000 | deno run stdio.js # Deno
500000+0 records in
500000+0 records out
32768000000 bytes transferred in 4.279032 secs (7657806719 bytes/sec)
deno: size 32768000000 reads 500000 blocksize 65536
```
Diffstat (limited to 'runtime/ops')
-rw-r--r-- | runtime/ops/io.rs | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/runtime/ops/io.rs b/runtime/ops/io.rs index fd5b8a962..186052afe 100644 --- a/runtime/ops/io.rs +++ b/runtime/ops/io.rs @@ -16,7 +16,6 @@ use deno_core::OpState; use deno_core::RcRef; use deno_core::Resource; use deno_core::ResourceId; -use deno_core::ZeroCopyBuf; use once_cell::sync::Lazy; use std::borrow::Cow; use std::cell::RefCell; @@ -683,32 +682,32 @@ pub fn op_print( }) } -#[op] +#[op(fast)] fn op_read_sync( state: &mut OpState, - rid: ResourceId, - mut buf: ZeroCopyBuf, + rid: u32, + buf: &mut [u8], ) -> Result<u32, AnyError> { StdFileResource::with_resource(state, rid, move |resource| { resource.with_inner_and_metadata(|inner, _| { inner - .read(&mut buf) + .read(buf) .map(|n: usize| n as u32) .map_err(AnyError::from) }) }) } -#[op] +#[op(fast)] fn op_write_sync( state: &mut OpState, - rid: ResourceId, - buf: ZeroCopyBuf, + rid: u32, + buf: &mut [u8], ) -> Result<u32, AnyError> { StdFileResource::with_resource(state, rid, move |resource| { resource.with_inner_and_metadata(|inner, _| { inner - .write_and_maybe_flush(&buf) + .write_and_maybe_flush(buf) .map(|nwritten: usize| nwritten as u32) .map_err(AnyError::from) }) |