gpt4 book ai didi

linux - 在 Linux 中使用通配符降低并发文件访问速度

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:38 24 4
gpt4 key购买 nike

在 linux 系统上,我有一个包含大约 100.000 个文件的目录(它们包含一些统计数据)。我必须使用通配符访问它们,现在我遇到了一些性能问题。访问特定文件时,速度非常快:

time ls 19991
19991

real 0m0.004s
user 0m0.000s
sys 0m0.000s

使用通配符时(如您所料)速度较慢:

time ls 19991*
19991

real 0m0.043s
user 0m0.020s
sys 0m0.020s

但是:当我尝试同时访问文件时,所有访问都变慢了:

 i=1; while [ $i -le 10 ]; do (time ls 19991* &) ; let i=i+1; done 
19991
19991

real 0m0.248s
user 0m0.010s
sys 0m0.020s
19991

real 0m0.279s
user 0m0.000s
sys 0m0.040s
19991
19991
19991

real 0m0.306s
user 0m0.050s
sys 0m0.000s

real 0m0.236s
user 0m0.010s
sys 0m0.030s

real 0m0.257s
user 0m0.010s
sys 0m0.040s

real 0m0.263s
user 0m0.020s
sys 0m0.020s
19991
19991

real 0m0.196s
user 0m0.030s
sys 0m0.010s

real 0m0.175s
user 0m0.020s
sys 0m0.020s
19991

real 0m0.095s
user 0m0.040s
sys 0m0.000s
19991

real 0m0.158s
user 0m0.020s
sys 0m0.040s

即使访问是由内核序列化的,我预计第一个“ls”大约需要 40 毫秒,第二个 80 毫秒,第三个 120 毫秒,...。但现在即使是最快的“ls”也需要 95 毫秒,其中大多数大约需要 200 毫秒。

这在使用本地文件系统 (ext3) 以及使用网络挂载目录 (nfs) 时会发生。所以我认为它与特定的文件系统无关。

有什么想法导致这种放缓或如何解决它吗?

最佳答案

总共用了多少时间?

如果我查看用户时间和系统时间,那么它们仍然很小。所以也许这就是您所看到的:

init job1
init job2
init job3
...
init job10
run half of job1
...
run half of job10
finish jobs1
...
finish jobs10

比较这些:

$ time ( i=1; while [ $i -le 100 ]; do time ls 19991* &  let i=i+1; done ;wait)
real 0m1.278s
user 0m2.532s
sys 0m2.236s

$ time ( i=1; while [ $i -le 100 ]; do time ls 19991* ; let i=i+1; done ;wait)
real 0m3.197s
user 0m1.669s
sys 0m1.535s

User和sys大致相同。并行版本中较长的 user+sys-time 可以用 fork 的开销来解释。较低的实时性可以用多个 CPU 来解释。

因此,您的时间安排会受到更多并行运行的作业的严重影响。

关于linux - 在 Linux 中使用通配符降低并发文件访问速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14336058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com