我需要为大约 10 GB 的数据设置一个内存存储系统,其中包含许多 100 kb 的单个文件(图像)。将会有大量的读取和相当周期性的写入(添加新文件,删除一些旧文件)。
现在,我知道tmpfs 的行为就像一个常规文件系统,例如,您可以使用df检查空闲/已用空间,这是一个很好的功能。但是,我感兴趣的是ramfs是否会在 IO 操作的速度方面提供一些优势。我知道在使用ramfs时我无法控制消耗的内存大小,并且如果它完全消耗可用 RAM,我的系统可能会挂起,但这在这种情况下不会成为问题。
总而言之,我感兴趣:
- 性能方面,哪个更快:ramfs或tmpfs(可能是为什么)?
- tmpfs 什么时候使用交换空间?它是否将已保存的数据移动到交换(为当前正在运行的其他程序释放 RAM)或仅在那时没有可用 RAM 时才移动新数据?
我们的服务器总 RAM 为 64GB,应用程序通常最多使用 30GB 的可用 RAM。其中一个应用程序处理大量平面文件,而我们遇到了吞吐量问题,即等待磁盘 I/O。在探索可能的解决方案时,出现了 RAM 磁盘的想法。RAM 磁盘的问题在于其固有的波动性。
我找到了有关 RAM 磁盘、RAID 1 配置和用于对物理磁盘进行分组的逻辑镜像卷的单独文档,但我似乎找不到任何文档表明这些磁盘复制解决方案是否可以与 RAM 磁盘一起使用。更重要的是,由于我们的想法是让 RAM 磁盘可用于读/写,并且让物理磁盘“遮蔽”RAM 磁盘,赶上写入操作,因此我们希望 RAM 磁盘成为所有磁盘的“主”磁盘读/写。
需要注意的是,我们希望避免仅使用 RAM 缓存操作系统中的文件,但如果我们能够获得与独立 RAM 磁盘相同的性能,那就可以了。我们最初避免了这种情况,因为有时某些文件不会长时间被访问,但仍然需要按需的读/写速度。
我的 fstab 文件中有以下行:
ramdisk /tmp tmpfs mode=1777,size=2048m
Run Code Online (Sandbox Code Playgroud)
现在我想将大小增加到 4096m。
我所做的是将其更改为:
ramdisk /tmp tmpfs mode=1777,size=4096m
Run Code Online (Sandbox Code Playgroud)
并发出命令:
mount -a
Run Code Online (Sandbox Code Playgroud)
但是当我检查它是否使用 df -h 更改时,该值在 2gb 时仍然相同。
有谁知道怎么改?
我有一个可用的 TFTP/DHCP PXE 启动环境,我已经成功启动了一些映像。现在我构建了一个 CentOS 6.5 无盘映像,这个映像启动失败并出现以下错误:
No filesystem could mount root, tried: iso9660
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)
Run Code Online (Sandbox Code Playgroud)
我按照以下方式构建了图像(遵循了这个优秀的教程):
dd if=/dev/zero of=new-rootfs.img bs=1M count=512
mkfs.ext4 -F -j new-rootfs.img
<mounted and copied os from template host with rsync to /mnt>
gzip -c new-rootfs.img | dd of=new-rootfs.gz
Run Code Online (Sandbox Code Playgroud)
我的 PXE 线如下:
KERNEL vmlinuz0
APPEND initrd=/images/centos-diskless/rootfs.gz root=/dev/ram0 init=/init noapic acpi=off devfs=nomount raid=noautodetect ramdisk_size=1048576 rw ip=dhcp
Run Code Online (Sandbox Code Playgroud)
让我感到好奇的一件事是内核说仅尝试使用 iso9660 而不是 ext4(尝试使用 ext3 映像也不成功)。如何强制尝试使用 ext3/4?是不是图片有问题?
在这种情况下,我很乐意提供任何帮助!
快速 SSD(如 Intel X25-E)的每 GB 价格接近高端 RAM 的价格。那么SSD给你带来了哪些额外的优势呢?有什么特别的原因,为什么您购买 SSD,而不是仅仅在您的服务器机器中放置更多 RAM,而是将其用作 HDD 缓存甚至创建 RAM 磁盘?
编辑:我当然知道,SSD 是持久的。但磁盘缓存中的数据也是如此。从 RAM 读取必须快得多,然后从 SSD 读取。此外,SSD 的写入时间很慢,因此与 HDD 相比没有优势。特别是对于顺序写入。
EDIT2:您可以放置的 RAM 量不受限制。随着DDR3的推出,它不再是2的倍数,而是3的倍数。标准SOHO MoBos有6个插槽,而服务器主板有12个甚至令人印象深刻的18个插槽,总共支持144GB的RAM。即使您使用更具成本效益的 4GB 记忆棒,您仍然可以拥有 72GB。
我有一个不断崩溃的服务器。我知道服务器崩溃有多种原因。但是,如果原因是系统在崩溃之前耗尽了 RAM;我应该如何确认这是原因?我应该查看哪些日志文件?我应该寻找什么行/错误消息?我正在运行 CentOS。大量使用 php 解析 xml 文件最多超过 2 GB。服务器有 16GB 内存。
编辑 1
[root@61540 ~]# free -m
total used free shared buffers cached
Mem: 16035 1526 14509 0 40 1002
-/+ buffers/cache: 483 15552
Swap: 8197 0 8197
Run Code Online (Sandbox Code Playgroud)
编辑 2 /var/log/messages
Feb 17 20:38:26 61540 syslogd 1.4.1: restart.
Feb 17 20:38:26 61540 proftpd[3896]: 66.90.101.85 - received SIGHUP -- master server reparsing configuration file
Feb 17 22:23:06 61540 avahi-daemon[3984]: recvmsg(): Resource temporarily unavailable
Feb 17 23:07:37 61540 proftpd[10620] - (Several lines …Run Code Online (Sandbox Code Playgroud) 我看过一个有点过时的教程,它建议使用这样的 ramdisk 提供 html 文件:
mkfs -q /dev/ram1 102400
Run Code Online (Sandbox Code Playgroud)
我还找到了另一个使用类似内容的来源:
mount -t tmpfs -o size=1024 none /mnt/rds
Run Code Online (Sandbox Code Playgroud)
这两种方法是否同样有效?我在 nginx 上使用 Centos 6.3。所以实际上我想/usr/share/nginx/html从 RAM 中提供文件。
如果我挂载了磁盘,是否必须在原始文件夹发生真正更改时再次挂载?
快速而肮脏的总结:我想要一个写缓存之类的东西,它只在系统不忙时才耗尽。
我想要一些类似于这个问题RAM 磁盘和物理 RAID 的东西,稍有改动。
对于我经常进行的特定构建,我希望将构建输出保存在最终写入磁盘的 ramdisk 中。我正在构建的一个特定目标实际上是一堆 cp、tar、gzip 等,因此我受磁盘限制。在紧张的调试周期中,我希望它很快,并且不太在意构建输出是否因断电而被破坏。但是,如果在系统不忙时将 ramdisk 同步到磁盘会很好。我可以想象用一个 cron 工作来做这个,但我问你们所有人都有一个更连贯的解决方案,它结合了另一个问题(溢出到磁盘的 ramdisk)的特征和这个新的扭曲(给定足够的空闲磁盘)时间,ramdisk 的内容也会输出到磁盘)。理想情况下,整个事情看起来像一个单一的挂载点,
- - 更新 - -
我不认为页面缓存做我想要的,因为我真的想要相当快的写入性能。
有很多工具可用于创建 RAM 驱动器。它们似乎都不适用于 Windows 2008 R2。有谁知道这是否可能,如果可能的话。有谁知道一个有效的工具?
我试过gavotte ram磁盘。它不起作用。当我尝试安装它时,它只是说“失败”。我在任何地方都看不到日志文件。我试过其他几个(忘记名字)无济于事。
有任何想法吗?
谢谢
performance memory hard-drive ramdisk windows-server-2008-r2
我们正在开发的系统由一个 Web 应用程序前端和一个使用 SQL Server 2008 R2 中的存储过程进行大量数据处理的后端组成(请不要问为什么...)。这些存储过程大量使用临时表(创建、插入、连接),因此tempdb 的I/O 率在写入和读取中很高。我们的客户需要速度,因此我们将推荐以下内容:
一些上下文数据:
我们已经在具有大量内存的笔记本电脑中测试了 ramdisk 方法。至少,加速是显着的(存储过程执行时间减少到 1/3)。
我需要帮助来确定这是否是一个好的解决方案,并检测我可能遗漏的任何缺陷(明显的或不太明显的)。
编辑:感谢您到目前为止的答案!我忘了明确提到将有并发用户使用该应用程序,因此将有多个临时表操作正在运行。此外,混合 Web 服务器和数据库服务器不是我们的选择,我们已经知道这不是最佳的 ;)
ramdisk ×10
linux ×4
centos ×2
filesystems ×2
memory ×2
performance ×2
centos6 ×1
disk-cache ×1
ext4 ×1
hard-drive ×1
kernel-panic ×1
lvm ×1
nginx ×1
pxe-boot ×1
raid ×1
ssd ×1
tempdb ×1
tmpfs ×1
ubuntu-12.04 ×1