问题标签 [mmap]

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 回答
1477 浏览

c++ - mmap 通过 PCI 将 VME 总线覆盖到用户空间内存中?

我正在尝试通过 PCI 总线将 VME 地址空间映射到用户空间,以便可以对内存执行定期读/写操作。我已经用另一个这样的 PCI 设备做到了这一点:-

然后“bar”可以正常用于读/写。

所以对于 VME,以及 Tundra Universe II PCI-VME 桥芯片:-

我应该打开“/dev/vme_m0” 我从哪里映射我的 BAR?lspci -vv:“区域 1:80020000 处的内存”

VME BUS中的地址也偏移了0x20000000,那么访问/映射它是如何工作的?!

(使用 Linux 2.6.18-128.el5 #1 SMP)(需要新标签“vme”!)

0 投票
13 回答
8036 浏览

perl - 从磁盘读取 10 GB 文件的最快方法是什么?

我们需要读取和计算不同类型的消息/在 10 GB 文本文件(例如FIX引擎日志)上运行一些统计信息。我们使用 Linux、32 位、4 个 CPU、英特尔、Perl 编码,但语言并不重要。

我在 Tim Bray 的 WideFinder 项目中发现了一些有趣的技巧。但是,我们发现使用内存映射本质上受到 32 位架构的限制。

我们尝试使用多个进程,如果我们在 4 个 CPU 上使用 4 个进程并行处理文件,这似乎工作得更快。添加多线程会减慢它的速度,这可能是因为上下文切换的成本。我们尝试改变线程池的大小,但这仍然比简单的多进程版本慢。

内存映射部分不是很稳定,在 2 GB 文件上有时需要 80 秒,有时需要 7 秒,可能是由于页面错误或与虚拟内存使用有关的原因。无论如何,Mmap 在 32 位架构上无法扩展到超过 4 GB。

我们尝试了 Perl 的IPC::MmapSys::Mmap。也研究了 Map-Reduce,但问题实际上是 I/O 绑定的,处理本身足够快。

所以我们决定尝试通过调整缓冲大小、类型等来优化基本 I/O。

任何知道在任何语言/平台上有效解决此问题的现有项目的人都可以指出有用的链接或建议方向吗?

0 投票
1 回答
2578 浏览

linux - mmap(2) 与 mmap(3)

有谁知道mmap(2)和有什么区别mmap(3)?手册第 3 节被描述为“本章描述了除第 2 章中描述的实现系统调用的库函数之外的所有库函数。” 不mmap(3)执行系统调用?

阅读这两个手册页,我发现它mmap(2)似乎接受了比实际更广泛的标志mmap(3),并声称能够映射设备 I/O 空间。 mmap(3)声称能够将“共享内存对象”和“类型化内存对象”映射到文件中,但没有提及设备 I/O。

由于这两个函数具有相同的名称,我什至不确定如何选择一个而不是另一个。

0 投票
2 回答
1818 浏览

python - wx.TextCtrl.LoadFile()

我正在尝试快速显示搜索结果数据。我在一个约 50MB 的文本文件中拥有网络驱动器上文件的所有绝对文件路径。python 脚本在一秒钟或更短的时间内对这个文件中的每一行 [保存在本地驱动器上] 进行一次传递,这是可以接受的。这是收集结果所需的时间。

但是,结果在 wx.TextCtrl 小部件中给出。将它们逐行附加到 wx TextCtrl 将是荒谬的。我想出的最好的方法是将结果写入一个文本文件,然后调用 wx.TextCtrl 的 LoadFile native,根据结果的数量,它会在 0.1 到 5 秒之间将文本行加载到窗格中,或者所以。但是,对于 10+MB 的文本入站必须有更快的方法。结果立即计算并在与 GUI 相同的过程中可用......所以请告诉我有什么方法可以将数据直接管道/代理/破解到 TextCtrl 中?mmap 会帮助这种转移吗?

0 投票
3 回答
8460 浏览

arm - mmap 和访问 ARM 处理器中的 GPIO 配置寄存器

我正在努力从 Linux 用户空间读取(和写入)硬件寄存器。目标是配置一些 GPIO 引脚,并能够设置和读取这些引脚。

根据处理器的规范(来自飞思卡尔的 imx27),控制 GPIO 的寄存器组的物理地址是 0x10015000

我的假设是我可以使用这样的东西:

我现在希望能够读取数据并将数据设置到处理器中的寄存器。问题是我阅读的位置无关紧要,我总是得到 0。

例如,物理位置 0x10015220 中的寄存器包含一个寄存器,显示哪些引脚在我们作为 GPIO。这默认为 0xFFFFFFFF。阅读这个寄存器,我希望得到不同于 0 的东西:

PTC_GIUS: 0x00000000.

我哪里错了?

0 投票
4 回答
4774 浏览

python - 带字节序转换的 Python File Slurp

最近有人问如何在 python 中执行文件 slurp,并且接受的答案建议如下:

我将如何执行此操作以读取文件并转换数据的字节序表示?

例如,我有一个 1GB 的二进制文件,它只是一堆打包为大端序的单精度浮点数,我想将它转换为小端序并转储到一个 numpy 数组中。下面是我为完成此任务而编写的函数以及调用它的一些真实代码。我使用struct.unpack进行字节序转换并尝试使用mmap.

那么我的问题是,我是否正确使用 slurp 和mmapand struct.unpack?有没有更清洁、更快的方法来做到这一点?现在我有什么作品,但我真的很想学习如何做得更好。

提前致谢!

0 投票
8 回答
27256 浏览

python - 为什么 Python 的 mmap 不能处理大文件?

[编辑:此问题仅适用于 32 位系统。如果您的计算机、您的操作系统和您的 python 实现是 64 位的,那么 mmap-ing 大文件可以可靠地工作并且非常高效。]

我正在编写一个模块,其中允许对文件进行按位读取访问。这些文件可能很大(数百 GB),所以我编写了一个简单的类,让我将文件视为字符串并隐藏所有查找和读取。

在我编写包装类时,我不知道mmap 模块。在阅读 mmap 的文档时,我认为“太好了——这正是我所需要的,我将取出我的代码并用 mmap 替换它。它可能效率更高,删除代码总是好的。”

问题是 mmap 不适用于大文件!这让我非常惊讶,因为我认为这可能是最明显的应用。如果文件超过几 GB,那么我会得到一个EnvironmentError: [Errno 12] Cannot allocate memory. 这只发生在 32 位 Python 构建中,所以它似乎用完了地址空间,但我找不到任何关于此的文档。

我的代码只是

所以我的问题是我在这里遗漏了一些明显的东西吗?有没有办法让 mmap 在大文件上可移植地工作,或者我应该回到我的幼稚文件包装器?


更新:似乎有一种感觉,Python mmap 应该具有与 POSIX mmap 相同的限制。为了更好地表达我的挫败感,这里有一个简单的类,它具有 mmap 的一小部分功能。

它是只读的,并没有做任何花哨的事情,但我可以像使用 mmap 一样做到这一点:

除了对文件大小没有限制。真的不是太难...

0 投票
5 回答
1703 浏览

c - 使用 mmap 将文件投影到内存中

我正在尝试将文件投影到内存中以对其进行操作。该文件包含结构,因此我尝试使用指向一个结构开头的指针,然后读取它并修改一些变量。问题是执行时间很长,我想使用 mmap 时间会更短。这是代码,有什么建议吗?

0 投票
6 回答
48584 浏览

c - C中的malloc与mmap

我构建了两个程序,一个使用malloc,另一个使用mmap. using 的执行时间mmap比 using 少得多malloc

例如,我知道,当您使用时,mmap请避免对系统进行读/写调用。并且内存访问更少。

mmap但是使用over的优势还有其他原因malloc吗?

非常感谢

0 投票
2 回答
4806 浏览

linux - memory mapped files system call - linux

When we map a file to memory, a system call is required. Do subsequent accesses to the file require system calls or is the virtual memory page of the process mapped to the actual page cache in memory?

update: what i also want to know is that if multiple processes are accessing the same file through mmap. they will be accessing the same physical memory portion write.