我有一组大文件,有时在Linux盒和Windows盒之间来回复制。这些文件每个大约有2GB,通常有10个左右(它们是一个VM映像)。VM在Linux (qemu)上运行,我将其备份到Windows框中。在这个场景中,VM没有运行。
当我将文件从Linux框复制到Windows框时,一切正常。当我将文件从Windows框复制回Linux盒时,我在Linux盒上得到了异常高的CPU使用率,并且文件传输非常(非常)慢。
我使用socat、lz4和tar来传输文件。在windows框中,我使用cygwin进行套接字、tar等操作(但这并不重要,因为Windows框的性能很好)。我选择lz4是因为它非常(非常)快速,并且(如gzip等)提供校验。
当我从Linux框复制文件时,Linux命令是:tar cvf - *vmdk | lz4 -B64 | socat - TCP-LISTEN:7777,reuseaddr,而socat TCP:linuxserver:7777 - > bigbackup.tar.lz4命令是D1。这很好,我得到了25%到100%的网络利用率,而所有系统上的CPU使用率都不到25%。
当我将文件复制回Linux框时,Linux命令是:socat TCP-LISTEN:7777,reuseaddr - | lz4 -d | tar xvf -,而cat bigbackup.tar.lz4 | socat - TCP:linuxserver:7777命令是D3。
当我运行此还原操作将文件复制回我的Linux盒时,传输按预期工作几秒钟,然后传输开始停滞和减速,Linux盒上的CPU开始猛增,然后与100%挂钩,所有其他程序的响应都会降低(有时没有响应)。如果我让它单独,传输将最终完成,但以大约5%的速度,我认为它应该采取,与CPU钉住了整个时间。
如果我使用windows任务管理器“网络”选项卡,或者linux system,网络历史就会很奇怪--在大约25%的利用率下,有2到5秒的数据传输,然后在30到40秒内为零。这会重复,直到转移完成为止。整个时间的CPU都是100%。使用htop (linux),socat和lz4进程CPU的使用率为0%到2%,而tar进程有时会飙升到25%,但即使这些进程的总和较低,也有一些原因不明的线程正在使用CPU的其余部分。我在焦油过程中尝试了重来,但没有效果。
如果我在另一个(windows)框上运行还原进程(使用相同的命令),则传输将以25% - 100%的速度平稳地进行,与备份相同。不幸的是,我没有任何其他Linux盒可供测试。
这个问题的发生对我来说就像一辆在星期二不能左转的汽车。如果Linux盒中的磁盘由于写入速度慢(是SSD)而处于停滞状态,我希望内核线程只是阻塞,否则CPU就可用了。
以下是有关硬件和系统的一些信息。
我查看了TAR的文档,似乎没有控制系统应该如何写入文件的标志(比如缓冲、缓存、同步写入等等)。
有人知道为什么会发生这种情况吗?有没有办法解决这个问题,或者减少它的影响?
发布于 2019-07-16 19:56:12
在“窗口”框中,您试过禁用防病毒软件吗?
您还可以看到您使用wireshark的结果。
但是,这听起来像是linux盒和windows box中的一些东西没有意见一致--这听起来可能有点傻,但看看当您在windows box上启动到安全模式时,以及是否可以以这种方式传输文件,或者至少看看您是否获得了更好的结果。如果您注意到传输速度更快,那么您可能需要尝试一个干净的引导,以找出哪个程序导致cpu峰值。
此外,确保你的互联网之间的两个盒子是稳定的。(如果你的互联网速度慢,这也可能是原因之一)
https://serverfault.com/questions/975483
复制相似问题