summaryrefslogtreecommitdiff
path: root/runtime/ops
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2022-12-01 22:05:18 -0800
committerGitHub <noreply@github.com>2022-12-02 11:35:18 +0530
commit6982c74e11ec8294ed5bd53d2a9d316d7e20e7d2 (patch)
tree8bc1447379c010914c84f793ad7cef43a232a7e8 /runtime/ops
parent9b2b8df927ac23cfa99016a684179f2a3198ba2e (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.rs17
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)
})