问题标签 [tmpfs]
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.
filesystems - tmpfs 是否会在 RAM 数量发生变化时自动调整大小
如果我将 tmpfs 设置为 50%,然后我添加或删除 RAM,tmpfs 会自动调整其分区大小吗?
另外,如果我有多个 tmpfs,每个都设置为 50%。多个 tmpf 是否会为相同的 50% 相互竞争?操作系统如何管理它?
linux - System V shmem 和 tmpfs 上的同步
当您在 Linux 中使用 System V 共享内存时,您应该使用适当的锁定和同步(例如使用 sysv 信号量),这样当不同的线程/进程尝试读取/写入同一段时,代码不会中断。
考虑到 System V 共享内存在后台使用 tmpfs,如果您使用 tmpfs 中的文件(而不是内存段),您是否必须提供同步机制?
不能依靠文件系统来提供文件读/写同步吗?
linux - 如何在 RAM 中挂载预分配的 ISO 映像
我有一个 ISO 映像(库存 Ubuntu 13.10 DVD ISO 映像)加载到操作系统前的内存中,我正在尝试从此映像启动 Linux 安装过程。GRUB 可以将映像识别为 cd,然后我可以开始安装(我正在试验 UEFI 平台,并使用 GRUB 的 UEFI 版本,因此它可以将映像识别为具有受支持文件系统的有效块设备)。
我的问题是内核找不到安装媒体(这是预期的),所以它很早就出现了恐慌。我意识到我可以编写一个简单的块设备驱动程序,以便内核可以找到映像,但是为了可移植性,有没有办法将 tmpfs/ramfs 挂载到特定的起始地址?或者有没有办法告诉内核在特定地址有一个文件系统?
谢谢
linux - 用于图像处理缓冲区的 mmap 和/或 tmpfs 方法
我遇到了这个问题的一些通用版本,要求对共享内存/tmpfs/mmap/块读取进行一般比较,但我想问这个问题的特定于应用程序的版本,以尝试找出更有效的方法延迟方面。
我有一个图像处理库的绑定,它只提供写入命名文件的选项,而不是提供任何直接到内存的字节数组选项。我将此库用作服务器的一部分,该服务器读取许多不同格式和大小的源图像,应用大小/颜色转换,并将此图像的缩略图版本缓存在 LRU 缓存中的内存中。然后,服务器通过 http 从 LRU 中提供这些缩略图。服务器将拥有有限数量的图像工作者(比如 2-4 个)。源图像的平均大小范围为 100KB-20MB。输出图像大小的平均范围为 20KB-1MB。
我之前使用的图像处理库确实能够将输出图像写入字节数组,我现在正尝试切换到另一个库。因此,我正在评估解决此输出限制的选项。
我一直在调查mmap
和tmpfs
作为选项,我有一些想法的组合,但根据我的访问模式,我希望听到一些关于开销或并发症的知情回应。
我担心的/dev/shm
是可移植性,因为我不想自己为我的应用程序配置/安装它,它可能是固定大小(尽管很可能存在并且很大)。我也不清楚当一个普通的块支持的预分配文件/tmp
是 mmap'd 并且图像库写入它时,引擎盖下会发生什么,然后我从中读取。事物的读取大小有什么好处吗?
概括
以下具有 {file,memory} 支持的图像缓冲区的潜在方法是否适合用于 mmap?
- 如果
/dev/shm
已挂载,则为每个镜像工作者预分配一个内存支持的文件 - 如果
/dev/shm
未挂载,/tmp
则为每个镜像工作者预分配一个普通文件 - 在服务器进程的长度内,为每个工作人员打开一个 mmap。输出图像数据将从图像库写入文件路径,然后通过 mmap 字节数组访问以复制到 LRU 缓存中。
linux - 哪些内存页面分配给 Linux RAM 磁盘中的文件
我正在尝试找到已分配回文件的确切机器内存页面,这些文件存储在 Linux RAM 磁盘中。例如,对于一个进程,有 /proc/pid/pagemap 可以准确地告诉您进程正在使用哪些机器页面。我正在为 RAM 磁盘寻找类似的东西。您是否知道可能具有分配给 RAM 磁盘的页面列表的内核模块或数据结构?
例如,如果我创建一个 1MB 大小的 RAM 磁盘(假设 4KB 页),这意味着应该有 256 个机器页分配给该 RAM 磁盘(2^22/2^14=256)。
RAM 磁盘建立在 Linux 的页面缓存上,因此似乎是一个很好的起点,但我不确定如何关联哪些页面缓存条目对应于 RAM 磁盘。
memory - 运行时是否将唯一存储在 tmpfs 中的可执行代码复制到 RAM 的另一部分?
磁盘上的可执行文件首先需要将其代码和数据部分加载到 RAM 中,然后才能执行。当可执行文件存储在 tmpfs 中时,它已经在 RAM 中,那么内核是否通过将 tmpfs 页面映射到进程地址空间来绕过将可执行文件加载到 RAM 的步骤?答案是否适用于可执行文件和加载的库?
python - 如何在 Linux 上将文件写入 RAM
我无法修改的程序将其输出写入作为参数提供的文件。我想让输出进入 RAM,这样我就不必做不必要的磁盘 IO。我以为我可以使用 tmpfs 并“欺骗”程序来写入它,但是并非所有 Linux 发行版都将 tmpfs 用于 /tmp,一些在 /run(Ubuntu)下安装 tmpfs,其他在 /dev/shm(RedHat)下。我希望我的程序尽可能可移植,如果可以避免的话,我不想在用户系统上创建 tmpfs 文件系统。显然我可以做 df | grep tmpfs 并使用返回的任何安装,但我希望有一些更优雅的东西。是否可以写入伪终端或 /proc 某处?
linux - 给定 Linux 上的路径,如何判断文件是否在 tmpfs 上?
这可能是一个愚蠢的问题,但假设我得到了一个文件路径,并且我想知道它是否指向 tmpfs 上的一个文件(也就是说,它是一个内存文件)。如何仅使用 Linux 系统调用来做到这一点?(也就是说,我不能去shell。)
regex - 从 php 访问时的 tmpfs 性能
我有一个 PHP Web 脚本,它接受用户输入的正则表达式并使用它来搜索一个大文本文件(940 万行,大约 160MB)。在我的脚本的第一次迭代中,我将文件放在常规文件系统上,当我需要搜索它时,我会使用 fopen / fgets 访问它并逐行搜索它。根据正则表达式的复杂性,脚本在 30-45 秒内完成了整个文件。
为了加快速度,我安装了一个 1GB 的 tmpfs 分区并将大文本文件移到它上面。然后我更改了 PHP 脚本中的路径,并希望看到立即改进。但是,脚本解析文件的速度并没有改变,并且在多次运行时,有时看起来比从常规文件系统读取文件时要慢。
此外,我尝试在 PHP 中将整个文件加载到 RAM 中,但先将其拉入数组,这确实将搜索时间提高了 40% 左右。不幸的是,这对我来说不是一种可接受的方式,因为初始加载文件到数组的时间很长。
这一切都发生在具有 12GB RAM、运行 Debian 7、nginx / php5-fpm 的虚拟服务器上。
我的 tmpfs 发生了什么?有什么我想念的吗?我会提供任何必要的额外信息。
unix - 是否有可靠的跨平台(无论如何在 *nix 上)方式在另一台设备上创建临时文件?
我正在尝试为一些应该迭代文件系统树的代码编写测试用例,但如果文件在另一台设备上则应该停止。在为它编写测试时,我考虑在 中创建一个文件/dev/shm
,从我的测试目录符号链接到它,然后检查它是否未被读取,但/dev/shm
似乎是特定于 Linux 的。mount
-ing atmpfs
可能是一个选项,但它需要root ...
任何想法如何实现?