最近从A服务器下载数据时,发现如果走B服务器的VPN下载,速率只能跑到300KB左右,但是B从A直接下载却能跑到1MB+/s,B到本地的速度也远超过A到B的速度,其实一开始我以为是VPN实现的问题,有段时间在思考如何优化VPN,但是尝试了其它VPN实现,问题并没有解决。后来发现,走B的代理而不是VPN,速度正常。 本地到B的RTT大约160ms,B到A大约50ms。 Wireshark抓包,对tcp sequence number统计了下: 放大点看: 大概每传输60KB,就要等大约200ms才能继续。200ms刚好差不多等于本地走VPN到A的RTT。传这60KB,只花了大概10ms,忽略这1 […]
Category: 操作系统
双路超线程物理服务器的QEMU CPU affinity调整
首先运行 virsh capabilities 查看物理机物理核心及其线程与逻辑处理器(线程)的关系:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
... <topology> <cells num='1'> <cell id='0'> <memory unit='KiB'>24671680</memory> <pages unit='KiB' size='4'>6167920</pages> <pages unit='KiB' size='2048'>0</pages> <distances> <sibling id='0' value='10'/> </distances> <cpus num='16'> <cpu id='0' socket_id='0' core_id='0' siblings='0,8'/> <cpu id='1' socket_id='0' core_id='1' siblings='1,9'/> <cpu id='2' socket_id='0' core_id='2' siblings='2,10'/> <cpu id='3' socket_id='0' core_id='3' siblings='3,11'/> <cpu id='4' socket_id='1' core_id='0' siblings='4,12'/> <cpu id='5' socket_id='1' core_id='1' siblings='5,13'/> <cpu id='6' socket_id='1' core_id='2' siblings='6,14'/> <cpu id='7' socket_id='1' core_id='3' siblings='7,15'/> <cpu id='8' socket_id='0' core_id='0' siblings='0,8'/> <cpu id='9' socket_id='0' core_id='1' siblings='1,9'/> <cpu id='10' socket_id='0' core_id='2' siblings='2,10'/> <cpu id='11' socket_id='0' core_id='3' siblings='3,11'/> <cpu id='12' socket_id='1' core_id='0' siblings='4,12'/> <cpu id='13' socket_id='1' core_id='1' siblings='5,13'/> <cpu id='14' socket_id='1' core_id='2' siblings='6,14'/> <cpu id='15' socket_id='1' core_id='3' siblings='7,15'/> </cpus> </cell> </cells> </topology> <cache> <bank id='0' level='3' type='both' size='8' unit='MiB' cpus='0-3,8-11'/> <bank id='1' level='3' type='both' size='8' unit='MiB' cpus='4-7,12-15'/> </cache> ... |
其中的socket_id代表CPU的槽位,core_id代表CPU物理核心,siblings表示哪些逻辑处理器(线程)是属于同一个物理核心的。 例如id为0以及8的逻辑处理器,都属于同一个CPU槽位且属于同一个物理核心。 在这台物理机上建立的虚拟机,想得到最佳的性能,首先不要跨CPU插槽,其次,不要让多个虚拟机CPU共享同一个物理核心。 根据上面的信息,4核心8线程的虚拟机CPU亲和度配置如下: [crayon-670c4d2 […]
mdadm RAID1转RAID10
mdadm支持missing两个硬盘的情况下组RAID10,因此可以先通过两个新硬盘+两个missing组RAID10,然后把现有RAID1中的数据拷贝到新的RAID10中,再把现有RAID1中的两个分区加入到新的RAID10中,让mdadm自动重建数据。 下面假设现有的RAID1分区是/dev/sda5与/dev/sdb5,新的两个分区是/dev/sdc5与/dev/sdd5,最终目的是要使用/dev/sda5、/dev/sdb5、/dev/sdc5以级/dev/sdd5组RAID10。 首先备份数据。 如果操作的是系统分区,使用LiveCD操作即可。 [crayon-670c4d2570b […]
L2TPv3 MTU
L2TPv3支持自动拆包,封装后的数据包如果超出裸线路的MTU也能正常运作。 拆包合包毕竟需要耗资源的,这种多余的操作,能避免的话当然最好。 要避免,首先确定好L2TPv3隧道的MTU。 图: UDP封装模式: L2TPv3隧道MTU = 裸线路MTU – IP头 – UDP头 – L2TPv3头 – 以太网头 经测试L2TPv3头在这种模式下是12字节,如果裸线路MTU是1500,那么隧道MTU = 1500 – 20 – 8 – 12 – 14 = 1446,TCP MSS = 1446  […]
细数在Windows 10配置Software RAID1时所遇到的坑
Windows在日常应用外的场景,给我的印象一直都不太好,特别是排错方面,异常麻烦,遇到莫名奇妙的错误,要么没有日志,要么事件查看器中只有个错误代码,或者输出一个内容不仅又臭又长还根本看不出什么问题.log文件。像Windows更新突然无法安装,Visual Studio或者某个程序一直安装失败或者别的Windows组件的各种疑难问题,除了重装Windows还有什么解决办法?所以除了日常应用,其余的一直都在避免依赖Windows。 最近给机子加了个4TB的机械硬盘,其实一开始是打算买两个4T组RAID1的,不过考虑到没那么多重要数据需要R1,而且目前也有一个1TB的,所以就只买了一个4T的,打 […]