我不确定Linux内核如何处理多个文件系统驱动程序,以及如果inode查找文件系统中的每个给定挂载点都会干扰其他挂载点,或者是有其他一些事情会使系统在慢速文件内核中的系统驱动程序,但由该驱动程序pipe理的挂载的文件系统几乎未被使用。
我关心的是NFS。 那么,假设需要快速磁盘I / O的操作正在本地文件系统上执行,NFS驱动程序会减慢Linux内核和/或用户空间的速度吗?
我假设有LD_LIBRARY_PATH或PATH可能会减慢系统作为ld和/或bash将尝试查找NFS上的目录中的东西。 但是,当我在本地文件系统上打开一个文件时,NFS真的会干扰吗?
谢谢。
每个inode指向一个单独的文件系统,不pipe哪个文件系统驱动程序加载到内核中,来自该inode的IO仅由该文件系统驱动程序处理。
特别是,NFS本身并不会减慢其他IO。 当然,如果系统正在通过NFS攻击,那么该文件系统的本地IO将会变慢,但这是因为对共享资源(文件系统下的磁盘)的IO速率较高,而不是NFS特有的。 IOW,如果NFS子系统空闲,它不应以任何方式影响本地IO。
不,NFS不会干涉你是否在本地文件系统上查找文件。
我将nfs从远程服务器挂载到/ nfs(50个目录和100000个文件)。 然后创build,写入和读取文件在其他direcroty五次:
time for i in {1..1000};do touch $i;done time for i in {1..1000};do echo "$i" > $i;done time for i in {1..1000};do cat "$i" > /dev/null;done create: average 7.903s write: average 0.068s read: average 7.682s
然后卸载/ nfs并再次testing
create: average 7.923s write: average 0.048s read: average 7.782s
然后重新启动服务器并再次testing(不带/ nfs)
create: average 7.901s write: average 0.052s read: average 7.582s
如果效果存在,则非常小。 服务器:HP ProLiant DL160 G6,Linux 2.6.32-24-generic-pae
上面的答案虽然正确,但并没有涉及到你询问的每一个系统调用所进行的图书馆search。 简而言之,我对轻负载的系统进行了testing,对NFS的系统调用没有额外的统计显着的时间。 我有添加到LD_LIBRARY_PATH的NFS挂载点/data/media ,然后使用strace跟踪系统调用和执行时间。
对于那些不熟悉启动可执行文件的人来说,在执行到main()之前,必须find并加载每个共享库,这是探测NFS的潜在问题。 通过在库加载器的path中添加一个NFS挂载的目录,我们应该能够做简单的时序testing。 显然,如果NFS服务器没有响应,所有新进程的执行可能会停止,特别是如果挂载点挂载为“硬”,即没有“内部”选项。 这部分是因为shell会在PATHsearch一个新程序的名字,并被卡在NFS挂载点上。 这不是我们要测量的。
这里是运行一个程序并logging系统调用执行时间的shell代码。 再次注意,我只在LD_LIBRARY_PATH中有一个NFS挂载点/data/media ,以保持简单。
strace -T -e open java -version 2>&1 |\ perl -ne 'if (m/\/data\/media.*<(\d+\.\d+)>/) { \ print "nfs,$1\n"; } elsif (m/<(\d+\.\d+)>/) { print "local,$1\n"; };'
原始的strace输出与此类似
open("/usr/lib/jvm/java-6-sun-1.6.0.20/jre/bin/../lib/amd64/jli/tls/x86_64/libpthread.so.0", O_RDONLY) = -1 ENOENT (No such file or directory) <0.000041>
输出与此类似
local,0.000030 local,0.000031 nfs,0.000042 nfs,0.000029 nfs,0.000029 nfs,0.000030 local,0.000028 local,0.000027 local,0.000027
我selectperl是因为我对此感到满意,但任何文本过滤都可以。
我把这些数字放在一个电子表格里,然后把它们sorting,这样我就可以给你看这个表格
Avg (s) Max (s) Min (s) NFS lag (s) -0.0000072 -0.000529 0.000007 NFS lag (%) -17.84% -90.74% 36.84%
很明显,在进行这个testing之前,你应该试着把系统caching扔出窗口,看看它是否改变了事情,但这不是系统的正常情况。
如果您在解释表时遇到困难,有些情况下NFS实际上比本地文件系统更快。 这是违反直觉的,直到你认为VFScaching可能正在进行。
因此,我得出这样的结论:至less在这个小小的testing中,在LD_LIBRARY_PATH中使用NFS挂载点不会影响可执行文件的加载时间。 只要NFS服务器启动…