有什么方法可以加快chmod
NFS 服务器的速度吗?
每次运行脚本时我都会运行chmod
多个文件。在本地运行时几乎可以立即完成,但在以 NFS 服务器为目标时则需要 10-20 分钟。
笔记:这是在 Solaris 上。
答案1
建议#1
我的第一个怀疑是它如何安装在您执行命令的系统上。查看mount
命令以及 来showmount -e
了解它是如何导出到您的系统的。
建议#2
我要做的下一件事是调查您正在运行的实际命令strace
,看看哪个函数花费的时间最长。
例如:
$ strace -s 2000 chmod u+w afile
execve("/bin/chmod", ["chmod", "u+w", "afile"], [/* 27 vars */]) = 0
brk(NULL) = 0x1143000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fad70431000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=33236, ...}) = 0
mmap(NULL, 33236, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fad70428000
close(3) = 0
...
...
arch_prctl(ARCH_SET_FS, 0x7fad70425740) = 0
mprotect(0x7fad70206000, 16384, PROT_READ) = 0
mprotect(0x60c000, 4096, PROT_READ) = 0
mprotect(0x7fad70432000, 4096, PROT_READ) = 0
munmap(0x7fad70428000, 33236) = 0
brk(NULL) = 0x1143000
brk(0x1164000) = 0x1164000
brk(NULL) = 0x1164000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=106070960, ...}) = 0
mmap(NULL, 106070960, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fad6991b000
close(3) = 0
umask(0) = 022
stat("afile", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
fchmodat(AT_FDCWD, "afile", 0644) = 0
close(1) = 0
close(2) = 0
exit_group(0) = ?
+++ exited with 0 +++
我认为 Solaris 上的等效项是truss
,但希望您能得到建议。
建议#3
这是哪个 NFS 协议? NFSv3 还是 v4?有几个与两者相关的选项可能会影响整体性能,我会根据您的情况对这些选项进行调查。
例如:例如,请确保您的文件导出的是且不是 的
/etc/exports
共享。async
sync
/export/raid0/home 192.168.*/24(rw,secure,no_root_squash,async,wdelay)
确保安装选项
async
也包含在客户端上。还要确保服务器不必更新您正在访问的文件的 inode 上的 atime。
以下是 nixcraft 的列表,其中突出显示了我过去调整过的许多选项:
推荐的 Mount 命令 NFS 调整选项
- 诺阿克:禁用访问控制列表 (ACL) 处理。
- 夜:创建文件时禁止检索新属性。
- 大小:从 NFS 服务器读取文件时 NFS 使用的字节数。 rsize 在服务器和客户端之间协商以确定两者可以支持的最大块大小。该选项指定的值是可以使用的最大大小;然而,实际使用的尺寸可能更小。注意:将此大小设置为小于支持的最大块大小的值将对性能产生不利影响。
- 大小:将文件写入 NFS 服务器时 NFS 使用的字节数。 wsize 在服务器和客户端之间协商以确定两者可以支持的最大块大小。该选项指定的值是可以使用的最大大小;然而,实际使用的尺寸可能更小。注意:将此大小设置为小于支持的最大块大小的值将对性能产生不利影响。
- 诺阿泰姆:设置此值将禁止 NFS 服务器更新 inode 访问时间。由于大多数应用程序不一定需要此值,因此您可以安全地禁用此更新。
- 诺迪拉泰姆:设置此值将禁止 NFS 服务器更新目录访问时间。这是 noatime 的目录等效设置。
- 诺阿克:完全禁用所有形式的属性缓存。这会带来显着的性能损失,但当两个不同的 NFS 客户端都主动写入服务器上的公共导出时,它允许两个不同的 NFS 客户端获得合理的结果。