Follow feeds: blogs, news, RSS and more. An effortless way to read and digest content of your choice.
Get Feederichenfu.com
Get the latest updates from C0reFast记事本 directly as they happen.
Follow now 20 followers
Last updated about 1 month ago
about 1 month ago
本文是Use One Big Server的翻译,前两天在HackerNews上看到这篇文章,虽然是2022年的(文章刚出时,也引起了不少的讨论,不知道怎么现在又被挖了出来),但是也引发了很多热议。行业内一直有不少关于“单体与微服务”架构的争论,但这场争论背后的真正问题是分布式系统架构是否值得花费开发者时间和成本开销。通过对系统的实际运行情况进行分析,可以深入了解大多数情况下我们是否真的需要分布式系统。我们已经对虚拟化以及软件和运行软件的服务器之间的抽象变得如此熟悉。如今,“Serverless”计算风靡一时,甚至“裸金属”也成为了一种虚拟机。然而,每一段软件都运行在一台服务器上。由于我们现在生活在一个虚拟化的世界里,大多数这些服务器比我们实际认为的要大得多、便宜得多。认识你的服务器这是一张微软 Azure 使用 AMD CPU 的服务器图片。从左边开始,左侧的大金属固定装置(带有铜管)是散热器,铜管连接的金属盒是每个 CPU 上的热交换器。这些 CPU...
about 2 months ago
现在用的笔记本电脑是公司去年发的HP EliteBook 640 G10,机器自带了一块Solidigm的SSD,从型号上应该就是P41 Plus的OEM版本,最近使用中发现机器越来越慢了,一开始以为是内存用的多,直到有一次重启发现了一些异常,这机器重启竟然需要20分钟的时间!重启进入桌面之后,系统也非常卡顿,完全没办法使用,好不容易打开任务管理器,发现磁盘一直100%占用,响应时间已经飙上了天。很显然,磁盘遇到问题了。问题分析由于和磁盘相关,赶紧用CrystalDiskInfo看看是不是出现0E错误了,之前三星还有其他品牌的SSD,出现0E问题的案例不少,要是有问题,我就赶紧备份数据准备报修换盘了。但是看了SMART信息,发现并没有什么异常,所有的数值都在正常范围内,连警告都没有,写入量也很低,不到30T:从数据上看一切正常,但实际表现呢?肯定还是有问题的,这时候开始怀疑是有些冷数据的问题,毕竟这块盘一开始使用的时候是没有问题的,现在使用了将近1年时间,刚好又是QLC颗粒,如果颗粒漏电导致需要ECC纠错的情况还是有可能的。拷贝测试尝试找了一个大文件,进行拷贝测试,看看实际的读写速度如何。看起来确实有点问题,一方面在拷贝过程中,速度会降到十几M/s,另外一方面,从任务管理器看磁盘的性能数据,延迟已经接近1s了,这个性能数据对于一块PCIe 4.0的NVMe SSD来说,实在是太差了。现在的性能基本就是一个大号U盘的水平了。底层读取测试感觉已经找到了问题,但还是有点不放心,比较拷贝文件这个动作,和文件系统,还有cache以及磁盘写入性能等等都相关,有没有什么工具可以绕过文件系统,直接读原始磁盘,并且不写入磁盘呢?这样可以更好的反映SSD本身的性能了,Linux下有个非常好用的工具fio,专门用于做类似的事情,不过使用起来有点麻烦,于是又想到另外一个工具:dd。相比fio来说,dd本身也不是一个磁盘测试工具,只能进行简单的读写操作,功能上也差距很大,但架不住简单啊,针对当前的需求,也够用了。于是就找到了一个DD for Windows,使用管理员权限的Powershell???行一下:PS C:\WINDOWS\system32> dd.exe if=\\.\PhysicalDrive0...
2 months ago
在上一篇Blog里说了一下关于ARP/ND双发的实现,但是还遗留了一个小问题,就是如何测试最终的效果,毕竟正常情况下,ARP还有ND相关的报文,都是由内核协议栈根据需要发出的,不太稳定,总不能一直抓包等着内核发包吧?所以还是需要借助一些工具来实现。ARP双发检测ARP双发的测试还是比较简单的,毕竟大家都知道arping这个工具,可以用来发送ARP请求并接收ARP应答。使用起来也是非常顺畅的:# arping 192.68.100.1 -c 2ARPING 192.68.100.1 from 192.68.100.21 eth0Unicast reply from 192.68.100.1...
3 months ago
大约在2019年的时候,公司的服务器接入网络架构开始向双上联去堆叠方向迁移,相比于之前老的接入网络而言,新的网络架构在各方面的提升都非常明显,尤其是在带宽利用率和冗余性方面,关于网络架构的部分,这里暂时就不多做介绍了,具体的可以参考京东以及H3C的相关分享和文档:异构去堆叠 | 一种完美提升网络高可用SLA的方案,H3C数据中心交换机S-MLAG最佳实践。在新的网络架构中,我们的方案是通过ARP转主机路由方式来实现网络层面的负载均衡和高可用的,这个方案有个依赖,需要主机实现ARP/ND相关协议包的双发。Bonding的双发问题为什么会有这个双发的需求呢?因为在我们选择的去堆叠方案中,主机的网卡是通过Bonding的方式来实现双上联的,要想实现对负载均衡和高可用的同时支持,Bonding的流量分载只能是基于hash的模式,这会带来一个问题:对于Host侧的ARP请求/响应报文,只会发送给某一台交换机,假设Host连接了LeafA和leafB两台交换机,当LeafA交换机的ARP表项即将过期,需要发送ARP请求探测Host状态时,Host回复的响应报文可能因为hash原因回复给LeafB了,这样一来,LeafA就无法及时获取到Host的最新状态信息,从而影响到整个网络的稳定性和可靠性。因为上面的这个原因,Host侧内核的Bonding模块必须作出相应的调整,将所有ARP的请求和响应报文,都进行复制,并在所有的子接口上进行发送。当然实现的方法并不麻烦,具体的可以参考龙蜥社区的实现anolis: bond: broadcast ARP or ND messages to all slaves。至此就基本解决了物理服务器层面对新接入网络架构融合的问题。虚拟化的网卡Bonding作为第一个接入新网络架构的虚拟化平台,只解决物理服务器层面的问题还不够,因为虚拟化的核心产品:VM的网络也需要解决。对于虚拟化业务的网卡,选择的都是Mellanox(现NVIDIA)的产品,不得不说,Mellanox的网卡对于虚拟化的场景来说,还是非常友好的,相比于普通的网卡而言,支持很多虚拟化相关的Offload特性,完全可以称得上是SmartNIC。对于Mellanox的网卡,有个比较重要的特性是OVS...
5 months ago
前几天偶然发现,Windows 11的WSL2可以通过WSLg来无缝使用GUI应用。类似推理/训练等任务,都不在话下,这瞬间勾起了我的好奇心,决定试试微软提供的这个神奇功能。其实微软在2021年就发布了WSLg,现在已经是2025年了,刚刚开始折腾也算是后知后觉了。WSL支持GUI应用只能算是WSLg的一个最简单的功能了,当涉及模型训练或者GPU加速时,GPU驱动还有CUDA等等相关的配置就会变得复杂起来。我并不希望因为“折腾”这么一下,就把我的WSL环境搞得一团糟,这时候,Docker的价值就体现出来了。利用Docker,可以在不修改现有WSL环境的情况下,快速搭建一个隔离的环境来做些简单的测试。我决定使用YOLO作为测试对象,看看在WSL+WSLg+Docker的场景下,YOLO还能不能很好的工作,正确使用我的GPU进行加速。确认WSLg的正确安装理论上,WSLg是WSL默认启用的功能,当你安装完成WSL2,并且安装了Ubuntu等Linux发行版后,就可以直接使用GUI应用了。具体的安装方法,这里就不多说了,毕竟微软的文档在适用于 Linux 的 Windows 子系统上运行 Linux GUI 应用写的非常的详细:安装完成后,如果WSLg被正确启用的话,应该就可以看到:# mount|grep wslgnone on...
5 months ago
本文是A leap year check in three instructions的翻译,前两天在HackerNews上看到这篇文章,闰年的判断方法,从一开始学编程就是一个经典的练习题,但是深挖下去,作者只用了三条指令就能实现闰年的判断,感觉还挺有意思的,所以就翻译分享一下。省流不看版(基于DeepSeek总结):文章介绍了一种使用大约3个CPU指令实现快速闰年检查的方法。这种方法不同于标准算法(涉及模运算和分支),而是利用位操作和魔法数字,将闰年规则(能被4整除,但不能被100整除,除非能被400整除)巧妙地映射到对年份乘以一个常数后的结果进行位范围检查。这种位操作方法对于随机年份输入表现出显著的速度提升,并且针对特定范围已证明是最优解。这项优化技术涉及复杂的位运算细节。以下是原文的翻译:通过以下代码,我们可以在大约 3 个 CPU 指令内检查 0...
5 months ago
近期线上出现了一个问题,现象是有一台机器,网络出现了不定时的延迟:# ping -i 0.05 192.168.0.5#...64 bytes from 192.168.0.5: icmp_seq=673 ttl=63 time=0.203 ms64...
6 months ago
最近接到一个客户反馈,说他们的机器,遇到了top命令中,hardirq的值特别高的问题。top - 15:27:37 up 43 days, 3:42, 1 user, load average: 44.75...
10 months ago
最近线上出现一些VM网卡收包队列不均匀的问题,即使是将网卡队列中断均匀的绑定到各个CPU上,依然会出现某个核特别高的情况:%Cpu0 : 0.0 us, 0.0 sy, 0.0 ni, 98.3 id, 0.0 wa...
10 months ago
上一篇x86平台的TSC(TIME-STAMP COUNTER)中大概分析了一下TSC的一些相关的特性,以及TSC作为系统时钟源的一些基础条件。那么,在虚拟化的场景下,如何让Guest也用上TSC呢?这篇文章就来讨论一下TSC在KVM虚拟化中的使用。基础分析默认情况下,KVM虚拟机首选的时钟源是kvm-clock,即使将VM的CPU Model设置为host-passthrough,也不会使用TSC作为时钟源。# lscpu|grep FlagsFlags: fpu vme de pse tsc msr pae...
11 months ago
今天跟着Intel的开发手册,看看如何随着Intel对TSC不断的修改和增加新特性,让TSC从一个简单的性能计数器发展成当前Linux上x86平台最重要的时钟源之一。本文基本上可以看作是Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3B: System Programming...
over 1 year ago
首先需要解释一下标题,原谅我当了一回标题党,此UFO不是Unidentified flying object,而是在网络中的一个Oflload卸载技术UDP fragmentation offload。事情的起因是这样的,我们最近尝试将线上的虚拟机,从基于网卡SR-IOV+直通的方案,切换到基于DPDK+vhost-user的方案,以换取热迁移的效率提升。从之前的模拟压测和线上灰度效果来看,新的DPDK方案的性能和稳定性都处于很好的水平,在我们的场景下可以很好地满足需求。直到灰度到某个业务的时候,发生了一些问题,导致了虚拟机的网络中断。我们通过热拔插方式进行网络切换,首先,会把当前直通的网卡从虚拟机中热拔出来,然后,再把一个vhost-user网卡热插到虚拟机中,从而实现网卡的切换。在切换过程中,大致会有3-5s左右的网络中断,但根据和业务的沟通,在单线程的操作情况下,这样的中断是没有问题的,不会影响业务。为了保证业务的稳定,我们在网卡切换后,会持续ping 10s对应的虚拟机,确保网络正常后才会进行下一台的操作。然后问题就发生了,在某些虚拟机切换网卡之后,大约5分钟内,网络是正常的,但是超过5分钟之后,突然网络就不通了,这个问题也是随机的,而对于网络不通的机器,通过重启DPDK进程的方式,网络又可以恢复几分钟,然后继续不通。这些现象确实在之前的测试中没有遇到过。从日志看,有少量的DPDK进程打印了这两条日志:VHOST_DATA: (/tmp/ens8f0-2.sock) failed to allocate memory for...