问题标签 [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.
c++ - 如何在 Boost.Asio 中使用零拷贝 sendmsg/Receive
我正在使用 Boost.Asio,我想通过使用零拷贝 sendmsg/Receive 来改进我的系统。我可以在 Boost.Asio 中使用零拷贝 sendmsg/Receive 吗?如果我可以使用它们,你能告诉我如何使用它们吗?
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 完成的
python - 你可以从两个 np.float 一维数组创建一个 np.complex128 一维数组而不复制吗?
设置:
我有两个来自共享内存的数组reals
和imags
:
然后我将它们numpy
设为 -arrays,命名为reals2
and imags2
,没有任何副本:
然后我想制作一个np.complex128
1D-array data
,再次不复制数据,但我不知道该怎么做。
问题:
你能从一对浮点数组中制作一个np.complex128
一维数组,而不复制,是/否?data
如果是,如何?
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
那么,关于其他原因的任何想法?还是我的代码错了?
代码
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)"
基本上有办法让客户知道呼叫已中止......
库中没有任何解释来实现这种行为......
c - 内存映射可以用于已经分配的内存缓冲区吗?
我希望能够在进程之间共享预先分配的内存。
搜索一个例子来做,我只能找到一种方法来创建一个新文件shm_open
,然后使用mmap
and memcpy
。这是一个问题,因为缓冲区非常大,我不控制它们的分配(相机的 API)。
有没有办法获取现有的、预先分配的缓冲区,并与另一个进程共享其内容,而不memcpy
使用mmap
?或使用除此之外的其他方法mmap
?
rust - 如何在不复制 actix_web 的情况下将数据从请求传递到响应
我有一个从请求正文反序列化的用户结构。我想根据从数据库接收到的数据填充User结构(字段名)的数据并返回响应。
- 不用复制,从数据库数据中借用用户名,存储在全局结构中
- 返回具有填充名称的相同用户结构的响应
我使用 tokio::task::spawn_blocking 是因为实际项目中有阻塞操作
现在我收到此错误
java - java中的高性能内容服务器
考虑 S3 上的一个非常薄的休息层,上传 api 有一个文件附件(multipart* MIME 类型)。服务接收呼叫并将字节转发到 S3。
我在这里优化性能的选择是什么?
我正在考虑零拷贝传输,但在 java 中,这似乎只能在 file <--> socket 之间进行。困扰我的是流经我的 jvm 的字节的开销,其中没有转换或增值
编辑1:性能我主要是指“服务单个请求的最快方式”,一致的延迟(避免异常值)将在优先级列表中排在第二位。
java - 从 SocketChannel 到 SocketChannel 的零拷贝
使用 Java 的 NIO API,是否可以实现从一个套接字到另一个套接字的零拷贝数据传输?我知道FileChannel::transferTo()
从文件到套接字的哪个方法,但是transferTo()
在SocketChannel
.
c++ - 如何实现零拷贝形式的gRPC c++
我想编写一个在某些情况下用作 FTP 服务器的 gRPC 服务器(c++)。具体来说,客户端通过文件名请求文件,而服务器返回文件内容(如果存在)。在传统的socket编程中,我可以在linux系统上实现零拷贝sendfile
。这意味着文件内容将直接从磁盘进入套接字缓冲区,而无需在用户空间中传输。但是在 gRPC 世界中,套接字详细信息是隐藏的,这意味着您可能无法访问套接字后面所需的文件描述符sendfile
:
因此,我必须先将文件字节读入内存,然后在 gRPC 响应中返回。这是不必要的性能损失。我想知道是否有任何 API 或解决方法。