腾讯云
开发者社区
文档
建议反馈
控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
登录/注册
精选内容/技术社群/优惠产品,
尽在小程序
立即前往
文章
问答
视频
沙龙
1
回答
在Linux中使用‘`splice`’..。其他系统还能做什么?
c
、
windows
、
macos
、
operating-system
、
bsd
在最近的Linux上,afaict,将文件或文件子集复制到另一个文件的最快方法是使用非常好的splice系统调用。该系统使内核可以直接管理传输(几乎),而不必将数据复制到用户内存中。 现在,我有兴趣为其他系统找到类似的东西,特别是Windows和BSD/MacOS (我愿意用Obj编写一些代码,在不太可能有API不能从原始C访问的情况下)。 谢谢 备注我假设在下最快的完整文件拷贝是CopyFile。但是,如果只复制一个文件的范围呢? Note I正在开发性能敏感的代码,应该可以在各种大容量存储设备(即从安卓智能手机到NFS挂载)上工作。当然,我愿意为不同的OSes编写不同的实现。 Note目前
浏览 2
提问于2012-04-26
得票数 5
1
回答
从CUDA设备写入输出文件
cuda
、
gpu
、
printf
我是一个在CUDA编程和过程中重新编写C代码为并行的CUDA新代码的新手。 是否有一种方法可以直接从设备写入输出数据文件,而不需要将数组从设备复制到主机?我想如果cuPrintf存在的话,一定要写一个cuFprintf吗? 抱歉,如果前面的话题已经给出了答案,我似乎找不到. 谢谢!
浏览 0
提问于2014-01-23
得票数 2
回答已采纳
1
回答
linux elf .bss段内存开销
linux
、
memory
、
elf
#include <string.h> #include <stdio.h> typedef struct { char a[1024]; } AA; static AA a[102400]; int main(int argc, char **argv) { getchar(); memset(a, 0, sizeof(a)/2); getchar(); } 我正在尝试了解精灵.bss的内存成本。上面是我的测试程序。当程序启动时,它使用很少的内存,所以我认为静态的AA a102400在all.When时没有映射,我按下"En
浏览 19
提问于2020-06-08
得票数 0
回答已采纳
2
回答
如何在Linux上的文件之间移动move页面?
linux
我有几个文件,每个opened和mmaped都是单独的。 我想把它们连接成一个更大的文件。 理想情况下,我会创建文件,将其ftruncate到正确的大小,然后“以某种方式”将较小文件的页面移动到正确的偏移量。然而,在Linux上,我没有发现任何将页面从一个文件移动到另一个文件的系统调用。 现在,我的解决方案是简单地write数据,但这是浪费的,因为我实际上不需要两个副本。 有没有办法在Linux上的文件之间“移动”mmaped页? 或者,有没有办法使用文件描述符将它们连接起来?
浏览 21
提问于2019-08-15
得票数 0
回答已采纳
2
回答
java中大文件的快速随机存取读写访问
java
、
arrays
、
database
、
performance
、
randomaccessfile
我正在为一个游戏创建最终的数据库文件。多线程计算游戏位置的结果,将结果保存在文件中的适当位置,还可以查阅到目前为止的数据库以加快计算速度。 到目前为止,我刚刚将一个byte[]加载到内存中,但是今天早上,它在尝试创建一个超过Integer.MAX_VALUE字节的文件时崩溃了。 我认为有两种解决办法: 使用多字节数组的包装器 随机文件存取 随机文件访问也是很好的,因为它超出了我的RAM的限制。我希望操作系统(Windows10/Linux 20)将大部分文件加载到内存中,这样对于完全适合内存的文件来说,它将与byte[]一样快,否则也不会太糟糕(我有一个非常快的SSD)。 这有
浏览 2
提问于2021-01-14
得票数 0
2
回答
Linux下的RAM分析
linux
、
memory-management
我想获得在Linux上运行的RAM中已分配内存的映射。 我正在寻找给定时间的内存利用率,以及根据用户进程、内核模块和内核本身进行分配的细节。
浏览 0
提问于2011-05-25
得票数 0
1
回答
使用数据指针与数据自动化系统(和集成内存)
c++
、
memory-management
、
cuda
我使用的板与集成gpu和cpu内存。我还使用外部矩阵库(Blitz++)。我希望能够从矩阵对象中获取指向数据的指针,并将其传递到cuda内核中。在做了一些调查之后,听起来我想通过调用cudaHostGetDevicePointer来使用某种形式的零拷贝。我不确定的是内存的分配。是否必须使用cudaHostAlloc创建指针?如果没有必要的话,我不想重写Blitz++来做cudaHostAlloc。 我的代码目前正常工作,但每次都要复制矩阵数据。这在集成存储卡上是不需要的。
浏览 3
提问于2015-06-17
得票数 1
回答已采纳
2
回答
用于全局内存的Qt文件映射
c++
、
linux
、
qt
、
shared-memory
因此,我需要为Linux编写文件映射( OpenFileMapping()、MapViewOfFile()等)。为此,我选择了QSharedMemory。但我不知道如何使它与全球记忆一起工作。 是否有另一个正确的Linux或QSharedMemory特性的文件映射模拟?
浏览 5
提问于2016-01-15
得票数 1
回答已采纳
1
回答
要使用的内容:零拷贝内存与固定内存
cuda
在我的设备功能中,我将一个值存储在主机的全局内存中(不管是固定的还是零拷贝的)数百万次。在我的主机函数中,循环一次从全局内存中迭代和读取一个值(s.t )。我可以看到从设备中产生的值,而不是等待产生所有的值)。 为了更好的表演,我应该在零拷贝和钉钉之间使用哪一种?
浏览 1
提问于2018-09-17
得票数 0
回答已采纳
1
回答
如何更改U-Boot内存映射
linux
、
embedded
、
bootloader
、
u-boot
MS104-SH4上的U-Boot(2009.03)具有如下所示的RAM内存映射。 0x8c000000不能使用(4kB) 0x8c001000用于Linux内核和根文件系统(3MB) 0x8c400000 for Linux进程(28MB) 对我来说,Linux内核和根文件系统的3MB太小了,因为Linux内核和ramdisk分别有1MB和3.5MB。因此,我想更改上面的内存映射,例如,如下所示。 0x8c000000不能使用(4KB) 0x8c001000用于Linux内核和根文件系统(16MB) 0x8cf60000 for Linux进程(16MB) 在我看来,我必须修改uboot源代
浏览 2
提问于2012-02-02
得票数 6
回答已采纳
1
回答
使用Java在两个或多个套接字之间执行零复制数据传输
java
、
file-io
、
zero-copy
有谁知道在两个或多个套接字之间执行零拷贝数据传输的好的java库/API包吗?我知道Java的NIO可以执行从磁盘到套接字的零拷贝数据传输,反之亦然,分别使用java.nio.channels.FileChannel.transferTo和java.nio.channels.FileChannel.transferFrom方法。但是,似乎不支持java套接字到套接字零拷贝传输。此外,任何可以执行系统调用拼接(可以将数据从文件描述符传输到管道,反之亦然)的java库/API都将是一个加号,最好是在linux平台上。 谢谢你的回应。 此外,我已经阅读了大部分以前的博客,关于零拷贝以及其他信息网站,
浏览 2
提问于2014-01-03
得票数 11
1
回答
在实现零拷贝时使用clEnqueueMapBuffer和clEnqueueUnmapMemObject的建议方法
opencl
我正在与opencl进行深度学习,张量的输出大小是固定的。 在cuda中,我可以通过cudaMallocHost使用零拷贝,这可以在初始化时调用。我可以在不显式调用cudaMemcpy的情况下从主机读取张量的输出。 它非常高效,因为它只在我的整个程序执行过程中被调用了一次。我不需要每次转发后都给cudaMallocHost打电话。 当我试图在opencl中实现零拷贝时,在某些实现中,当您想要读取张量的输出时,每次转发之后,它们都会调用clEnqueueMapBuffer和clEnqueueUnmapMemObject。 下面是示例()。 但我发现clEnqueueMapBuffer的开销是不可
浏览 5
提问于2019-09-28
得票数 2
回答已采纳
2
回答
Linux内核拼接()是零拷贝吗?
c
、
linux
、
linux-kernel
我知道splice()是为零拷贝而设计的,并使用Linux内核管道缓冲区来实现这一点。例如,如果我想将数据从一个文件描述符(Fp1)复制到另一个文件描述符(Fp2),它不需要从“内核空间->用户空间->内核空间”复制数据。相反,它只是在内核空间复制数据,流程将类似于"fp1 -> pipe_read -> pipe_write -> fp2“。和我的问题是内核是否需要在"fp1 -> pipe_read“和"pipe_write -> fp2"?之间复制数据? 维基百科说: Ideally, splice and vms
浏览 3
提问于2014-01-10
得票数 6
1
回答
快速关闭mmap,放弃未刷新的更改
linux
、
mmap
、
virtual-memory
我正在使用一个mmap格式的文件作为虚拟内存的舞台--这个文件是手动分配的,因为我想控制它的位置。在munmap上,缓冲区的所有当前内容都被刷新到文件中,但我并不真正需要文件内容。是否可以简单地丢弃mmap区域而不写回? 特定于Linux的解决方案是可以的。 我的意思是像这样 char* myswaparea = "/tmp/myswaparea"; int64_t len = 1LL << 30; fd = open(myswaparea, O_CREAT|O_RDWR, 0600); ftruncate(fd, len); void* arena = mmap(
浏览 1
提问于2015-07-09
得票数 3
2
回答
如何取消映射使用remap_pfn_range()映射的内存
c
、
linux-kernel
、
arm
有多种方法可以将内核内存映射到用户空间。有人说使用splice()、mmap()等。 我使用我们自己的伪字符设备文件的描述符调用mmap(),比如'/dev/mem‘。 当使用我们自己的伪字符设备文件调用mmap()时,在mmap注册的file_operation函数指针内部,我们可以调用remap_pfn_range()来映射内存。 现在,该进程可能已经终止/终止/清除了exit()。如何从内核空间中删除这些映射。我正在研究ARMv7-A。 有人能解释一下当进程被终止/终止时,这些内存映射发生了什么吗?内核是自行删除映射,还是需要显式地unmap?
浏览 0
提问于2015-12-03
得票数 2
2
回答
与目录中的地区文件相比,地区档案有什么好处?
filesystems
、
locale
、
glibc
我很好奇为什么在许多Linux发行版中locale-archive文件是首选的,以及它对每个地区的编译文件有什么优势和多大程度的优势。
浏览 0
提问于2015-09-17
得票数 1
回答已采纳
1
回答
部分读取大文件的有效方法?
python
、
numpy
我有一个巨大的numpy 3D张量,它存储在磁盘上的一个文件中(我通常使用np.load读取该文件)。这是一个二进制.npy文件。在使用np.load时,我很快就使用了大部分内存。 幸运的是,在程序的每一次运行中,我只需要一小部分巨大的张量。该切片具有固定的尺寸,其尺寸由外部模块提供。 做这件事最好的方法是什么?我唯一能找到的方法就是将这个numpy矩阵存储到MySQL数据库中。但我确信有很多更好/更简单的方法。如果有帮助的话,我也很乐意以不同的方式构建我的3D张量文件。 如果我的张量在本质上是稀疏的,答案会改变吗?
浏览 4
提问于2017-03-10
得票数 28
回答已采纳
2
回答
mali.ko和ump.ko在库/模块中用于什么?
android
、
module
、
linux-kernel
、
kernel
、
linux-device-driver
我在/lib/modules文件夹中找到了两个内核模块,它们是mali.ko和ump.ko,我试图搜索有关它的一些信息,不幸的是,我没有发现任何有价值的信息。 如果您曾经研究过这两个内核模块,您能告诉我它们的用途吗? 谢谢。
浏览 2
提问于2013-09-12
得票数 2
2
回答
从内存读取就像从磁盘读取一样?
java
、
python
、
performance
、
memory
、
io
有没有一种方法可以像从磁盘读取一样,从内存中读取?问题是,与磁盘上的I/O相比,如果我直接从内存读取和处理文件的相同内容,我想测试性能提高了多少。但是,我的代码是以从磁盘I/O读取的方式编写的(例如打开文件、从文件读取和关闭文件)。如果有办法将文件推入本地内存,并将内存块作为要处理的文件处理,那将是很棒的。任何直截了当的解决方案都会受到赞赏。 顺便说一句,在Linux上使用Java/Python。:)
浏览 6
提问于2015-05-08
得票数 1
回答已采纳
1
回答
Linux内核为什么以及如何为核心程序创建稀疏文件?
linux
、
linux-kernel
、
coredump
、
sparse-file
目前,我正在研究Linux4.0.6。在coredump激活之后,我观察到生成的核心文件是作为稀疏文件创建的。例如,ls命令显示核心文件的大小为42 MB。但是,du命令显示它只分配了26.3MB。 我对这一意见提出的问题如下: 为什么Linux内核要为核心程序创建一个稀疏文件? 它怎麽工作?它是否依赖于放置核心节点的文件系统? 我是否可以将系统/内核配置为防止核心文件成为稀疏文件?
浏览 1
提问于2017-06-12
得票数 2
3
回答
mmap是如何工作的?
linux
、
memory
、
malloc
、
mmap
我在Linux上工作,需要硬盘中的mmap文件,但我有一个问题,什么会导致它失败。例如,如果所有的内存都是碎片化的,每个内存只有200M,但我想将一个文件映射到1000M的内存,会成功吗?? 另一个问题是,linux中有没有像Windows中的一些工具一样的内存回收工具,例如xp的内置工具。 谢谢。
浏览 0
提问于2011-05-04
得票数 18
回答已采纳
3
回答
是否可以通过修改页表来移动内存页?
copy
、
swap
、
tlb
是否有可能(在任何合理的操作系统上,最好是Linux上)通过只修改页表而不实际移动任何数据来交换两个内存页的内容? 动机是密集的矩阵转置。如果数据是按页大小阻塞的,那么可以转置页内的数据(在缓存中),然后交换页以将块移动到它们的最终位置。一个大的矩阵会有很多很多的页面被移动,所以希望刷新TLB不会造成麻烦。
浏览 2
提问于2010-04-21
得票数 3
回答已采纳
1
回答
OpenCL中零拷贝的访问路径
opencl
我有点搞不懂零拷贝到底是怎么回事。 1-想确认以下内容对应于opencl中的零拷贝。 ....................... . . . . . . . . CPU . . SYSTEM . . . RAM . c3 X . . <=====> . ...|................... PCI-E / / | / / c2 |X
浏览 1
提问于2012-10-07
得票数 7
2
回答
在Linux中读取文件的最快方法?
c++
、
c
、
linux
、
linux-kernel
、
memory-mapped-files
在Linux上,将文件读入字节数组/处理字节的最快方法是什么?这可能包括内存映射、sys调用等。我不熟悉许多特定于Linux的函数。 在过去,我使用了boost内存映射,但我需要更快的特定于Linux的性能,而不是可移植性。
浏览 1
提问于2013-10-16
得票数 3
1
回答
配置RSS和PFRING集群的网络分组流
networking
、
rss
、
pf-ring
我很难理解RSS如何连接到PFRING集群负载平衡的概念。 这是我目前的理解。配置RSS时,NIC计算数据包哈希并将它们放置在RSS队列中。另一方面,PFRING内核模块从NIC接收数据包并将它们放置在环网中。 那两个人是怎么走到一起的?PFRING是否从RSS队列中获取数据包并将其放入环网?
浏览 0
提问于2021-12-01
得票数 0
3
回答
为共享内存IPC使用文件
java
、
linux
、
ipc
、
memory-mapped-files
、
mappedbytebuffer
在我的应用程序中,有一个进程将数据写入文件,然后响应于接收请求,将(某些)数据通过网络发送到请求进程。这个问题的基础是,当两个进程碰巧位于同一个主机上时,我们是否可以加快通信速度。(在我的例子中,流程是Java,但我认为这个讨论可以更广泛地应用。) 有几个项目使用Java的MappedByteBuffers ()返回的FileChannel.map()作为在同一主机上的JVM之间共享内存IPC的一种方式(请参阅Chronicle、Aeron等)。 加快同一主机通信的一种方法是让我的应用程序使用其中一种技术为同一主机通信提供请求-响应路径,或者结合现有的写入数据文件的机制,或者提供一种统一的通信
浏览 11
提问于2020-05-22
得票数 9
回答已采纳
1
回答
在Linux中,内存映射是什么类型的文件?
linux
、
linux-device-driver
可以完全在内存中创建的Linux文件有哪些不同类型? 例如,可以创建一个管道文件,但是创建文件的位置(或文件路径的文件系统类型)对是否涉及磁盘访问有影响吗?如果我在ext3文件系统中创建管道文件,会导致物理磁盘访问吗?
浏览 2
提问于2011-07-09
得票数 5
回答已采纳
2
回答
Linux有页面文件吗?
linux
、
memory
、
memory-management
、
swapfile
、
pagefile
我在几个地方发现Linux使用页面和分页机制,但我没有找到这个文件的位置或如何配置它。 我找到的所有信息都是关于Linux交换文件/分区的。分页和交换是有区别的: 分页将页面(包含一段数据的小框架,通常为4KB,但在不同的操作系统之间可能会有所不同)从主内存移动到后弯存储,这始终是操作系统的正常功能。交换将整个进程移动到存储中,当系统内存紧张时,或者在Windows8上,当新的应用程序处于休眠状态时,就会发生交换。 Linux是否在这两种情况下都使用它的交换文件/分区?如果是这样,我如何才能看到当前有多少页被调出?此信息在vmstat、free或swapon命令中不存在(或者我看不到它)。 或
浏览 5
提问于2016-01-28
得票数 0
回答已采纳
1
回答
我可以使用thrust::host_vector吗,或者我必须使用cudaHostAlloc进行带推力的零拷贝?
cuda
、
gpu
、
thrust
、
zero-copy
我想通过cudaHostGetDevicePointer在映射内存上使用零拷贝。我可以使用thrust::host_vector吗?或者我必须使用cudaHostAlloc(...,cudaHostAllocMapped)?,还是使用Thrust更容易?
浏览 4
提问于2012-07-28
得票数 7
回答已采纳
3
回答
BSD封包截取(不复制)
c
、
freebsd
、
packet
、
intercept
我想在包转发(而不是路由)中间。例如,系统是主机与其网关之间的第二层桥梁。我想检查第7层的字符串或任何"foo“,并根据结果转发/删除/延迟数据包。我遇到麻烦的是拦截这个包。 到目前为止,我读到的是: 我知道我可以从BPF设备(史蒂文McCanne和范雅各布森的Usenix论文)获得包的副本。这对嗅探有益,但对我没有好处。 我可以访问PF设备并设置过滤规则,这有利于转发或删除决策,但不用于检查。曼pf (4) 我可以将数据包放入ALTQ队列,但我不知道如何访问队列中的各个数据包。(9) 我还查看了pf(/usr/src/sys/cont肋骨/pf/net )、PFCTL (/usr/s
浏览 8
提问于2013-07-28
得票数 2
回答已采纳
1
回答
在加载过程中,是否可以为ELF文件中的所有代码和数据分配RAM?
load
我知道,在Linux中,除非引用页面中的虚拟地址,否则不会将RAM页分配给虚拟地址空间的页。但是,我在一个设备中使用嵌入式Linux,在加载它们之前,所有ELF文件都已驻留在RAM(RAM磁盘)中(从每个ELF文件启动一个进程)。所以我在想,在加载每个ELF文件时,是否可以为所有的代码和数据分配RAM。如果这是可能的话,我想我将能够从RAM中删除每个ELF文件,只要它的所有代码和数据都被分页到RAM中,这样就可以腾出更多的内存空间供将来使用。
浏览 0
提问于2016-03-14
得票数 0
1
回答
提升mmap性能与本机内存映射
c++
、
linux
、
memory
、
boost
、
io
我将编写一个基准测试工具,该工具将测试磁盘系统的IOPS和带宽的组合,因此我将转向IO的文件备份内存映射。因为该工具需要同时在POSIX和WinNT平台上使用,所以我不能只使用普通的老式mmap。另外,据我所知,你必须建议Linux内核,整个文件将被顺序访问?这就引出了增强内存映射的问题。Boost内存映射是否可能在Windows、Linux和Max OS X上使用类似质量的驱动程序的类似硬件上提供类似的性能?是否有人对系统中的Boost mmap进行了基准测试?
浏览 2
提问于2010-09-01
得票数 4
2
回答
linux内核中“文件支持的映射”是什么意思?
memory-management
、
process
、
linux-kernel
我是linux的新手,我不明白进程地址空间中“文件支持的映射”的正确含义。 有谁能解释一下吗?
浏览 0
提问于2014-12-09
得票数 0
1
回答
存储在磁盘上的C#对象(MemoryMappedFile?)
c#
我有一组大型对象(超过20 to ),我需要从应用程序快速访问它们。 到目前为止,我已经在应用程序启动时将这些文件从磁盘读取到RAM。这是一个开销很大的任务,因为文件被反序列化为内存中的对象。但是,在加载这些文件的初始启动延迟之后,可以非常快速地访问这些对象。然而,现在文件的大小太大,无法存储在RAM中。 我现在必须从磁盘读取部分文件,将它们反序列化到内存,然后丢弃使用的内存,读取下一个文件,依此类推。由于反序列化,这在计算上是非常昂贵的。 有没有办法让“内存中”的对象指向存储在磁盘上的内存空间?这将比驻留在RAM中时访问速度更慢,但对磁盘而不是RAM的更慢访问仍然比重复反序列化我怀疑的数据要
浏览 0
提问于2018-07-31
得票数 4
1
回答
理解内存映射文件
io
、
operating-system
、
mmap
、
virtual-memory
、
dma
我已经开始阅读有关内存映射IO的内容,我在理解这些概念时遇到了一些困难 这是我迄今所理解的: 每个进程都有一个虚拟地址空间。内存映射文件在虚拟地址空间中分配特定的地址范围,映射到物理内存上的相同地址。这样,由磁盘控制器执行的所有写入操作都是在 内存(通过DMA)将反映到进程中,而不需要进行任何额外的复制。(在非内存映射文件的情况下,CPU必须将内容复制到进程的缓冲区)。 我的怀疑是: 我的理解正确吗? 如果有多个进程试图mmap一个文件,并且没有连续的内存块可用于直接映射,那么会发生什么情况?
浏览 0
提问于2013-09-11
得票数 7
2
回答
通过mmap()加载文件时的内存使用情况
linux
、
unix
、
memory-management
想知道如果可以通过mmap()映射文件的最大内存量与linux盒中RAM的大小之间有什么关系。我试图记忆映射一些文件,发现当“映射”用法接近"MemTotal“(通过cat /proc/meminfo查看)时,我无法映射更多的文件。 64位linux盒上的/proc/meminfo的: MemTotal: 32909628 kB MemFree: 221744 kB 缓冲器: 1800 kB 映射: 31642928 kB CommitLimit: 38012616 kB Committed_AS: 42641120 kB VmallocTotal: 536870911 kB Vmal
浏览 4
提问于2009-08-06
得票数 1
2
回答
Linux和Windows:使用大文件节省物理内存
c++
、
windows
、
linux
下午好,我们已经实现了一个C++ cKeyArray类来测试我们是否可以使用大型文件API来节省物理内存。在Centos Linux测试期间,我们发现Linux文件API与使用堆进行随机访问处理一样快。以下是数字:对于2,700,000行的SQL数据库,其中每行的KeySize是62字节, 使用LINUX File API的cKeyArray类BruteForceComparisons = 197275 BruteForceTimeElapsed = 1,763,504,445微秒每次BruteForce比较需要两次随机访问,每次随机访问所需的平均时间= 1,763,504,445微秒/ (2
浏览 2
提问于2011-03-10
得票数 1
回答已采纳
2
回答
通过Windows中的常规文件传输1-2兆字节的数据--比通过RAM传输慢吗?
windows
、
performance
、
io
、
hard-drive
我使用一个普通的旧文件将1-2 MB的数据从一个进程传递到另一个进程。它是否比完全通过RAM要慢得多? 在回答“是”之前,请记住,至少在现代Linux中,在编写文件时它实际上是被写入RAM的,然后守护进程会不时地将数据同步到磁盘。因此,如果进程A将1-2MB写入文件,则进程B将在1-2秒内读取它们,进程B只需读取缓存的内存。这比这更好,因为在Linux中,在将一个新文件写入硬盘之前有几秒钟的宽限期,所以如果文件被删除,它根本不会写到硬盘上。这使得数据通过文件的速度与通过RAM的速度一样快。 这就是Linux,在Windows中是这样吗? 编辑:只是列出一些假设: 操作系统是相当新的- Wi
浏览 4
提问于2014-02-28
得票数 1
回答已采纳
1
回答
如何在POSIX中实现零拷贝机制?
linux
、
posix
、
zero-copy
我希望在本地/网络的两个进程之间共享/传输数据。可以使用通用的IPC机制、共享内存和消息队列来传输数据。但这些机制涉及多个副本。 我遇到了零拷贝机制,它减少了CPU上的拷贝开销。Linux使用sendfile和splice来支持这一点。这些API不在POSIX中。如何仅使用POSIX实现零拷贝?
浏览 32
提问于2015-09-09
得票数 4
3
回答
加速文件I/O: mmap()与read()
c++
、
c
、
file-io
、
mmap
我有一个Linux应用程序,可以并行读取150-200个文件(4-10 in )。每个文件依次读取大小可变的小数据块,每个数据块通常小于2K。 我当前需要保持超过200 MB/s的文件组合读取速率。磁盘可以很好地处理这一点。预计会有超过1 GB/s的需求(目前该磁盘无法访问)。 我们实现了两个不同的读取系统,都大量使用了posix_advise:第一个是mmaped读取,我们映射整个数据集并按需读取。第二种是基于read()/seek()的系统。 这两种方法都工作得很好,但仅适用于中等大小的情况,read()方法可以更好地管理我们的整体文件缓存,可以很好地处理100 GB的文件,但受到严重的速
浏览 2
提问于2011-11-09
得票数 45
1
回答
Linux操作系统如何理解底层硬件?
linux
、
linux-kernel
、
linux-device-driver
我想知道Linux操作系统是如何理解底层的hardware.Can的。有人建议我从哪里开始理解吗?到目前为止,我只知道'/dev‘子目录在其中起着至关重要的作用。 它具有设备特殊文件,这些文件就像是设备驱动程序的门户,然后设备驱动程序将其带到物理设备。 我在某处读到,Udev守护进程侦听netlink套接字以收集此信息,并且Udev设备管理器会在设备发生时检测设备的添加和删除。 但是,我对Linux读取硬件的方式并不满意。 请让我知道从哪里开始理解这一点,我非常感谢任何试图帮助我的人。
浏览 27
提问于2020-01-08
得票数 0
2
回答
对于默认的linux /IP堆栈,我们可以对TCP发送/recv使用零拷贝吗?
c
、
linux
、
multithreading
、
sockets
、
tcp
对于默认的linux /IP堆栈,我们可以使用作为TCP发送/recv吗? 众所周知,我们可以将套接字缓冲区从内核空间重新映射到原始套接字的用户空间:。 示例: int packet_socket = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); // raw-sockets struct tpacket_req3 req; setsockopt(packet_socket, SOL_PACKET , PACKET_RX_RING , (void*)&req , sizeof(req)); mapped_buffer =
浏览 5
提问于2017-07-11
得票数 5
回答已采纳
2
回答
当多个进程在Linux中使用文件指针读取文件时,是否使用共享虚拟内存?
c++
、
linux
、
memory
我编写了一个C++程序,它使用文件指针读取文件。我需要同时运行多个进程。由于文件的大小可能很大(100 in ~),为了减少多个进程中的内存使用量,我想我需要使用共享内存。(例如像boost::interprocess::shared_memory_object这样的IPC库) 但它真的需要吗?因为我认为如果多个进程读取同一个文件,那么每个进程的虚拟内存通过页面表映射到相同的物理内存文件。 我读了一个Linux文件,他们说, 共享虚拟内存 虽然虚拟内存允许进程具有独立(虚拟)地址空间,但有时需要进程来共享内存。例如,系统中可能有几个进程运行bash命令shell。与其在每个进程虚拟地址空间中
浏览 7
提问于2015-04-29
得票数 2
2
回答
与标准I/O系统调用相比,内存映射文件的性能如何显著提高?
linux
、
performance
、
io
、
virtual-memory
、
mmap
操作系统概念说 考虑使用标准的系统调用open()、read()和fi()对磁盘上的le进行顺序读取。每个file访问都需要一个系统调用和磁盘访问。或者,我们可以使用目前讨论的虚拟内存技术将file I/O作为常规内存访问来处理。这种方法称为内存映射file,允许虚拟地址空间的一部分在逻辑上与file相关联。正如我们将要看到的,这可能导致信号fi不能提高性能。内存映射file是通过将磁盘块映射到内存中的页(或页)来完成的。对file的初始访问通过普通的需求分页进行,从而导致页面错误。然而,file的一个页面大小的部分从file系统读取到物理页面中(有些系统可能选择一次读取超过一页大小的内存块)。随后对file的读和
浏览 0
提问于2018-10-11
得票数 23
回答已采纳
1
回答
Cupy OutOfMemoryError在内存映射模式下尝试cupy.load较大维.npy文件时,np.load工作正常
python
、
numpy
、
google-colaboratory
、
cupy
我试图用内存映射模式在cupy中加载一些更大的.npy文件,但是我一直运行在OutOfMemoryError中。 我认为,由于它是以内存映射模式打开的,所以这个操作不应该占用太多内存,因为内存映射实际上并不会将整个数组加载到内存中。 我可以很好地用np.load加载这些文件,这似乎只发生在cupy.load上。我的环境是谷歌Colab,与特斯拉K80 GPU。它有大约12G的CPU内存,12G的GPU内存和350 gb的磁盘空间。 下面是一个重现错误的最小示例: import os import numpy as np import cupy #Create .npy files. for
浏览 0
提问于2019-09-01
得票数 1
回答已采纳
2
回答
CUDA的内存是零拷贝吗?
cuda
固定内存应该能提高主机到设备之间的传输速率(引用)。但是,我发现我不需要调用cuMemcpyHtoD来访问内核的值,也不需要调用cuMemcpyDtoA来读取返回的值。我原以为这不管用,但确实是这样: __global__ void testPinnedMemory(double * mem) { double currentValue = mem[threadIdx.x]; printf("Thread id: %d, memory content: %f\n", threadIdx.x, currentValue); mem[threadIdx.x]
浏览 6
提问于2014-02-06
得票数 8
回答已采纳
1
回答
在内存空间中打开的文件
c++
、
c
、
linux
linux 3.2我想知道是否有可能找到在程序中打开的文件的内存位置。假设我用编译成a.out的a.cpp编写了下面的代码: FILE *f = fopen("myfile", "r"); 内容会被映射到a.out的内存空间吗?如果是这样,我怎样才能找到它(页面?范围?)出局? 谢谢
浏览 0
提问于2013-04-05
得票数 3
回答已采纳
1
回答
是否有可能关闭备忘录的临时文件而不刷新其内容?
python
、
numpy
、
numpy-memmap
用例:巨大的图像处理。当交互数据集超出物理内存时,我使用mem映射的临时文件。我不需要将中间结果存储到磁盘中,在完成这些结果之后。当我删除它们时,numpy似乎首先将它们的所有内容刷新到磁盘,然后从文件系统中删除文件。刷新是对I/O资源和文件系统的征税,据我所知,这在逻辑上是不必要的,因为文件后来才被删除。 是否有可能关闭备忘录的临时文件而不刷新其内容?
浏览 2
提问于2018-07-06
得票数 1
回答已采纳
1
回答
系统是如何从内存映射文件的内存中捕获通过“`asm: MOV`”访问内存的?
c
、
winapi
、
memory-management
、
posix
、
memory-mapped-files
当我使用将文件映射到内存时,它不是直接加载到内存中(缓存缓冲区RAM),而是只加载访问特定映射内存区域时所需的部分。 系统如何通过C: *ptr = val;或asm: MOV捕捉到内存映射文件的内存并从文件中生成加载数据,使用什么机制(IRQ或类似于分页内存的机制),以及如何调用它? x86_64 操作系统: Linux,Windows
浏览 0
提问于2013-11-09
得票数 0
回答已采纳
1
回答
当两个进程写入mmaped文件的同一部分时,会发生什么情况?
c
、
linux
、
posix
、
mmap
我正在编写一个C程序,它使用mmap系统调用,运行在Linux3.12-64位上。 如果我有两个进程对磁盘文件的相同区域进行读/写访问,然后同时修改两个进程的区域内容. 一个进程能看到(读取)另一个进程在msync之前或之后所做的更改数据吗? 如果其他进程可以看到更新--在Linux实现做出保证之前是否发生了?
浏览 0
提问于2013-12-28
得票数 4
回答已采纳
扫码
添加站长 进交流群
领取专属
10元无门槛券
手把手带您无忧上云
相关
资讯
Linux内存映射mmap原理分析
零拷贝技术在 Java 中为何这么牛?
深入理解 Linux的I/O 系统
linux零拷贝原理,RocketMQ&Kafka使用对比
经常提到的“零拷贝”!你真的理解吗?
热门
标签
更多标签
云服务器
ICP备案
实时音视频
对象存储
云直播
活动推荐
运营活动
广告
关闭
领券