GP9*_*P92 2 nfs io ionice scheduling scheduler
我需要在 NFS 共享上递归删除数百万个目录,为了避免任何性能问题,我运行了以下命令:
ionice -c 3 -t find /dir -type f -exec rm {};
这将删除所有文件和剩余的空目录,我可以使用 rm -rf 删除。
但我无法说 ionice 对上述命令是否有任何影响。
来自 man,ionice 3 级:
仅当没有其他程序在定义的宽限期内请求磁盘 io 时,以空闲 io 优先级运行的程序才会获得磁盘时间。空闲 io 进程对正常系统活动的影响应该为零。
从源代码中,我看到 ionice set ioprio_set
。
那么,ioprio_set 是什么?
ioprio_get() 和 ioprio_set() 系统调用分别获取和设置一个或多个线程的 I/O 调度类和优先级。
这是否意味着进程线程带有额外的属性供 I/O 调度程序使用它们来调度进程的 I/O?
这向我提出了以下问题:
如果我完全错了,请纠正我。
也可以有一种方法从服务器端执行操作,但我想首先从客户端尝试。
请注意,我的回答假设您使用的是 Linux,因为我很确定该ionice
命令是 Linux 特定的。
I/O 调度程序在块层运行,而不是在文件系统层运行。因此,它仅对本地存储设备和远程连接的块存储(例如NBD、iSCSI或ATAoE连接的存储设备)有影响。因此,在 NFS 客户端上没有为 NFS 共享执行特殊的 I/O 调度(但服务器仍然这样做,只是不知道远程 I/O 优先级),但可能是针对 iSCSI, NBD 或 ATAoE 设备(许多发行版会使用无操作调度程序来设置这些设备,这意味着唯一的 I/O 调度也是在服务器端完成的)。影响 NFS 的唯一可能情况是,如果您使用带有块布局的 pNFS,但您可能没有这样做,而且我不太确定它如何与块层交互,所以我将忽略它)。
至于 I/O 优先级的实际作用,这取决于您使用的特定 I/O 调度程序。至少,noop 和截止日期(可能还有新的 mq-deadline)调度程序根本不关注它,而 CFQ、BFQ 和我认为新的 Kyber 调度程序对此做了一些事情,但他们没有这样做不要用它做完全相同的事情。据我所知,对于 CFQ,类的行为类似于等效的 CPU 调度类(实时 I/O 类的行为类似于 RT FIFO CPU 调度类)。我相信 BFQ 只是使用它们作为其调度算法的提示(而不是它们对 CFQ 的更重大影响),但我对此不确定。
现在,关于您的特定示例,ionice
应该根本没有影响,但它可能不会对本地文件系统产生太大影响,除非磁盘已被其他进程充分利用(您指定的“空闲”调度类是“它不是一个真正的空闲调度程序,但即使是,find
大多数时候也不会使用太多磁盘时间,并且该rm
命令使用的磁盘时间更少)。
另外,稍微偏离主题的旁注,但是find
您引用的命令只会删除文件(因为该-type f
选项),因此它并不完全等同于rm -rf
,您可以通过替换 来提高其(本地)性能-exec rm {} ;
,-delete
这会同样的事情,无需为要删除的每个文件创建一个新进程。
归档时间: |
|
查看次数: |
1620 次 |
最近记录: |