怀念 SinaAppEngine

<p>经历了十几年的运营,SinaAppEngine 终于要走完一个产品的一生,即将下线并永久终止服务了。SAE 是我很早就接触过的平台,也是我人生中的第一份工作。借此契机,回忆一下我在 SAE 期间的一些工作,谨以此文,悼念我心中永远的 SinaAppEngine。</p>

2026/9/8
阅读更多

一个virtio-blk设备IO大小的问题

<p>最近在测试我们的VM时,发现了一个比较奇怪的现象:对于同样的一个IO压力,当IO设备是<code>NVMe</code>或者<code>virtio-blk</code>时,行为有一些不太一样,具体表现在IOPS上,而且差距非常大,同样是1GB&#x2F;s左右的IO,两个不同设备的IOPS差了接近4倍:</p> <p><img src="/images/virtio-blk-io-size/iops.png"></p> <h3 id="更多的测试"><a href="#更多的测试" class="headerlink" title="更多的测试"></a>更多的测试</h3><p>一般来说,NVMe设备,单个IO的最大大小是<code>128KB</code>,那对于1GB&#x2F;s的吞吐来说,当前的IOPS是一个合理的值,那问题很显然出在了<code>virtio-blk</code>设备上,可以确定地是,在<code>virtio-blk</code>设备上的IO被切分了。简单除一下,可以大致得到设备层的IO大小大致在<code>30KB</code>附近,按照常理,<code>virtio-blk</code>设备的最大IO大小可不止这点。</p>

2025/12/30
阅读更多

使用单台高配服务器(部署你的业务)

<p>本文是<a href="https://specbranch.com/posts/one-big-server/">Use One Big Server</a>的翻译,前两天在<a href="https://news.ycombinator.com/item?id=45085029">HackerNews</a>上看到这篇文章,虽然是2022年的(文章刚出时,也引起了不少的讨论,不知道怎么现在又被挖了出来),但是也引发了很多热议。</p> <p>行业内一直有不少关于“单体与微服务”架构的争论,但这场争论背后的真正问题是分布式系统架构是否值得花费开发者时间和成本开销。通过对系统的实际运行情况进行分析,可以深入了解大多数情况下我们是否真的需要分布式系统。</p> <p>我们已经对虚拟化以及软件和运行软件的服务器之间的抽象变得如此熟悉。如今,“Serverless”计算风靡一时,甚至“裸金属”也成为了一种虚拟机。然而,每一段软件都运行在一台服务器上。由于我们现在生活在一个虚拟化的世界里,大多数这些服务器比我们实际认为的要大得多、便宜得多。</p>

2025/9/8
阅读更多

一个Solidigm P41 Plus的冷数据问题

<p>现在用的笔记本电脑是公司去年发的HP EliteBook 640 G10,机器自带了一块Solidigm的SSD,从型号上应该就是P41 Plus的OEM版本,最近使用中发现机器越来越慢了,一开始以为是内存用的多,直到有一次重启发现了一些异常,这机器重启竟然需要20分钟的时间!重启进入桌面之后,系统也非常卡顿,完全没办法使用,好不容易打开任务管理器,发现磁盘一直100%占用,响应时间已经飙上了天。很显然,磁盘遇到问题了。</p>

2025/8/25
阅读更多

测试ARP/ND双发效果的小工具

<p>在<a href="/2025/07/18/broadcast-arp-and-nd-on-hw-offloaded-bonding/">上一篇Blog</a>里说了一下关于ARP&#x2F;ND双发的实现,但是还遗留了一个小问题,就是如何测试最终的效果,毕竟正常情况下,ARP还有ND相关的报文,都是由内核协议栈根据需要发出的,不太稳定,总不能一直抓包等着内核发包吧?所以还是需要借助一些工具来实现。</p>

2025/8/14
阅读更多

硬件Bonding卸载场景下的ARP/ND双发

<p>大约在2019年的时候,公司的服务器接入网络架构开始向双上联去堆叠方向迁移,相比于之前老的接入网络而言,新的网络架构在各方面的提升都非常明显,尤其是在带宽利用率和冗余性方面,关于网络架构的部分,这里暂时就不多做介绍了,具体的可以参考京东以及H3C的相关分享和文档:<a href="https://zhuanlan.zhihu.com/p/62024674">异构去堆叠 | 一种完美提升网络高可用SLA的方案 </a>,<a href="https://www.h3c.com/cn/Service/Document_Software/Document_Center/Home/Switches/00-Public/Configure/Practice/H3C_S_MLAG-BP_Long/">H3C数据中心交换机S-MLAG最佳实践</a>。</p> <p>在新的网络架构中,我们的方案是通过ARP转主机路由方式来实现网络层面的负载均衡和高可用的,这个方案有个依赖,需要主机实现ARP&#x2F;ND相关协议包的双发。</p>

2025/7/18
阅读更多

“无限”套娃,在WSL的Docker中使用YOLOv11做目标检测

<p>前几天偶然发现,Windows 11的WSL2可以通过WSLg来无缝使用GUI应用。类似推理&#x2F;训练等任务,都不在话下,这瞬间勾起了我的好奇心,决定试试微软提供的这个神奇功能。其实微软在2021年就发布了WSLg,现在已经是2025年了,刚刚开始折腾也算是后知后觉了。</p> <p>WSL支持GUI应用只能算是WSLg的一个最简单的功能了,当涉及模型训练或者GPU加速时,GPU驱动还有CUDA等等相关的配置就会变得复杂起来。我并不希望因为“折腾”这么一下,就把我的WSL环境搞得一团糟,这时候,Docker的价值就体现出来了。利用Docker,可以在不修改现有WSL环境的情况下,快速搭建一个隔离的环境来做些简单的测试。我决定使用YOLO作为测试对象,看看在WSL+WSLg+Docker的场景下,YOLO还能不能很好的工作,正确使用我的GPU进行加速。</p>

2025/6/8
阅读更多

在三条指令内实现闰年判断

<p>本文是<a href="https://hueffner.de/falk/blog/a-leap-year-check-in-three-instructions.html">A leap year check in three instructions</a>的翻译,前两天在<a href="https://news.ycombinator.com/item?id=43999748">HackerNews</a>上看到这篇文章,闰年的判断方法,从一开始学编程就是一个经典的练习题,但是深挖下去,作者只用了三条指令就能实现闰年的判断,感觉还挺有意思的,所以就翻译分享一下。</p> <p>省流不看版(基于DeepSeek总结):<br>文章介绍了一种使用大约3个CPU指令实现快速闰年检查的方法。这种方法不同于标准算法(涉及模运算和分支),而是利用位操作和魔法数字,将闰年规则(能被4整除,但不能被100整除,除非能被400整除)巧妙地映射到对年份乘以一个常数后的结果进行位范围检查。这种位操作方法对于随机年份输入表现出显著的速度提升,并且针对特定范围已证明是最优解。这项优化技术涉及复杂的位运算细节。</p> <p>以下是原文的翻译:</p>

2025/5/29
阅读更多

一个中断关闭时间太长导致的网络延迟问题

<p>近期线上出现了一个问题,现象是有一台机器,网络出现了不定时的延迟:</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token comment"># ping -i 0.05 192.168.0.5</span> <span class="token comment">#...</span> <span class="token number">64</span> bytes from <span class="token number">192.168</span>.0.5: <span class="token assign-left variable">icmp_seq</span><span class="token operator">=</span><span class="token number">673</span> <span class="token assign-left variable">ttl</span><span class="token operator">=</span><span class="token number">63</span> <span class="token assign-left variable">time</span><span class="token operator">=</span><span class="token number">0.203</span> ms <span class="token number">64</span> bytes from <span class="token number">192.168</span>.0.5: <span class="token assign-left variable">icmp_seq</span><span class="token operator">=</span><span class="token number">674</span> <span class="token assign-left variable">ttl</span><span class="token operator">=</span><span class="token number">63</span> <span class="token assign-left variable">time</span><span class="token operator">=</span><span class="token number">0.210</span> ms <span class="token number">64</span> bytes from <span class="token number">192.168</span>.0.5: <span class="token assign-left variable">icmp_seq</span><span class="token operator">=</span><span class="token number">675</span> <span class="token assign-left variable">ttl</span><span class="token operator">=</span><span class="token number">63</span> <span class="token assign-left variable">time</span><span class="token operator">=</span><span class="token number">0.218</span> ms <span class="token number">64</span> bytes from <span class="token number">192.168</span>.0.5: <span class="token assign-left variable">icmp_seq</span><span class="token operator">=</span><span class="token number">676</span> <span class="token assign-left variable">ttl</span><span class="token operator">=</span><span class="token number">63</span> <span class="token assign-left variable">time</span><span class="token operator">=</span><span class="token number">0.233</span> ms <span class="token number">64</span> bytes from <span class="token number">192.168</span>.0.5: <span class="token assign-left variable">icmp_seq</span><span class="token operator">=</span><span class="token number">677</span> <span class="token assign-left variable">ttl</span><span class="token operator">=</span><span class="token number">63</span> <span class="token assign-left variable">time</span><span class="token operator">=</span><span class="token number">406</span> ms <span class="token number">64</span> bytes from <span class="token number">192.168</span>.0.5: <span class="token assign-left variable">icmp_seq</span><span class="token operator">=</span><span class="token number">678</span> <span class="token assign-left variable">ttl</span><span class="token operator">=</span><span class="token number">63</span> <span class="token assign-left variable">time</span><span class="token operator">=</span><span class="token number">354</span> ms <span class="token number">64</span> bytes from <span class="token number">192.168</span>.0.5: <span class="token assign-left variable">icmp_seq</span><span class="token operator">=</span><span class="token number">679</span> <span class="token assign-left variable">ttl</span><span class="token operator">=</span><span class="token number">63</span> <span class="token assign-left variable">time</span><span class="token operator">=</span><span class="token number">302</span> ms <span class="token number">64</span> bytes from <span class="token number">192.168</span>.0.5: <span class="token assign-left variable">icmp_seq</span><span class="token operator">=</span><span class="token number">680</span> <span class="token assign-left variable">ttl</span><span class="token operator">=</span><span class="token number">63</span> <span class="token assign-left variable">time</span><span class="token operator">=</span><span class="token number">251</span> ms <span class="token number">64</span> bytes from <span class="token number">192.168</span>.0.5: <span class="token assign-left variable">icmp_seq</span><span class="token operator">=</span><span class="token number">681</span> <span class="token assign-left variable">ttl</span><span class="token operator">=</span><span class="token number">63</span> <span class="token assign-left variable">time</span><span class="token operator">=</span><span class="token number">199</span> ms <span class="token number">64</span> bytes from <span class="token number">192.168</span>.0.5: <span class="token assign-left variable">icmp_seq</span><span class="token operator">=</span><span class="token number">682</span> <span class="token assign-left variable">ttl</span><span class="token operator">=</span><span class="token number">63</span> <span class="token assign-left variable">time</span><span class="token operator">=</span><span class="token number">147</span> ms <span class="token number">64</span> bytes from <span class="token number">192.168</span>.0.5: <span class="token assign-left variable">icmp_seq</span><span class="token operator">=</span><span class="token number">683</span> <span class="token assign-left variable">ttl</span><span class="token operator">=</span><span class="token number">63</span> <span class="token assign-left variable">time</span><span class="token operator">=</span><span class="token number">94.8</span> ms <span class="token number">64</span> bytes from <span class="token number">192.168</span>.0.5: <span class="token assign-left variable">icmp_seq</span><span class="token operator">=</span><span class="token number">684</span> <span class="token assign-left variable">ttl</span><span class="token operator">=</span><span class="token number">63</span> <span class="token assign-left variable">time</span><span class="token operator">=</span><span class="token number">43.0</span> ms <span class="token number">64</span> bytes from <span class="token number">192.168</span>.0.5: <span class="token assign-left variable">icmp_seq</span><span class="token operator">=</span><span class="token number">685</span> <span class="token assign-left variable">ttl</span><span class="token operator">=</span><span class="token number">63</span> <span class="token assign-left variable">time</span><span class="token operator">=</span><span class="token number">0.216</span> ms <span class="token number">64</span> bytes from <span class="token number">192.168</span>.0.5: <span class="token assign-left variable">icmp_seq</span><span class="token operator">=</span><span class="token number">686</span> <span class="token assign-left variable">ttl</span><span class="token operator">=</span><span class="token number">63</span> <span class="token assign-left variable">time</span><span class="token operator">=</span><span class="token number">0.248</span> ms <span class="token comment">#...</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> <p>以50ms为间隔ping,发现概率性的会出现超过400ms的延迟,但是并没有丢包的现象发生。</p>

2025/5/10
阅读更多

一个Linux新老内核对于硬件中断的统计差异

<p>最近接到一个客户反馈,说他们的机器,遇到了top命令中,hardirq的值特别高的问题。</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">top</span> - <span class="token number">15</span>:27:37 up <span class="token number">43</span> days, <span class="token number">3</span>:42, <span class="token number">1</span> user, load average: <span class="token number">44.75</span>, <span class="token number">53.47</span>, <span class="token number">51.66</span> Tasks: <span class="token number">244</span> total, <span class="token number">1</span> running, <span class="token number">243</span> sleeping, <span class="token number">0</span> stopped, <span class="token number">0</span> zombie %Cpu0 <span class="token builtin class-name">:</span> <span class="token number">10.3</span> us, <span class="token number">19.8</span> sy, <span class="token number">0.0</span> ni, <span class="token number">39.7</span> id, <span class="token number">0.4</span> wa, <span class="token number">28.2</span> hi, <span class="token number">1.6</span> si, <span class="token number">0.0</span> st %Cpu1 <span class="token builtin class-name">:</span> <span class="token number">10.7</span> us, <span class="token number">21.3</span> sy, <span class="token number">0.0</span> ni, <span class="token number">40.7</span> id, <span class="token number">0.4</span> wa, <span class="token number">26.1</span> hi, <span class="token number">0.8</span> si, <span class="token number">0.0</span> st %Cpu2 <span class="token builtin class-name">:</span> <span class="token number">10.0</span> us, <span class="token number">19.1</span> sy, <span class="token number">0.0</span> ni, <span class="token number">41.4</span> id, <span class="token number">0.4</span> wa, <span class="token number">27.9</span> hi, <span class="token number">1.2</span> si, <span class="token number">0.0</span> st %Cpu3 <span class="token builtin class-name">:</span> <span class="token number">10.4</span> us, <span class="token number">20.7</span> sy, <span class="token number">0.0</span> ni, <span class="token number">40.2</span> id, <span class="token number">0.4</span> wa, <span class="token number">26.7</span> hi, <span class="token number">1.6</span> si, <span class="token number">0.0</span> st %Cpu4 <span class="token builtin class-name">:</span> <span class="token number">10.4</span> us, <span class="token number">15.5</span> sy, <span class="token number">0.0</span> ni, <span class="token number">45.4</span> id, <span class="token number">0.4</span> wa, <span class="token number">28.3</span> hi, <span class="token number">0.0</span> si, <span class="token number">0.0</span> st %Cpu5 <span class="token builtin class-name">:</span> <span class="token number">10.8</span> us, <span class="token number">21.9</span> sy, <span class="token number">0.0</span> ni, <span class="token number">39.4</span> id, <span class="token number">0.4</span> wa, <span class="token number">27.1</span> hi, <span class="token number">0.4</span> si, <span class="token number">0.0</span> st %Cpu6 <span class="token builtin class-name">:</span> <span class="token number">10.1</span> us, <span class="token number">18.6</span> sy, <span class="token number">0.0</span> ni, <span class="token number">41.7</span> id, <span class="token number">0.4</span> wa, <span class="token number">28.7</span> hi, <span class="token number">0.4</span> si, <span class="token number">0.0</span> st %Cpu7 <span class="token builtin class-name">:</span> <span class="token number">10.6</span> us, <span class="token number">25.2</span> sy, <span class="token number">0.0</span> ni, <span class="token number">36.6</span> id, <span class="token number">0.0</span> wa, <span class="token number">26.4</span> hi, <span class="token number">1.2</span> si, <span class="token number">0.0</span> st<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> <p>从<code>top</code>命令输出可以看到,<code>hardirq</code>的值特别高,超过了25%。这导致了idle的下降,触发了监控的频繁报警。</p>

2025/4/23
阅读更多

推荐订阅

Cloudflare 官方博客中文版,涵盖安全、AI 和开发者相关内容

美团技术团队最近更新内容。