<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://ma-tie.github.io/feed.xml" rel="self" type="application/atom+xml"/><link href="https://ma-tie.github.io/" rel="alternate" type="text/html" hreflang="en"/><updated>2026-10-22T13:22:58+00:00</updated><id>https://ma-tie.github.io/feed.xml</id><title type="html">blank</title><subtitle>A simple, whitespace theme for academics. Based on [*folio](https://github.com/bogoli/-folio) design. </subtitle><entry><title type="html">减少语言的不确定性</title><link href="https://ma-tie.github.io/blog/2026/%E5%87%8F%E5%B0%91%E8%AF%AD%E8%A8%80%E4%B8%AD%E7%9A%84%E4%B8%8D%E7%A1%AE%E5%AE%9A%E6%80%A7/" rel="alternate" type="text/html" title="减少语言的不确定性"/><published>2026-10-22T12:25:28+00:00</published><updated>2026-10-22T12:25:28+00:00</updated><id>https://ma-tie.github.io/blog/2026/%E5%87%8F%E5%B0%91%E8%AF%AD%E8%A8%80%E4%B8%AD%E7%9A%84%E4%B8%8D%E7%A1%AE%E5%AE%9A%E6%80%A7</id><content type="html" xml:base="https://ma-tie.github.io/blog/2026/%E5%87%8F%E5%B0%91%E8%AF%AD%E8%A8%80%E4%B8%AD%E7%9A%84%E4%B8%8D%E7%A1%AE%E5%AE%9A%E6%80%A7/"><![CDATA[<blockquote> <p>今日灵光一闪时刻，感受到了不使用模糊语言的好处，语言精准后，感觉思维活跃了很多，也能更加为自己的思想负责了。</p> </blockquote> <p>前段时间看了《我们如何思维》这本书，里面有提到语言是思维的工具。它不仅仅是表达思想的工具，也是形成和组织思想的工具，非常重要：“<em>语言符号在思维中有三大核心功能：1. 从模糊不清的状态中提炼出来明确的意义；2. 将意义存储起来，随时取用；3. 在新情境中重新使用已有的意义。这三种功能紧密联系，就像一道栅栏、一个标签、一种媒介。</em>”</p> <p>既然语言已经这么重要了，那么我们平时如何说话，来表达我们的思维也十分关键。书中后续进一步讲到，模糊的语言定义是非常有害的，“<em>迷糊的含义就像一锅粥或者一团糨糊，既不能提供可供分析的内容，也无法支持其他观点，既无法接受检验，<u><strong>也不用承担责任</strong></u>。</em>”</p> <p>承担责任这点非常微妙，当我们说“好像”、“似乎”等词语时，潜在地意思就是，我们不必为我们说的这句话承担全部责任，毕竟丑言在先了。这样的表达，也会让我们不够有责任感，不够主动。当然生活中确实会有不确定的情况，但我们应该有诚意去尽量消除不确定性。</p> <p>《非暴力沟通》里也有类似的语言的责任感的说法。这本书说是沟通，但其实更多的是在讲如何对内做好自己，然后才是对外沟通。这本书里有提到语言会让人逃避。例如，人们会说“我不得不这么做”，这样说的潜台词就是，自己是迫不得已的，自己无需为自己的行为负责；但每个人都有主导自己任何行为的权利，需要为自己的任何行为负责。这样说会丧失自己的责任感和主动性。换作“我选择这么做，是因为...”的想法或语言，就会好很多。</p> <p>在减轻模糊表达后，我给AI agent指令时觉得思维清晰了不少，因为把责任更多地潜在地划到了我这边，而非AI那边。我对我自己的语言负责。而就在前几天，我还挣扎在vibe coding时头晕目眩、头脑不清晰当中。自己之前vibe coding遇到的很大的一个问题，是和AI agent等、靠、要，自己不够思维独立。增加了这个小细节后，有增加独立性的可能性。</p> <p>但这是今天的一份突然感受，后续将会持续在日常生活和vibe coding中注意这个细节，观察是否真的有效。</p>]]></content><author><name></name></author><category term="生活随笔"/><summary type="html"><![CDATA[今日灵光一闪时刻，感受到了不使用模糊语言的好处，语言精准后，感觉思维活跃了很多，也能更加为自己的思想负责了。]]></summary></entry><entry><title type="html">[网络领域顶会追踪系列#34][SIGCOMM’22]SPRIGHT：从无服务计算中抽离服务器！基于eBPF的高性能事件驱动和共享内存处理</title><link href="https://ma-tie.github.io/blog/2022/zhihu-577422093/" rel="alternate" type="text/html" title="[网络领域顶会追踪系列#34][SIGCOMM’22]SPRIGHT：从无服务计算中抽离服务器！基于eBPF的高性能事件驱动和共享内存处理"/><published>2022-10-26T05:07:53+00:00</published><updated>2022-10-26T05:07:53+00:00</updated><id>https://ma-tie.github.io/blog/2022/zhihu-577422093</id><content type="html" xml:base="https://ma-tie.github.io/blog/2022/zhihu-577422093/"><![CDATA[<blockquote> <p>本系列为个人论文阅读笔记，大多数应该是对顶会摘要的个人菜鸟翻译，旨在让感兴趣的朋友能快速浏览、获取信息。如有错误或心得，欢迎在评论区交流指正！</p> </blockquote> <h2 id="spright-extracting-the-server-from-serverless-computing-high-performance-ebpf-based-event-driven-shared-memory-processing">SPRIGHT: Extracting the Server from Serverless Computing! High performance eBPF-based Event-driven, Shared-memory Processing</h2> <p>作者单位：University of California, Riverside, CA</p> <h2 id="背景">背景</h2> <p>无服务计算在云环境上保证了一种高效、低开销的计算能力。</p> <h2 id="挑战">挑战</h2> <p>然而，现有的解决方案，被开源平台如Knative集成，包含了破坏无服务计算的这个目标的重量级组件。</p> <p>此外，这样的无服务平台缺少数据面的优化，以实现可促进著名的微服务开发范例的高效、高性能的服务链。它们使用的用于构建服务功能链的没必要的复杂和重复的能力严重地降低了性能。</p> <h2 id="工作">工作</h2> <p>作者设计了SPRIGHT，一种轻量级、高性能、响应式的无服务框架。</p> <p>SPRIGHT利用共享内存处理，并且戏剧性的通过避免没必要的协议处理和序列化/反序列化开销，提升了数据面的扩展性。</p> <p>SPRIGHT广泛地使用eBPF进行事件驱动的处理。作者创造性的使用eBPF的socket消息机制来支持共享内存处理，其开销严格的与负载成比例。</p> <p>在真实的负载下，与不间断的运行、基于轮询的DPDK相比，SPRIGHT能够在使用10倍少的CPU使用量的情况下，实现相同的数据面性能。</p> <p>除此之外，eBPF通过代替重量级的无服务组件让SPRIGHT变好，让作者能够在开销可以忽略的情况下，保持函数“暖”（warm）。</p> <h2 id="实验">实验</h2> <p>作者的初步实验结果表明，与Knative相比，SPRIGHT在吞吐和时延上有一个数量级的提升，同时实质上减少了CPU的用量，并且避免了“冷启动”的需求。</p> <h3 id="原文摘要">原文摘要</h3> <p>Serverless computing promises an efficient, low-cost compute capability in cloud environments. However, existing solutions, epitomized by open-source platforms such as Knative, include heavyweight components that undermine this goal of serverless computing. Additionally, such serverless platforms lack dataplane optimizations to achieve efficient, high-performance function chains that facilitate the popular microservices development paradigm. Their use of unnecessarily complex and duplicate capabilities for building function chains severely degrades performance. 'Cold-start' latency is another deterrent.</p> <p>We describe SPRIGHT, a lightweight, high-performance, responsive serverless framework. SPRIGHT exploits shared memory processing and dramatically improves the scalability of the dataplane by avoiding unnecessary protocol processing and serialization-deserialization overheads. SPRIGHT extensively leverages event-driven processing with the extended Berkeley Packet Filter (eBPF). We creatively use eBPF's socket message mechanism to support shared memory processing, with overheads being strictly load-proportional. Compared to constantly-running, polling-based DPDK, SPRIGHT achieves the same dataplane performance with 10× less CPU usage under realistic workloads. Additionally, eBPF benefits SPRIGHT, by replacing heavyweight serverless components, allowing us to keep functions 'warm' with negligible penalty.</p> <p>Our preliminary experimental results show that SPRIGHT achieves <em>an order of magnitude</em> improvement in throughput and latency compared to Knative, while substantially reducing CPU usage, and obviates the need for 'cold-start'.</p>]]></content><author><name></name></author><category term="技术札记"/><category term="网络领域顶会追踪"/><category term="计算机网络"/><category term="论文阅读"/><category term="SIGCOMM"/><summary type="html"><![CDATA[本系列为个人论文阅读笔记，大多数应该是对顶会摘要的个人菜鸟翻译，旨在让感兴趣的朋友能快速浏览、获取信息。如有错误或心得，欢迎在评论区交流指正！]]></summary></entry><entry><title type="html">[网络领域顶会追踪系列#33][SIGCOMM’22]Flash：针对大规模网络设置的快速、一致数据面验证技术</title><link href="https://ma-tie.github.io/blog/2022/zhihu-576828314/" rel="alternate" type="text/html" title="[网络领域顶会追踪系列#33][SIGCOMM’22]Flash：针对大规模网络设置的快速、一致数据面验证技术"/><published>2022-10-24T11:23:50+00:00</published><updated>2022-10-24T11:23:50+00:00</updated><id>https://ma-tie.github.io/blog/2022/zhihu-576828314</id><content type="html" xml:base="https://ma-tie.github.io/blog/2022/zhihu-576828314/"><![CDATA[<blockquote> <p>本系列为个人论文阅读笔记，大多数应该是对顶会摘要的个人菜鸟翻译，旨在让感兴趣的朋友能快速浏览、获取信息。如有错误或心得，欢迎在评论区交流指正！</p> </blockquote> <h2 id="flash-fast-consistent-data-plane-verification-for-large-scale-network-settings">Flash: Fast, Consistent Data Plane Verification for Large-Scale Network Settings</h2> <p>作者单位：同济大学、四川大学、厦门大学、meta、耶鲁大学</p> <h2 id="背景">背景</h2> <p>数据面验证是减少网络中断的重要技术，研究者已经在实现快速数据面验证上取得了巨大的进步。</p> <h2 id="挑战">挑战</h2> <p>然而，当作者应用数据面验证技术至大规模网络时，由于极端出现了两个问题。</p> <ul> <li>现有的技术无法处理过于快的到达速度，作者称之为_更新风暴_，许多数据面更新必须在短时间内完成。</li> <li>现有的技术无法很好的处理到达过慢的包，作者称之为_长尾更新到达_，一些交换机的更新花费很长时间到达。</li> </ul> <h2 id="工作">工作</h2> <p>作者提出Flash，一个可实现快速、一致数据面验证的新型系统，其更新到达包含更新风暴、长尾更新到达、或二者皆有。</p> <p>特别地，Flash引入了一种叫做_快速反转模型传送_的新技术，该技术可以快速地传输一大块规则更新到一块_无冲突的更新_，来高效地处理更新风暴。</p> <p>Flash也引入了一致、高效、提前探测，一个系统的机制和相关的新型算法来用不完整的信息检测数据面违规行为，来避免被长尾到达延迟。</p> <h2 id="实验">实验</h2> <p>作者完全实现了Flash并在不同的设置下进行了广泛的实验。</p> <p>使用一个大规模网络的数据面，作者表明和最先进的per-update更新系统相比，Flash快了9000倍。</p> <h3 id="原文摘要">原文摘要</h3> <p>Data plane verification can be an important technique to reduce network disruptions, and researchers have recently made significant progress in achieving fast data plane verification. However, as we apply existing data plane verification techniques to large-scale networks, two problems appear due to extremes. First, existing techniques cannot handle too-fast arrivals, which we call <em>update storms</em>, when a large number of data plane updates must be processed in a short time. Second, existing techniques cannot handle well too-slow arrivals, which we call <em>long-tail update arrivals</em>, when the updates from a number of switches take a long time to arrive.</p> <p>This paper presents Flash, a novel system that achieves fast, consistent data plane verification when update arrivals can include update storms, long-tail update arrivals, or both. In particular, Flash introduces a novel technique called <em>fast inverse model transformation</em> to swiftly transform a large block of rule updates to a block of <em>conflict-free updates</em> to efficiently handle update storms. Flash also introduces <em>consistent, efficient, early detection</em>, a systematic mechanism and associated novel algorithms to detect data plane violations with incomplete information, to avoid being delayed by long-tail arrivals. We fully implement Flash and conduct extensive evaluations under various settings. Using the data plane of a large-scale network, we show that compared with state-of-the-art sequential per-update verification systems, Flash is 9,000x faster.</p>]]></content><author><name></name></author><category term="技术札记"/><category term="网络领域顶会追踪"/><category term="计算机网络"/><category term="论文阅读"/><category term="SIGCOMM"/><summary type="html"><![CDATA[本系列为个人论文阅读笔记，大多数应该是对顶会摘要的个人菜鸟翻译，旨在让感兴趣的朋友能快速浏览、获取信息。如有错误或心得，欢迎在评论区交流指正！]]></summary></entry><entry><title type="html">[网络领域顶会追踪系列#32][SIGCOMM’22]Meissa：面向可编程数据面的可扩展网络测试</title><link href="https://ma-tie.github.io/blog/2022/zhihu-575841857/" rel="alternate" type="text/html" title="[网络领域顶会追踪系列#32][SIGCOMM’22]Meissa：面向可编程数据面的可扩展网络测试"/><published>2022-10-21T05:29:24+00:00</published><updated>2022-10-21T05:29:24+00:00</updated><id>https://ma-tie.github.io/blog/2022/zhihu-575841857</id><content type="html" xml:base="https://ma-tie.github.io/blog/2022/zhihu-575841857/"><![CDATA[<blockquote> <p>本系列为个人论文阅读笔记，大多数应该是对顶会摘要的个人菜鸟翻译，旨在让感兴趣的朋友能快速浏览、获取信息。如有错误或心得，欢迎在评论区交流指正！</p> </blockquote> <h2 id="meissa-scalable-network-testing-for-programmable-data-planes">Meissa: Scalable Network Testing for Programmable Data Planes</h2> <p>作者单位：北大、阿里巴巴</p> <h3 id="背景">背景</h3> <p>确保可编程数据面的重要性很重要。测试（Testing）提供了全面的正确性检查，包含检查代码BUG和非代码BUG。</p> <h3 id="挑战">挑战</h3> <p>然而，可扩展性是测试生产级规模的数据面的一个核心挑战，以实现高覆盖性。</p> <h3 id="工作">工作</h3> <p>本文提出了Meissa，一种针对可编程数据面的可扩展网络测试系统，有着全路径覆盖。</p> <p>Meissa的核心是指定域的代码总结（code summary）技术，简化了数据面程序的控制流图，可在不牺牲覆盖的情况下进行规模测试。</p> <p>代码总结将数据面程序解耦为若干pipeline，并且使用一个简洁的表示总结每个pipeline。</p> <p>作者正式地证明了有代码总结的Meissa实现了100%的路径覆盖。</p> <h3 id="实验">实验</h3> <p>作者使用开源和生产级规模的数据面程序来评估Meissa。</p> <p>评估表明：</p> <ul> <li>Messia可以测试不被当前最新工作所支持的生产级规模的数据面程序</li> <li>除P4代码BUG外，Messia不仅能识别已知的非代码BUG，还能检测之前不知道的非代码BUG。</li> </ul> <p>作者也展示了一些Messia在生产级可编程数据面的真实用例。</p> <h3 id="原文摘要">原文摘要</h3> <p>Ensuring the correctness of programmable data planes is important. Testing offers comprehensive correctness checking, including detecting both code bugs and non-code bugs. However, scalability is a key challenge for testing production-scale data planes to achieve high coverage. This paper presents Meissa, a_scalable_network testing system for programmable data planes with_full_path coverage. The core of Meissa is a domain-specific_code summary_technique that simplifies the control flow graph of a data plane program for scalable testing without sacrificing coverage. Code summary decomposes a data plane program into individual pipelines, and summarizes each pipeline with a succinct representation. We formally prove that Meissa with code summary achieves_100% path coverage_. We use both open-source and production-scale data plane programs to evaluate Meissa. The evaluation shows that (<em>i</em>) Meissa is able to test production-scale data plane programs that cannot be supported by state-of-the-art efforts, and_(ii)_besides P4 code bugs, Meissa is able to not only identify known non-code bugs, but also detect previously-unknown non-code bugs. We also share in this paper several real cases tested by Meissa in a production programmable data plane.</p>]]></content><author><name></name></author><category term="技术札记"/><category term="网络领域顶会追踪"/><category term="计算机网络"/><category term="论文阅读"/><category term="SIGCOMM"/><summary type="html"><![CDATA[本系列为个人论文阅读笔记，大多数应该是对顶会摘要的个人菜鸟翻译，旨在让感兴趣的朋友能快速浏览、获取信息。如有错误或心得，欢迎在评论区交流指正！]]></summary></entry><entry><title type="html">[网络领域顶会追踪系列#31][ATC’22]AddrMiner：一个全面的全球活跃IPv6地址发现系统</title><link href="https://ma-tie.github.io/blog/2022/zhihu-575025162/" rel="alternate" type="text/html" title="[网络领域顶会追踪系列#31][ATC’22]AddrMiner：一个全面的全球活跃IPv6地址发现系统"/><published>2022-10-19T02:30:55+00:00</published><updated>2022-10-19T02:30:55+00:00</updated><id>https://ma-tie.github.io/blog/2022/zhihu-575025162</id><content type="html" xml:base="https://ma-tie.github.io/blog/2022/zhihu-575025162/"><![CDATA[<blockquote> <p>本系列为个人论文阅读笔记，大多数应该是对顶会摘要的个人菜鸟翻译，旨在让感兴趣的朋友能快速浏览、获取信息。如有错误或心得，欢迎在评论区交流指正！</p> </blockquote> <h2 id="addrminer-a-comprehensive-global-active-ipv6-address-discovery-system">AddrMiner: A Comprehensive Global Active IPv6 Address Discovery System</h2> <p>作者单位：BNRist，清华大学，泉城实验室，北京交通大学</p> <h2 id="背景">背景</h2> <p>快速的互联网范围（Internet-wide）扫描对网络态势感知和资产评估十分重要。</p> <h2 id="挑战">挑战</h2> <p>然而，广阔的IPv6地址空间让暴力搜索变得不可行。尽管最先进的技术已经做了有效的尝试，这些方法还是不能在无种子区域（seedless regions）上生效，且探测效率在有种区域上较低。</p> <h2 id="工作实验">工作&amp;实验</h2> <p>本文介绍了AddrMiner，一种系统和全面的全球活跃IPv6地址探测系统。作者将IPv6地址空间域根据种子地址的数量分为了三类，以从无到有、从少到多的发现活跃的IPv6地址。</p> <p>对于没有种子的区域，作者提出AddrMiner-N，使用一个组织相关策略来发掘活跃IP地址。它填充了在无种子域中地址探测的间隔，发现覆盖被BGP宣告的86.4K个IPv6前缀，占被探测前缀的81.6%。</p> <p>对于种子较少的区域，作者提出AddrMiner-F，利用相似的匹配策略来进一步探测活跃的IP地址。活跃IP地址探测的命中率相较于现有的算法，提升了70%~150%。</p> <p>对于充足种子的区域，作者提出了AddrMiner-S来基于强化学习动态地产生目标地址。它相比于最先进的算法几乎提升了一倍的命中率。</p> <p>最后，作者部署了AddrMiner并且通过持续13个月的探测，发现了2.1亿个活跃的IPv6地址，包括1.7亿个去别名（de-aliased）的活跃地址和0.5亿个别名地址。作者想要通过发布AddrMiner且共享他们的数据，来为公众进一步开启IPv6测量研究的大门。</p> <h3 id="原文摘要">原文摘要</h3> <p>Fast Internet-wide scanning is essential for network situational awareness and asset evaluation. However, the vast IPv6 address space makes brute-force scanning infeasible. Although state-of-the-art techniques have made effective attempts, these methods do not work in seedless regions, while the detection efficiency is low in regions with seeds. Moreover, the constructed hitlists with low coverage cannot truly represent the active IPv6 address landscape of the Internet.</p> <p>This paper introduces AddrMiner, a global active IPv6 address probing system, making IPv6 active address probing systematic, comprehensive, and economical. We divide the IPv6 address space regions into three kinds according to the number of seed addresses and propose a probing algorithm for each of them. For the regions with no seeds, we propose AddrMiner-N, leveraging an organization association strategy to mine active addresses. It finds active addresses covering 86.4K BGP prefixes, accounting for 81.6\% of the probed BGP prefixes. For the regions with few seeds, we propose AddrMiner-F, utilizing a similarity matching strategy to probe active addresses further. The hit rate of active address probing is improved by 70\%-150\% compared to existing algorithms. For the regions with sufficient seeds, we propose AddrMiner-S to generate target addresses based on reinforcement learning dynamically. It nearly doubles the hit rate compared to the state-of-the-art algorithms. Finally, we deploy AddrMiner and discover 2.1 billion active IPv6 addresses, including 1.7 billion de-aliased active addresses and 0.4 billion aliased addresses, through continuous probing for 13 months. We would like to further open the door of IPv6 measurement studies by publicly releasing AddrMiner and sharing our data.</p>]]></content><author><name></name></author><category term="技术札记"/><category term="网络领域顶会追踪"/><category term="计算机网络"/><category term="论文阅读"/><category term="ATC"/><summary type="html"><![CDATA[本系列为个人论文阅读笔记，大多数应该是对顶会摘要的个人菜鸟翻译，旨在让感兴趣的朋友能快速浏览、获取信息。如有错误或心得，欢迎在评论区交流指正！]]></summary></entry><entry><title type="html">[网络领域顶会追踪系列#30][ATC’22]没那么简单：21世纪的email发送</title><link href="https://ma-tie.github.io/blog/2022/zhihu-574670054/" rel="alternate" type="text/html" title="[网络领域顶会追踪系列#30][ATC’22]没那么简单：21世纪的email发送"/><published>2022-10-18T02:48:16+00:00</published><updated>2022-10-18T02:48:16+00:00</updated><id>https://ma-tie.github.io/blog/2022/zhihu-574670054</id><content type="html" xml:base="https://ma-tie.github.io/blog/2022/zhihu-574670054/"><![CDATA[<blockquote> <p>本系列为个人论文阅读笔记，大多数应该是对顶会摘要的个人菜鸟翻译，旨在让感兴趣的朋友能快速浏览、获取信息。如有错误或心得，欢迎在评论区交流指正！</p> </blockquote> <h2 id="not-that-simple-email-delivery-in-the-21st-century">Not that Simple: Email Delivery in the 21st Century</h2> <p>作者单位：SBA Research，University of Vienna，TU Wien，Max-Planck-Institut für Informatik</p> <h2 id="背景">背景</h2> <p>在过去二十年间，关于email及其安全性的RFC数量以及从小于100爆炸增长至接近500。这将SMTP协议（Simple Mail Transfer Protocol）嵌入到一个相互依存且与交付有关的标准的树中。</p> <h2 id="工作">工作</h2> <p>在本文中，作者调查了真实世界的部署与这些日益复杂的交付和安全选择间的跟进情况。</p> <p>为深入了解除生态中的巨头（Gmail、Outlook等）email发送的情况，作者让人们向11个不太的配置好的目标域发送email。</p> <p>作者的测量允许他们评估email发送的核心方面，包括安全特性、DNS配置和在不同类型的提供商在IP版本支持方面的情况。</p> <h2 id="实验">实验</h2> <p>作者发现新技术通常没有被充分支持，即使是在大型提供商那。</p> <p>例如，在65.4%的email提供商能够通过IPv6解析主机的同时，只有44.3%可以通过IPv6发送邮件。</p> <p>考虑安全特性，作者注意到少于一半（41.5%）的提供商依赖于DNSSEC验证解析器，并且加密大多是机会主义的（opportunistic），89.7%的提供商接受无效的证书。TLSA，作为一种基于DNS的证书验证方法，在作者的研究中仅仅被31.7%的提供商所使用。</p> <p>最后，作者将注意力放在了现代标准对大量不请自来（unsolicited）的邮件（SPAM）的影响。作者发现灰名单是很有效的，在不影响正常发送的情况下，能够减少几乎一半的SPAM。然而，有趣的是，SPAM发送现在似乎聚焦于明文IPv4链接，让仅支持IPv6、强制TLS的入向email服务器为一个更加高效的反SPAM措施----尽管它也意味着拒绝大多数合法email。</p> <h3 id="原文摘要">原文摘要</h3> <p>Over the past two decades, the number of RFCs related to email and its security has exploded from below 100 to nearly 500. This embedded the Simple Mail Transfer Protocol (SMTP) into a tree of interdependent and delivery-relevant standards. In this paper, we investigate how far real-world deployments keep up with this increasing complexity of delivery- and security options. To gain an in-depth picture of email delivery apart from the giants in the ecosystem (Gmail, Outlook, etc.), we engage people to send emails to eleven differently configured target domains. Our measurements allow us to evaluate core aspects of email delivery, including security features, DNS configuration, and IP version support on the sending side across different types of providers.</p> <p>We find that novel technologies are often insufficiently supported, even by large providers. For example, while 65.4\% of email providers can resolve hosts via IPv6, only 44.3\% can also deliver emails via IPv6. Concerning security features, we observe that less than half (41.5\%) of all providers rely on DNSSEC validating resolvers, and encryption is mostly opportunistic, with 89.7\% of providers accepting invalid certificates. TLSA, as a DNS-based certificate verification method, is only used by 31.7\% of the providers in our study. Finally, we turned our eye to the impact modern standards have on unsolicited bulk email (SPAM). We found that greylisting is effective, reducing the SPAM volume by roughly half while not impacting regular delivery. However, and interestingly, SPAM delivery currently seems to focus on plaintext IPv4 connections, making IPv6-only, TLS-enforcing inbound email servers a more effective anti-SPAM measure – even though it also means rejecting a major portion of legitimate emails.</p>]]></content><author><name></name></author><category term="技术札记"/><category term="网络领域顶会追踪"/><category term="计算机网络"/><category term="论文阅读"/><category term="ATC"/><summary type="html"><![CDATA[本系列为个人论文阅读笔记，大多数应该是对顶会摘要的个人菜鸟翻译，旨在让感兴趣的朋友能快速浏览、获取信息。如有错误或心得，欢迎在评论区交流指正！]]></summary></entry><entry><title type="html">[网络领域顶会追踪系列#29][ATC’22]为高性能网络仿真选择 Linux 进程</title><link href="https://ma-tie.github.io/blog/2022/zhihu-574444994/" rel="alternate" type="text/html" title="[网络领域顶会追踪系列#29][ATC’22]为高性能网络仿真选择 Linux 进程"/><published>2022-10-17T08:32:21+00:00</published><updated>2022-10-17T08:32:21+00:00</updated><id>https://ma-tie.github.io/blog/2022/zhihu-574444994</id><content type="html" xml:base="https://ma-tie.github.io/blog/2022/zhihu-574444994/"><![CDATA[<h2 id="co-opting-linux-processes-for-high-performance-network-simulation">Co-opting Linux Processes for High-Performance Network Simulation</h2> <p>作者单位：Naval Research Laboratory，Tor Project，Georgetown University</p> <h2 id="背景">背景</h2> <p>网络实验工具在开发、评估、测试分布式系统的过程中非常重要。</p> <h2 id="挑战">挑战</h2> <p>最先进的仿真（simulation）工具要么在大规模时非常低效率，要么被不可忽视的架构挑战所限制，阻止了其广泛使用。</p> <h2 id="工作">工作</h2> <p>在本文中，作者提出了Phantom（与Shadow v2是一回事，但本文中使用Phantom作为方案）的设计和实现，Phantom是进行分布式系统实验的新型工具。</p> <p>在Phantom，一个离散事件网络仿真器直接将未经修改的应用程序作为Linux进程执行，并创新地综合了高效进程控制、系统调用interposition和数据传输方法，以将进程融合进仿真环境中。</p> <h2 id="实验">实验</h2> <p>实验表明，在大规模P2P基准测试中，在 Phantom最多比Shadow快2.2倍，最多比NS-3快3.4倍，最多比gRaIL快43倍，同时在大型ToR网络仿真中，提供了与Shadow相似的性能。</p> <h3 id="原文摘要">原文摘要</h3> <p>Network experimentation tools are vitally important to the process of developing, evaluating, and testing distributed systems. The state-of-the-art simulation tools are either prohibitively inefficient at large scales or are limited by nontrivial architectural challenges, inhibiting their widespread adoption. In this paper, we present the design and implementation of Phantom, a novel tool for conducting distributed system experiments. In Phantom, a discrete-event network simulator directly executes unmodified applications as Linux processes and innovatively synthesizes efficient process control, system call interposition, and data transfer methods to co-opt the processes into the simulation environment. Our evaluation demonstrates that Phantom is up to 2.2× faster than Shadow, up to 3.4× faster than NS-3, and up to 43× faster than gRaIL in large P2P benchmarks while offering performance comparable to Shadow in large Tor network simulations.</p>]]></content><author><name></name></author><category term="技术札记"/><category term="网络领域顶会追踪"/><category term="计算机网络"/><category term="论文阅读"/><category term="ATC"/><summary type="html"><![CDATA[Co-opting Linux Processes for High-Performance Network Simulation]]></summary></entry><entry><title type="html">【CCF-CSP】202203-2. 出行计划</title><link href="https://ma-tie.github.io/blog/2022/ccf-csp-202203-2-%E5%87%BA%E8%A1%8C%E8%AE%A1%E5%88%92/" rel="alternate" type="text/html" title="【CCF-CSP】202203-2. 出行计划"/><published>2022-09-26T11:47:00+00:00</published><updated>2022-09-26T11:47:00+00:00</updated><id>https://ma-tie.github.io/blog/2022/ccf-csp-202203-2-%E5%87%BA%E8%A1%8C%E8%AE%A1%E5%88%92</id><content type="html" xml:base="https://ma-tie.github.io/blog/2022/ccf-csp-202203-2-%E5%87%BA%E8%A1%8C%E8%AE%A1%E5%88%92/"><![CDATA[<p><span id="题目内容"></span></p> <h1 id="题目内容">题目内容</h1> <p>【CCF-CSP】202203-2. 出行计划</p> <p><span id="思路分析"></span></p> <h1 id="思路分析">思路分析</h1> <p><span id="方法一：普通法（仅能获得70分）"></span></p> <h2 id="方法一普通法仅能获得70分">方法一：普通法（仅能获得70分）</h2> <p><span id="思路"></span></p> <h3 id="思路">思路</h3> <p>先将出行计划（进入场所时刻、需要<code>C</code>时刻内的核酸）依次存入数组中，然后根据所查询的做核酸的时刻，依次计算出各个出行计划是否在<code>time_min</code>和<code>time_max</code>的区间内（即核酸有效期），其中：</p> <ul> <li><code>time_min</code>为出核酸的时刻，等于做核酸的时刻+等待时长</li> <li><code>time_max</code>为核酸对于该场所的过期时刻，等于做核酸的时刻+等待时长+<code>C</code></li> </ul> <p><span id="复杂度"></span></p> <h3 id="复杂度">复杂度</h3> <p>下面分析复杂度。设出行计划、查询个数、等待时间为N，且$$N\in[0, 10^5]$$，则：</p> <ul> <li>存储出行计划需要O(N)</li> <li>遍历查询并依次比较要两次遍历，因此需要O(N^2)</li> </ul> <p>所以整体的复杂度是O(N^2)，当数据量很大的时候运行会超时，因此只能获得70分。</p> <p><span id="方法二：差分数组"></span></p> <h2 id="方法二差分数组">方法二：差分数组</h2> <p><span id="思路-1"></span></p> <h3 id="思路-1">思路</h3> <p>上层思想：建立一个数组<code>A</code>，存储所有时刻上有多少场所可以进入，这里的时刻指的是出核酸的时刻。</p> <p>具体实现时，需要计算每个场所对应的可进入时间区间。如计划100时刻去某场所，而该场所要求24小时核酸，说明出核酸的时刻在100-24+1=77到100之间都是能够进入该场所的，那么就需要令A的[77,100]下标内的值都加一。</p> <p>在实现A内的部分区间统一加一时，如果使用正常的遍历区间内的元素相加，时间复杂度会达到O(N)，因此这里使用了差分数组。</p> <p><span id="差分数组"></span></p> <h3 id="差分数组">差分数组</h3> <p>差分数组就是一个对应于a[N]的数组b[N]，满足a[i] = b[1] + b[2] + … + b[i]，设置这样的数组后，“部分区间统一加一”的这个操作复杂度就能由O(N)降为O(1)。例如，区间[3,6]统一加一，只需令b[3]+1，b[7]+1，这样a的对应区间就是全部加一的。</p> <p><span id="复杂度-1"></span></p> <h3 id="复杂度-1">复杂度</h3> <p>依然设出行计划、查询个数、等待时间为N，且$$N\in[0, 10^5]$$，则：</p> <ul> <li>遍历出行计划并维护数组A，O(N)</li> <li>将差分数组整理为正常数组，O(K)，其中$$K=4*10^5+1$$</li> <li>遍历查询并直接输出结果，O(N)</li> </ul> <p>所以整体复杂度是O(N)，虽然K的值较大，但和庞大的O(N^2)比起来不值一提。</p> <p><span id="代码"></span></p> <h1 id="代码">代码</h1> <p><span id="方法一"></span></p> <h2 id="方法一">方法一</h2> <div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code data-lang="cpp"><span class="cp">#include</span><span class="cpf">&lt;iostream&gt;</span><span class="cp">
#include</span><span class="cpf">&lt;vector&gt;</span><span class="cp">
</span>
<span class="c1">// 70分</span>

<span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>

<span class="k">struct</span> <span class="nc">Plan</span> <span class="p">{</span>
    <span class="kt">int</span> <span class="n">ptime</span><span class="p">;</span>
    <span class="kt">int</span> <span class="n">interval_require</span><span class="p">;</span>
<span class="p">};</span>

<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
    <span class="kt">int</span> <span class="n">plan_num_n</span><span class="p">,</span> <span class="n">query_num_m</span><span class="p">,</span> <span class="n">wait_time_k</span><span class="p">;</span>

    <span class="n">cin</span> <span class="o">&gt;&gt;</span> <span class="n">plan_num_n</span> <span class="o">&gt;&gt;</span> <span class="n">query_num_m</span> <span class="o">&gt;&gt;</span> <span class="n">wait_time_k</span><span class="p">;</span>

    <span class="k">struct</span> <span class="nc">Plan</span> <span class="n">plan</span><span class="p">;</span>
    <span class="n">vector</span><span class="o">&lt;</span><span class="k">struct</span> <span class="nc">Plan</span><span class="o">&gt;</span> <span class="n">plans</span><span class="p">;</span>
    <span class="kt">int</span> <span class="n">queried_time</span><span class="p">,</span> <span class="n">time_min</span><span class="p">,</span> <span class="n">time_max</span><span class="p">;</span>
    <span class="kt">int</span> <span class="n">query_result</span><span class="p">;</span>

    <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span> <span class="n">i</span><span class="o">&lt;</span><span class="n">plan_num_n</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
        <span class="n">cin</span> <span class="o">&gt;&gt;</span> <span class="n">plan</span><span class="p">.</span><span class="n">ptime</span> <span class="o">&gt;&gt;</span> <span class="n">plan</span><span class="p">.</span><span class="n">interval_require</span><span class="p">;</span>
        <span class="n">plans</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">plan</span><span class="p">);</span>
    <span class="p">}</span>

    <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span> <span class="n">i</span><span class="o">&lt;</span><span class="n">query_num_m</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
        <span class="n">query_result</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
        <span class="n">cin</span> <span class="o">&gt;&gt;</span> <span class="n">queried_time</span><span class="p">;</span>
        <span class="n">time_min</span> <span class="o">=</span> <span class="n">queried_time</span> <span class="o">+</span> <span class="n">wait_time_k</span><span class="p">;</span>
        <span class="k">for</span><span class="p">(</span><span class="k">struct</span> <span class="nc">Plan</span> <span class="n">plan</span> <span class="o">:</span> <span class="n">plans</span><span class="p">)</span> <span class="p">{</span>
            <span class="k">if</span> <span class="p">(</span><span class="n">plan</span><span class="p">.</span><span class="n">ptime</span> <span class="o">&gt;=</span> <span class="n">time_min</span> <span class="o">&amp;&amp;</span> <span class="n">plan</span><span class="p">.</span><span class="n">ptime</span> <span class="o">&lt;=</span> <span class="n">queried_time</span> <span class="o">+</span> \
                    <span class="n">wait_time_k</span> <span class="o">+</span> <span class="n">plan</span><span class="p">.</span><span class="n">interval_require</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
                <span class="n">query_result</span> <span class="o">+=</span> <span class="mi">1</span><span class="p">;</span>
            <span class="p">}</span>
        <span class="p">}</span>
        <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">query_result</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span>
    <span class="p">}</span>

    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div> <p><span id="方法二"></span></p> <h2 id="方法二">方法二</h2> <div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code data-lang="cpp"><span class="cp">#include</span><span class="cpf">&lt;iostream&gt;</span><span class="cp">
#include</span><span class="cpf">&lt;vector&gt;</span><span class="cp">
</span>
<span class="c1">// 100分</span>
<span class="c1">// 满分题解：https://www.cfanz.cn/mobile/resource/detail/NGMVowMgZLjZJ</span>
<span class="c1">// 差分算法：https://www.jianshu.com/p/444096786e49</span>

<span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>

<span class="k">const</span> <span class="kt">int</span> <span class="n">TIME_NUM_N</span> <span class="o">=</span> <span class="mf">4e5</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">time2placenum</span><span class="p">[</span><span class="n">TIME_NUM_N</span><span class="p">];</span> <span class="c1">// 差分数组，表示某时刻下可进入场所的个数</span>

<span class="c1">// 将数组的[left, right]之间的值都加上value</span>
<span class="kr">inline</span> <span class="kt">void</span> <span class="nf">increase_diff_array</span><span class="p">(</span><span class="kt">int</span> <span class="n">left</span><span class="p">,</span> <span class="kt">int</span> <span class="n">right</span><span class="p">,</span> <span class="kt">int</span> <span class="n">value</span><span class="p">)</span> <span class="p">{</span>
    <span class="n">time2placenum</span><span class="p">[</span><span class="n">left</span><span class="p">]</span> <span class="o">+=</span> <span class="n">value</span><span class="p">;</span>
    <span class="n">time2placenum</span><span class="p">[</span><span class="n">right</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">-=</span> <span class="n">value</span><span class="p">;</span>
<span class="p">}</span>

<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
    <span class="kt">int</span> <span class="n">plan_num_n</span><span class="p">,</span> <span class="n">query_num_m</span><span class="p">,</span> <span class="n">wait_time_k</span><span class="p">;</span>

    <span class="n">cin</span> <span class="o">&gt;&gt;</span> <span class="n">plan_num_n</span> <span class="o">&gt;&gt;</span> <span class="n">query_num_m</span> <span class="o">&gt;&gt;</span> <span class="n">wait_time_k</span><span class="p">;</span>

    <span class="kt">int</span> <span class="n">place_time_t</span><span class="p">,</span> <span class="n">interval_c</span><span class="p">;</span>
    <span class="kt">int</span> <span class="n">queried_time</span><span class="p">,</span> <span class="n">time_min</span><span class="p">,</span> <span class="n">time_max</span><span class="p">;</span>

    <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span> <span class="n">i</span><span class="o">&lt;</span><span class="n">plan_num_n</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
        <span class="n">cin</span> <span class="o">&gt;&gt;</span> <span class="n">place_time_t</span> <span class="o">&gt;&gt;</span> <span class="n">interval_c</span><span class="p">;</span>
        <span class="n">time_min</span> <span class="o">=</span> <span class="n">max</span><span class="p">(</span><span class="n">place_time_t</span> <span class="o">-</span> <span class="n">interval_c</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
        <span class="n">time_max</span> <span class="o">=</span> <span class="n">place_time_t</span><span class="p">;</span>
        <span class="n">increase_diff_array</span><span class="p">(</span><span class="n">time_min</span><span class="p">,</span> <span class="n">time_max</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
    <span class="p">}</span>

    <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span><span class="o">=</span><span class="mi">1</span><span class="p">;</span> <span class="n">i</span><span class="o">&lt;</span><span class="n">TIME_NUM_N</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
        <span class="n">time2placenum</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+=</span> <span class="n">time2placenum</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">];</span>
    <span class="p">}</span>

    <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span> <span class="n">i</span><span class="o">&lt;</span><span class="n">query_num_m</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
        <span class="n">cin</span> <span class="o">&gt;&gt;</span> <span class="n">queried_time</span><span class="p">;</span>
        <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">time2placenum</span><span class="p">[</span><span class="n">queried_time</span> <span class="o">+</span> <span class="n">wait_time_k</span><span class="p">]</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span>
    <span class="p">}</span>

    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div> <p><span id="收获"></span></p> <h1 id="收获">收获</h1> <p>以前一直觉得算法没卵用，今天这个例子是生活中确实存在的，用一些算法上的例子就能让程序的运行快上不少，证明算法还是有点卵用。</p> <p>当然，这里假设时间是有限的，现实中可能做不到这样。</p>]]></content><author><name></name></author><category term="技术札记"/><category term="差分"/><category term="CCF-CSP"/><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">[网络领域顶会追踪系列#28][SIGCOMM’22]DeepQueueNet：实现具有数据包粒度可见性的可扩展和通用网络性能估计</title><link href="https://ma-tie.github.io/blog/2022/zhihu-564323492/" rel="alternate" type="text/html" title="[网络领域顶会追踪系列#28][SIGCOMM’22]DeepQueueNet：实现具有数据包粒度可见性的可扩展和通用网络性能估计"/><published>2022-09-14T08:03:34+00:00</published><updated>2022-09-14T08:03:34+00:00</updated><id>https://ma-tie.github.io/blog/2022/zhihu-564323492</id><content type="html" xml:base="https://ma-tie.github.io/blog/2022/zhihu-564323492/"><![CDATA[<blockquote> <p>本系列为个人论文阅读笔记，大多数应该是对顶会摘要的个人菜鸟翻译，旨在让感兴趣的朋友能快速浏览、获取信息。如有错误或心得，欢迎在评论区交流指正！</p> </blockquote> <h2 id="deepqueuenet-towards-scalable-and-generalized-network-performance-estimation-with-packet-level-visibility">DeepQueueNet: Towards Scalable and Generalized Network Performance Estimation with Packet-level Visibility</h2> <p>作者单位：华为理论实验室、中关村实验室、香港中文大学、山东计算机科学中心（济南国家超算中心）、多伦多大学</p> <h3 id="背景">背景</h3> <p>网络仿真器是网络操作员的必要工具，可以协助进行一些重要工作如容量规划、拓扑设计和参数调优。</p> <h3 id="挑战">挑战</h3> <p>著名的仿真器都基于离散事件仿真，并且他们的性能不随着现代网络的规模而扩展。近期，基于深度学习的技术被引入以解决规模扩展问题，但是，正如作者的实验证明，他们在仿真结果上有着较弱的可视性，并且不能在多种场景上通用。</p> <h3 id="工作">工作</h3> <p>在本文中，作者将可扩展和通用的连续仿真技术与离散事件仿真结合，以在提供包级别的可视化的同时，实现高可扩展性。</p> <p>作者从一个坚实的队列理论模型出发，小心地分辨出数学棘手的或计算昂贵的部分，并仅仅对它们使用深度神经网络（DNN）建模。</p> <p>作者的方法，DeepQueueNet，结合了网络的先验知识，支持任意拓扑和设备流量管理机制（在给定充足的流量数据的情况下）。</p> <h3 id="实验">实验</h3> <p>作者的实验表明DeepQueueNet实现了随着GPU数量近似线性的加速，并且在所有场景下，它对平均和99th RTT的估计准确性的表现优于现有的端到端性能估计器</p> <h3 id="原文摘要">原文摘要</h3> <p>Network simulators are an essential tool for network operators, and can assist important tasks such as capacity planning, topology design, and parameter tuning. Popular simulators are all based on discrete event simulation, and their performance does not scale with the size of modern networks. Recently, deep-learning-based techniques are introduced to solve the scalability problem, but, as we show with experiments, they have poor visibility in their simulation results, and cannot generalize to diverse scenarios. In this work, we combine scalable and generalized continuous simulation techniques with discrete event simulation to achieve high scalability, while providing packet-level visibility. We start from a solid queueing-theoretic modeling of modern networks, and carefully identify the mathematically-intractable or computationally-expensive parts, only which are then modeled using deep neural networks (DNN). Dubbed_DeepQueueNet_, our approach combines prior knowledge of networks, and supports arbitrary topology and device traffic management mechanisms (given sufficient training data). Our extensive experiments show that DeepQueueNet achieves near-linear speedup in the number of GPUs, and its estimation accuracy for average and 99th percentile round-trip time outperforms existing end-to-end DNN-based performance estimators in all scenarios.</p>]]></content><author><name></name></author><category term="技术札记"/><category term="网络领域顶会追踪"/><category term="计算机网络"/><category term="论文阅读"/><category term="SIGCOMM"/><summary type="html"><![CDATA[本系列为个人论文阅读笔记，大多数应该是对顶会摘要的个人菜鸟翻译，旨在让感兴趣的朋友能快速浏览、获取信息。如有错误或心得，欢迎在评论区交流指正！]]></summary></entry><entry><title type="html">[网络领域顶会追踪系列#27][SIGCOMM’22]SimBricks：使用模块化仿真评估端对端网络系统</title><link href="https://ma-tie.github.io/blog/2022/zhihu-564081083/" rel="alternate" type="text/html" title="[网络领域顶会追踪系列#27][SIGCOMM’22]SimBricks：使用模块化仿真评估端对端网络系统"/><published>2022-09-13T13:54:15+00:00</published><updated>2022-09-13T13:54:15+00:00</updated><id>https://ma-tie.github.io/blog/2022/zhihu-564081083</id><content type="html" xml:base="https://ma-tie.github.io/blog/2022/zhihu-564081083/"><![CDATA[<blockquote> <p>本系列为个人论文阅读笔记，大多数应该是对顶会摘要的个人菜鸟翻译，旨在让感兴趣的朋友能快速浏览、获取信息。如有错误或心得，欢迎在评论区交流指正！</p> </blockquote> <h2 id="simbricks-end-to-end-network-system-evaluation-with-modular-simulation">SimBricks: End-to-End Network System Evaluation with Modular Simulation</h2> <p>作者单位：德国马克斯·普朗克软件系统研究所、新加坡国立大学</p> <h3 id="背景">背景</h3> <p>物理testbed中，全系统的“端到端”测量是网络系统评估的黄金标准，但通常是不可行的。因为物理testbed不可行，我们通常使用仿真（simulation）来做评估。</p> <h3 id="挑战">挑战</h3> <p>不幸的是，现有的仿真器对于端到端仿真而言是不充分的，因为它们既不能仿真所有组件，也不能充分地仿真组件的细节。</p> <h3 id="工作">工作</h3> <p>作者通过模块化仿真来解决此问题，在为每个用例调整的虚拟端到端实验床上，针对不同的组件（包括处理器、内存、设备和网络），灵活地组合和连接多种现有的仿真器。</p> <p>作者的架构，SimBricks，结合了：</p> <ul> <li>针对可扩展性和模块化的定义良好的组件接口</li> <li>针对本地和分布式仿真的高效通信通道</li> <li>一种共同设计（co-designed）的高效同步机制，用于跨仿真器精确计时</li> </ul> <h3 id="实验">实验</h3> <p>作者展示了SimBricks可以扩展至1000个仿真主机，每个主机都运行着包括Linux在内的完整软件栈，并且它能够使用现有的NIC和交换机的RTL实现来仿真testbeds。</p> <p>作者也在SimBricks上复现了先前工作（包括拥塞控制、NIC架构、网内计算）中的核心发现。</p> <h3 id="原文摘要">原文摘要</h3> <p>Full system &quot;end-to-end&quot; measurements in physical testbeds are the gold standard for network systems evaluation but are often not feasible. When physical testbeds are not available we frequently turn to simulation for evaluation. Unfortunately, existing simulators are insufficient for end-to-end evaluation, as they either cannot simulate all components, or simulate them with inadequate detail.</p> <p>We address this through modular simulation, flexibly combining and connecting multiple existing simulators for different components, including processor and memory, devices, and network, into virtual end-to-end testbeds tuned for each use-case. Our architecture, SimBricks, combines well-defined component interfaces for extensibility and modularity, efficient communication channels for local and distributed simulation, and a co-designed efficient synchronization mechanism for accurate timing across simulators. We demonstrate SimBricks scales to 1000 simulated hosts, each running a full software stack including Linux, and that it can simulate testbeds with existing NIC and switch RTL implementations. We also reproduce key findings from prior work in congestion control, NIC architecture, and in-network computing in SimBricks.</p>]]></content><author><name></name></author><category term="技术札记"/><category term="网络领域顶会追踪"/><category term="计算机网络"/><category term="论文阅读"/><category term="SIGCOMM"/><summary type="html"><![CDATA[本系列为个人论文阅读笔记，大多数应该是对顶会摘要的个人菜鸟翻译，旨在让感兴趣的朋友能快速浏览、获取信息。如有错误或心得，欢迎在评论区交流指正！]]></summary></entry></feed>