Linux 对内存中的所有数据进行排序

Linux 对内存中的所有数据进行排序

对于 Linux 命令排序,我如何强制将所有输入加载到内存中,并在内存足够的情况下进行排序?或者最好在输入输入之前使用 RAMDISK 来存储输入?

答案1

您可以指定临时目录不存在并更改主内存大小参数。但是,如果内存不足,这将导致排序失败:

$ sort -S 1000 -T /nonexistant/dir /usr/share/dict/words | wc -l 
sort: cannot create temporary file in `/nonexistant/dir': No such file or directory
0
$ sort -S 10000 -T /nonexistant/dir /usr/share/dict/words | wc -l
98569

该选项的单位-S是kB(参见下面的注释)。

答案2

阅读侧

除非是非常非标准的文件系统,否则整个过程都会被读取缓存(在 htop 中观察这个简单过程)。

您还可以在输出中看到缓冲量vmstat 1。观察 Linux 如何简单地占用所有可用内存(即使无法由单个客户端进程寻址,例如在 32 位上运行 PAE 内核,或在具有 32 位用户空间的 64 位内核上运行)。

echo 3 > /proc/sys/vm/drop_caches观察如何通过在另一个终端中发出来强制清除缓存。(清除页面缓存、inode 和 dentry 缓存)

写端

在写入方面,linux 2.4+ 中的 tmpfs 功能非常完美。它的作用类似于读取缓存,您可以手动限制其大小。这是我的默认 /tmp 挂载:

sudo mount -t tmpfs -o nodev,noexec,size=6g none /tmp

我通常会在一天中较长的时间里在 /tmp 上工作,并使用版本控制将内容推送到(非易失性)存储库中。

带走

因此,除了“自己编写”解决方案外,您还应该使用现有的内核功能。

[1] 我还将 ~/.cache ~/.opera/cache 等符号链接到 /tmp/ 中,这确实减轻了清理负担,使性能飞速提升保持我的 SSD 处于健康状态

答案3

如果“sort”使用的临时目录支持“延迟分配” - 例如,ext4 或 xfs,那么它无论如何都会这样做!

如果内核判断有足够的内存,它就不需要将数据写入磁盘;如果排序发生得足够快,内核就不会将数据写入磁盘,那么文件就会被删除,它们将被丢弃并被遗忘,根本不会进行任何写入。

相关内容