我在configuration为RAID 1的SSD驱动器的Debian服务器上运行此命令:
ionice -c 3 find . -type f -amin -1440 -mmin +1441 -not -path custom/ -print0
在包含超过1.7M文件和目录的path上。
我注意到,每次我运行这个命令时,服务器负载高峰,我想知道是否有任何方法可以节streamfind速度,所以它不会产生如此高的负载。
此外,我想知道如果这里是SSD特定的选项,以减less负载生成find
尽量不惜一切代价保持低负荷是没有意义的。 重要的是,如果更重要的是需要利用系统提供的资源,那么您的stream程会退后一步。
ionice和nice / renice可以用来降低优先级,这样它才能在系统空闲时运行。
这归结为文件系统和procfs调优。 你所解释的“高”负载是系统上的其他正常进程从读取中消失并且被迫等待的情况。
情况的特点是
使用noop调度程序在这里没有帮助,因为noop是简单的FIFO调度程序,并且不能帮助您为磁盘访问游戏带来更多的公平性。 所以我会build议与截止日程安排。
截止日程安排者的想法是为某些磁盘IO操作计划最终期限,同时保持两个简单的队列 – 一个用于读取,一个用于写入; 您可以调整读取和写入时间的关联性,以及在当前操作停止并接近过期的IO任务之前,您可以允许一些读/写操作占用多less时间。
另外你想要的是在RAM中有很多目录项和文件inode数据,caching。 这种caching在遍历如此大的目录/文件结构时将大大节省磁盘IO。
grep ^Slab /proc/meminfo
这将告诉你有多less内存是完全专用于目录项和文件caching。 有关Slab内存拆分/使用的详细信息,请参见
/proc/slabinfo
您可以运行slabtop来获取交互式使用统计信息。
最终,如果你决定增长更多的这种caching,你想减less的价值
sysctl -w vm.vfs_cache_pressure = 20
这是默认设置为100,这是在系统内存不足的情况下,试图相当减less用于caching的内存量d_entry文件inode与页面caching(即RAM中的文件/程序数据caching)通过减less值将更喜欢保留那些d_entry / file inodecaching,因此如果由于内存压力而从caching中删除相同的数据,则需要较less的读取操作来重新读取相同的数据。
此外,为了提高磁盘读取能力,我build议增加预读。
blockdev –getra / dev / sda
blockdev – 使用2048 / dev / sda
这应该可以帮助你挤压一些额外的IOPS,特别是如果你的系统正在做更多的读取而不是写入。 (检查iostat是否可以提供帮助;第一行始终是集合使用,因为引导时间很容易从中找出比率)
接下来我会考虑调整的是缩小规模是nr_requests
echo 32> / sys / block / sda / queue / nr_requests
通过这样做,你将基本上拥有更短的批次,这将允许更多的等待时间,以牺牲我们在那里获得的一些吞吐量为代价。 有很多进程的系统将从中受益,因为单个进程难以支配IO队列,而其他进程则更加困难。
更多关于这个可以在这里find: 硬件RAID控制器调整
另一种情况是,如果正常的系统活动被间歇性的大批量写入操作(例如,大文件下载,复制,解包操作)所中断,则可能会出现高负载情况。 写入也可以很容易地饱和磁盘IO和打击这些我会build议有点下调。
vm.dirty_background_ratio
vm.dirty_ratio
小心你不要太低。 为了得到这个想法,你可以使用atop工具,并检查磁盘状态,你可以看到有多less脏数据通常在内存中; 有多less进程受益于脏内存(磁盘统计信息中的WCANCL列),并且高于这些使用率。
这将有助于引入回写限制的内核机制,试图通过大量写入来减慢影响系统IO的进程。 有关更多信息,请查看写回限制