为什么posix.lstat需要这么长时间? (备份9p virtio文件系统的备份)

我有一个通过KVM挂载9p virtio的文件系统,并使用重复的方式将其备份到远程SSH服务器。 我正在加速备份过程,这对我来说似乎过于缓慢。

在使用15K磁盘(WD VelociRaptors),无BBWC的3ware控制器上的Raid10arrays上,107.651文件中的源文件大小为20GB,位于运行Ubuntu 14.04的虚拟机主机上的ext4文件系统上。 虚拟机本身是Ubuntu 12.04.5通过virtio,驱动程序“path”,模式“映射”,写入策略“立即”,使用p9挂载文件。 通过SSH的目标是惠普服务器与512MB BBWC启用12x 2TB SAS磁盘,证实是非常快。

如果一切都失败了,我只是尝试在虚拟机主机上运行的副本,以消除访问文件中的9p中间层,以查看9p是否是问题(我正在慢慢怀疑它是)

以下是重复性备份统计信息:

--------------[ Backup Statistics ]-------------- StartTime 1483275839.07 (Sun Jan 1 14:03:59 2017) EndTime 1483332365.62 (Mon Jan 2 05:46:05 2017) ElapsedTime 56526.55 (15 hours 42 minutes 6.55 seconds) SourceFiles 107651 SourceFileSize 21612274293 (20.1 GB) NewFiles 24 NewFileSize 69952 (68.3 KB) DeletedFiles 11 ChangedFiles 38 ChangedFileSize 6825600 (6.51 MB) ChangedDeltaSize 0 (0 bytes) DeltaEntries 73 RawDeltaSize 47509 (46.4 KB) TotalDestinationSizeChange 103051 (101 KB) Errors 0 

python cProfile运行时返回了以下函数花了最长的执行时间:

 29225254 function calls (29223127 primitive calls) in 56578.118 seconds ncalls tottime percall cumtime percall filename:lineno(function) 107700 28238.712 0.262 28238.712 0.262 {posix.lstat} 107650 28016.367 0.260 28016.367 0.260 {posix.access} 892 190.827 0.214 190.827 0.214 {posix.listdir} 2 49.552 24.776 49.552 24.776 {method 'readline' of 'file' objects} 82 11.113 0.136 11.113 0.136 {open} 

9p是问题。 在数据所在的VM主机上运行重复数据,在55秒内完成。

这个错误显然仍然是开放的,它涉及到相同的性能问题。 它build议将msize = 262144添加到安装选项,这会加快访问速度,但仍然不如直接访问快。

所以最后,不要使用9p over virtio,并期望高文件访问速度。 在我的情况下,访问9p以上的这些文件的应用程序不会受到太大影响,但其他(如重复)是。