虚拟连虚拟!竟然一招搞定DIY玩家的种种问题

【写作说明】:从2020年春节电脑小白入坑NAS,玩过猫盘、玩客云、蜗牛、DIY群晖到现在的UNRAID All-In-One,一个深刻的感受就是累并快乐的折腾。从ZDM的大佬们那学习到了很多,刚查了下DS NoteStation里,这一年半里自己零零散散得居然记了600多个笔记。接下来,就逐步把折腾的经历整理分享下,不能算是教程,只能算是个自我备忘以及同广大爱折腾的朋友们分享的感悟。欢迎各位大佬指导,也欢迎各位朋友分享并交流折腾感悟。

前言

Unraid数据传输慢,要放弃了

Unraid是一个非常好的系统,它在虚拟机(比如Win10/群晖Mac)的搭建上非常方便且易于维护。上一篇我介绍了成功搭建的虚拟Win10,用的是企业版LTSC,平常使用的CPU占用率非常低,适合长期挂机。同时在跑的还有群晖虚拟机,也非常稳定地运行了近一年。

但是,Unraid数据传输慢、且CPU占用率极高。大家看上图d 搜索结果,部分玩家都要因此放弃这个系统了。我也为此苦恼了很久,也经历过几乎放弃的阶段。网上查阅了很多资料,解决方案基本是要直通硬盘和直通网卡。玩Unraid的大都是DIY机器,虽然大问题是一致的,但细节上的小问题各不相同,这些步骤我也都照做成功了,但是传输速度的上限仍然只有60MB/s,且CPU暴红,我的配置是i3-8100,分群晖2个核心,且有2个SSD缓存盘,这是非常不正常的(心里很不安的/又有事情好折腾的小期待)。

经过一番折腾,终于解决了传输慢的问题,虚拟群晖向机外客户端传输文件最大速度达170+MB/s,着急的朋友和大佬们可以忽略我的长篇心路历程,直接看解决方案,同时也请大佬们也请轻拍多指点。

解决方案

Unraid搭建虚拟机Win10且直通硬盘,用Windows网络驱动器映射虚拟群晖的直通盘。简而言之,就是让2个Unraid虚拟机各自的直通盘来个文件交流。合理分配好CPU核心,可以达到110-120 MB/s的稳定传输速度。

长篇大论折腾经历

1. 先说一下主机的配置

CPU是i3-8100器用的是i3-8100 CPU和H310m主板,32G内存,有读写缓存SSD,挂载9个硬盘。

2. 折腾心路历程

我查了下虚拟机群晖的配置,发现除了2个直通的硬盘外,还有2个虚拟硬盘(vDisk)是搭建在Unraid系统盘上的(即路径是挂在mnt/user/的一个SSD)。这2个盘一个是群晖初始安装引导盘所需,另一个是用于安装群晖的系统套件,为了方便定期备份和崩溃(折腾坏)时恢复。猜想是不是因为占用了Unraid的系统盘,以至于每次虚拟群晖的数据传输都要经Unraid的系统处理,才导致CPU占用高。

群晖有2个虚拟硬盘(vDisk)是搭建在Unraid系统盘上的

按照上述思路,我先尝试把4thvDisk这个搭建在Unraid系统里的硬盘去除,只剩下直通的和primary vDisk(引导盘,不能去), 速度上限仍然是60 MB/s, CPU 占用率似乎有所下降。仔细分析,是CPU 0-1(未分配给任何虚拟机)2个核心占用率下降了,接近了我之前的推测(虚拟机群晖只用CPU 2-3,且关闭其他虚拟机)。

2次试验,分别给虚拟机群晖2个和1个CPU核心

接下去,就只给虚拟机群晖1个核心(CPU3)。上图可见CPU总占用率下降了,可是,传输速度的上限仍然是60 MB/s,且虚拟群晖CPU一直近100%,看来双核还是必要的。

这时候又有另一个猜测,是群晖的SMB占用太高,CPU资源不足导致传输速度天花板。

只给虚拟机群晖1个核心,传输速度上限仍是60 MB/s

于是,作了一把,把CPU1-3的3个核心都分给虚拟群晖了,居然有成效了。见下图,传输速度达104 MB/s,令人满意的速度。

3核心虚拟群晖,传输速度达104 MB/s

继续作,我把之前用来存放套件的vDisk(搭建在Unraid系统盘)又放回了虚拟群晖里。如图所示,群晖CPU占用率不高(SMB服务只有32.7%),Unraid整机的CPU占用率爆红,但是,传输速度怎么又落回到解放前了。。。。

这是情理之中,证实了我在本文一开始的猜想“虚拟机即使直通硬盘,只要有vDisk搭建在Unraid系统盘了,传输数据就要经Unraid系统处理,导致CPU占用高”。

2个虚拟硬盘(vDisk)会影响传输速度

3. 向成功靠近的折腾

接下去的折腾思路,就是基于上述验证的猜想。在尽量避免占用Unraid系统盘的前提下,构建虚拟机的传输环境。

(1)尝试一:直通一个硬盘给Win10虚拟机,然后用Win10网络驱动器映射虚拟群晖的直通盘。简而言之,就是让2个Unraid虚拟机各自的直通盘来个文件交流。看下图,成效显著,147 MB/s已经达到千兆网络中机械硬盘的传输极限了。再看Unraid的CPU,也是爆红爆红的。这也可能是因为CPU分配的问题,因为Win10用了CPU 0-1, 群晖用了CPU1-3,核心重叠了1个且没有单独的CPU供给Unraid使用了。

2个Unraid虚拟机各自的直通盘文件传输达147 MB/s

(2)尝试二:调整CPU分配。把群晖CPU核心减少1个,这样2个虚拟机各占2个不共用的核心。群晖自己CPU的占用率69%,正常。传输速率最高能到170+ MB/s,但是极不稳定(经常出现速度为0)。

调整CPU核心分配,达170+ MB/s

(3)尝试三:只给群晖1个CPU核心,这样Unraid也有一个独占的核心。速度在110-120 MB/s,相对稳定。这个方案或许是当前比较合理、可推荐的。

群晖1核、Win10 2核、Unraid1核,速度在110-120 MB/s,相对稳定

总结

折腾了一晚上,肩颈脖子僵了,右手肱三头肌也酸了,幸好传输速度瓶颈的问题终于解决了,可以带着满意的笑容去睡了。

本次折腾过程中,在网络中也搜索到了很多类似的问题,各路大佬也提出了各种解决方案,比如配置、直通。。。但是,每个玩家DIY的情况不同,公认的、一致可行的解决方案似乎都没有。晚上瞎折腾,采用了虚拟连虚拟的方法,尽然一招就搞定了。

根据上述折腾过程可以推断,Unraid这个系统里的虚拟机,即使直通了硬盘和网络,数据运行还是要经过Unraid系统的,再加上其本身IO的设计缺陷,就会造成总机CPU占有率过高,从而降速。I3-8100性能已经不低了,但装AIO的话,线程还是少了点。下图也可以看到,CPU对传输速度的影响还是蛮大的,由于一直是爆红,速率也在波动。

Unraid的优势胜在搭建和维护虚拟机简单和方便,但是CPU高占用率且有传输瓶颈是个短板,也难怪企业和规模化应用上鲜见。家用可以尝试,毕竟60和110 MB/s也就多等一倍的时间,这些等待或许给予了我们更多机会关注电脑之外的精彩世界。

本文经“什么值得买”社区作者@折腾这快乐着折腾授权转载,文章内容仅代表作者观点,与本站立场无关,未经授权请勿转载。