问题标签 [zero-copy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
508 浏览

c++ - 如何在 Boost.Asio 中使用零拷贝 sendmsg/Receive

我正在使用 Boost.Asio,我想通过使用零拷贝 sendmsg/Receive 来改进我的系统。我可以在 Boost.Asio 中使用零拷贝 sendmsg/Receive 吗?如果我可以使用它们,你能告诉我如何使用它们吗?

0 投票
1 回答
126 浏览

linux - 从 ftrace 原始文件读取时 splice(2) 返回“无效参数”

我想尝试 splice syscall,trace-cmd 使用它来零复制 off ftrace 的原始文件。

以下是 splice 无法读取的 ftrace 原始文件的部分列表:

/sys/kernel/debug/tracing/per_cpu/cpo0/trace_pipe_raw

/sys/kernel/debug/tracing/per_cpu/cpo0/snapshot_raw

/sys/kernel/debug/tracing/per_cpu/cpo1/trace_pipe_raw

/sys/kernel/debug/tracing/per_cpu/cpo1/snapshot_raw

这里还有一些其他文件(拼接处理得很好):

/sys/kernel/debug/tracing/per_cpu/cpo0/trace_pipe

/sys/kernel/debug/tracing/per_cpu/cpo0/snapshot

/sys/kernel/debug/tracing/per_cpu/cpo1/trace_pipe

/sys/kernel/debug/tracing/per_cpu/cpo1/snapshot

什么有效:

  • 使用 read() 系统调用非常适合从原始 ftrace 文件中读取。
  • 使用 cat() 系统调用将显示原始 ftrace 文件。
  • 使用 trace-cmd 工具,它是 ftrace 的 CLI 前端。

这是我的代码:

笔记:

对 /sys/kernel/debug/tracing 的所有访问都是使用 sudo 完成的

0 投票
1 回答
222 浏览

python - 你可以从两个 np.float 一维数组创建一个 np.complex128 一维数组而不复制吗?

设置:

我有两个来自共享内存的数组realsimags

然后我将它们numpy设为 -arrays,命名为reals2and imags2,没有任何副本:

然后我想制作一个np.complex1281D-array data,再次不复制数据,但我不知道该怎么做。

问题:

你能从一对浮点数组中制作一个np.complex128一维数组,而不复制,是/否?data

如果是,如何?

0 投票
1 回答
340 浏览

c - 发送带有 MSG_ZEROCOPY 的 udp 消息时,什么会导致返回 SO_EE_CODE_ZEROCOPY_COPIED?

环境

Linux 版本:Linux 5.4.0-4-amd64 Debian 5.4.19-1 x86_64 GNU/Linux

网卡分散收集:

scatter-gather: on tx-scatter-gather: on tx-scatter-gather-fraglist: off [fixed]

输出

sock_extended_err 代码设置为 SO_EE_CODE_ZEROCOPY_COPIED。根据Linux Kernel Doc,当设备不支持 scatter-gather I/O 时,会返回此代码,但您可以看到我的 NIC 支持并启用了 scatter-gather I/O。

链接的文档是显示 SO_EE_CODE_ZEROCOPY_COPIED 的官方解释,linux 支持 udp msg_zerocopy for version >= 5.0

那么,关于其他原因的任何想法?还是我的代码错了?

代码

0 投票
0 回答
33 浏览

haskell - Haskell SendFile 零拷贝 - 中止传输

您好我想在 Haskell 中使用以下库在节点之间传输文件:https ://hackage.haskell.org/package/sendfile-0.7.11.1/docs/Network-Socket-SendFile.html

sendFile如果文件已被另一个节点传输,我希望能够中止......

我正在考虑使用 iteratee 来做这个例子:

我的问题是:我怎样才能中止这个转移?

我正在考虑做这样的事情:

(Sent _n cont) -> return () 或者 (Sent _n cont) -> error "Already downloaded (Abort)"

基本上有办法让客户知道呼叫已中止......

库中没有任何解释来实现这种行为......

0 投票
0 回答
88 浏览

c - 内存映射可以用于已经分配的内存缓冲区吗?

我希望能够在进程之间共享预先分配的内存。

搜索一个例子来做,我只能找到一种方法来创建一个新文件shm_open,然后使用mmapand memcpy。这是一个问题,因为缓冲区非常大,我不控制它们的分配(相机的 API)。

有没有办法获取现有的、预先分配的缓冲区,并与另一个进程共享其内容,而不memcpy使用mmap?或使用除此之外的其他方法mmap

0 投票
0 回答
399 浏览

rust - 如何在不复制 actix_web 的情况下将数据从请求传递到响应

我有一个从请求正文反序列化的用户结构。我想根据从数据库接收到的数据填充User结构(字段名)的数据并返回响应。

  1. 不用复制,从数据库数据中借用用户名,存储在全局结构中
  2. 返回具有填充名称的相同用户结构的响应

我使用 tokio::task::spawn_blocking 是因为实际项目中有阻塞操作

现在我收到此错误

0 投票
0 回答
30 浏览

java - java中的高性能内容服务器

考虑 S3 上的一个非常薄的休息层,上传 api 有一个文件附件(multipart* MIME 类型)。服务接收呼叫并将字节转发到 S3。
我在这里优化性能的选择是什么?
我正在考虑零拷贝传输,但在 java 中,这似乎只能在 file <--> socket 之间进行。困扰我的是流经我的 jvm 的字节的开销,其中没有转换或增值

编辑1:性能我主要是指“服务单个请求的最快方式”,一致的延迟(避免异常值)将在优先级列表中排在第二位。

0 投票
0 回答
43 浏览

java - 从 SocketChannel 到 SocketChannel 的零拷贝

使用 Java 的 NIO API,是否可以实现从一个套接字到另一个套接字的零拷贝数据传输?我知道FileChannel::transferTo()从文件到套接字的哪个方法,但是transferTo()SocketChannel.

0 投票
1 回答
192 浏览

c++ - 如何实现零拷贝形式的gRPC c++

我想编写一个在某些情况下用作 FTP 服务器的 gRPC 服务器(c++)。具体来说,客户端通过文件名请求文件,而服务器返回文件内容(如果存在)。在传统的socket编程中,我可以在linux系统上实现零拷贝sendfile。这意味着文件内容将直接从磁盘进入套接字缓冲区,而无需在用户空间中传输。但是在 gRPC 世界中,套接字详细信息是隐藏的,这意味着您可能无法访问套接字后面所需的文件描述符sendfile

因此,我必须先将文件字节读入内存,然后在 gRPC 响应中返回。这是不必要的性能损失。我想知道是否有任何 API 或解决方法。