From 21912f53d1e9a7af32bf862daf8d6be96a5d5d11 Mon Sep 17 00:00:00 2001 From: Gege-Wang <2891067867@qq.com> Date: Sun, 16 Jul 2023 13:53:12 +0800 Subject: [PATCH 01/16] article2 first commit --- ...30715-porting-riscv-ukl-translate-part3.md | 237 ++++++++++++++++++ .../translate-figure-1.PNG | Bin 0 -> 19253 bytes .../translate-figure-2.PNG | Bin 0 -> 77536 bytes .../translate-figure-3.PNG | Bin 0 -> 22508 bytes .../translate-figure-4.PNG | Bin 0 -> 65638 bytes .../translate-figure-5.PNG | Bin 0 -> 147549 bytes .../translate-figure-6.PNG | Bin 0 -> 26225 bytes .../translate-figure-7.PNG | Bin 0 -> 16636 bytes .../porting-riscv-ukl-2/translate-table-1.PNG | Bin 0 -> 23524 bytes .../porting-riscv-ukl-2/translate-table-2.PNG | Bin 0 -> 94345 bytes .../porting-riscv-ukl-2/translate-table-3.PNG | Bin 0 -> 19288 bytes 11 files changed, 237 insertions(+) create mode 100644 articles/20230715-porting-riscv-ukl-translate-part3.md create mode 100644 articles/images/porting-riscv-ukl-2/translate-figure-1.PNG create mode 100644 articles/images/porting-riscv-ukl-2/translate-figure-2.PNG create mode 100644 articles/images/porting-riscv-ukl-2/translate-figure-3.PNG create mode 100644 articles/images/porting-riscv-ukl-2/translate-figure-4.PNG create mode 100644 articles/images/porting-riscv-ukl-2/translate-figure-5.PNG create mode 100644 articles/images/porting-riscv-ukl-2/translate-figure-6.PNG create mode 100644 articles/images/porting-riscv-ukl-2/translate-figure-7.PNG create mode 100644 articles/images/porting-riscv-ukl-2/translate-table-1.PNG create mode 100644 articles/images/porting-riscv-ukl-2/translate-table-2.PNG create mode 100644 articles/images/porting-riscv-ukl-2/translate-table-3.PNG diff --git a/articles/20230715-porting-riscv-ukl-translate-part3.md b/articles/20230715-porting-riscv-ukl-translate-part3.md new file mode 100644 index 0000000..0096565 --- /dev/null +++ b/articles/20230715-porting-riscv-ukl-translate-part3.md @@ -0,0 +1,237 @@ +> Title: [Integrating Unikernel Optimizations in a General Purpose OS](https://arxiv.org/pdf/2206.00789.pdf )
+> Author: Ali Raza
+> Translator: Gege-Wang <2891067867@qq.com>
+> Date: 2023/07/14
+> Revisor: Falcon
+> Project: [RISC-V Linux 内核剖析](https://gitee.com/tinylab/riscv-linux)
+> Sponsor: PLCT Lab, ISCAS + +在通用式操作系统中集成Unikernel优化-part3 +# 评估 + +> After our experimental environment (§5.1), §5.2 discusses our experience with UKL supporting the fundamental non-performance goals of enabling Linux’s application support, HCL, and ecosystem. In Section 5.3 microbenchmarks are used to evaluate the performance of UKL on simple system calls (§5.3.1), more complex system calls (§5.3.2) and page faults (§5.3.3). We find that, while the advantage of just avoiding the hardware overhead of system calls is small, the advantage of adopting unikernel optimizations is large for simple kernel calls (e.g., 83%) and significant for page faults (e.g., 12.5%). Moreover, the improvement is significant even for expensive kernel calls that transfer 8KB of data (e.g., 24%). + +在我们的实验环境 (§5.1) 之后,§5.2 讨论了我们使用 UKL 支持的基本非性能目标的经验,包括允许 Linux 应用程序支持,HCL和生态系统。在 5.3 节中,微基准测试用于评估 UKL 在简单系统调用 (第5.3.1节)、更复杂系统调用 (第5.3.2节) 和页面错误 (第5.3.3节) 上的性能。我们发现,虽然仅仅避免系统调用的硬件开销的优势很小,但采用单内核优化的优势对于简单的内核调用很大 (例如,83%),对于页面错误也很重要 (例如,12.5%)。此外,即使对于传输 8KB 数据的昂贵内核调用 (例如,24%),这种改进也是显著的。 + +> In Section 5.4 we evaluate applying unikernel optimizations to both throughput (Redis §5.4.1, Memcached §5.4.2) and latency bound (Secrecy §5.4.3) applications. We find that configuration options provided by UKL can enable significant throughput improvements (e.g., 12%) and a simple 10 line change in Redis code results in more significant gains (e.g., 26%). The results are even more dramatic for latency-sensitive applications where configuration changes result in 15% improvement and a trivial application change enables a 100x improvement in performance. + +在 5.4 节中,我们评估将单内核优化应用于吞吐量 (Redis§5.4.1,Memcached§5.4.2) 和延迟绑定 (Secrecy§5.4.3) 的应用程序。我们发现,UKL 提供的配置选项可以显著提高吞吐量 (例如,12%),Redis 代码中简单的 10 行更改会带来更显著的收益 (例如,26%)。对于对延迟敏感的应用程序,结果更加显著,其中配置更改导致 15% 的改进,而一个微不足道的应用程序更改可以使性能提高 100 倍。 + +## 实验设置 + +> Experiments are run on Dell R620 servers configured with 128G of ram arranged as a single NUMA node. The servers have two sockets, each containing an Intel Xeon CPU E5-26600 @ 2.20GHz, with 8 real cores per socket. The processors are configured to disable Turbo Boost,hyper-threads, sleep states, and dynamic frequency scaling. The servers are connected through a 10Gb link and use Broadcom NetXtremeII BCM57800 1/10 Gigabit Ethernet NICs. Experiments run on multiple computers use identically configured machines attached to the same top of rack switch to reduce external noise. On the software side, we use Linux 5.14 kernel and glibc version 2.31. Linux and different configurations of UKL were built with same compile-time config options. We ran experiments on virtual and physical hardware and got consistent and repeatable results. In the interest of space, we only report bare-metal numbers unless stated otherwise. + +实验运行 Dell R620 服务器上,服务器配置的 128G RAM 被安排为单个 NUMA 节点。服务器有两个插槽,每个插槽都包含一个英特尔至强处理器 E5-26600 @ 2.20GHz,每个插槽有 8 个 real core。处理器被配置为禁用 Turbo Boost、超线程、睡眠状态和动态频率缩放。服务器通过 10Gb 的链路连接,并使用 Broadcom NetXtremeII BCM57800 1/10 千兆以太网网卡。实验在多台计算机上运行,使用相同配置的机器连接到相同的机架顶部开关,以减少外部噪音。在软件方面,我们使用 Linux 5.14 内核和 glibc 2.31 版本。Linux 和不同的 UKL 配置是用相同的编译时配置选项构建的。我们在虚拟和物理硬件上进行了实验,得到了一致和可重复的结果。由于篇幅的关系,除非另有说明,否则我们只报告裸金属数据。 + +## Linux应用程序、硬件及生态系统 + +> The fundamental goals of the UKL project are to integrate unikernel optimizations without losing Linux’s broad support for applications, hardware, and ecosystem. We discuss each of these three goals in turn. + +UKL 项目的基本目标是在不失去 Linux 对应用程序、硬件和生态系统的广泛支持的情况下集成单内核优化。我们依次讨论这三个目标。 + +> Application support: As expected, we have had no difficulty running any Linux application as normal user-level processes on our modified kernel. We have used hundreds of unmodified binaries running as normal user-level processes without effort. That includes all the standard UNIX utilities, bash, different profilers, perf, and eBPF tools. + +应用程序支持:正如预期的那样,在修改后的内核上运行任何 Linux 应用程序作为普通用户级进程都没有任何困难。我们使用了数百个未经修改的二进制文件作为普通的用户级进程运行。这包括所有标准的 UNIX 实用程序、bash、不同的分析器、perf 和 eBPF 工具。 + +> Dozens of unmodified applications have been tested as optimization targets for UKL. These include Memcached, Redis, Secrecy, a small TCP echo server, simple test programs for C++ constructors and the STL, a complex C++ graph based benchmark suite, a performance benchmark called LEBench, and a large number of standard glibc and pthread unit test programs. +数十个未经修改的应用程序已经作为 UKL 的优化目标进行了测试。其中包括 Memcached,Redis, Secrecy,一个小型的 TCP 回显服务器,简单的 c++ 构造器和 STL 测试程序,一个复杂的基于 c++ 图形的基准测试套件,一个名为 LEBench 的性能基准测试,以及大量标准的 glibc 和 pthread 单元测试程序。 + +> There are some challenges in getting some applications running on UKL. First, as expected, one needs to be able to re-compile and statically link both the application and all its dependencies. Second, we have hit a number of programs that by default invoke fork followed by exec e.g., Postgress, and many that are dependent on the dynamic loader through calls to dlopen and others. Third, we have run into issues of proprietary applications available in only binary form, e.g., user-level libraries for GPUs. + +让一些应用程序在 UKL 上运行存在一些挑战。首先,正如预期的那样,需要能够重新编译和静态链接应用程序及其所有依赖项。其次,我们遇到了一些默认情况下先调用 fork 再调用 exec 的程序,例如 Postgress,以及许多依赖于动态加载器的程序调用 dlopen 和其他。第三,我们遇到了专有应用程序仅以二进制形式可用的问题,例如,用于 gpu 的用户级库。 + +> Hardware support: For hardware, we have not run into any compatibility issues and have booted or kexeced to UKL on five different x86-64 servers and virtualization platforms. The scripts and tools used to deploy and manage normal Linux machines were used for UKL deployments as well. + +硬件支持:对于硬件,我们没有遇到任何兼容性问题,并且已经在五个不同的 x86-64 服务器和虚拟化平台上启动或执行到 UKL。用于部署和管理普通 Linux 机器的脚本和工具也用于UKL部署。 + +> Ecosystem: Due to having a full-fledged userspace, we have been able to run all the different applications, utilities, and tools that can run on unmodified Linux. This has been extremely critical in building UKL, i.e., we use all the debugging tools and techniques available in Linux. We have been able to profile UKL workloads with perf and able to identify +code paths that could be squashed for performance benefits(see fig. 5). + +生态系统:由于拥有一个成熟的用户空间,我们已经能够运行所有不同的应用程序、实用程序和工具,这些都可以在未经修改的 Linux 上运行。这在构建 UKL 时非常关键,也就是说,我们使用 Linux 中可用的所有调试工具和技术。我们已经能够对具有性能的 UKL 工作负载进行概要分析,并能够识别可以压缩以获得性能优势的代码路径(见图5)。 + +> The UKL patch size for the base model is around 550 lines, and the full UKL patch with all the configurations is 1250 lines. Since the patch is small and non-invasive, we are hopeful that we can work with the Linux community towards upstream acceptance. +基本模型的 UKL 补丁大小约为 550 行,而具有所有配置的完整 UKL 补丁大小为 1250行。由于该补丁很小且非侵入性,我们希望能够与 Linux 社区合作,使其得到上游的接受。 + +> Table 2 compares the UKL patch to Kernel-Mode Linux (KML) and a selection of Linux features described in Linux Weekly News (LWN) articles in 2020. For comparison, the KML patch, used in the recent Lupine work, that runs applications in kernel mode is 3177 LOC, a complexity that has resulted in the patch not being accepted upstream. In contrast, UKL both provides richer functionality than KML, and is much simpler. This simplicity is due to three fortuitous changes since KML was introduced. First, UKL, takes advantage of recent changes to the Linux kernel that make the changes to assembly much less intrusive. Second, UKL supports only x64-64, while KML was introduced at a time when it was necessary to support i386 to be relevant. Third, UKL does not deal with older hardware, like the i8259 PIC, that had to be supported by KML. +> +表 2 将 UKL 补丁与 Kernel-Mode Linux (KML) 以及 2020 年 Linux Weekly News (LWN) 文章中描述的一些 Linux 特性进行了比较。相比之下,在最近的 Lupine 工作中使用的 KML 补丁,在内核模式下运行应用程序是 3177 LOC,这种复杂性导致补丁不被上游接受。相比之下,UKL 既提供了比 KML 更丰富的功能,又简单得多。这种简单性是由于引入 KML 以来的三个偶然变化。首先,UKL 利用了最近对 Linux 内核的修改,使得对汇编的修改干扰性大大降低。其次,UKL 只支持 x64-64,而 KML 是在需要支持 i386 的时候引入的。第三,UKL 不处理旧的硬件,比如必须由 KML 支持的 i8259 PIC。 + +![这是图片](images/porting-riscv-ukl/translate-table-2.PNG#pic_center "table 2") + + +## 微基准测试 + +> Unikernels offer the opportunity to dramatically reduce the overhead of interactions between application and kernel code. We evaluate how UKL optimizations impact the overhead of simple system calls (§5.3.1), more expensive system calls (§5.3.2), and page faults (§5.3.3). Our results contradict recent work that suggests that the advantages are modest; we see that the reduction in overhead is larger (e.g., 90%) than previously reported and has a significant impact even for requests with large payloads (e.g., 24% with 8KByte recvfrom()). + +Unikernels提供了显著减少应用程序和内核代码之间交互开销的机会。我们评估了UKL优化如何影响简单系统调用(§5.3.1)和更昂贵的系统调用的开销(第5.3.2节)和页面错误(第5.3.3节)。我们的结果与最近的研究结果相矛盾,该研究表明,这种优势是适度的;我们看到开销的减少比之前报告的更大(例如,90%),甚至对于具有大效负载的请求也有显著的影响(例如,对于8KByte的recvfrom(),减少了24%)。 + +### 系统调用的基础性能 +> Figure 1, compares the overhead of simple system calls between Linux, UKL’s base model, and UKL_BYP. Results were gathered using the (slightly modified4 LEBench) microbenchmark to measure thebaselatency of getppid read,write, sendto, and recvfrom (all with 1 byte payloads). + +图 1 比较了 Linux、UKL 的基本模型和 UKL_BYP 之间简单系统调用的开销。使用 (稍作修改的 LEBench) 微基准测试,用于测量 getppid 读、写、发送和接收的基本延迟 (都是 1 字节的有效负载)。 + +![这是图片](images/porting-riscv-ukl/translate-figure-1.PNG#pic_center "figure 1") + + +> We find that the advantage of the base model of UKL that essentially replacessyscall/sysretinstructionswithcall/ret is modest, i.e., less than 5%. However, the UKL BYP configuration that avoids expensive checks on transitions between application and kernel code can be up to 83% for a getppid; suggesting that optimizing the transition between application code may have a significant performance impact. + +我们发现,UKL的基本模型的优势本质上是用call/ret代替syscall/sysret指令,这种优势是适度的,即小于5%。然而,UKL BYP配置可以避免在应用程序和内核代码之间的转换上进行昂贵的检查,对于getppid来说,这种配置可以达到83%;这表明优化应用程序代码之间的转换可能会对性能产生重大影响。 + +### 大请求 +> Figure 2 contrasts the performance of Linux to UKL and UKL_BYP for read, write, sendto and recvfrom as we use LEBench microbenchmark to vary the payload up to 8KB of data. Again, baseline UKL shows very little improvement over Linux, but UKL_BYP shows a significant constant improvement. The right vertical axis also shows the downward trend of percentage improvement of UKL_BYP compared to Linux. As the time spent in the kernel increases, the percentage gain decreases. But even for payloads of up to 8KB, the percentage improvement is still significant, i.e., between 11% and 22%. + +图 2 对比了 Linux 与 UKL 和 UKL_BYP 在读、写、发送和接收方面的性能,我们使用 LEBench 微基准测试将有效载荷改变为8KB的数据。基线 UKL 再次显示在 Linux 上几乎没有改进,但是 UKL_BYP 显示出显著的持续改进。右纵轴也显示了 UKL_BYP 与 Linux 的比较百分比改善的下降趋势。随着在内核中花费的时间的增加,百分比增益减少。但是,即使对于高达 8KB 的有效负载,改进的百分比仍然很大,即在 11% 到 22% 之间。 + +![这是图片](images/porting-riscv-ukl/translate-figure-2.PNG#pic_center "figure 2") + + +> It is interesting to contrast our results with those from the recent Lupine work. Surprisingly they observed that just eliminating the system call overhead is significant (40%) for a null system call, but since they found that (like us) the improvement dropped to below 5% in most cases, they concluded that the benefit of co-locating the application and kernel is minimal. Our results suggest that the major performance gain comes not from eliminating the hardware cost but from eliminating all the checks on the transition between the application and kernel code and that reducing this overhead has a significant impact on even expensive system calls. + +将我们的结果与最近 Lupine 的研究结果进行对比是很有趣的。令人惊讶的是,他们发现仅仅消除系统调用开销就很重要 (40%),但是由于他们发现(和我们一样)在大多数情况下,改进下降到5%以下,将应用程序和内核放在一起的好处是最小的。我们的结果表明,主要的性能增益不是来自消除硬件成本,而是来自消除应用程序和内核代码之间转换的所有检查,并且减少这种开销对昂贵的系统调用也有重大影响。 + + +### 页面故障处理 +> Figure 3 compares three different schemes we have for handing page faults, i.e., UKL_PF_DF, UKL_PF_SS and (UKL_RET_PF_DF). For UKL_PF_DF, we see close to 5% improvement in page fault latency compared to Linux. UKL_PF_SS is also comparable to the previous case, which means that stack switch on every page fault is not too costly, and most of the benefit over Linux in both these cases is due to handling page faults in kernel mode and avoiding ring transition. (UKL_RET_PF_DF) gives us more than 12.5% improvement over normal Linux. In all these cases, since the time taken to service more page faults increases, the improvement over normal Linux also increases, which is why we see a constant percentage improvement. Unmodified applications can choose anyone of these options through build time Linux config options. + +图3比较了处理页面错误的三种不同方案,即 UKL_PF_DF、UKL_PF_SS 和 (UKL_RET_PF_DF)。对于 UKL_PF_DF,我们看到页面错误延迟比相比于 Linux 有将近 5% 的改进。UKL_PF_SS 也与前一种情况类似,这意味着在每个页面错误上进行堆栈切换的成本不会太高,而且在这两种情况下相对于 Linux 的大部分好处是由于在内核模式下处理页面错误并避免了环转换。(UKL_RET_PF_DF) 比普通 Linux 改进了 12.5% 以上。在所有这些情况下,由于处理更多页面错误所需的时间增加了,因此相对于普通Linux的改进也增加了,这就是为什么我们看到一个恒定百分比的改进。未修改的应用程序可以通过构建时 Linux 配置选项选择这些选项中的任何一个。 + +![这是图片](images/porting-riscv-ukl/translate-figure-3.PNG#pic_center "figure 3") + + +> We repeated this experiment for non-stack page faults, i.e., on mapped memory and got the same results. + +我们对非堆栈页面错误(即在映射内存上)重复这个实验,得到了相同的结果。 + +## 应用性能 +> We want to see how real world applications perform on UKL. We chose three different types of applications: a simple application (Redis) used by previous works as well, a more complex application (Memcached) that many unikernels don’t support unmodified, and a latency-sensitive application (Secrecy). Our results show significant advantages in Redis (26%), Memcached (8%), and Secrecy (100x). + +我们想看看真实世界的应用程序在UKL上的表现。我们选择了三种不同类型的应用程序:一个以前的研究也使用过的简单的应用程序 (Redis),一个许多内核不支持未修改的更复杂的应用程序 (Memcached),和一个延迟敏感的应用程序 (Secrecy)。我们的结果显示具有显著的优势,Redis (26%)、Memcached (8%) 和 Secrecy (100x)。 + +### 简单应用:Redis +> We use Redis, a widely usedin-memory database, tomeasure the performance of UKL and its different configurations in real world applications. For this experiment, we ran Redis server on UKL on bare metal and ran the client on another physical node in the network. + +我们使用Redis,一个广泛使用的内存数据库,来衡量在现实世界的应用程序中的性能和它的不同配置。在这个实验中,我们在裸机上的UKL上运行Redis服务器,在网络中的另一个物理节点上运行客户端。 + +> We use the Memtier benchmark to test Redis. Through Memtier benchmark, we create 300 clients, each sending 100 thousand requests to the server. The ratio of get to set operations in 1 to 10. We ran Redis on Linux, UKL_RET_BYP and UKL_RET_BYP with deeper shortcuts. Figure 4 helps us visualize the latency distribution for these requests. + +我们使用 Memtier 基准测试来测试 Redis。通过在 Memtier 基准测试中,我们创建300个客户端,每个客户端向服务器发送 10 万个请求。get 和 set 操作的比率为 1 比 10。我们在 Linux, UKL_RET_BYP 和 UKL_RET_BYP 上运行 Redis,并带有更深的快捷方式。图 4 帮助我们可视化这些请求的延迟分布。 + +![这是图片](images/porting-riscv-ukl/translate-figure-4.PNG#pic_center "figure 4") + +> To better understand where the time was being spent, we profiled Redis UKL with perf. Figure 5, which is part of the flame graph we generated, shows two clear opportunities for performance improvement. Blue arrows show how we could shorten the execution path by bypassing the entry and exit code for read and write system calls and invoke the underlying functionality directly. Figure 4 shows how Redis on UKL_RET shows improvement in average and 99th percentile tail latency when it bypasses the entry and exit code (UKL_RET_BYP). Table 3 shows that UKL_RET_BYP has 11% better tail latency and 12% better throughput. + +![这是图片](images/porting-riscv-ukl/translate-table-3.PNG#pic_center "table 3") +为了更好地了解时间消耗在哪里,我们用 perf 对 Redis UKL 进行了分析。图 5 是我们生成的 flame graph 的一部分,它显示了两个明显的性能改进机会。蓝色箭头显示了我们如何通过绕过读写系统调用的入口和退出代码来缩短执行路径,并直接调用底层功能。图 4 显示了当 Redis 绕过进入和退出代码 (UKL_RET_BYP) 时,UKL_RET 上的平均和第 99 百分位尾部延迟是如何改善的。表 3 显示,UKL_RET_BYP 的尾部延迟提高了 11%,吞吐量提高了 12%。 + +![这是图片](images/porting-riscv-ukl/translate-figure-5.PNG#pic_center "figure 5") + + +> Looking at Figure 5 again, the green arrows show that read and write calls, after all the polymorphism, eventually translate into tcp_recvmsg and tcp_sendmsg respectively. To investigate any potential benefit of shortcutting deep into the kernel, we wrote some code in the kernel to interface read and write with tcp_recvmsg and tcp_sendmsg respectively. We then modified Redis (10 lines modified) to call our interface functions instead of read and write. Our results show (Figure 4) further improvement in average and 99th percentile tail latency i.e., UKL_RET_BYP (shortcut). Table 3 shows that UKL_RET_BYP (shortcut) has 22% better tail latency and 26% better throughput. + +再次查看图 5,绿色箭头显示在所有多态性之后,读和写调用最终分别转换 tcp_recvmsg 和 tcp_sendmsg。为了研究深入内核的快捷方式的潜在好处,我们在内核中编写了一些代码,分别使用 tcp_recvmsg 和 tcp_sendmsg 进行读写操作。然后我们修改了 Redis (修改了 10 行)来调用我们的接口函数,而不是读写。我们的结果显示 (图4) 平均和第 99 百分位尾部延迟的进一步改善,即 UKL_RET_BYP (快捷方式)。表3显示 UKL_RET_BYP (快捷方式) 的尾部延迟提高 22%,吞吐量提高 26%。 + +> Figure 4 provides us some nice insights into future possibilities. There is almost a 0.5ms difference in the shortest latencies for Linux versus UKL_RET_BYP (shortcut) case. This means that there is an opportunity to further reduce the average and tail latencies to sit closer to the smallest latency case. + +图4为我们提供了一些关于未来可能性的深刻见解。Linux与UKL_RET_BYP(快捷方式)相比,最短延迟几乎相差0.5ms。这意味着有机会进一步减少平均和尾部延迟,使其更接近最小延迟情况。 + +> Lupine shows slightly better results than baseline Linux for Redis, but it does so in virtualization on a lightweight hypervisor. It would be interesting to see how UKL performs in that setting, even though there is a huge difference in kernel versions used by Lupine and UKL. + +Lupine在Redis上显示的结果略好于基线Linux,但它是在轻量级管理程序上进行虚拟化的。尽管Lupine和UKL使用的内核版本存在巨大差异,但看看UKL在这种情况下的表现将是一件很有趣的事情。 + +### 复杂应用: Memcached +> Memcached is a multithreaded workload that relies heavily on pthreads library and glibc ’s internal synchronization mechanisms. It is an interesting application because unikernels generally don’t support complex applications, and systems like EbbRT first have to port Memcached. To evaluate Memcached, we use the Mutilate benchmark. This benchmark uses multiple clients to generate a fixed queries-per-second load on the server and then measures the latency. We ran the clients in userspace on the same node as Memcached UKL to remove any network delays, and we pinned the Memcached server and clients to separate cores. We used Mutilate to generate queries based on Facebook’s workloads. For different configurations of UKL, we measured how many queries per second Memecached can serve while keeping the 99% tail latency under the 500 us service level agreement. Figure 6 shows Memcached with UKL_RET performs similar to Memcached on Linux, i.e., both serve around 73 thousand queries before exceeding the 500 us threshold. Memcached on UKL_RET_BYP can serve around 77 thousand queries(around 5% improvement), and Memcached on UKL_RET_BYP (shortcut) can serve up to 79 thousand queries (around 8% improvement) before going over the 500 us threshold. + +Memcached 是一个严重依赖 pthread 库和 glibc 的内部同步机制的多线程工作负载。这是一个有趣的应用程序,因为 unikernels 通常不支持复杂的应用程序,像 EbbRT 这样的系统首先必须移植 Memcached。为了评估 Memcached,我们使用了 mutlate 基准测试。此基准测试使用多个客户机在服务器上生成固定的每秒查询数负载,然后测量延迟。我们在用户空间中与 Memcached UKL 在同一个节点上运行客户端,以消除任何网络延迟,并且我们将 Memcached 服务器和客户端固定在不同的核心上。我们使用 mutinate 来生成基于 Facebook 工作负载的查询。对于不同的UKL配置,我们测量了 Memecached 每秒可以处理多少查询,同时在 500 us 服务级别协议下保持 99% 的尾部延迟。图 6 显示了具有 UKL_RET 的 Memcached 执行类似于 Linux 上的 Memcached,例如,它们都在超过 500 个请求的阈值之前提供大约 73000 个查询。 Memcached 上 UKL_RET_BYP 可以提供大约 77000 个查询而在 UKL_RET_BYP (快捷方式) 上的 Memcached 在超过 500 us 阈值之前可以提供多达 79000 个查询 (大约提高8%)。 + +![这是图片](images/porting-riscv-ukl/translate-figure-6.PNG#pic_center "figure 6") + +> This experiment also serves as a functionality and compatibility result; a comparatively large application with multiple threads etc. can run on UKL. +本实验也作为功能性和兼容性的结果;具有多个线程等的较大应用程序可以在UKL上运行。 + +### 对延迟敏感的应用: Secrecy +> Secrecy is a multi-party computation framework for secure analytics on private data. While Redis and Memcached are throughput sensitive, Secrecy is latency-sensitive. This represents an important class of applications, e.g., highspeed financial trading, etc. Secrecy is a three node protocol with each node sending data to its successor and receiving from its predecessor with the third node sending to the first. Computation is done row by row with a round of messages that act as a barrier between each row. + +Secrecy 是一个多方计算框架,用于对私有数据进行安全分析。Redis 和 Memcached 是吞吐量敏感的,而 secrecy 是延迟敏感的。这代表了一类重要的应用,例如高速金融交易等。Secrecy 是一个三节点协议,每个节点向后继节点发送数据,并从前一个节点接收数据,第三个节点向第一个节点发送数据。计算逐行进行,并使用一轮消息作为每行之间的屏障。 + +> We used a test in the Secrecy implementation for a GROUPBY operator which groups rows in a table by key attributes and counts the number of rows per group. Messages used in a round of communication are each very small, between 8 and 24 bytes each, so we configured each TCP socket to use TCP_NODELAY to avoid stalls caused by congestion control. Using this test executable, we ran experiments with 100, 1000, and 10,000 input rows and measured the time required to complete the GROUP-BY. Each system and row size combination was run 20 times, and the worst two runs for each combination were discarded. + +我们在 Secrecy 实现中对 GROUPBY 操作符进行了测试,该操作符根据键属性对表中的行进行分组,并计算每组的行数。在一轮通信中使用的每个消息都非常小,每个消息在8到24字节之间,因此我们配置了要使用的每个 TCP 套接字 TCP_NODELAY 避免拥塞控制造成的延时。使用这个测试可执行文件,我们运行了 100、1000 和 10000 个输入行的实验,并测量了完成 GROUPBY 所需的时间。每个系统和行大小组合运行 20 次,每个组合的最差的两次运行被丢弃。 + +> Figure 7 shows the run times of the three systems normalized to the run time of Linux and the error bars show the coefficient of variation for each configuration. As with other experiments, the UKL_BYP configuration shows a modest improvement in run time. However, when we use the deeper shortcut to the TCP send and receive functions, we see significant (100x) runtime improvements. + +图 7 显示了三个系统的运行时间归一化为 Linux 的运行时间,误差条显示了每种配置的变异系数。与其他实验一样,UKL_BYP 配置在运行时显示出适度的改进。然而,当我们对 TCP 发送和接收函数使用更深的快捷方式时,我们看到了显著的 (100x) 运行时改进。 + +![这是图片](images/porting-riscv-ukl/translate-figure-7.PNG#pic_center "figure 7") + +> The improvement of the shortcut system over the others was larger than anticipated, so we reran the experiments and achieved the same level of performance. To verify that the work was still happening, we collected a capture of all the inter-node traffic using Wireshark and verified that the same number of TCP packets traveled between nodes in all three system setups for a 100 row experiment.We also instrumented the send and receive paths in Secrecy to collect individual times for send and receive calls in each system for a 100 row run. The mean and standard deviation of send times for Linux were 2.23us and 1.14us, respectively, and the values for receive times on Linux were 1,100us and 3,300us, respectively. The shortcut showed send mean and standard deviation of 896ns and 1,755ns, which is a significant speed up, but the receive numbers were 638ns and 3,888ns. + +快捷系统相对于其他系统的改进比预期的要大,因此我们重新进行了实验,并达到了相同的性能水平。为了验证工作是否仍在进行,我们使用 Wireshark 收集了所有节点间流量的捕获,并验证了在所有三个系统设置中,在 100 行实验中,节点之间传输的 TCP 数据包数量相同。我们还检测了 Secrecy 中的发送和接收路径,以收集每个系统中 100 行的发送和接收调用的单独时间运行。Linux 系统的发送次数均值和标准差分别为 2.23us 和 1.14us,Linux 系统的接收次数均值和标准差分别为 1100 us 和 3300 us。快捷方式显示发送均值和标准差分别为 896ns 和 1755ns,速度明显加快,但接收数分别为 638ns 和 3888ns。 + +> It appears that, with the shortcut, the systemis never having to wait on packet delivery on top of bypassing system call entry and exit paths, so the shortcut system is never put to sleep waiting on incoming messages. We believe that because Secrecy is latency-sensitive and because we accelerate the send path, we ensure that no node ever has to wait for data and can move to the next round of processing immediately. Moreover, the shortcut implicitly disables scheduling on transitions, ensuring that the application is always run to completion. This is critical for an application with frequent barriers. + +看起来,使用快捷方式,系统在绕过系统调用进入和退出路径的基础上永远不必等待数据包传递,因此快捷方式系统永远不会在等待传入消息时处于休眠状态。我们相信,因为Secrecy是延迟敏感的,因为我们加速了发送路径,我们确保没有节点需要等待数据,可以立即进入下一轮处理。此外,该快捷方式隐式地禁用了转换调度,确保应用程序始终运行到完成。这对于具有频繁障碍的应用程序至关重要。 + + +# 相关工作 +> There has been a huge body of research on unikernels that we categorize as clean slate designs, forks of existing operating systems, and incremental systems. + +我们已经对 unikernels 进行了大量的研究,我们将其归类为全新设计、通用操作系统的分支和增量系统。 + +> CleanSlateUnikernels: Many unikernel projects arewritten from scratch or use a minimal kernel like MiniOS for bootstrapping. These projects have complete control over the language and methodology used to construct the kernel. MirageOS uses OCaml to implement the unikernel and uses the language and compiler level features to ensure robustness against vulnerabilities and small attack surface. Similarly, OSv uses lock-free scheduling algorithms to gain performance benefits for unmodified applications. Implementations in clean-slate unikernels can also be fine-tuned for performance of specific applications, e.g., Minicache optimizes Xen and MiniOS for CDN based use case. Further, from scratch implementations can easily expose efficient, low-level interfaces to applications e.g., EbbRT. Different clean slate unikernels can often be polar opposites in some regards, exposing the wide range of choices available to them. Forinstance, some might target custom APIs for performance while like HermiTux target full Linux ABI compatibility. Recently, efforts like Unikraft provide strong POSIX support while also allowing custom APIs for further performance gains. + +全新设计。许多 unikernel 项目都是从头开始编写的,或者使用像 MiniOS 这样的最小内核来引导。这些项目完全控制用于构造内核的语言和方法。MirageOS 使用 OCaml 实现单内核,并使用语言和编译器级别的特性来确保对漏洞的鲁棒性和较小的攻击面。同样,OSv 使用无锁调度算法来获得未修改应用程序的性能优势。在全新 unikernel 中的实现也可以针对特定应用程序的性能进行微调,例如,Minicache 优化了 Xen 和基于 CDN 的 MiniOS 用例。此外,从头开始实现可以很容易地将高效、低级的接口暴露给应用程序,例如 EbbRT。不同的全新单内核在某些方面通常是截然相反的,这就为它们提供了广泛的选择。例如,有些可能针对自定义 api 的性能,而像 HermiTux 目标是完全兼容 Linux ABI。最近,像 Unikraft 这样的努力提供了强大的 POSIX 支持,同时还允许自定义 api 来进一步提高性能。 + +> These unikernel offer compelling trade-offs to generalpurpose operating systems. These include improved security and smaller attack surfaces e.g., Xax and MirageOS, shorter boot times e.g., ClickOS and LightVM , efficient memory use through single address space e.g., OSv and many others, and better run-time performance e.g., EbbRT, Unikraft and SUESS. Some approaches target direct access to virtual or physical hardware. A number of researchers have directly confronted the problem of compatibility, e.g., OSv is almost Linux ABI compatible and HermiTux is fully ABI compatible with Linux binaries. Other projects aim to make building unikernels easier e.g., EbbRT, Libra and Unikraft. + +这些 unikernel 为通用操作系统提供了令人信服的折衷。这些包括改进的安全性和更小的攻击面,例如 Xax 和 MirageOS,更短的启动时间,例如 ClickOS 和 LightVM,通过单个地址空间高效地使用内存,例如OSv和许多其他,以及更好的运行时性能,例如,EbbRT、Unikraft、SUESS。一些方法针对直接访问虚拟或物理硬件。许多研究者直接面对兼容性问题,例如 OSv 几乎与 Linux ABI 兼容,HermiTux 与 Linux 二进制文件完全 ABI 兼容。其他项目旨在使构建 unikernel 更容易,例如 EbbRT, Libra和Unikraft。 + +> The UKL effort was inspired by the tremendous results demonstrated by clean slate unikernels. Our research targets trying to find ways to integrate some of the advantages these systems have shown into a general-purpose OS. + + +UKL 的努力受到了由全新 unikernels 所展示的巨大结果的启发。我们的研究目标是试图找到将这些系统所显示的一些优点集成到通用操作系统中的方法。 + +> Forks of General Purpose OS. A number of projects either fork an existing general-purpose OS code base or reuse a significant portion of one. Examples include Drawbridge which harvests code from Windows, Rump kernel which uses NetBSD drivers and Linux Kernel Library (LKL) which borrows code from Linux. These systems, although constrained by the design and structure of the original OS, generally have better compatibility with existing applications. The codebase these systems fork are well tested and can serve as building blocks for other research projects, e.g., Rump has been used in other projects. + +通用操作系统的分支。许多项目要么派生现有的通用操作系统代码库,要么重用其中的很大一部分。例如,Drawbridge 从 Windows 中获取代码,Rump kernel 使用 NetBSD 驱动程序,Linux kernel Library (LKL) 从 Linux 中借用代码。这些系统虽然受到原始操作系统的设计和结构的限制,但通常与现有应用程序具有更好的兼容性。这些系统分叉的代码库经过了良好的测试,可以作为其他研究项目的构建块,例如: Rump 已在其他项目中使用。 + +> Our goal in UKL is to try to find a way to integrate unikernel optimizations without having the fork the original OS. + +我们在 UKL 中的目标是尝试找到一种方法来集成单内核优化,而不需要在原始操作系统上进行分支。 + + + + +> IncrementalSystems. There are systems, e.g.,KernelMode Linux (KML), Lupine and X-Containers which use an existing general-purpose operating system (Linux) but make comparatively fewer changes. This way, a lot of working knowledge of users of Linux can easily transfer over to these systems, but in doing so, these systems only expose the system call entry points to applications and don’t make any further specializations. Unlike UKL, they don’t co-optimize the application and kernel together. Lupine and X-Containers demonstrate opportunities in customizing Linux through build time configurations, and that is orthogonal and complementary to UKL. UKL can also benefit from a customized Linux and then add unikernel optimizations on top of that. + +增量系统。有一些系统,例如 KernelModeLinux (KML), Lupine 和 X-Containers,它们使用现有的通用操作系统 (Linux),但进行的更改相对较少。这样,Linux 用户的许多工作知识可以很容易地转移到这些系统中,但是这样做,这些系统只向应用程序公开系统调用入口点,而不进行任何进一步的专门化。与UKL不同的是,它们不会共同优化应用程序和内核。Lupine 与 X-Containers 展示了通过构建时配置定制 Linux 的机会,这与 UKL 是正交的和互补的。UKL 还可以从定制的然后在此基础上添加单内核优化。 + + + +# 结束语 +> UKL creates a unikernel target of glibc and the Linux kernel. The changes are modest, and we have shown even with these, it is possible to achieve substantial performance advantages for real workloads, e.g., 26% improvement in Redis throughput while improving tail latency by 22%. UKL supports both virtualized platforms and bare-metal platforms. While we have not tested a wide range of devices, we have so far experienced no issues using any device that Linux supports. Operators can configure and control UKL using the same tools they are familiar with, and developers have the ability to use standard Linux kernel tools like BPF and perf to analyze their programs. + +UKL 创建 glibc 和 Linux 内核的单内核目标。这些变化是适度的,我们已经证明,即使有了这些,也有可能在实际工作负载中实现实质性的性能优势,例如,在 Redis 吞吐量提高 26% 的同时将尾部延迟提高 22%。UKL 同时支持虚拟化平台和裸机平台。虽然我们没有测试过大量的设备,但到目前为止,我们在使用 Linux 支持的任何设备时都没有遇到任何问题。操作人员可以使用他们熟悉的相同工具配置和控制 UKL,开发人员可以使用标准的 Linux 内核工具 (如 BPF 和 perf ) 来分析他们的程序。 + +> UKL differs in a number of interesting ways from unikernels. First, while application and kernel code are statically linked together, UKL provides very different execution environments for each; enabling applications to run in UKL with no modifications while minimizing changes to the invariants (whatever they are) that the kernel code expects. Second, UKL enables a knowledgable developer to incrementally optimize performance by modifying the application to directly take advantage of kernel capabilities, violating the normal assumptions of kernel versus application code. Third, processes can run on top of UKL, enabling the entire ecosystem of Linux tools and scripting to just work. + +UKL 在许多有趣的方面与 unikernels 不同。首先,虽然应用程序和内核代码是静态链接在一起的,但 UKL 为两者提供了非常不同的执行环境;使应用程序无需修改就可以在 UKL 中运行,同时最大限度地减少对不变量的更改(不管它们是什么)内核代码所期望的。其次,UKL 使开发人员能够通过修改应用程序来直接利用内核功能,从而逐步优化性能,这违反了内核代码与应用程序代码之间的常规假设。第三,进程可以在 UKL 之上运行,使整个 Linux 工具和脚本的生态系统能够正常工作。 + +> We have repeatedly thought that we were only a few weeks away from a stable system, and it has only been recently that we had a design and a set of changes that met our fundamental goals. While the set of changes to create UKL ended up being very small, it has taken us several years of work to get to this point. The unique design decisions are a result of multiple, typically much more pervasive, changes to Linux as we changed directions and gained experience with how the capability we wanted could be integrated into Linux. It is in some sense an interesting experience that the very modularity of Linux that enables a broad community to participate both: 1) makes it very difficult to understand how to integrate a change like UKL and, 2) can be harnessed to enable the change in a very small number of lines of code. + +我们一再认为,我们离一个稳定的系统只有几周的时间了,直到最近,我们才有了一个设计和一系列的改变,达到了我们的基本目标。虽然创建 UKL 的更改集最终非常小,但我们花了几年的时间才达到这一点。这种独特的设计决策是对 Linux 的多次(通常是更普遍的)更改的结果,因为我们改变了方向,并获得了如何将我们想要的功能集成到 Linux 中的经验。从某种意义上说,Linux 的模块化使广泛的社区能够参与其中,这是一种有趣的体验:1)很难理解如何集成这样的更改可以利用UKL和(2)在非常少的代码行中启用更改。 + +> The focus of our work so far has been on functionality and just a proof of concept of a performance advantage in order to justify integrating the code into Linux. Now that we have achieved that, we plan to start working on getting UKL upstreamed as a standard target of Linux so that the community will continue to enhance it. + +到目前为止,我们的工作重点一直放在功能上,只是为了证明将代码集成到 Linux 中是合理的,从而证明了性能优势的概念。现在我们已经实现了这一点,我们计划开始将 UKL 作为 Linux 的标准目标进行升级,以便社区将继续增强它。 + +> We have only started performance optimizing UKL. As our knowledge of Linux has increased, a whole series of simple optimizations that can be readily adopted have become apparent beyond the current efforts. How hard will it be to introduce and/or exploit zero-copy interfaces to the application? How hard will it be to reduce some of the privacy assumptions implicit in the BSD socket interface when only one application consumes incoming data? + +我们才刚刚开始对 UKL 进行性能优化。随着我们对 Linux 知识的增加,一系列易于采用的简单优化已经变得明显,超出了当前的努力。在应用程序中引入和/或利用零复制接口有多难?当只有一个应用程序使用传入数据时,减少BSD套接字接口中隐式的一些隐私假设有多难? + +> These kernel-centric optimizations are just the start. From an application perspective, we believe that UKL will provide a natural path for improving performance and reducing the complexity of complex concurrent workloads. Concurrent operations on shared resources must be regulated. Often the burden falls onto the user code. From the user-level, it is hard to determine whether synchronization is needed, and the controlling operations and controlled entities usually live in the kernel. If the user code moves into the kernel and has the same privileges, some operations might become faster or possible in the first place. For instance, in a garbage collector, it might be necessary to prevent or at least detect whether concurrent accesses happen. With easy and fast access to the memory infrastructure (e.g., page tables) and the scheduler, many situations in which explicit, slow synchronization is needed might get away with detecting and cleaning up violations of the assumptions. + +这些以内核为中心的优化仅仅是个开始。从应用程序的角度来看,我们相信 UKL 将为提高性能和降低复杂并发工作负载的复杂性提供一条自然的途径。必须规范对共享资源的并发操作。通常负担落在用户代码上。从用户级别来看,很难确定是否需要同步,并且控制操作和控制实体通常位于内核中。如果用户代码移到内核中并具有相同的特权,那么某些操作可能会变得更快,或者可能首先变得更快。例如,在垃圾收集器中,可能需要防止或至少检测并发访问是否发生。通过对内存基础设施 (例如页表) 和调度器的简单快速访问,在许多需要显式缓慢同步的情况下,可以检测和清除违反假设的情况。 + +> If the Linux community accepts UKL, we believe it will not only impact Linux but may become a very important platform for future research. While the benefits to researchers of broad applications on HCL support are obvious. Perhaps less obvious, as unikernel researchers, is the ability to use tools like ktest to deploy and manage experiments, BPF and perf to be able to understand performance, have been incredibly valuable. + +如果 Linux 社区接受 UKL,我们相信它不仅会影响 Linux,而且可能成为未来研究的一个非常重要的平台。而HCL支持的广泛应用对研究人员的好处是显而易见的。也许不太明显的是,作为 unikernel 研究人员,使用像 ktest 这样的工具来部署和管理实验的能力,使用 BPF 和 perf 理解性能,已经非常有价值。 \ No newline at end of file diff --git a/articles/images/porting-riscv-ukl-2/translate-figure-1.PNG b/articles/images/porting-riscv-ukl-2/translate-figure-1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a246fb3b0971084cb46dc72d6259d0595501e0cc GIT binary patch literal 19253 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¬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¹nZgsMA%7om)#f;1C) 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 RFo4w;az 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 literal 0 HcmV?d00001 diff --git a/articles/images/porting-riscv-ukl-2/translate-figure-3.PNG b/articles/images/porting-riscv-ukl-2/translate-figure-3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..dc50ff5a811f48f1c10e117110b82edaa6a91fcc GIT binary patch literal 22508 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 U)1jOfguBdS-I6qz|JheL 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 literal 0 HcmV?d00001 diff --git a/articles/images/porting-riscv-ukl-2/translate-figure-5.PNG b/articles/images/porting-riscv-ukl-2/translate-figure-5.PNG new file mode 100644 index 0000000000000000000000000000000000000000..3107b62c505dce5addd0a03cc94117bb9d7d482b GIT binary patch literal 147549 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 z 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 literal 0 HcmV?d00001 diff --git a/articles/images/porting-riscv-ukl-2/translate-figure-7.PNG b/articles/images/porting-riscv-ukl-2/translate-figure-7.PNG new file mode 100644 index 0000000000000000000000000000000000000000..8c991556baf9adea8a33af226390bf92bb4bc4cd GIT binary patch literal 16636 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 QvEY=n#JxLtVtStc4`!d6Gynhq literal 0 HcmV?d00001 diff --git a/articles/images/porting-riscv-ukl-2/translate-table-1.PNG b/articles/images/porting-riscv-ukl-2/translate-table-1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..bd0ae093ae6c59548c8c23e491d950480ddf3e2e GIT binary patch literal 23524 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 NA}{?^sz}1n=Rdj01(5&% literal 0 HcmV?d00001 diff --git a/articles/images/porting-riscv-ukl-2/translate-table-2.PNG b/articles/images/porting-riscv-ukl-2/translate-table-2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..cbbd05ed2863e31ff06abec983da320ba5a05bc7 GIT binary patch literal 94345 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 b;+ZRYr|RvK#q-947cLl|zw#=(aX<7wN9)Kd literal 0 HcmV?d00001 diff --git a/articles/images/porting-riscv-ukl-2/translate-table-3.PNG b/articles/images/porting-riscv-ukl-2/translate-table-3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0a4b4e28d330534185d88312b76cfa500dfa1d1b GIT binary patch literal 19288 zcmbrmWmsEXw=N8&h2U<%3KVw;UZ4aBl;U1oS_lq>;!bda6n87o;?Uym6b%K67b{ZS zUB2{rb?^P2?_B#jKL|6jl9jRM9CO?<5}~FdkBbGwLP0^neW@U;fr5gXjvT`Q=*Zic z{FYPXKU5bDc`!=FDD`jToyS(v%F-w()v?&OW>1j!F`X1%yP%*Dx&HY>{b@<(fr6sA z_fl3`%fooD6+?~W<-_dE6}25a43F;DL@ds}C0DzCKQ*@IfG;qS zbMM;T>}`3&h!XhXDFJ{C2EhF@;KU*XK0*%kNEkqmk%KB$SttNGFjWsn5FiJg`2>0N z$U%_Y3KOWew^u~OXwwG?mbSjfP z`d{DdkSKkvKeoVSbM%>S@n_9qm70$nm6FWn*k`i4>S^IzlM_iCy1&@-=#0UdIy#}J zr>-B`CO~Fgk9U8z8dw?oD%sC{mG<#z8Ev^v^*Y@OM847Q;ZoIzT2xzXBhNEIZ7r<< zZLrjv-_Zfq6Gimg+$#4Gh-wS@H7wN81C;xp8j^p*`%D^+a3aX#qd~?q3KQ4pkRaaASg*>GO9vot@%4cA zIcx5EW9W(W=E}Ek3b$mQSYul4>~lVo%~>#O~%o7 z3G@)D5ZIm4TZXw>LNT7kAaltp*6#9UZs;0KaDTlFU&Ecq5F=xwO(luZK(|Hb_+kRDn>4;&&E`vp+QpS5=g@v82_~ZR;^1j(6H&rfsDK@Vb{tq@q&U@QZcUZuADqnfMGR`@m)sV9!$C6?5tfuf(kuFMW>3A zovt;dy<@y%9LiJ`JfCM+WFWNa1?ez>4!<`3LC%WycC^b|a=NrvNDdZinntPoO^(x! z<3)Y0Eo-8`_USZeX0CyrIp@lhHOD$YS68KH%rC0i^+xd5xJJw33TovYo6?sroKq%Z z2~W-J>1JYLWIt?=Y|sUU$>5jy4UAZ@b92esdb{@wh!OWaW3kE&3?^Wi2`tC?+g0h0 zE>g_c`iLT5G}~P=|2%Va*-mb=ud_WE*Xwb=Ko@7<$TD{oT{AITqzhlc`yBN1L&;ID z7NEO?AB8{xpQGn%oTRk=Gn?warqtG36s(*In1y02HwCj{D6WB@{PGra)pk3oYC{-5 z`tj6fj~Yx(OS*3PBGsZH$rZUS1D{&N(_wRPw~xtXZTOYRi_>*32MFf)Pa9sLA@V7X z)my}jGqVbtKU(ntC0s1|YiuD5a?DHOYhRAchi|?W^|LP|P5Dx)3_HDGY!}hGr&fd6 zO4FE4II~qm^)}R(U{LoRK$^PRNH>?4dQiLcLKLSZ^7vX?cCBRI3bnNe&K4n4Cg(E{ z7BoEaSY5*lpTm33VzRDY&0oiwH7D;BPp6r)W7ZI;b!~FEJ%iy==g?>O!1^)$GqHN_ zJFpBr&k9QNSbCtG?Zwk`gt^EpPEX(F6bTS}zFz|@W3|*_IwwN*7PkTz#`DE0Fr`JLueW%AYIU}4P!G*t0h7-g|)H1ssogCclq`GO#b$yKO zBU>$og=rUP5dVL z%0%9jl@Zi#0~lEv467+aD8*sIN2fF1>iv|oBn9GTY(aGUIr_5V9Gv2~XugRXZ7dC{ zRIipf&H zeM%C|x)yBIEzYe7g#3cOnRA&iHT82R+2k>X-kZGwvn4;wify}FL5n{blRIN8bjO3H zHMT(E9yiM$Gf+aj^WfB~XmS|pzoRhoUJn*kBhOFd)6_zJS8mVyM)`To+dBRYuUlRn z=&-IanatY_@76hM%|H7BF;I+!wpoYsg{cQ;HithdX9fiqrsL^ft@wGUmKdp}6!Yi+z7-kBocx^4t-)uZIyT$rgJ6m9MA1|ufe zl5~GokW ztyDBAknBrxO7Dv_T;s~*ITAu3825R>RUK~%!iOhS6MCsWd!%paV-G9>;7V;d4vNx#Q8=iVIfe`3$g`Y}f$;3N%5E`UM^d|$!=>YKI~t+{W7&D^zH ztW{efs{2dgQ#UZuktIf!qYiYdi(G`ZjsSHi+3cI4V?)zu*LHitn|1&*MOYy$)Dg$$ z`b4hmP(PR|@=kadaJMc6NI%A|*f=`axCFqxX4@P~7(q$z4T74*H_flL+#9?bEJ~UQ zu<@P7wF@iF30U8>xnBgNEGhQ1eS>tx6WlI90{Z+)Zv3^SuSAEP=L3gJ{C*9XM$$pM zbfMb`j)&{>BtUjFf6SW>`vY%J5>Y;WmCL-8X?526h!S)`nw{pl736oC4Y9)U5yRg^ z3+=ve?9Eo$2<-~%&fbzb;FLUR2{6kW*RDGtPY8jOIK{uP(IoG8oaq0mqDYCZa5i3@>zP;b9v(DWD470b5V7r-cBhW40owDJGfsjTzkgDYds9Z`j&qH>4HNY|AA@w&eWO@uB@BCr z1TPPeZME;4^kJ67oN>LB3Y!AcC(F~mm`rEe5_m(XGQ>cjJ|IE^TPe3U-E6_twUAj6 zcVRBVv%|dMb|G*%1Ay;fse&#IT`R@B7}Pc7ruTjP4CaC@u>(m!~HQyV^-d zerg#c>!{~oL4VPvKgy_k<)l1&S=twefToPVZZ=3cvLW|pxK8`OP%`$12#9F{;)mPq z!|WbWbwLt=VR4^n_3BPksUr=8_-MSlFFIU`z6^H4?ZKyS=K|ha3Ge!JaBIGd_Yk94 zo2%<{dSG1`(%thpwfKO5PH}~4KxzHWe5}YU?QZHLRdPsy;v%Q-`&ZZV048fudFA5f z$H~pCYK>+h7nZ+&a;B%!?A+Or!8POlvl;w*_*qI~;b?_jgZfQW|t0eg8?=kuz?Gj9VoG@z!vi)MqXb-THjMC zNo6vVV=9Z}S%XeKK8Ik#d8}>`eMRJ82aY*UOgwQ+UIA%8bb%Y>q_qMGu2U6VJ&C&V z3FcXvMe(zM_kSGDr|EwPF#a02_r{a^m_pAQanP72fgibKxBLUy+{m~izAt|eMy$1;x!8E3ogSbuhWaIdF7s16tj(4JTSJtOcFtFDW9IE`{E zRs>XwIX4_3lLsR7CUbzXjddy$0khthGJtjkfb7I9w@n=t1q6KG($Df`pgr|f`K7pC zVUmfM%HKMT2`+Dk^vZ}_t^=8;$bbSjq2K&E&6$^$hlE){(bf3!%ME?hvG?yNG->qB zIztpoqi93&a(sn3#c6_jv11wKD~Mh1saig?%Cq&Rz=97Cx|POTV}iYVjeq8q^!(%& z7spV3V$b*RT-bjclEcUrN|hAzCMec`qyPr#<(`5Esuu2cQ0%Ax+6w0=DI8zjA?HF< z1IkF5k#k&sb9o;CZZjKwfohZ$VOe%Lh_{}p7{>4t@D{Q$vP@pgk5%}AP_&P1QTJy; ztfBQUfs5IqD_81kRgq*_CINTr=S2Yce$x~I5WVS8s4G-Zw!kc};q$rOi!cNUb+B%C z@-aX8iYbrnrR3*bwUIrHbP5ho@;UCrT~P1yw$2nsH7M(|1J}NQTn;r!3rp6Vv?-=|t?JxaW(2G1BRE+hwBXKM`~>3FpDy2Kw^5dtFg_le1Vc zGP1(1E7;NPi17Q4P^w>$bG`b2Nnuu; zl7?AsMZ%yZA9`AK-mRH*4XXdEin8ewF8NK)X?cj-=9BQsD&N4CFW<#mr19}nPIK|P zGHh7v7<;Bi<*9}!NRlQssIS|v8=I6$Ga`Oip+&eT3}W72iOpyIm7tl3-S(CE4`F!a zh1-jnQbOu^oG#he-vpzv9qX!P^@>Lu0}Ro>P0<3iIdC%Qf`tn)!->x21vpTFXXhOi z@=OY`*qwUk6gzbkja#f*I!87%e&7Q8l+4NPzK+U{0>RdCyK~B`FWeJ$SI0^B*N^Wg z!xn*Nmj{li92Agtgxc_#u0^E&?4a@~YMsD1IY)MN|M-jBh4R2%{YC%mSYON}N$x9; zCsc+vrU5%dcHw$aSNmXCmZ~OYZ4EEYOrP0S?JjzvO!)_wLr3}-ww86dv*xa59}v9m zdB*ij4RoXd-&B-MxvC&TfwTazG7np|$X|=2P}8??oo-7D?^|8ODa$QiEfqSPA~r3r z-D2V${lYDS^NxV%lq>9F$S)C*jM}zF)1#(Sx- z>K$UOANeCM2`jj0BGURfOfEo=a|#7c)MnH4igq_TweqTc7J

$g-C%kB@FC6j|2Y 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 Date: Sun, 16 Jul 2023 14:37:28 +0800 Subject: [PATCH 02/16] change picture center --- ...30715-porting-riscv-ukl-translate-part3.md | 40 ++++++++++++------ .../porting-riscv-ukl-2/translate-table-1.PNG | Bin 23524 -> 0 bytes 2 files changed, 28 insertions(+), 12 deletions(-) delete mode 100644 articles/images/porting-riscv-ukl-2/translate-table-1.PNG diff --git a/articles/20230715-porting-riscv-ukl-translate-part3.md b/articles/20230715-porting-riscv-ukl-translate-part3.md index 0096565..ba13e16 100644 --- a/articles/20230715-porting-riscv-ukl-translate-part3.md +++ b/articles/20230715-porting-riscv-ukl-translate-part3.md @@ -56,8 +56,9 @@ code paths that could be squashed for performance benefits(see fig. 5). > 表 2 将 UKL 补丁与 Kernel-Mode Linux (KML) 以及 2020 年 Linux Weekly News (LWN) 文章中描述的一些 Linux 特性进行了比较。相比之下,在最近的 Lupine 工作中使用的 KML 补丁,在内核模式下运行应用程序是 3177 LOC,这种复杂性导致补丁不被上游接受。相比之下,UKL 既提供了比 KML 更丰富的功能,又简单得多。这种简单性是由于引入 KML 以来的三个偶然变化。首先,UKL 利用了最近对 Linux 内核的修改,使得对汇编的修改干扰性大大降低。其次,UKL 只支持 x64-64,而 KML 是在需要支持 i386 的时候引入的。第三,UKL 不处理旧的硬件,比如必须由 KML 支持的 i8259 PIC。 -![这是图片](images/porting-riscv-ukl/translate-table-2.PNG#pic_center "table 2") - +

+ +
## 微基准测试 @@ -70,8 +71,9 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 图 1 比较了 Linux、UKL 的基本模型和 UKL_BYP 之间简单系统调用的开销。使用 (稍作修改的 LEBench) 微基准测试,用于测量 getppid 读、写、发送和接收的基本延迟 (都是 1 字节的有效负载)。 -![这是图片](images/porting-riscv-ukl/translate-figure-1.PNG#pic_center "figure 1") - +
+ +
> We find that the advantage of the base model of UKL that essentially replacessyscall/sysretinstructionswithcall/ret is modest, i.e., less than 5%. However, the UKL BYP configuration that avoids expensive checks on transitions between application and kernel code can be up to 83% for a getppid; suggesting that optimizing the transition between application code may have a significant performance impact. @@ -82,8 +84,9 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 图 2 对比了 Linux 与 UKL 和 UKL_BYP 在读、写、发送和接收方面的性能,我们使用 LEBench 微基准测试将有效载荷改变为8KB的数据。基线 UKL 再次显示在 Linux 上几乎没有改进,但是 UKL_BYP 显示出显著的持续改进。右纵轴也显示了 UKL_BYP 与 Linux 的比较百分比改善的下降趋势。随着在内核中花费的时间的增加,百分比增益减少。但是,即使对于高达 8KB 的有效负载,改进的百分比仍然很大,即在 11% 到 22% 之间。 -![这是图片](images/porting-riscv-ukl/translate-figure-2.PNG#pic_center "figure 2") - +
+ +
> It is interesting to contrast our results with those from the recent Lupine work. Surprisingly they observed that just eliminating the system call overhead is significant (40%) for a null system call, but since they found that (like us) the improvement dropped to below 5% in most cases, they concluded that the benefit of co-locating the application and kernel is minimal. Our results suggest that the major performance gain comes not from eliminating the hardware cost but from eliminating all the checks on the transition between the application and kernel code and that reducing this overhead has a significant impact on even expensive system calls. @@ -95,7 +98,9 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 图3比较了处理页面错误的三种不同方案,即 UKL_PF_DF、UKL_PF_SS 和 (UKL_RET_PF_DF)。对于 UKL_PF_DF,我们看到页面错误延迟比相比于 Linux 有将近 5% 的改进。UKL_PF_SS 也与前一种情况类似,这意味着在每个页面错误上进行堆栈切换的成本不会太高,而且在这两种情况下相对于 Linux 的大部分好处是由于在内核模式下处理页面错误并避免了环转换。(UKL_RET_PF_DF) 比普通 Linux 改进了 12.5% 以上。在所有这些情况下,由于处理更多页面错误所需的时间增加了,因此相对于普通Linux的改进也增加了,这就是为什么我们看到一个恒定百分比的改进。未修改的应用程序可以通过构建时 Linux 配置选项选择这些选项中的任何一个。 -![这是图片](images/porting-riscv-ukl/translate-figure-3.PNG#pic_center "figure 3") +
+ +
> We repeated this experiment for non-stack page faults, i.e., on mapped memory and got the same results. @@ -116,14 +121,21 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 我们使用 Memtier 基准测试来测试 Redis。通过在 Memtier 基准测试中,我们创建300个客户端,每个客户端向服务器发送 10 万个请求。get 和 set 操作的比率为 1 比 10。我们在 Linux, UKL_RET_BYP 和 UKL_RET_BYP 上运行 Redis,并带有更深的快捷方式。图 4 帮助我们可视化这些请求的延迟分布。 -![这是图片](images/porting-riscv-ukl/translate-figure-4.PNG#pic_center "figure 4") +
+ +
> To better understand where the time was being spent, we profiled Redis UKL with perf. Figure 5, which is part of the flame graph we generated, shows two clear opportunities for performance improvement. Blue arrows show how we could shorten the execution path by bypassing the entry and exit code for read and write system calls and invoke the underlying functionality directly. Figure 4 shows how Redis on UKL_RET shows improvement in average and 99th percentile tail latency when it bypasses the entry and exit code (UKL_RET_BYP). Table 3 shows that UKL_RET_BYP has 11% better tail latency and 12% better throughput. +> +
+ +
-![这是图片](images/porting-riscv-ukl/translate-table-3.PNG#pic_center "table 3") 为了更好地了解时间消耗在哪里,我们用 perf 对 Redis UKL 进行了分析。图 5 是我们生成的 flame graph 的一部分,它显示了两个明显的性能改进机会。蓝色箭头显示了我们如何通过绕过读写系统调用的入口和退出代码来缩短执行路径,并直接调用底层功能。图 4 显示了当 Redis 绕过进入和退出代码 (UKL_RET_BYP) 时,UKL_RET 上的平均和第 99 百分位尾部延迟是如何改善的。表 3 显示,UKL_RET_BYP 的尾部延迟提高了 11%,吞吐量提高了 12%。 -![这是图片](images/porting-riscv-ukl/translate-figure-5.PNG#pic_center "figure 5") +
+ +
> Looking at Figure 5 again, the green arrows show that read and write calls, after all the polymorphism, eventually translate into tcp_recvmsg and tcp_sendmsg respectively. To investigate any potential benefit of shortcutting deep into the kernel, we wrote some code in the kernel to interface read and write with tcp_recvmsg and tcp_sendmsg respectively. We then modified Redis (10 lines modified) to call our interface functions instead of read and write. Our results show (Figure 4) further improvement in average and 99th percentile tail latency i.e., UKL_RET_BYP (shortcut). Table 3 shows that UKL_RET_BYP (shortcut) has 22% better tail latency and 26% better throughput. @@ -143,7 +155,9 @@ Lupine在Redis上显示的结果略好于基线Linux,但它是在轻量级管 Memcached 是一个严重依赖 pthread 库和 glibc 的内部同步机制的多线程工作负载。这是一个有趣的应用程序,因为 unikernels 通常不支持复杂的应用程序,像 EbbRT 这样的系统首先必须移植 Memcached。为了评估 Memcached,我们使用了 mutlate 基准测试。此基准测试使用多个客户机在服务器上生成固定的每秒查询数负载,然后测量延迟。我们在用户空间中与 Memcached UKL 在同一个节点上运行客户端,以消除任何网络延迟,并且我们将 Memcached 服务器和客户端固定在不同的核心上。我们使用 mutinate 来生成基于 Facebook 工作负载的查询。对于不同的UKL配置,我们测量了 Memecached 每秒可以处理多少查询,同时在 500 us 服务级别协议下保持 99% 的尾部延迟。图 6 显示了具有 UKL_RET 的 Memcached 执行类似于 Linux 上的 Memcached,例如,它们都在超过 500 个请求的阈值之前提供大约 73000 个查询。 Memcached 上 UKL_RET_BYP 可以提供大约 77000 个查询而在 UKL_RET_BYP (快捷方式) 上的 Memcached 在超过 500 us 阈值之前可以提供多达 79000 个查询 (大约提高8%)。 -![这是图片](images/porting-riscv-ukl/translate-figure-6.PNG#pic_center "figure 6") +
+ +
> This experiment also serves as a functionality and compatibility result; a comparatively large application with multiple threads etc. can run on UKL. 本实验也作为功能性和兼容性的结果;具有多个线程等的较大应用程序可以在UKL上运行。 @@ -161,7 +175,9 @@ Secrecy 是一个多方计算框架,用于对私有数据进行安全分析。 图 7 显示了三个系统的运行时间归一化为 Linux 的运行时间,误差条显示了每种配置的变异系数。与其他实验一样,UKL_BYP 配置在运行时显示出适度的改进。然而,当我们对 TCP 发送和接收函数使用更深的快捷方式时,我们看到了显著的 (100x) 运行时改进。 -![这是图片](images/porting-riscv-ukl/translate-figure-7.PNG#pic_center "figure 7") +
+ +
> The improvement of the shortcut system over the others was larger than anticipated, so we reran the experiments and achieved the same level of performance. To verify that the work was still happening, we collected a capture of all the inter-node traffic using Wireshark and verified that the same number of TCP packets traveled between nodes in all three system setups for a 100 row experiment.We also instrumented the send and receive paths in Secrecy to collect individual times for send and receive calls in each system for a 100 row run. The mean and standard deviation of send times for Linux were 2.23us and 1.14us, respectively, and the values for receive times on Linux were 1,100us and 3,300us, respectively. The shortcut showed send mean and standard deviation of 896ns and 1,755ns, which is a significant speed up, but the receive numbers were 638ns and 3,888ns. diff --git a/articles/images/porting-riscv-ukl-2/translate-table-1.PNG b/articles/images/porting-riscv-ukl-2/translate-table-1.PNG deleted file mode 100644 index bd0ae093ae6c59548c8c23e491d950480ddf3e2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23524 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 NA}{?^sz}1n=Rdj01(5&% -- Gitee From c3e81a435ed080ef190d24ba448bff005a6ad981 Mon Sep 17 00:00:00 2001 From: Gege-Wang <2891067867@qq.com> Date: Sun, 16 Jul 2023 14:45:17 +0800 Subject: [PATCH 03/16] change picture name --- ...230715-porting-riscv-ukl-translate-part3.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/articles/20230715-porting-riscv-ukl-translate-part3.md b/articles/20230715-porting-riscv-ukl-translate-part3.md index ba13e16..247b227 100644 --- a/articles/20230715-porting-riscv-ukl-translate-part3.md +++ b/articles/20230715-porting-riscv-ukl-translate-part3.md @@ -57,7 +57,7 @@ code paths that could be squashed for performance benefits(see fig. 5). 表 2 将 UKL 补丁与 Kernel-Mode Linux (KML) 以及 2020 年 Linux Weekly News (LWN) 文章中描述的一些 Linux 特性进行了比较。相比之下,在最近的 Lupine 工作中使用的 KML 补丁,在内核模式下运行应用程序是 3177 LOC,这种复杂性导致补丁不被上游接受。相比之下,UKL 既提供了比 KML 更丰富的功能,又简单得多。这种简单性是由于引入 KML 以来的三个偶然变化。首先,UKL 利用了最近对 Linux 内核的修改,使得对汇编的修改干扰性大大降低。其次,UKL 只支持 x64-64,而 KML 是在需要支持 i386 的时候引入的。第三,UKL 不处理旧的硬件,比如必须由 KML 支持的 i8259 PIC。
- +
## 微基准测试 @@ -72,7 +72,7 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 图 1 比较了 Linux、UKL 的基本模型和 UKL_BYP 之间简单系统调用的开销。使用 (稍作修改的 LEBench) 微基准测试,用于测量 getppid 读、写、发送和接收的基本延迟 (都是 1 字节的有效负载)。
- +
> We find that the advantage of the base model of UKL that essentially replacessyscall/sysretinstructionswithcall/ret is modest, i.e., less than 5%. However, the UKL BYP configuration that avoids expensive checks on transitions between application and kernel code can be up to 83% for a getppid; suggesting that optimizing the transition between application code may have a significant performance impact. @@ -85,7 +85,7 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 图 2 对比了 Linux 与 UKL 和 UKL_BYP 在读、写、发送和接收方面的性能,我们使用 LEBench 微基准测试将有效载荷改变为8KB的数据。基线 UKL 再次显示在 Linux 上几乎没有改进,但是 UKL_BYP 显示出显著的持续改进。右纵轴也显示了 UKL_BYP 与 Linux 的比较百分比改善的下降趋势。随着在内核中花费的时间的增加,百分比增益减少。但是,即使对于高达 8KB 的有效负载,改进的百分比仍然很大,即在 11% 到 22% 之间。
- +
> It is interesting to contrast our results with those from the recent Lupine work. Surprisingly they observed that just eliminating the system call overhead is significant (40%) for a null system call, but since they found that (like us) the improvement dropped to below 5% in most cases, they concluded that the benefit of co-locating the application and kernel is minimal. Our results suggest that the major performance gain comes not from eliminating the hardware cost but from eliminating all the checks on the transition between the application and kernel code and that reducing this overhead has a significant impact on even expensive system calls. @@ -99,7 +99,7 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 图3比较了处理页面错误的三种不同方案,即 UKL_PF_DF、UKL_PF_SS 和 (UKL_RET_PF_DF)。对于 UKL_PF_DF,我们看到页面错误延迟比相比于 Linux 有将近 5% 的改进。UKL_PF_SS 也与前一种情况类似,这意味着在每个页面错误上进行堆栈切换的成本不会太高,而且在这两种情况下相对于 Linux 的大部分好处是由于在内核模式下处理页面错误并避免了环转换。(UKL_RET_PF_DF) 比普通 Linux 改进了 12.5% 以上。在所有这些情况下,由于处理更多页面错误所需的时间增加了,因此相对于普通Linux的改进也增加了,这就是为什么我们看到一个恒定百分比的改进。未修改的应用程序可以通过构建时 Linux 配置选项选择这些选项中的任何一个。
- +
@@ -122,19 +122,19 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 我们使用 Memtier 基准测试来测试 Redis。通过在 Memtier 基准测试中,我们创建300个客户端,每个客户端向服务器发送 10 万个请求。get 和 set 操作的比率为 1 比 10。我们在 Linux, UKL_RET_BYP 和 UKL_RET_BYP 上运行 Redis,并带有更深的快捷方式。图 4 帮助我们可视化这些请求的延迟分布。
- +
> To better understand where the time was being spent, we profiled Redis UKL with perf. Figure 5, which is part of the flame graph we generated, shows two clear opportunities for performance improvement. Blue arrows show how we could shorten the execution path by bypassing the entry and exit code for read and write system calls and invoke the underlying functionality directly. Figure 4 shows how Redis on UKL_RET shows improvement in average and 99th percentile tail latency when it bypasses the entry and exit code (UKL_RET_BYP). Table 3 shows that UKL_RET_BYP has 11% better tail latency and 12% better throughput. >
- +
为了更好地了解时间消耗在哪里,我们用 perf 对 Redis UKL 进行了分析。图 5 是我们生成的 flame graph 的一部分,它显示了两个明显的性能改进机会。蓝色箭头显示了我们如何通过绕过读写系统调用的入口和退出代码来缩短执行路径,并直接调用底层功能。图 4 显示了当 Redis 绕过进入和退出代码 (UKL_RET_BYP) 时,UKL_RET 上的平均和第 99 百分位尾部延迟是如何改善的。表 3 显示,UKL_RET_BYP 的尾部延迟提高了 11%,吞吐量提高了 12%。
- +
@@ -156,7 +156,7 @@ Lupine在Redis上显示的结果略好于基线Linux,但它是在轻量级管 Memcached 是一个严重依赖 pthread 库和 glibc 的内部同步机制的多线程工作负载。这是一个有趣的应用程序,因为 unikernels 通常不支持复杂的应用程序,像 EbbRT 这样的系统首先必须移植 Memcached。为了评估 Memcached,我们使用了 mutlate 基准测试。此基准测试使用多个客户机在服务器上生成固定的每秒查询数负载,然后测量延迟。我们在用户空间中与 Memcached UKL 在同一个节点上运行客户端,以消除任何网络延迟,并且我们将 Memcached 服务器和客户端固定在不同的核心上。我们使用 mutinate 来生成基于 Facebook 工作负载的查询。对于不同的UKL配置,我们测量了 Memecached 每秒可以处理多少查询,同时在 500 us 服务级别协议下保持 99% 的尾部延迟。图 6 显示了具有 UKL_RET 的 Memcached 执行类似于 Linux 上的 Memcached,例如,它们都在超过 500 个请求的阈值之前提供大约 73000 个查询。 Memcached 上 UKL_RET_BYP 可以提供大约 77000 个查询而在 UKL_RET_BYP (快捷方式) 上的 Memcached 在超过 500 us 阈值之前可以提供多达 79000 个查询 (大约提高8%)。
- +
> This experiment also serves as a functionality and compatibility result; a comparatively large application with multiple threads etc. can run on UKL. @@ -176,7 +176,7 @@ Secrecy 是一个多方计算框架,用于对私有数据进行安全分析。 图 7 显示了三个系统的运行时间归一化为 Linux 的运行时间,误差条显示了每种配置的变异系数。与其他实验一样,UKL_BYP 配置在运行时显示出适度的改进。然而,当我们对 TCP 发送和接收函数使用更深的快捷方式时,我们看到了显著的 (100x) 运行时改进。
- +
> The improvement of the shortcut system over the others was larger than anticipated, so we reran the experiments and achieved the same level of performance. To verify that the work was still happening, we collected a capture of all the inter-node traffic using Wireshark and verified that the same number of TCP packets traveled between nodes in all three system setups for a 100 row experiment.We also instrumented the send and receive paths in Secrecy to collect individual times for send and receive calls in each system for a 100 row run. The mean and standard deviation of send times for Linux were 2.23us and 1.14us, respectively, and the values for receive times on Linux were 1,100us and 3,300us, respectively. The shortcut showed send mean and standard deviation of 896ns and 1,755ns, which is a significant speed up, but the receive numbers were 638ns and 3,888ns. -- Gitee From 511692050d813128f25c98de98e3a4d90e743412 Mon Sep 17 00:00:00 2001 From: Gege-Wang <2891067867@qq.com> Date: Tue, 18 Jul 2023 13:02:49 +0800 Subject: [PATCH 04/16] porting-riscv-ukl-translate-part3.md: commit correct result of tinycorrect-spaces Signed-off-by: Gege-Wang <2891067867@qq.com> --- ...30715-porting-riscv-ukl-translate-part3.md | 41 ++++++++----------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/articles/20230715-porting-riscv-ukl-translate-part3.md b/articles/20230715-porting-riscv-ukl-translate-part3.md index 247b227..88888f5 100644 --- a/articles/20230715-porting-riscv-ukl-translate-part3.md +++ b/articles/20230715-porting-riscv-ukl-translate-part3.md @@ -1,4 +1,5 @@ -> Title: [Integrating Unikernel Optimizations in a General Purpose OS](https://arxiv.org/pdf/2206.00789.pdf )
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [spaces]
+> Title: [Integrating Unikernel Optimizations in a General Purpose OS](https://arxiv.org/pdf/2206.00789.pdf)
> Author: Ali Raza
> Translator: Gege-Wang <2891067867@qq.com>
> Date: 2023/07/14
@@ -34,7 +35,7 @@ UKL 项目的基本目标是在不失去 Linux 对应用程序、硬件和生态 应用程序支持:正如预期的那样,在修改后的内核上运行任何 Linux 应用程序作为普通用户级进程都没有任何困难。我们使用了数百个未经修改的二进制文件作为普通的用户级进程运行。这包括所有标准的 UNIX 实用程序、bash、不同的分析器、perf 和 eBPF 工具。 > Dozens of unmodified applications have been tested as optimization targets for UKL. These include Memcached, Redis, Secrecy, a small TCP echo server, simple test programs for C++ constructors and the STL, a complex C++ graph based benchmark suite, a performance benchmark called LEBench, and a large number of standard glibc and pthread unit test programs. -数十个未经修改的应用程序已经作为 UKL 的优化目标进行了测试。其中包括 Memcached,Redis, Secrecy,一个小型的 TCP 回显服务器,简单的 c++ 构造器和 STL 测试程序,一个复杂的基于 c++ 图形的基准测试套件,一个名为 LEBench 的性能基准测试,以及大量标准的 glibc 和 pthread 单元测试程序。 +数十个未经修改的应用程序已经作为 UKL 的优化目标进行了测试。其中包括 Memcached,Redis,Secrecy,一个小型的 TCP 回显服务器,简单的 c++ 构造器和 STL 测试程序,一个复杂的基于 c++ 图形的基准测试套件,一个名为 LEBench 的性能基准测试,以及大量标准的 glibc 和 pthread 单元测试程序。 > There are some challenges in getting some applications running on UKL. First, as expected, one needs to be able to re-compile and statically link both the application and all its dependencies. Second, we have hit a number of programs that by default invoke fork followed by exec e.g., Postgress, and many that are dependent on the dynamic loader through calls to dlopen and others. Third, we have run into issues of proprietary applications available in only binary form, e.g., user-level libraries for GPUs. @@ -53,7 +54,7 @@ code paths that could be squashed for performance benefits(see fig. 5). 基本模型的 UKL 补丁大小约为 550 行,而具有所有配置的完整 UKL 补丁大小为 1250行。由于该补丁很小且非侵入性,我们希望能够与 Linux 社区合作,使其得到上游的接受。 > Table 2 compares the UKL patch to Kernel-Mode Linux (KML) and a selection of Linux features described in Linux Weekly News (LWN) articles in 2020. For comparison, the KML patch, used in the recent Lupine work, that runs applications in kernel mode is 3177 LOC, a complexity that has resulted in the patch not being accepted upstream. In contrast, UKL both provides richer functionality than KML, and is much simpler. This simplicity is due to three fortuitous changes since KML was introduced. First, UKL, takes advantage of recent changes to the Linux kernel that make the changes to assembly much less intrusive. Second, UKL supports only x64-64, while KML was introduced at a time when it was necessary to support i386 to be relevant. Third, UKL does not deal with older hardware, like the i8259 PIC, that had to be supported by KML. -> +> 表 2 将 UKL 补丁与 Kernel-Mode Linux (KML) 以及 2020 年 Linux Weekly News (LWN) 文章中描述的一些 Linux 特性进行了比较。相比之下,在最近的 Lupine 工作中使用的 KML 补丁,在内核模式下运行应用程序是 3177 LOC,这种复杂性导致补丁不被上游接受。相比之下,UKL 既提供了比 KML 更丰富的功能,又简单得多。这种简单性是由于引入 KML 以来的三个偶然变化。首先,UKL 利用了最近对 Linux 内核的修改,使得对汇编的修改干扰性大大降低。其次,UKL 只支持 x64-64,而 KML 是在需要支持 i386 的时候引入的。第三,UKL 不处理旧的硬件,比如必须由 KML 支持的 i8259 PIC。
@@ -69,7 +70,7 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 ### 系统调用的基础性能 > Figure 1, compares the overhead of simple system calls between Linux, UKL’s base model, and UKL_BYP. Results were gathered using the (slightly modified4 LEBench) microbenchmark to measure thebaselatency of getppid read,write, sendto, and recvfrom (all with 1 byte payloads). -图 1 比较了 Linux、UKL 的基本模型和 UKL_BYP 之间简单系统调用的开销。使用 (稍作修改的 LEBench) 微基准测试,用于测量 getppid 读、写、发送和接收的基本延迟 (都是 1 字节的有效负载)。 +图 1 比较了 Linux、UKL 的基本模型和 UKL_BYP 之间简单系统调用的开销。使用 (稍作修改的 LEBench) 微基准测试,用于测量 getppid 读、写、发送和接收的基本延迟 (都是 1 字节的有效负载)。
@@ -92,9 +93,8 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 将我们的结果与最近 Lupine 的研究结果进行对比是很有趣的。令人惊讶的是,他们发现仅仅消除系统调用开销就很重要 (40%),但是由于他们发现(和我们一样)在大多数情况下,改进下降到5%以下,将应用程序和内核放在一起的好处是最小的。我们的结果表明,主要的性能增益不是来自消除硬件成本,而是来自消除应用程序和内核代码之间转换的所有检查,并且减少这种开销对昂贵的系统调用也有重大影响。 - ### 页面故障处理 -> Figure 3 compares three different schemes we have for handing page faults, i.e., UKL_PF_DF, UKL_PF_SS and (UKL_RET_PF_DF). For UKL_PF_DF, we see close to 5% improvement in page fault latency compared to Linux. UKL_PF_SS is also comparable to the previous case, which means that stack switch on every page fault is not too costly, and most of the benefit over Linux in both these cases is due to handling page faults in kernel mode and avoiding ring transition. (UKL_RET_PF_DF) gives us more than 12.5% improvement over normal Linux. In all these cases, since the time taken to service more page faults increases, the improvement over normal Linux also increases, which is why we see a constant percentage improvement. Unmodified applications can choose anyone of these options through build time Linux config options. +> Figure 3 compares three different schemes we have for handing page faults, i.e., UKL_PF_DF, UKL_PF_SS and (UKL_RET_PF_DF). For UKL_PF_DF, we see close to 5% improvement in page fault latency compared to Linux. UKL_PF_SS is also comparable to the previous case, which means that stack switch on every page fault is not too costly, and most of the benefit over Linux in both these cases is due to handling page faults in kernel mode and avoiding ring transition. (UKL_RET_PF_DF) gives us more than 12.5% improvement over normal Linux. In all these cases, since the time taken to service more page faults increases, the improvement over normal Linux also increases, which is why we see a constant percentage improvement. Unmodified applications can choose anyone of these options through build time Linux config options. 图3比较了处理页面错误的三种不同方案,即 UKL_PF_DF、UKL_PF_SS 和 (UKL_RET_PF_DF)。对于 UKL_PF_DF,我们看到页面错误延迟比相比于 Linux 有将近 5% 的改进。UKL_PF_SS 也与前一种情况类似,这意味着在每个页面错误上进行堆栈切换的成本不会太高,而且在这两种情况下相对于 Linux 的大部分好处是由于在内核模式下处理页面错误并避免了环转换。(UKL_RET_PF_DF) 比普通 Linux 改进了 12.5% 以上。在所有这些情况下,由于处理更多页面错误所需的时间增加了,因此相对于普通Linux的改进也增加了,这就是为什么我们看到一个恒定百分比的改进。未修改的应用程序可以通过构建时 Linux 配置选项选择这些选项中的任何一个。 @@ -102,7 +102,6 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的
- > We repeated this experiment for non-stack page faults, i.e., on mapped memory and got the same results. 我们对非堆栈页面错误(即在映射内存上)重复这个实验,得到了相同的结果。 @@ -113,7 +112,7 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 我们想看看真实世界的应用程序在UKL上的表现。我们选择了三种不同类型的应用程序:一个以前的研究也使用过的简单的应用程序 (Redis),一个许多内核不支持未修改的更复杂的应用程序 (Memcached),和一个延迟敏感的应用程序 (Secrecy)。我们的结果显示具有显著的优势,Redis (26%)、Memcached (8%) 和 Secrecy (100x)。 ### 简单应用:Redis -> We use Redis, a widely usedin-memory database, tomeasure the performance of UKL and its different configurations in real world applications. For this experiment, we ran Redis server on UKL on bare metal and ran the client on another physical node in the network. +> We use Redis, a widely usedin-memory database, tomeasure the performance of UKL and its different configurations in real world applications. For this experiment, we ran Redis server on UKL on bare metal and ran the client on another physical node in the network. 我们使用Redis,一个广泛使用的内存数据库,来衡量在现实世界的应用程序中的性能和它的不同配置。在这个实验中,我们在裸机上的UKL上运行Redis服务器,在网络中的另一个物理节点上运行客户端。 @@ -126,7 +125,7 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的
> To better understand where the time was being spent, we profiled Redis UKL with perf. Figure 5, which is part of the flame graph we generated, shows two clear opportunities for performance improvement. Blue arrows show how we could shorten the execution path by bypassing the entry and exit code for read and write system calls and invoke the underlying functionality directly. Figure 4 shows how Redis on UKL_RET shows improvement in average and 99th percentile tail latency when it bypasses the entry and exit code (UKL_RET_BYP). Table 3 shows that UKL_RET_BYP has 11% better tail latency and 12% better throughput. -> +>
@@ -137,7 +136,6 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 - > Looking at Figure 5 again, the green arrows show that read and write calls, after all the polymorphism, eventually translate into tcp_recvmsg and tcp_sendmsg respectively. To investigate any potential benefit of shortcutting deep into the kernel, we wrote some code in the kernel to interface read and write with tcp_recvmsg and tcp_sendmsg respectively. We then modified Redis (10 lines modified) to call our interface functions instead of read and write. Our results show (Figure 4) further improvement in average and 99th percentile tail latency i.e., UKL_RET_BYP (shortcut). Table 3 shows that UKL_RET_BYP (shortcut) has 22% better tail latency and 26% better throughput. 再次查看图 5,绿色箭头显示在所有多态性之后,读和写调用最终分别转换 tcp_recvmsg 和 tcp_sendmsg。为了研究深入内核的快捷方式的潜在好处,我们在内核中编写了一些代码,分别使用 tcp_recvmsg 和 tcp_sendmsg 进行读写操作。然后我们修改了 Redis (修改了 10 行)来调用我们的接口函数,而不是读写。我们的结果显示 (图4) 平均和第 99 百分位尾部延迟的进一步改善,即 UKL_RET_BYP (快捷方式)。表3显示 UKL_RET_BYP (快捷方式) 的尾部延迟提高 22%,吞吐量提高 26%。 @@ -151,9 +149,9 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 Lupine在Redis上显示的结果略好于基线Linux,但它是在轻量级管理程序上进行虚拟化的。尽管Lupine和UKL使用的内核版本存在巨大差异,但看看UKL在这种情况下的表现将是一件很有趣的事情。 ### 复杂应用: Memcached -> Memcached is a multithreaded workload that relies heavily on pthreads library and glibc ’s internal synchronization mechanisms. It is an interesting application because unikernels generally don’t support complex applications, and systems like EbbRT first have to port Memcached. To evaluate Memcached, we use the Mutilate benchmark. This benchmark uses multiple clients to generate a fixed queries-per-second load on the server and then measures the latency. We ran the clients in userspace on the same node as Memcached UKL to remove any network delays, and we pinned the Memcached server and clients to separate cores. We used Mutilate to generate queries based on Facebook’s workloads. For different configurations of UKL, we measured how many queries per second Memecached can serve while keeping the 99% tail latency under the 500 us service level agreement. Figure 6 shows Memcached with UKL_RET performs similar to Memcached on Linux, i.e., both serve around 73 thousand queries before exceeding the 500 us threshold. Memcached on UKL_RET_BYP can serve around 77 thousand queries(around 5% improvement), and Memcached on UKL_RET_BYP (shortcut) can serve up to 79 thousand queries (around 8% improvement) before going over the 500 us threshold. +> Memcached is a multithreaded workload that relies heavily on pthreads library and glibc ’s internal synchronization mechanisms. It is an interesting application because unikernels generally don’t support complex applications, and systems like EbbRT first have to port Memcached. To evaluate Memcached, we use the Mutilate benchmark. This benchmark uses multiple clients to generate a fixed queries-per-second load on the server and then measures the latency. We ran the clients in userspace on the same node as Memcached UKL to remove any network delays, and we pinned the Memcached server and clients to separate cores. We used Mutilate to generate queries based on Facebook’s workloads. For different configurations of UKL, we measured how many queries per second Memecached can serve while keeping the 99% tail latency under the 500 us service level agreement. Figure 6 shows Memcached with UKL_RET performs similar to Memcached on Linux, i.e., both serve around 73 thousand queries before exceeding the 500 us threshold. Memcached on UKL_RET_BYP can serve around 77 thousand queries(around 5% improvement), and Memcached on UKL_RET_BYP (shortcut) can serve up to 79 thousand queries (around 8% improvement) before going over the 500 us threshold. -Memcached 是一个严重依赖 pthread 库和 glibc 的内部同步机制的多线程工作负载。这是一个有趣的应用程序,因为 unikernels 通常不支持复杂的应用程序,像 EbbRT 这样的系统首先必须移植 Memcached。为了评估 Memcached,我们使用了 mutlate 基准测试。此基准测试使用多个客户机在服务器上生成固定的每秒查询数负载,然后测量延迟。我们在用户空间中与 Memcached UKL 在同一个节点上运行客户端,以消除任何网络延迟,并且我们将 Memcached 服务器和客户端固定在不同的核心上。我们使用 mutinate 来生成基于 Facebook 工作负载的查询。对于不同的UKL配置,我们测量了 Memecached 每秒可以处理多少查询,同时在 500 us 服务级别协议下保持 99% 的尾部延迟。图 6 显示了具有 UKL_RET 的 Memcached 执行类似于 Linux 上的 Memcached,例如,它们都在超过 500 个请求的阈值之前提供大约 73000 个查询。 Memcached 上 UKL_RET_BYP 可以提供大约 77000 个查询而在 UKL_RET_BYP (快捷方式) 上的 Memcached 在超过 500 us 阈值之前可以提供多达 79000 个查询 (大约提高8%)。 +Memcached 是一个严重依赖 pthread 库和 glibc 的内部同步机制的多线程工作负载。这是一个有趣的应用程序,因为 unikernels 通常不支持复杂的应用程序,像 EbbRT 这样的系统首先必须移植 Memcached。为了评估 Memcached,我们使用了 mutlate 基准测试。此基准测试使用多个客户机在服务器上生成固定的每秒查询数负载,然后测量延迟。我们在用户空间中与 Memcached UKL 在同一个节点上运行客户端,以消除任何网络延迟,并且我们将 Memcached 服务器和客户端固定在不同的核心上。我们使用 mutinate 来生成基于 Facebook 工作负载的查询。对于不同的UKL配置,我们测量了 Memecached 每秒可以处理多少查询,同时在 500 us 服务级别协议下保持 99% 的尾部延迟。图 6 显示了具有 UKL_RET 的 Memcached 执行类似于 Linux 上的 Memcached,例如,它们都在超过 500 个请求的阈值之前提供大约 73000 个查询。Memcached 上 UKL_RET_BYP 可以提供大约 77000 个查询而在 UKL_RET_BYP (快捷方式) 上的 Memcached 在超过 500 us 阈值之前可以提供多达 79000 个查询 (大约提高8%)。
@@ -187,7 +185,6 @@ Secrecy 是一个多方计算框架,用于对私有数据进行安全分析。 看起来,使用快捷方式,系统在绕过系统调用进入和退出路径的基础上永远不必等待数据包传递,因此快捷方式系统永远不会在等待传入消息时处于休眠状态。我们相信,因为Secrecy是延迟敏感的,因为我们加速了发送路径,我们确保没有节点需要等待数据,可以立即进入下一轮处理。此外,该快捷方式隐式地禁用了转换调度,确保应用程序始终运行到完成。这对于具有频繁障碍的应用程序至关重要。 - # 相关工作 > There has been a huge body of research on unikernels that we categorize as clean slate designs, forks of existing operating systems, and incremental systems. @@ -197,13 +194,12 @@ Secrecy 是一个多方计算框架,用于对私有数据进行安全分析。 全新设计。许多 unikernel 项目都是从头开始编写的,或者使用像 MiniOS 这样的最小内核来引导。这些项目完全控制用于构造内核的语言和方法。MirageOS 使用 OCaml 实现单内核,并使用语言和编译器级别的特性来确保对漏洞的鲁棒性和较小的攻击面。同样,OSv 使用无锁调度算法来获得未修改应用程序的性能优势。在全新 unikernel 中的实现也可以针对特定应用程序的性能进行微调,例如,Minicache 优化了 Xen 和基于 CDN 的 MiniOS 用例。此外,从头开始实现可以很容易地将高效、低级的接口暴露给应用程序,例如 EbbRT。不同的全新单内核在某些方面通常是截然相反的,这就为它们提供了广泛的选择。例如,有些可能针对自定义 api 的性能,而像 HermiTux 目标是完全兼容 Linux ABI。最近,像 Unikraft 这样的努力提供了强大的 POSIX 支持,同时还允许自定义 api 来进一步提高性能。 -> These unikernel offer compelling trade-offs to generalpurpose operating systems. These include improved security and smaller attack surfaces e.g., Xax and MirageOS, shorter boot times e.g., ClickOS and LightVM , efficient memory use through single address space e.g., OSv and many others, and better run-time performance e.g., EbbRT, Unikraft and SUESS. Some approaches target direct access to virtual or physical hardware. A number of researchers have directly confronted the problem of compatibility, e.g., OSv is almost Linux ABI compatible and HermiTux is fully ABI compatible with Linux binaries. Other projects aim to make building unikernels easier e.g., EbbRT, Libra and Unikraft. +> These unikernel offer compelling trade-offs to generalpurpose operating systems. These include improved security and smaller attack surfaces e.g., Xax and MirageOS, shorter boot times e.g., ClickOS and LightVM, efficient memory use through single address space e.g., OSv and many others, and better run-time performance e.g., EbbRT, Unikraft and SUESS. Some approaches target direct access to virtual or physical hardware. A number of researchers have directly confronted the problem of compatibility, e.g., OSv is almost Linux ABI compatible and HermiTux is fully ABI compatible with Linux binaries. Other projects aim to make building unikernels easier e.g., EbbRT, Libra and Unikraft. -这些 unikernel 为通用操作系统提供了令人信服的折衷。这些包括改进的安全性和更小的攻击面,例如 Xax 和 MirageOS,更短的启动时间,例如 ClickOS 和 LightVM,通过单个地址空间高效地使用内存,例如OSv和许多其他,以及更好的运行时性能,例如,EbbRT、Unikraft、SUESS。一些方法针对直接访问虚拟或物理硬件。许多研究者直接面对兼容性问题,例如 OSv 几乎与 Linux ABI 兼容,HermiTux 与 Linux 二进制文件完全 ABI 兼容。其他项目旨在使构建 unikernel 更容易,例如 EbbRT, Libra和Unikraft。 +这些 unikernel 为通用操作系统提供了令人信服的折衷。这些包括改进的安全性和更小的攻击面,例如 Xax 和 MirageOS,更短的启动时间,例如 ClickOS 和 LightVM,通过单个地址空间高效地使用内存,例如OSv和许多其他,以及更好的运行时性能,例如,EbbRT、Unikraft、SUESS。一些方法针对直接访问虚拟或物理硬件。许多研究者直接面对兼容性问题,例如 OSv 几乎与 Linux ABI 兼容,HermiTux 与 Linux 二进制文件完全 ABI 兼容。其他项目旨在使构建 unikernel 更容易,例如 EbbRT,Libra和Unikraft。 > The UKL effort was inspired by the tremendous results demonstrated by clean slate unikernels. Our research targets trying to find ways to integrate some of the advantages these systems have shown into a general-purpose OS. - UKL 的努力受到了由全新 unikernels 所展示的巨大结果的启发。我们的研究目标是试图找到将这些系统所显示的一些优点集成到通用操作系统中的方法。 > Forks of General Purpose OS. A number of projects either fork an existing general-purpose OS code base or reuse a significant portion of one. Examples include Drawbridge which harvests code from Windows, Rump kernel which uses NetBSD drivers and Linux Kernel Library (LKL) which borrows code from Linux. These systems, although constrained by the design and structure of the original OS, generally have better compatibility with existing applications. The codebase these systems fork are well tested and can serve as building blocks for other research projects, e.g., Rump has been used in other projects. @@ -214,19 +210,14 @@ UKL 的努力受到了由全新 unikernels 所展示的巨大结果的启发。 我们在 UKL 中的目标是尝试找到一种方法来集成单内核优化,而不需要在原始操作系统上进行分支。 - - - > IncrementalSystems. There are systems, e.g.,KernelMode Linux (KML), Lupine and X-Containers which use an existing general-purpose operating system (Linux) but make comparatively fewer changes. This way, a lot of working knowledge of users of Linux can easily transfer over to these systems, but in doing so, these systems only expose the system call entry points to applications and don’t make any further specializations. Unlike UKL, they don’t co-optimize the application and kernel together. Lupine and X-Containers demonstrate opportunities in customizing Linux through build time configurations, and that is orthogonal and complementary to UKL. UKL can also benefit from a customized Linux and then add unikernel optimizations on top of that. -增量系统。有一些系统,例如 KernelModeLinux (KML), Lupine 和 X-Containers,它们使用现有的通用操作系统 (Linux),但进行的更改相对较少。这样,Linux 用户的许多工作知识可以很容易地转移到这些系统中,但是这样做,这些系统只向应用程序公开系统调用入口点,而不进行任何进一步的专门化。与UKL不同的是,它们不会共同优化应用程序和内核。Lupine 与 X-Containers 展示了通过构建时配置定制 Linux 的机会,这与 UKL 是正交的和互补的。UKL 还可以从定制的然后在此基础上添加单内核优化。 - - +增量系统。有一些系统,例如 KernelModeLinux (KML),Lupine 和 X-Containers,它们使用现有的通用操作系统 (Linux),但进行的更改相对较少。这样,Linux 用户的许多工作知识可以很容易地转移到这些系统中,但是这样做,这些系统只向应用程序公开系统调用入口点,而不进行任何进一步的专门化。与UKL不同的是,它们不会共同优化应用程序和内核。Lupine 与 X-Containers 展示了通过构建时配置定制 Linux 的机会,这与 UKL 是正交的和互补的。UKL 还可以从定制的然后在此基础上添加单内核优化。 # 结束语 > UKL creates a unikernel target of glibc and the Linux kernel. The changes are modest, and we have shown even with these, it is possible to achieve substantial performance advantages for real workloads, e.g., 26% improvement in Redis throughput while improving tail latency by 22%. UKL supports both virtualized platforms and bare-metal platforms. While we have not tested a wide range of devices, we have so far experienced no issues using any device that Linux supports. Operators can configure and control UKL using the same tools they are familiar with, and developers have the ability to use standard Linux kernel tools like BPF and perf to analyze their programs. -UKL 创建 glibc 和 Linux 内核的单内核目标。这些变化是适度的,我们已经证明,即使有了这些,也有可能在实际工作负载中实现实质性的性能优势,例如,在 Redis 吞吐量提高 26% 的同时将尾部延迟提高 22%。UKL 同时支持虚拟化平台和裸机平台。虽然我们没有测试过大量的设备,但到目前为止,我们在使用 Linux 支持的任何设备时都没有遇到任何问题。操作人员可以使用他们熟悉的相同工具配置和控制 UKL,开发人员可以使用标准的 Linux 内核工具 (如 BPF 和 perf ) 来分析他们的程序。 +UKL 创建 glibc 和 Linux 内核的单内核目标。这些变化是适度的,我们已经证明,即使有了这些,也有可能在实际工作负载中实现实质性的性能优势,例如,在 Redis 吞吐量提高 26% 的同时将尾部延迟提高 22%。UKL 同时支持虚拟化平台和裸机平台。虽然我们没有测试过大量的设备,但到目前为止,我们在使用 Linux 支持的任何设备时都没有遇到任何问题。操作人员可以使用他们熟悉的相同工具配置和控制 UKL,开发人员可以使用标准的 Linux 内核工具 (如 BPF 和 perf) 来分析他们的程序。 > UKL differs in a number of interesting ways from unikernels. First, while application and kernel code are statically linked together, UKL provides very different execution environments for each; enabling applications to run in UKL with no modifications while minimizing changes to the invariants (whatever they are) that the kernel code expects. Second, UKL enables a knowledgable developer to incrementally optimize performance by modifying the application to directly take advantage of kernel capabilities, violating the normal assumptions of kernel versus application code. Third, processes can run on top of UKL, enabling the entire ecosystem of Linux tools and scripting to just work. @@ -244,10 +235,10 @@ UKL 在许多有趣的方面与 unikernels 不同。首先,虽然应用程序 我们才刚刚开始对 UKL 进行性能优化。随着我们对 Linux 知识的增加,一系列易于采用的简单优化已经变得明显,超出了当前的努力。在应用程序中引入和/或利用零复制接口有多难?当只有一个应用程序使用传入数据时,减少BSD套接字接口中隐式的一些隐私假设有多难? -> These kernel-centric optimizations are just the start. From an application perspective, we believe that UKL will provide a natural path for improving performance and reducing the complexity of complex concurrent workloads. Concurrent operations on shared resources must be regulated. Often the burden falls onto the user code. From the user-level, it is hard to determine whether synchronization is needed, and the controlling operations and controlled entities usually live in the kernel. If the user code moves into the kernel and has the same privileges, some operations might become faster or possible in the first place. For instance, in a garbage collector, it might be necessary to prevent or at least detect whether concurrent accesses happen. With easy and fast access to the memory infrastructure (e.g., page tables) and the scheduler, many situations in which explicit, slow synchronization is needed might get away with detecting and cleaning up violations of the assumptions. +> These kernel-centric optimizations are just the start. From an application perspective, we believe that UKL will provide a natural path for improving performance and reducing the complexity of complex concurrent workloads. Concurrent operations on shared resources must be regulated. Often the burden falls onto the user code. From the user-level, it is hard to determine whether synchronization is needed, and the controlling operations and controlled entities usually live in the kernel. If the user code moves into the kernel and has the same privileges, some operations might become faster or possible in the first place. For instance, in a garbage collector, it might be necessary to prevent or at least detect whether concurrent accesses happen. With easy and fast access to the memory infrastructure (e.g., page tables) and the scheduler, many situations in which explicit, slow synchronization is needed might get away with detecting and cleaning up violations of the assumptions. 这些以内核为中心的优化仅仅是个开始。从应用程序的角度来看,我们相信 UKL 将为提高性能和降低复杂并发工作负载的复杂性提供一条自然的途径。必须规范对共享资源的并发操作。通常负担落在用户代码上。从用户级别来看,很难确定是否需要同步,并且控制操作和控制实体通常位于内核中。如果用户代码移到内核中并具有相同的特权,那么某些操作可能会变得更快,或者可能首先变得更快。例如,在垃圾收集器中,可能需要防止或至少检测并发访问是否发生。通过对内存基础设施 (例如页表) 和调度器的简单快速访问,在许多需要显式缓慢同步的情况下,可以检测和清除违反假设的情况。 > If the Linux community accepts UKL, we believe it will not only impact Linux but may become a very important platform for future research. While the benefits to researchers of broad applications on HCL support are obvious. Perhaps less obvious, as unikernel researchers, is the ability to use tools like ktest to deploy and manage experiments, BPF and perf to be able to understand performance, have been incredibly valuable. -如果 Linux 社区接受 UKL,我们相信它不仅会影响 Linux,而且可能成为未来研究的一个非常重要的平台。而HCL支持的广泛应用对研究人员的好处是显而易见的。也许不太明显的是,作为 unikernel 研究人员,使用像 ktest 这样的工具来部署和管理实验的能力,使用 BPF 和 perf 理解性能,已经非常有价值。 \ No newline at end of file +如果 Linux 社区接受 UKL,我们相信它不仅会影响 Linux,而且可能成为未来研究的一个非常重要的平台。而HCL支持的广泛应用对研究人员的好处是显而易见的。也许不太明显的是,作为 unikernel 研究人员,使用像 ktest 这样的工具来部署和管理实验的能力,使用 BPF 和 perf 理解性能,已经非常有价值。 -- Gitee From 93bcabaf937724c4fd0db7ddf9a06b8a442ceff4 Mon Sep 17 00:00:00 2001 From: Gege-Wang <2891067867@qq.com> Date: Tue, 18 Jul 2023 13:02:52 +0800 Subject: [PATCH 05/16] porting-riscv-ukl-translate-part3.md: commit correct result of tinycorrect-quotes Signed-off-by: Gege-Wang <2891067867@qq.com> --- articles/20230715-porting-riscv-ukl-translate-part3.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/articles/20230715-porting-riscv-ukl-translate-part3.md b/articles/20230715-porting-riscv-ukl-translate-part3.md index 88888f5..d1314f6 100644 --- a/articles/20230715-porting-riscv-ukl-translate-part3.md +++ b/articles/20230715-porting-riscv-ukl-translate-part3.md @@ -1,4 +1,4 @@ -> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [spaces]
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [spaces quotes]
> Title: [Integrating Unikernel Optimizations in a General Purpose OS](https://arxiv.org/pdf/2206.00789.pdf)
> Author: Ali Raza
> Translator: Gege-Wang <2891067867@qq.com>
@@ -54,7 +54,6 @@ code paths that could be squashed for performance benefits(see fig. 5). 基本模型的 UKL 补丁大小约为 550 行,而具有所有配置的完整 UKL 补丁大小为 1250行。由于该补丁很小且非侵入性,我们希望能够与 Linux 社区合作,使其得到上游的接受。 > Table 2 compares the UKL patch to Kernel-Mode Linux (KML) and a selection of Linux features described in Linux Weekly News (LWN) articles in 2020. For comparison, the KML patch, used in the recent Lupine work, that runs applications in kernel mode is 3177 LOC, a complexity that has resulted in the patch not being accepted upstream. In contrast, UKL both provides richer functionality than KML, and is much simpler. This simplicity is due to three fortuitous changes since KML was introduced. First, UKL, takes advantage of recent changes to the Linux kernel that make the changes to assembly much less intrusive. Second, UKL supports only x64-64, while KML was introduced at a time when it was necessary to support i386 to be relevant. Third, UKL does not deal with older hardware, like the i8259 PIC, that had to be supported by KML. -> 表 2 将 UKL 补丁与 Kernel-Mode Linux (KML) 以及 2020 年 Linux Weekly News (LWN) 文章中描述的一些 Linux 特性进行了比较。相比之下,在最近的 Lupine 工作中使用的 KML 补丁,在内核模式下运行应用程序是 3177 LOC,这种复杂性导致补丁不被上游接受。相比之下,UKL 既提供了比 KML 更丰富的功能,又简单得多。这种简单性是由于引入 KML 以来的三个偶然变化。首先,UKL 利用了最近对 Linux 内核的修改,使得对汇编的修改干扰性大大降低。其次,UKL 只支持 x64-64,而 KML 是在需要支持 i386 的时候引入的。第三,UKL 不处理旧的硬件,比如必须由 KML 支持的 i8259 PIC。
@@ -125,7 +124,6 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的
> To better understand where the time was being spent, we profiled Redis UKL with perf. Figure 5, which is part of the flame graph we generated, shows two clear opportunities for performance improvement. Blue arrows show how we could shorten the execution path by bypassing the entry and exit code for read and write system calls and invoke the underlying functionality directly. Figure 4 shows how Redis on UKL_RET shows improvement in average and 99th percentile tail latency when it bypasses the entry and exit code (UKL_RET_BYP). Table 3 shows that UKL_RET_BYP has 11% better tail latency and 12% better throughput. ->
-- Gitee From f9ed315cbf332af4d92b594db2d90f22a3568c7a Mon Sep 17 00:00:00 2001 From: Gege-Wang <2891067867@qq.com> Date: Tue, 18 Jul 2023 13:02:56 +0800 Subject: [PATCH 06/16] porting-riscv-ukl-translate-part3.md: commit correct result of tinycorrect-toc Signed-off-by: Gege-Wang <2891067867@qq.com> --- .../20230715-porting-riscv-ukl-translate-part3.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/articles/20230715-porting-riscv-ukl-translate-part3.md b/articles/20230715-porting-riscv-ukl-translate-part3.md index d1314f6..657ef36 100644 --- a/articles/20230715-porting-riscv-ukl-translate-part3.md +++ b/articles/20230715-porting-riscv-ukl-translate-part3.md @@ -1,4 +1,4 @@ -> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [spaces quotes]
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [spaces quotes toc]
> Title: [Integrating Unikernel Optimizations in a General Purpose OS](https://arxiv.org/pdf/2206.00789.pdf)
> Author: Ali Raza
> Translator: Gege-Wang <2891067867@qq.com>
@@ -8,6 +8,7 @@ > Sponsor: PLCT Lab, ISCAS 在通用式操作系统中集成Unikernel优化-part3 + # 评估 > After our experimental environment (§5.1), §5.2 discusses our experience with UKL supporting the fundamental non-performance goals of enabling Linux’s application support, HCL, and ecosystem. In Section 5.3 microbenchmarks are used to evaluate the performance of UKL on simple system calls (§5.3.1), more complex system calls (§5.3.2) and page faults (§5.3.3). We find that, while the advantage of just avoiding the hardware overhead of system calls is small, the advantage of adopting unikernel optimizations is large for simple kernel calls (e.g., 83%) and significant for page faults (e.g., 12.5%). Moreover, the improvement is significant even for expensive kernel calls that transfer 8KB of data (e.g., 24%). @@ -67,6 +68,7 @@ code paths that could be squashed for performance benefits(see fig. 5). Unikernels提供了显著减少应用程序和内核代码之间交互开销的机会。我们评估了UKL优化如何影响简单系统调用(§5.3.1)和更昂贵的系统调用的开销(第5.3.2节)和页面错误(第5.3.3节)。我们的结果与最近的研究结果相矛盾,该研究表明,这种优势是适度的;我们看到开销的减少比之前报告的更大(例如,90%),甚至对于具有大效负载的请求也有显著的影响(例如,对于8KByte的recvfrom(),减少了24%)。 ### 系统调用的基础性能 + > Figure 1, compares the overhead of simple system calls between Linux, UKL’s base model, and UKL_BYP. Results were gathered using the (slightly modified4 LEBench) microbenchmark to measure thebaselatency of getppid read,write, sendto, and recvfrom (all with 1 byte payloads). 图 1 比较了 Linux、UKL 的基本模型和 UKL_BYP 之间简单系统调用的开销。使用 (稍作修改的 LEBench) 微基准测试,用于测量 getppid 读、写、发送和接收的基本延迟 (都是 1 字节的有效负载)。 @@ -80,6 +82,7 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 我们发现,UKL的基本模型的优势本质上是用call/ret代替syscall/sysret指令,这种优势是适度的,即小于5%。然而,UKL BYP配置可以避免在应用程序和内核代码之间的转换上进行昂贵的检查,对于getppid来说,这种配置可以达到83%;这表明优化应用程序代码之间的转换可能会对性能产生重大影响。 ### 大请求 + > Figure 2 contrasts the performance of Linux to UKL and UKL_BYP for read, write, sendto and recvfrom as we use LEBench microbenchmark to vary the payload up to 8KB of data. Again, baseline UKL shows very little improvement over Linux, but UKL_BYP shows a significant constant improvement. The right vertical axis also shows the downward trend of percentage improvement of UKL_BYP compared to Linux. As the time spent in the kernel increases, the percentage gain decreases. But even for payloads of up to 8KB, the percentage improvement is still significant, i.e., between 11% and 22%. 图 2 对比了 Linux 与 UKL 和 UKL_BYP 在读、写、发送和接收方面的性能,我们使用 LEBench 微基准测试将有效载荷改变为8KB的数据。基线 UKL 再次显示在 Linux 上几乎没有改进,但是 UKL_BYP 显示出显著的持续改进。右纵轴也显示了 UKL_BYP 与 Linux 的比较百分比改善的下降趋势。随着在内核中花费的时间的增加,百分比增益减少。但是,即使对于高达 8KB 的有效负载,改进的百分比仍然很大,即在 11% 到 22% 之间。 @@ -93,6 +96,7 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 将我们的结果与最近 Lupine 的研究结果进行对比是很有趣的。令人惊讶的是,他们发现仅仅消除系统调用开销就很重要 (40%),但是由于他们发现(和我们一样)在大多数情况下,改进下降到5%以下,将应用程序和内核放在一起的好处是最小的。我们的结果表明,主要的性能增益不是来自消除硬件成本,而是来自消除应用程序和内核代码之间转换的所有检查,并且减少这种开销对昂贵的系统调用也有重大影响。 ### 页面故障处理 + > Figure 3 compares three different schemes we have for handing page faults, i.e., UKL_PF_DF, UKL_PF_SS and (UKL_RET_PF_DF). For UKL_PF_DF, we see close to 5% improvement in page fault latency compared to Linux. UKL_PF_SS is also comparable to the previous case, which means that stack switch on every page fault is not too costly, and most of the benefit over Linux in both these cases is due to handling page faults in kernel mode and avoiding ring transition. (UKL_RET_PF_DF) gives us more than 12.5% improvement over normal Linux. In all these cases, since the time taken to service more page faults increases, the improvement over normal Linux also increases, which is why we see a constant percentage improvement. Unmodified applications can choose anyone of these options through build time Linux config options. 图3比较了处理页面错误的三种不同方案,即 UKL_PF_DF、UKL_PF_SS 和 (UKL_RET_PF_DF)。对于 UKL_PF_DF,我们看到页面错误延迟比相比于 Linux 有将近 5% 的改进。UKL_PF_SS 也与前一种情况类似,这意味着在每个页面错误上进行堆栈切换的成本不会太高,而且在这两种情况下相对于 Linux 的大部分好处是由于在内核模式下处理页面错误并避免了环转换。(UKL_RET_PF_DF) 比普通 Linux 改进了 12.5% 以上。在所有这些情况下,由于处理更多页面错误所需的时间增加了,因此相对于普通Linux的改进也增加了,这就是为什么我们看到一个恒定百分比的改进。未修改的应用程序可以通过构建时 Linux 配置选项选择这些选项中的任何一个。 @@ -106,11 +110,13 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 我们对非堆栈页面错误(即在映射内存上)重复这个实验,得到了相同的结果。 ## 应用性能 + > We want to see how real world applications perform on UKL. We chose three different types of applications: a simple application (Redis) used by previous works as well, a more complex application (Memcached) that many unikernels don’t support unmodified, and a latency-sensitive application (Secrecy). Our results show significant advantages in Redis (26%), Memcached (8%), and Secrecy (100x). 我们想看看真实世界的应用程序在UKL上的表现。我们选择了三种不同类型的应用程序:一个以前的研究也使用过的简单的应用程序 (Redis),一个许多内核不支持未修改的更复杂的应用程序 (Memcached),和一个延迟敏感的应用程序 (Secrecy)。我们的结果显示具有显著的优势,Redis (26%)、Memcached (8%) 和 Secrecy (100x)。 ### 简单应用:Redis + > We use Redis, a widely usedin-memory database, tomeasure the performance of UKL and its different configurations in real world applications. For this experiment, we ran Redis server on UKL on bare metal and ran the client on another physical node in the network. 我们使用Redis,一个广泛使用的内存数据库,来衡量在现实世界的应用程序中的性能和它的不同配置。在这个实验中,我们在裸机上的UKL上运行Redis服务器,在网络中的另一个物理节点上运行客户端。 @@ -147,6 +153,7 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 Lupine在Redis上显示的结果略好于基线Linux,但它是在轻量级管理程序上进行虚拟化的。尽管Lupine和UKL使用的内核版本存在巨大差异,但看看UKL在这种情况下的表现将是一件很有趣的事情。 ### 复杂应用: Memcached + > Memcached is a multithreaded workload that relies heavily on pthreads library and glibc ’s internal synchronization mechanisms. It is an interesting application because unikernels generally don’t support complex applications, and systems like EbbRT first have to port Memcached. To evaluate Memcached, we use the Mutilate benchmark. This benchmark uses multiple clients to generate a fixed queries-per-second load on the server and then measures the latency. We ran the clients in userspace on the same node as Memcached UKL to remove any network delays, and we pinned the Memcached server and clients to separate cores. We used Mutilate to generate queries based on Facebook’s workloads. For different configurations of UKL, we measured how many queries per second Memecached can serve while keeping the 99% tail latency under the 500 us service level agreement. Figure 6 shows Memcached with UKL_RET performs similar to Memcached on Linux, i.e., both serve around 73 thousand queries before exceeding the 500 us threshold. Memcached on UKL_RET_BYP can serve around 77 thousand queries(around 5% improvement), and Memcached on UKL_RET_BYP (shortcut) can serve up to 79 thousand queries (around 8% improvement) before going over the 500 us threshold. Memcached 是一个严重依赖 pthread 库和 glibc 的内部同步机制的多线程工作负载。这是一个有趣的应用程序,因为 unikernels 通常不支持复杂的应用程序,像 EbbRT 这样的系统首先必须移植 Memcached。为了评估 Memcached,我们使用了 mutlate 基准测试。此基准测试使用多个客户机在服务器上生成固定的每秒查询数负载,然后测量延迟。我们在用户空间中与 Memcached UKL 在同一个节点上运行客户端,以消除任何网络延迟,并且我们将 Memcached 服务器和客户端固定在不同的核心上。我们使用 mutinate 来生成基于 Facebook 工作负载的查询。对于不同的UKL配置,我们测量了 Memecached 每秒可以处理多少查询,同时在 500 us 服务级别协议下保持 99% 的尾部延迟。图 6 显示了具有 UKL_RET 的 Memcached 执行类似于 Linux 上的 Memcached,例如,它们都在超过 500 个请求的阈值之前提供大约 73000 个查询。Memcached 上 UKL_RET_BYP 可以提供大约 77000 个查询而在 UKL_RET_BYP (快捷方式) 上的 Memcached 在超过 500 us 阈值之前可以提供多达 79000 个查询 (大约提高8%)。 @@ -159,6 +166,7 @@ Memcached 是一个严重依赖 pthread 库和 glibc 的内部同步机制的多 本实验也作为功能性和兼容性的结果;具有多个线程等的较大应用程序可以在UKL上运行。 ### 对延迟敏感的应用: Secrecy + > Secrecy is a multi-party computation framework for secure analytics on private data. While Redis and Memcached are throughput sensitive, Secrecy is latency-sensitive. This represents an important class of applications, e.g., highspeed financial trading, etc. Secrecy is a three node protocol with each node sending data to its successor and receiving from its predecessor with the third node sending to the first. Computation is done row by row with a round of messages that act as a barrier between each row. Secrecy 是一个多方计算框架,用于对私有数据进行安全分析。Redis 和 Memcached 是吞吐量敏感的,而 secrecy 是延迟敏感的。这代表了一类重要的应用,例如高速金融交易等。Secrecy 是一个三节点协议,每个节点向后继节点发送数据,并从前一个节点接收数据,第三个节点向第一个节点发送数据。计算逐行进行,并使用一轮消息作为每行之间的屏障。 @@ -184,6 +192,7 @@ Secrecy 是一个多方计算框架,用于对私有数据进行安全分析。 看起来,使用快捷方式,系统在绕过系统调用进入和退出路径的基础上永远不必等待数据包传递,因此快捷方式系统永远不会在等待传入消息时处于休眠状态。我们相信,因为Secrecy是延迟敏感的,因为我们加速了发送路径,我们确保没有节点需要等待数据,可以立即进入下一轮处理。此外,该快捷方式隐式地禁用了转换调度,确保应用程序始终运行到完成。这对于具有频繁障碍的应用程序至关重要。 # 相关工作 + > There has been a huge body of research on unikernels that we categorize as clean slate designs, forks of existing operating systems, and incremental systems. 我们已经对 unikernels 进行了大量的研究,我们将其归类为全新设计、通用操作系统的分支和增量系统。 @@ -213,6 +222,7 @@ UKL 的努力受到了由全新 unikernels 所展示的巨大结果的启发。 增量系统。有一些系统,例如 KernelModeLinux (KML),Lupine 和 X-Containers,它们使用现有的通用操作系统 (Linux),但进行的更改相对较少。这样,Linux 用户的许多工作知识可以很容易地转移到这些系统中,但是这样做,这些系统只向应用程序公开系统调用入口点,而不进行任何进一步的专门化。与UKL不同的是,它们不会共同优化应用程序和内核。Lupine 与 X-Containers 展示了通过构建时配置定制 Linux 的机会,这与 UKL 是正交的和互补的。UKL 还可以从定制的然后在此基础上添加单内核优化。 # 结束语 + > UKL creates a unikernel target of glibc and the Linux kernel. The changes are modest, and we have shown even with these, it is possible to achieve substantial performance advantages for real workloads, e.g., 26% improvement in Redis throughput while improving tail latency by 22%. UKL supports both virtualized platforms and bare-metal platforms. While we have not tested a wide range of devices, we have so far experienced no issues using any device that Linux supports. Operators can configure and control UKL using the same tools they are familiar with, and developers have the ability to use standard Linux kernel tools like BPF and perf to analyze their programs. UKL 创建 glibc 和 Linux 内核的单内核目标。这些变化是适度的,我们已经证明,即使有了这些,也有可能在实际工作负载中实现实质性的性能优势,例如,在 Redis 吞吐量提高 26% 的同时将尾部延迟提高 22%。UKL 同时支持虚拟化平台和裸机平台。虽然我们没有测试过大量的设备,但到目前为止,我们在使用 Linux 支持的任何设备时都没有遇到任何问题。操作人员可以使用他们熟悉的相同工具配置和控制 UKL,开发人员可以使用标准的 Linux 内核工具 (如 BPF 和 perf) 来分析他们的程序。 -- Gitee From 63f84b5aca7e648df7d7cc84511f2fd3b9b6502f Mon Sep 17 00:00:00 2001 From: Gege-Wang <2891067867@qq.com> Date: Fri, 28 Jul 2023 10:51:29 +0800 Subject: [PATCH 07/16] tiny --- ...30715-porting-riscv-ukl-translate-part3.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/articles/20230715-porting-riscv-ukl-translate-part3.md b/articles/20230715-porting-riscv-ukl-translate-part3.md index 657ef36..751877a 100644 --- a/articles/20230715-porting-riscv-ukl-translate-part3.md +++ b/articles/20230715-porting-riscv-ukl-translate-part3.md @@ -7,25 +7,25 @@ > Project: [RISC-V Linux 内核剖析](https://gitee.com/tinylab/riscv-linux)
> Sponsor: PLCT Lab, ISCAS -在通用式操作系统中集成Unikernel优化-part3 +# 在通用式操作系统中集成 Unikernel 优化-part3 -# 评估 +## 评估 > After our experimental environment (§5.1), §5.2 discusses our experience with UKL supporting the fundamental non-performance goals of enabling Linux’s application support, HCL, and ecosystem. In Section 5.3 microbenchmarks are used to evaluate the performance of UKL on simple system calls (§5.3.1), more complex system calls (§5.3.2) and page faults (§5.3.3). We find that, while the advantage of just avoiding the hardware overhead of system calls is small, the advantage of adopting unikernel optimizations is large for simple kernel calls (e.g., 83%) and significant for page faults (e.g., 12.5%). Moreover, the improvement is significant even for expensive kernel calls that transfer 8KB of data (e.g., 24%). -在我们的实验环境 (§5.1) 之后,§5.2 讨论了我们使用 UKL 支持的基本非性能目标的经验,包括允许 Linux 应用程序支持,HCL和生态系统。在 5.3 节中,微基准测试用于评估 UKL 在简单系统调用 (第5.3.1节)、更复杂系统调用 (第5.3.2节) 和页面错误 (第5.3.3节) 上的性能。我们发现,虽然仅仅避免系统调用的硬件开销的优势很小,但采用单内核优化的优势对于简单的内核调用很大 (例如,83%),对于页面错误也很重要 (例如,12.5%)。此外,即使对于传输 8KB 数据的昂贵内核调用 (例如,24%),这种改进也是显著的。 +在我们的实验环境 (§5.1) 之后,§5.2 讨论了我们使用 UKL 支持的基本非性能目标的经验,包括允许 Linux 应用程序支持,HCL和生态系统。在 5.3 节中,微基准测试用于评估 UKL 在简单系统调用 (第5.3.1节)、更复杂系统调用 (第5.3.2节) 和页面错误 (第5.3.3节) 上的性能。我们发现,虽然仅仅避免系统调用的硬件开销的优势很小,但采用单内核优化的优势对于简单的内核调用很大 (例如,83%),对于页面错误也很重要 (例如,12.5%)。此外,即使对于传输 8KB 数据的昂贵内核调用 (例如,24%),这种改进也是显著的。 > In Section 5.4 we evaluate applying unikernel optimizations to both throughput (Redis §5.4.1, Memcached §5.4.2) and latency bound (Secrecy §5.4.3) applications. We find that configuration options provided by UKL can enable significant throughput improvements (e.g., 12%) and a simple 10 line change in Redis code results in more significant gains (e.g., 26%). The results are even more dramatic for latency-sensitive applications where configuration changes result in 15% improvement and a trivial application change enables a 100x improvement in performance. 在 5.4 节中,我们评估将单内核优化应用于吞吐量 (Redis§5.4.1,Memcached§5.4.2) 和延迟绑定 (Secrecy§5.4.3) 的应用程序。我们发现,UKL 提供的配置选项可以显著提高吞吐量 (例如,12%),Redis 代码中简单的 10 行更改会带来更显著的收益 (例如,26%)。对于对延迟敏感的应用程序,结果更加显著,其中配置更改导致 15% 的改进,而一个微不足道的应用程序更改可以使性能提高 100 倍。 -## 实验设置 +### 实验设置 > Experiments are run on Dell R620 servers configured with 128G of ram arranged as a single NUMA node. The servers have two sockets, each containing an Intel Xeon CPU E5-26600 @ 2.20GHz, with 8 real cores per socket. The processors are configured to disable Turbo Boost,hyper-threads, sleep states, and dynamic frequency scaling. The servers are connected through a 10Gb link and use Broadcom NetXtremeII BCM57800 1/10 Gigabit Ethernet NICs. Experiments run on multiple computers use identically configured machines attached to the same top of rack switch to reduce external noise. On the software side, we use Linux 5.14 kernel and glibc version 2.31. Linux and different configurations of UKL were built with same compile-time config options. We ran experiments on virtual and physical hardware and got consistent and repeatable results. In the interest of space, we only report bare-metal numbers unless stated otherwise. 实验运行 Dell R620 服务器上,服务器配置的 128G RAM 被安排为单个 NUMA 节点。服务器有两个插槽,每个插槽都包含一个英特尔至强处理器 E5-26600 @ 2.20GHz,每个插槽有 8 个 real core。处理器被配置为禁用 Turbo Boost、超线程、睡眠状态和动态频率缩放。服务器通过 10Gb 的链路连接,并使用 Broadcom NetXtremeII BCM57800 1/10 千兆以太网网卡。实验在多台计算机上运行,使用相同配置的机器连接到相同的机架顶部开关,以减少外部噪音。在软件方面,我们使用 Linux 5.14 内核和 glibc 2.31 版本。Linux 和不同的 UKL 配置是用相同的编译时配置选项构建的。我们在虚拟和物理硬件上进行了实验,得到了一致和可重复的结果。由于篇幅的关系,除非另有说明,否则我们只报告裸金属数据。 -## Linux应用程序、硬件及生态系统 +### Linux应用程序、硬件及生态系统 > The fundamental goals of the UKL project are to integrate unikernel optimizations without losing Linux’s broad support for applications, hardware, and ecosystem. We discuss each of these three goals in turn. @@ -61,13 +61,13 @@ code paths that could be squashed for performance benefits(see fig. 5).
-## 微基准测试 +### 微基准测试 > Unikernels offer the opportunity to dramatically reduce the overhead of interactions between application and kernel code. We evaluate how UKL optimizations impact the overhead of simple system calls (§5.3.1), more expensive system calls (§5.3.2), and page faults (§5.3.3). Our results contradict recent work that suggests that the advantages are modest; we see that the reduction in overhead is larger (e.g., 90%) than previously reported and has a significant impact even for requests with large payloads (e.g., 24% with 8KByte recvfrom()). Unikernels提供了显著减少应用程序和内核代码之间交互开销的机会。我们评估了UKL优化如何影响简单系统调用(§5.3.1)和更昂贵的系统调用的开销(第5.3.2节)和页面错误(第5.3.3节)。我们的结果与最近的研究结果相矛盾,该研究表明,这种优势是适度的;我们看到开销的减少比之前报告的更大(例如,90%),甚至对于具有大效负载的请求也有显著的影响(例如,对于8KByte的recvfrom(),减少了24%)。 -### 系统调用的基础性能 +1. 系统调用的基础性能 > Figure 1, compares the overhead of simple system calls between Linux, UKL’s base model, and UKL_BYP. Results were gathered using the (slightly modified4 LEBench) microbenchmark to measure thebaselatency of getppid read,write, sendto, and recvfrom (all with 1 byte payloads). @@ -81,7 +81,7 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 我们发现,UKL的基本模型的优势本质上是用call/ret代替syscall/sysret指令,这种优势是适度的,即小于5%。然而,UKL BYP配置可以避免在应用程序和内核代码之间的转换上进行昂贵的检查,对于getppid来说,这种配置可以达到83%;这表明优化应用程序代码之间的转换可能会对性能产生重大影响。 -### 大请求 +2. 大请求 > Figure 2 contrasts the performance of Linux to UKL and UKL_BYP for read, write, sendto and recvfrom as we use LEBench microbenchmark to vary the payload up to 8KB of data. Again, baseline UKL shows very little improvement over Linux, but UKL_BYP shows a significant constant improvement. The right vertical axis also shows the downward trend of percentage improvement of UKL_BYP compared to Linux. As the time spent in the kernel increases, the percentage gain decreases. But even for payloads of up to 8KB, the percentage improvement is still significant, i.e., between 11% and 22%. @@ -95,7 +95,7 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 将我们的结果与最近 Lupine 的研究结果进行对比是很有趣的。令人惊讶的是,他们发现仅仅消除系统调用开销就很重要 (40%),但是由于他们发现(和我们一样)在大多数情况下,改进下降到5%以下,将应用程序和内核放在一起的好处是最小的。我们的结果表明,主要的性能增益不是来自消除硬件成本,而是来自消除应用程序和内核代码之间转换的所有检查,并且减少这种开销对昂贵的系统调用也有重大影响。 -### 页面故障处理 +3. 页面故障处理 > Figure 3 compares three different schemes we have for handing page faults, i.e., UKL_PF_DF, UKL_PF_SS and (UKL_RET_PF_DF). For UKL_PF_DF, we see close to 5% improvement in page fault latency compared to Linux. UKL_PF_SS is also comparable to the previous case, which means that stack switch on every page fault is not too costly, and most of the benefit over Linux in both these cases is due to handling page faults in kernel mode and avoiding ring transition. (UKL_RET_PF_DF) gives us more than 12.5% improvement over normal Linux. In all these cases, since the time taken to service more page faults increases, the improvement over normal Linux also increases, which is why we see a constant percentage improvement. Unmodified applications can choose anyone of these options through build time Linux config options. @@ -109,13 +109,13 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 我们对非堆栈页面错误(即在映射内存上)重复这个实验,得到了相同的结果。 -## 应用性能 +### 应用性能 > We want to see how real world applications perform on UKL. We chose three different types of applications: a simple application (Redis) used by previous works as well, a more complex application (Memcached) that many unikernels don’t support unmodified, and a latency-sensitive application (Secrecy). Our results show significant advantages in Redis (26%), Memcached (8%), and Secrecy (100x). 我们想看看真实世界的应用程序在UKL上的表现。我们选择了三种不同类型的应用程序:一个以前的研究也使用过的简单的应用程序 (Redis),一个许多内核不支持未修改的更复杂的应用程序 (Memcached),和一个延迟敏感的应用程序 (Secrecy)。我们的结果显示具有显著的优势,Redis (26%)、Memcached (8%) 和 Secrecy (100x)。 -### 简单应用:Redis +1. 简单应用:Redis > We use Redis, a widely usedin-memory database, tomeasure the performance of UKL and its different configurations in real world applications. For this experiment, we ran Redis server on UKL on bare metal and ran the client on another physical node in the network. @@ -152,7 +152,7 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 Lupine在Redis上显示的结果略好于基线Linux,但它是在轻量级管理程序上进行虚拟化的。尽管Lupine和UKL使用的内核版本存在巨大差异,但看看UKL在这种情况下的表现将是一件很有趣的事情。 -### 复杂应用: Memcached +2. 复杂应用: Memcached > Memcached is a multithreaded workload that relies heavily on pthreads library and glibc ’s internal synchronization mechanisms. It is an interesting application because unikernels generally don’t support complex applications, and systems like EbbRT first have to port Memcached. To evaluate Memcached, we use the Mutilate benchmark. This benchmark uses multiple clients to generate a fixed queries-per-second load on the server and then measures the latency. We ran the clients in userspace on the same node as Memcached UKL to remove any network delays, and we pinned the Memcached server and clients to separate cores. We used Mutilate to generate queries based on Facebook’s workloads. For different configurations of UKL, we measured how many queries per second Memecached can serve while keeping the 99% tail latency under the 500 us service level agreement. Figure 6 shows Memcached with UKL_RET performs similar to Memcached on Linux, i.e., both serve around 73 thousand queries before exceeding the 500 us threshold. Memcached on UKL_RET_BYP can serve around 77 thousand queries(around 5% improvement), and Memcached on UKL_RET_BYP (shortcut) can serve up to 79 thousand queries (around 8% improvement) before going over the 500 us threshold. @@ -165,7 +165,7 @@ Memcached 是一个严重依赖 pthread 库和 glibc 的内部同步机制的多 > This experiment also serves as a functionality and compatibility result; a comparatively large application with multiple threads etc. can run on UKL. 本实验也作为功能性和兼容性的结果;具有多个线程等的较大应用程序可以在UKL上运行。 -### 对延迟敏感的应用: Secrecy +3. 对延迟敏感的应用: Secrecy > Secrecy is a multi-party computation framework for secure analytics on private data. While Redis and Memcached are throughput sensitive, Secrecy is latency-sensitive. This represents an important class of applications, e.g., highspeed financial trading, etc. Secrecy is a three node protocol with each node sending data to its successor and receiving from its predecessor with the third node sending to the first. Computation is done row by row with a round of messages that act as a barrier between each row. @@ -191,7 +191,7 @@ Secrecy 是一个多方计算框架,用于对私有数据进行安全分析。 看起来,使用快捷方式,系统在绕过系统调用进入和退出路径的基础上永远不必等待数据包传递,因此快捷方式系统永远不会在等待传入消息时处于休眠状态。我们相信,因为Secrecy是延迟敏感的,因为我们加速了发送路径,我们确保没有节点需要等待数据,可以立即进入下一轮处理。此外,该快捷方式隐式地禁用了转换调度,确保应用程序始终运行到完成。这对于具有频繁障碍的应用程序至关重要。 -# 相关工作 +## 相关工作 > There has been a huge body of research on unikernels that we categorize as clean slate designs, forks of existing operating systems, and incremental systems. @@ -221,7 +221,7 @@ UKL 的努力受到了由全新 unikernels 所展示的巨大结果的启发。 增量系统。有一些系统,例如 KernelModeLinux (KML),Lupine 和 X-Containers,它们使用现有的通用操作系统 (Linux),但进行的更改相对较少。这样,Linux 用户的许多工作知识可以很容易地转移到这些系统中,但是这样做,这些系统只向应用程序公开系统调用入口点,而不进行任何进一步的专门化。与UKL不同的是,它们不会共同优化应用程序和内核。Lupine 与 X-Containers 展示了通过构建时配置定制 Linux 的机会,这与 UKL 是正交的和互补的。UKL 还可以从定制的然后在此基础上添加单内核优化。 -# 结束语 +## 总结 > UKL creates a unikernel target of glibc and the Linux kernel. The changes are modest, and we have shown even with these, it is possible to achieve substantial performance advantages for real workloads, e.g., 26% improvement in Redis throughput while improving tail latency by 22%. UKL supports both virtualized platforms and bare-metal platforms. While we have not tested a wide range of devices, we have so far experienced no issues using any device that Linux supports. Operators can configure and control UKL using the same tools they are familiar with, and developers have the ability to use standard Linux kernel tools like BPF and perf to analyze their programs. -- Gitee From 80e8a67d40eb47d8bfbbfcc9358ca89914c61593 Mon Sep 17 00:00:00 2001 From: Gege-Wang <2891067867@qq.com> Date: Fri, 28 Jul 2023 10:51:52 +0800 Subject: [PATCH 08/16] porting-riscv-ukl-translate-part3.md: commit correct result of tinycorrect-spaces Signed-off-by: Gege-Wang <2891067867@qq.com> --- articles/20230715-porting-riscv-ukl-translate-part3.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/articles/20230715-porting-riscv-ukl-translate-part3.md b/articles/20230715-porting-riscv-ukl-translate-part3.md index 751877a..0870706 100644 --- a/articles/20230715-porting-riscv-ukl-translate-part3.md +++ b/articles/20230715-porting-riscv-ukl-translate-part3.md @@ -1,4 +1,4 @@ -> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [spaces quotes toc]
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [spaces]
> Title: [Integrating Unikernel Optimizations in a General Purpose OS](https://arxiv.org/pdf/2206.00789.pdf)
> Author: Ali Raza
> Translator: Gege-Wang <2891067867@qq.com>
@@ -13,7 +13,7 @@ > After our experimental environment (§5.1), §5.2 discusses our experience with UKL supporting the fundamental non-performance goals of enabling Linux’s application support, HCL, and ecosystem. In Section 5.3 microbenchmarks are used to evaluate the performance of UKL on simple system calls (§5.3.1), more complex system calls (§5.3.2) and page faults (§5.3.3). We find that, while the advantage of just avoiding the hardware overhead of system calls is small, the advantage of adopting unikernel optimizations is large for simple kernel calls (e.g., 83%) and significant for page faults (e.g., 12.5%). Moreover, the improvement is significant even for expensive kernel calls that transfer 8KB of data (e.g., 24%). -在我们的实验环境 (§5.1) 之后,§5.2 讨论了我们使用 UKL 支持的基本非性能目标的经验,包括允许 Linux 应用程序支持,HCL和生态系统。在 5.3 节中,微基准测试用于评估 UKL 在简单系统调用 (第5.3.1节)、更复杂系统调用 (第5.3.2节) 和页面错误 (第5.3.3节) 上的性能。我们发现,虽然仅仅避免系统调用的硬件开销的优势很小,但采用单内核优化的优势对于简单的内核调用很大 (例如,83%),对于页面错误也很重要 (例如,12.5%)。此外,即使对于传输 8KB 数据的昂贵内核调用 (例如,24%),这种改进也是显著的。 +在我们的实验环境(§5.1)之后,§5.2 讨论了我们使用 UKL 支持的基本非性能目标的经验,包括允许 Linux 应用程序支持,HCL和生态系统。在 5.3 节中,微基准测试用于评估 UKL 在简单系统调用(第5.3.1节)、更复杂系统调用(第5.3.2节)和页面错误 (第5.3.3节) 上的性能。我们发现,虽然仅仅避免系统调用的硬件开销的优势很小,但采用单内核优化的优势对于简单的内核调用很大 (例如,83%),对于页面错误也很重要 (例如,12.5%)。此外,即使对于传输 8KB 数据的昂贵内核调用 (例如,24%),这种改进也是显著的。 > In Section 5.4 we evaluate applying unikernel optimizations to both throughput (Redis §5.4.1, Memcached §5.4.2) and latency bound (Secrecy §5.4.3) applications. We find that configuration options provided by UKL can enable significant throughput improvements (e.g., 12%) and a simple 10 line change in Redis code results in more significant gains (e.g., 26%). The results are even more dramatic for latency-sensitive applications where configuration changes result in 15% improvement and a trivial application change enables a 100x improvement in performance. -- Gitee From 0c66b071bb3b9e64148239bc30941f722c27f258 Mon Sep 17 00:00:00 2001 From: Gege-Wang <2891067867@qq.com> Date: Fri, 28 Jul 2023 10:52:01 +0800 Subject: [PATCH 09/16] porting-riscv-ukl-translate-part3.md: commit correct result of tinycorrect-refs Signed-off-by: Gege-Wang <2891067867@qq.com> --- articles/20230715-porting-riscv-ukl-translate-part3.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/articles/20230715-porting-riscv-ukl-translate-part3.md b/articles/20230715-porting-riscv-ukl-translate-part3.md index 0870706..818fab7 100644 --- a/articles/20230715-porting-riscv-ukl-translate-part3.md +++ b/articles/20230715-porting-riscv-ukl-translate-part3.md @@ -1,4 +1,4 @@ -> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [spaces]
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [spaces refs]
> Title: [Integrating Unikernel Optimizations in a General Purpose OS](https://arxiv.org/pdf/2206.00789.pdf)
> Author: Ali Raza
> Translator: Gege-Wang <2891067867@qq.com>
@@ -249,4 +249,7 @@ UKL 在许多有趣的方面与 unikernels 不同。首先,虽然应用程序 > If the Linux community accepts UKL, we believe it will not only impact Linux but may become a very important platform for future research. While the benefits to researchers of broad applications on HCL support are obvious. Perhaps less obvious, as unikernel researchers, is the ability to use tools like ktest to deploy and manage experiments, BPF and perf to be able to understand performance, have been incredibly valuable. +## 参考资料 + + 如果 Linux 社区接受 UKL,我们相信它不仅会影响 Linux,而且可能成为未来研究的一个非常重要的平台。而HCL支持的广泛应用对研究人员的好处是显而易见的。也许不太明显的是,作为 unikernel 研究人员,使用像 ktest 这样的工具来部署和管理实验的能力,使用 BPF 和 perf 理解性能,已经非常有价值。 -- Gitee From 2e817a5b94f2326d3078b316acc3d1bf8a815666 Mon Sep 17 00:00:00 2001 From: Gege-Wang <2891067867@qq.com> Date: Fri, 28 Jul 2023 10:52:07 +0800 Subject: [PATCH 10/16] porting-riscv-ukl-translate-part3.md: commit correct result of tinycorrect-pangu Signed-off-by: Gege-Wang <2891067867@qq.com> --- ...30715-porting-riscv-ukl-translate-part3.md | 75 +++++++++---------- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/articles/20230715-porting-riscv-ukl-translate-part3.md b/articles/20230715-porting-riscv-ukl-translate-part3.md index 818fab7..8156b4b 100644 --- a/articles/20230715-porting-riscv-ukl-translate-part3.md +++ b/articles/20230715-porting-riscv-ukl-translate-part3.md @@ -1,4 +1,4 @@ -> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [spaces refs]
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [spaces refs pangu]
> Title: [Integrating Unikernel Optimizations in a General Purpose OS](https://arxiv.org/pdf/2206.00789.pdf)
> Author: Ali Raza
> Translator: Gege-Wang <2891067867@qq.com>
@@ -13,11 +13,11 @@ > After our experimental environment (§5.1), §5.2 discusses our experience with UKL supporting the fundamental non-performance goals of enabling Linux’s application support, HCL, and ecosystem. In Section 5.3 microbenchmarks are used to evaluate the performance of UKL on simple system calls (§5.3.1), more complex system calls (§5.3.2) and page faults (§5.3.3). We find that, while the advantage of just avoiding the hardware overhead of system calls is small, the advantage of adopting unikernel optimizations is large for simple kernel calls (e.g., 83%) and significant for page faults (e.g., 12.5%). Moreover, the improvement is significant even for expensive kernel calls that transfer 8KB of data (e.g., 24%). -在我们的实验环境(§5.1)之后,§5.2 讨论了我们使用 UKL 支持的基本非性能目标的经验,包括允许 Linux 应用程序支持,HCL和生态系统。在 5.3 节中,微基准测试用于评估 UKL 在简单系统调用(第5.3.1节)、更复杂系统调用(第5.3.2节)和页面错误 (第5.3.3节) 上的性能。我们发现,虽然仅仅避免系统调用的硬件开销的优势很小,但采用单内核优化的优势对于简单的内核调用很大 (例如,83%),对于页面错误也很重要 (例如,12.5%)。此外,即使对于传输 8KB 数据的昂贵内核调用 (例如,24%),这种改进也是显著的。 +在我们的实验环境(§5.1)之后,§5.2 讨论了我们使用 UKL 支持的基本非性能目标的经验,包括允许 Linux 应用程序支持,HCL 和生态系统。在 5.3 节中,微基准测试用于评估 UKL 在简单系统调用(第 5.3.1 节)、更复杂系统调用(第 5.3.2 节)和页面错误(第 5.3.3 节)上的性能。我们发现,虽然仅仅避免系统调用的硬件开销的优势很小,但采用单内核优化的优势对于简单的内核调用很大(例如,83%),对于页面错误也很重要(例如,12.5%)。此外,即使对于传输 8KB 数据的昂贵内核调用(例如,24%),这种改进也是显著的。 > In Section 5.4 we evaluate applying unikernel optimizations to both throughput (Redis §5.4.1, Memcached §5.4.2) and latency bound (Secrecy §5.4.3) applications. We find that configuration options provided by UKL can enable significant throughput improvements (e.g., 12%) and a simple 10 line change in Redis code results in more significant gains (e.g., 26%). The results are even more dramatic for latency-sensitive applications where configuration changes result in 15% improvement and a trivial application change enables a 100x improvement in performance. -在 5.4 节中,我们评估将单内核优化应用于吞吐量 (Redis§5.4.1,Memcached§5.4.2) 和延迟绑定 (Secrecy§5.4.3) 的应用程序。我们发现,UKL 提供的配置选项可以显著提高吞吐量 (例如,12%),Redis 代码中简单的 10 行更改会带来更显著的收益 (例如,26%)。对于对延迟敏感的应用程序,结果更加显著,其中配置更改导致 15% 的改进,而一个微不足道的应用程序更改可以使性能提高 100 倍。 +在 5.4 节中,我们评估将单内核优化应用于吞吐量 (Redis§5.4.1,Memcached§5.4.2) 和延迟绑定 (Secrecy§5.4.3) 的应用程序。我们发现,UKL 提供的配置选项可以显著提高吞吐量(例如,12%),Redis 代码中简单的 10 行更改会带来更显著的收益(例如,26%)。对于对延迟敏感的应用程序,结果更加显著,其中配置更改导致 15% 的改进,而一个微不足道的应用程序更改可以使性能提高 100 倍。 ### 实验设置 @@ -25,7 +25,7 @@ 实验运行 Dell R620 服务器上,服务器配置的 128G RAM 被安排为单个 NUMA 节点。服务器有两个插槽,每个插槽都包含一个英特尔至强处理器 E5-26600 @ 2.20GHz,每个插槽有 8 个 real core。处理器被配置为禁用 Turbo Boost、超线程、睡眠状态和动态频率缩放。服务器通过 10Gb 的链路连接,并使用 Broadcom NetXtremeII BCM57800 1/10 千兆以太网网卡。实验在多台计算机上运行,使用相同配置的机器连接到相同的机架顶部开关,以减少外部噪音。在软件方面,我们使用 Linux 5.14 内核和 glibc 2.31 版本。Linux 和不同的 UKL 配置是用相同的编译时配置选项构建的。我们在虚拟和物理硬件上进行了实验,得到了一致和可重复的结果。由于篇幅的关系,除非另有说明,否则我们只报告裸金属数据。 -### Linux应用程序、硬件及生态系统 +### Linux 应用程序、硬件及生态系统 > The fundamental goals of the UKL project are to integrate unikernel optimizations without losing Linux’s broad support for applications, hardware, and ecosystem. We discuss each of these three goals in turn. @@ -33,7 +33,7 @@ UKL 项目的基本目标是在不失去 Linux 对应用程序、硬件和生态 > Application support: As expected, we have had no difficulty running any Linux application as normal user-level processes on our modified kernel. We have used hundreds of unmodified binaries running as normal user-level processes without effort. That includes all the standard UNIX utilities, bash, different profilers, perf, and eBPF tools. -应用程序支持:正如预期的那样,在修改后的内核上运行任何 Linux 应用程序作为普通用户级进程都没有任何困难。我们使用了数百个未经修改的二进制文件作为普通的用户级进程运行。这包括所有标准的 UNIX 实用程序、bash、不同的分析器、perf 和 eBPF 工具。 +应用程序支持:正如预期的那样,在修改后的内核上运行任何 Linux 应用程序作为普通用户级进程都没有任何困难。我们使用了数百个未经修改的二进制文件作为普通的用户级进程运行。这包括所有标准的 UNIX 实用程序、bash、不同的分析器、perf 和 eBPF 工具。 > Dozens of unmodified applications have been tested as optimization targets for UKL. These include Memcached, Redis, Secrecy, a small TCP echo server, simple test programs for C++ constructors and the STL, a complex C++ graph based benchmark suite, a performance benchmark called LEBench, and a large number of standard glibc and pthread unit test programs. 数十个未经修改的应用程序已经作为 UKL 的优化目标进行了测试。其中包括 Memcached,Redis,Secrecy,一个小型的 TCP 回显服务器,简单的 c++ 构造器和 STL 测试程序,一个复杂的基于 c++ 图形的基准测试套件,一个名为 LEBench 的性能基准测试,以及大量标准的 glibc 和 pthread 单元测试程序。 @@ -44,15 +44,15 @@ UKL 项目的基本目标是在不失去 Linux 对应用程序、硬件和生态 > Hardware support: For hardware, we have not run into any compatibility issues and have booted or kexeced to UKL on five different x86-64 servers and virtualization platforms. The scripts and tools used to deploy and manage normal Linux machines were used for UKL deployments as well. -硬件支持:对于硬件,我们没有遇到任何兼容性问题,并且已经在五个不同的 x86-64 服务器和虚拟化平台上启动或执行到 UKL。用于部署和管理普通 Linux 机器的脚本和工具也用于UKL部署。 +硬件支持:对于硬件,我们没有遇到任何兼容性问题,并且已经在五个不同的 x86-64 服务器和虚拟化平台上启动或执行到 UKL。用于部署和管理普通 Linux 机器的脚本和工具也用于 UKL 部署。 > Ecosystem: Due to having a full-fledged userspace, we have been able to run all the different applications, utilities, and tools that can run on unmodified Linux. This has been extremely critical in building UKL, i.e., we use all the debugging tools and techniques available in Linux. We have been able to profile UKL workloads with perf and able to identify code paths that could be squashed for performance benefits(see fig. 5). -生态系统:由于拥有一个成熟的用户空间,我们已经能够运行所有不同的应用程序、实用程序和工具,这些都可以在未经修改的 Linux 上运行。这在构建 UKL 时非常关键,也就是说,我们使用 Linux 中可用的所有调试工具和技术。我们已经能够对具有性能的 UKL 工作负载进行概要分析,并能够识别可以压缩以获得性能优势的代码路径(见图5)。 +生态系统:由于拥有一个成熟的用户空间,我们已经能够运行所有不同的应用程序、实用程序和工具,这些都可以在未经修改的 Linux 上运行。这在构建 UKL 时非常关键,也就是说,我们使用 Linux 中可用的所有调试工具和技术。我们已经能够对具有性能的 UKL 工作负载进行概要分析,并能够识别可以压缩以获得性能优势的代码路径(见图 5)。 > The UKL patch size for the base model is around 550 lines, and the full UKL patch with all the configurations is 1250 lines. Since the patch is small and non-invasive, we are hopeful that we can work with the Linux community towards upstream acceptance. -基本模型的 UKL 补丁大小约为 550 行,而具有所有配置的完整 UKL 补丁大小为 1250行。由于该补丁很小且非侵入性,我们希望能够与 Linux 社区合作,使其得到上游的接受。 +基本模型的 UKL 补丁大小约为 550 行,而具有所有配置的完整 UKL 补丁大小为 1250 行。由于该补丁很小且非侵入性,我们希望能够与 Linux 社区合作,使其得到上游的接受。 > Table 2 compares the UKL patch to Kernel-Mode Linux (KML) and a selection of Linux features described in Linux Weekly News (LWN) articles in 2020. For comparison, the KML patch, used in the recent Lupine work, that runs applications in kernel mode is 3177 LOC, a complexity that has resulted in the patch not being accepted upstream. In contrast, UKL both provides richer functionality than KML, and is much simpler. This simplicity is due to three fortuitous changes since KML was introduced. First, UKL, takes advantage of recent changes to the Linux kernel that make the changes to assembly much less intrusive. Second, UKL supports only x64-64, while KML was introduced at a time when it was necessary to support i386 to be relevant. Third, UKL does not deal with older hardware, like the i8259 PIC, that had to be supported by KML. 表 2 将 UKL 补丁与 Kernel-Mode Linux (KML) 以及 2020 年 Linux Weekly News (LWN) 文章中描述的一些 Linux 特性进行了比较。相比之下,在最近的 Lupine 工作中使用的 KML 补丁,在内核模式下运行应用程序是 3177 LOC,这种复杂性导致补丁不被上游接受。相比之下,UKL 既提供了比 KML 更丰富的功能,又简单得多。这种简单性是由于引入 KML 以来的三个偶然变化。首先,UKL 利用了最近对 Linux 内核的修改,使得对汇编的修改干扰性大大降低。其次,UKL 只支持 x64-64,而 KML 是在需要支持 i386 的时候引入的。第三,UKL 不处理旧的硬件,比如必须由 KML 支持的 i8259 PIC。 @@ -65,13 +65,13 @@ code paths that could be squashed for performance benefits(see fig. 5). > Unikernels offer the opportunity to dramatically reduce the overhead of interactions between application and kernel code. We evaluate how UKL optimizations impact the overhead of simple system calls (§5.3.1), more expensive system calls (§5.3.2), and page faults (§5.3.3). Our results contradict recent work that suggests that the advantages are modest; we see that the reduction in overhead is larger (e.g., 90%) than previously reported and has a significant impact even for requests with large payloads (e.g., 24% with 8KByte recvfrom()). -Unikernels提供了显著减少应用程序和内核代码之间交互开销的机会。我们评估了UKL优化如何影响简单系统调用(§5.3.1)和更昂贵的系统调用的开销(第5.3.2节)和页面错误(第5.3.3节)。我们的结果与最近的研究结果相矛盾,该研究表明,这种优势是适度的;我们看到开销的减少比之前报告的更大(例如,90%),甚至对于具有大效负载的请求也有显著的影响(例如,对于8KByte的recvfrom(),减少了24%)。 +Unikernels 提供了显著减少应用程序和内核代码之间交互开销的机会。我们评估了 UKL 优化如何影响简单系统调用(§5.3.1)和更昂贵的系统调用的开销(第 5.3.2 节)和页面错误(第 5.3.3 节)。我们的结果与最近的研究结果相矛盾,该研究表明,这种优势是适度的;我们看到开销的减少比之前报告的更大(例如,90%),甚至对于具有大效负载的请求也有显著的影响(例如,对于 8KByte 的 recvfrom(),减少了 24%)。 1. 系统调用的基础性能 > Figure 1, compares the overhead of simple system calls between Linux, UKL’s base model, and UKL_BYP. Results were gathered using the (slightly modified4 LEBench) microbenchmark to measure thebaselatency of getppid read,write, sendto, and recvfrom (all with 1 byte payloads). -图 1 比较了 Linux、UKL 的基本模型和 UKL_BYP 之间简单系统调用的开销。使用 (稍作修改的 LEBench) 微基准测试,用于测量 getppid 读、写、发送和接收的基本延迟 (都是 1 字节的有效负载)。 +图 1 比较了 Linux、UKL 的基本模型和 UKL_BYP 之间简单系统调用的开销。使用(稍作修改的 LEBench)微基准测试,用于测量 getppid 读、写、发送和接收的基本延迟(都是 1 字节的有效负载)。
@@ -79,13 +79,13 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 > We find that the advantage of the base model of UKL that essentially replacessyscall/sysretinstructionswithcall/ret is modest, i.e., less than 5%. However, the UKL BYP configuration that avoids expensive checks on transitions between application and kernel code can be up to 83% for a getppid; suggesting that optimizing the transition between application code may have a significant performance impact. -我们发现,UKL的基本模型的优势本质上是用call/ret代替syscall/sysret指令,这种优势是适度的,即小于5%。然而,UKL BYP配置可以避免在应用程序和内核代码之间的转换上进行昂贵的检查,对于getppid来说,这种配置可以达到83%;这表明优化应用程序代码之间的转换可能会对性能产生重大影响。 +我们发现,UKL 的基本模型的优势本质上是用 call/ret 代替 syscall/sysret 指令,这种优势是适度的,即小于 5%。然而,UKL BYP 配置可以避免在应用程序和内核代码之间的转换上进行昂贵的检查,对于 getppid 来说,这种配置可以达到 83%;这表明优化应用程序代码之间的转换可能会对性能产生重大影响。 2. 大请求 > Figure 2 contrasts the performance of Linux to UKL and UKL_BYP for read, write, sendto and recvfrom as we use LEBench microbenchmark to vary the payload up to 8KB of data. Again, baseline UKL shows very little improvement over Linux, but UKL_BYP shows a significant constant improvement. The right vertical axis also shows the downward trend of percentage improvement of UKL_BYP compared to Linux. As the time spent in the kernel increases, the percentage gain decreases. But even for payloads of up to 8KB, the percentage improvement is still significant, i.e., between 11% and 22%. -图 2 对比了 Linux 与 UKL 和 UKL_BYP 在读、写、发送和接收方面的性能,我们使用 LEBench 微基准测试将有效载荷改变为8KB的数据。基线 UKL 再次显示在 Linux 上几乎没有改进,但是 UKL_BYP 显示出显著的持续改进。右纵轴也显示了 UKL_BYP 与 Linux 的比较百分比改善的下降趋势。随着在内核中花费的时间的增加,百分比增益减少。但是,即使对于高达 8KB 的有效负载,改进的百分比仍然很大,即在 11% 到 22% 之间。 +图 2 对比了 Linux 与 UKL 和 UKL_BYP 在读、写、发送和接收方面的性能,我们使用 LEBench 微基准测试将有效载荷改变为 8KB 的数据。基线 UKL 再次显示在 Linux 上几乎没有改进,但是 UKL_BYP 显示出显著的持续改进。右纵轴也显示了 UKL_BYP 与 Linux 的比较百分比改善的下降趋势。随着在内核中花费的时间的增加,百分比增益减少。但是,即使对于高达 8KB 的有效负载,改进的百分比仍然很大,即在 11% 到 22% 之间。
@@ -93,13 +93,13 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 > It is interesting to contrast our results with those from the recent Lupine work. Surprisingly they observed that just eliminating the system call overhead is significant (40%) for a null system call, but since they found that (like us) the improvement dropped to below 5% in most cases, they concluded that the benefit of co-locating the application and kernel is minimal. Our results suggest that the major performance gain comes not from eliminating the hardware cost but from eliminating all the checks on the transition between the application and kernel code and that reducing this overhead has a significant impact on even expensive system calls. -将我们的结果与最近 Lupine 的研究结果进行对比是很有趣的。令人惊讶的是,他们发现仅仅消除系统调用开销就很重要 (40%),但是由于他们发现(和我们一样)在大多数情况下,改进下降到5%以下,将应用程序和内核放在一起的好处是最小的。我们的结果表明,主要的性能增益不是来自消除硬件成本,而是来自消除应用程序和内核代码之间转换的所有检查,并且减少这种开销对昂贵的系统调用也有重大影响。 +将我们的结果与最近 Lupine 的研究结果进行对比是很有趣的。令人惊讶的是,他们发现仅仅消除系统调用开销就很重要 (40%),但是由于他们发现(和我们一样)在大多数情况下,改进下降到 5%以下,将应用程序和内核放在一起的好处是最小的。我们的结果表明,主要的性能增益不是来自消除硬件成本,而是来自消除应用程序和内核代码之间转换的所有检查,并且减少这种开销对昂贵的系统调用也有重大影响。 3. 页面故障处理 > Figure 3 compares three different schemes we have for handing page faults, i.e., UKL_PF_DF, UKL_PF_SS and (UKL_RET_PF_DF). For UKL_PF_DF, we see close to 5% improvement in page fault latency compared to Linux. UKL_PF_SS is also comparable to the previous case, which means that stack switch on every page fault is not too costly, and most of the benefit over Linux in both these cases is due to handling page faults in kernel mode and avoiding ring transition. (UKL_RET_PF_DF) gives us more than 12.5% improvement over normal Linux. In all these cases, since the time taken to service more page faults increases, the improvement over normal Linux also increases, which is why we see a constant percentage improvement. Unmodified applications can choose anyone of these options through build time Linux config options. -图3比较了处理页面错误的三种不同方案,即 UKL_PF_DF、UKL_PF_SS 和 (UKL_RET_PF_DF)。对于 UKL_PF_DF,我们看到页面错误延迟比相比于 Linux 有将近 5% 的改进。UKL_PF_SS 也与前一种情况类似,这意味着在每个页面错误上进行堆栈切换的成本不会太高,而且在这两种情况下相对于 Linux 的大部分好处是由于在内核模式下处理页面错误并避免了环转换。(UKL_RET_PF_DF) 比普通 Linux 改进了 12.5% 以上。在所有这些情况下,由于处理更多页面错误所需的时间增加了,因此相对于普通Linux的改进也增加了,这就是为什么我们看到一个恒定百分比的改进。未修改的应用程序可以通过构建时 Linux 配置选项选择这些选项中的任何一个。 +图 3 比较了处理页面错误的三种不同方案,即 UKL_PF_DF、UKL_PF_SS 和 (UKL_RET_PF_DF)。对于 UKL_PF_DF,我们看到页面错误延迟比相比于 Linux 有将近 5% 的改进。UKL_PF_SS 也与前一种情况类似,这意味着在每个页面错误上进行堆栈切换的成本不会太高,而且在这两种情况下相对于 Linux 的大部分好处是由于在内核模式下处理页面错误并避免了环转换。(UKL_RET_PF_DF) 比普通 Linux 改进了 12.5% 以上。在所有这些情况下,由于处理更多页面错误所需的时间增加了,因此相对于普通 Linux 的改进也增加了,这就是为什么我们看到一个恒定百分比的改进。未修改的应用程序可以通过构建时 Linux 配置选项选择这些选项中的任何一个。
@@ -107,23 +107,23 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 > We repeated this experiment for non-stack page faults, i.e., on mapped memory and got the same results. -我们对非堆栈页面错误(即在映射内存上)重复这个实验,得到了相同的结果。 +我们对非堆栈页面错误(即在映射内存上)重复这个实验,得到了相同的结果。 ### 应用性能 > We want to see how real world applications perform on UKL. We chose three different types of applications: a simple application (Redis) used by previous works as well, a more complex application (Memcached) that many unikernels don’t support unmodified, and a latency-sensitive application (Secrecy). Our results show significant advantages in Redis (26%), Memcached (8%), and Secrecy (100x). -我们想看看真实世界的应用程序在UKL上的表现。我们选择了三种不同类型的应用程序:一个以前的研究也使用过的简单的应用程序 (Redis),一个许多内核不支持未修改的更复杂的应用程序 (Memcached),和一个延迟敏感的应用程序 (Secrecy)。我们的结果显示具有显著的优势,Redis (26%)、Memcached (8%) 和 Secrecy (100x)。 +我们想看看真实世界的应用程序在 UKL 上的表现。我们选择了三种不同类型的应用程序:一个以前的研究也使用过的简单的应用程序 (Redis),一个许多内核不支持未修改的更复杂的应用程序 (Memcached),和一个延迟敏感的应用程序 (Secrecy)。我们的结果显示具有显著的优势,Redis (26%)、Memcached (8%) 和 Secrecy (100x)。 -1. 简单应用:Redis +1. 简单应用:Redis > We use Redis, a widely usedin-memory database, tomeasure the performance of UKL and its different configurations in real world applications. For this experiment, we ran Redis server on UKL on bare metal and ran the client on another physical node in the network. -我们使用Redis,一个广泛使用的内存数据库,来衡量在现实世界的应用程序中的性能和它的不同配置。在这个实验中,我们在裸机上的UKL上运行Redis服务器,在网络中的另一个物理节点上运行客户端。 +我们使用 Redis,一个广泛使用的内存数据库,来衡量在现实世界的应用程序中的性能和它的不同配置。在这个实验中,我们在裸机上的 UKL 上运行 Redis 服务器,在网络中的另一个物理节点上运行客户端。 > We use the Memtier benchmark to test Redis. Through Memtier benchmark, we create 300 clients, each sending 100 thousand requests to the server. The ratio of get to set operations in 1 to 10. We ran Redis on Linux, UKL_RET_BYP and UKL_RET_BYP with deeper shortcuts. Figure 4 helps us visualize the latency distribution for these requests. -我们使用 Memtier 基准测试来测试 Redis。通过在 Memtier 基准测试中,我们创建300个客户端,每个客户端向服务器发送 10 万个请求。get 和 set 操作的比率为 1 比 10。我们在 Linux, UKL_RET_BYP 和 UKL_RET_BYP 上运行 Redis,并带有更深的快捷方式。图 4 帮助我们可视化这些请求的延迟分布。 +我们使用 Memtier 基准测试来测试 Redis。通过在 Memtier 基准测试中,我们创建 300 个客户端,每个客户端向服务器发送 10 万个请求。get 和 set 操作的比率为 1 比 10。我们在 Linux, UKL_RET_BYP 和 UKL_RET_BYP 上运行 Redis,并带有更深的快捷方式。图 4 帮助我们可视化这些请求的延迟分布。
@@ -142,30 +142,30 @@ Unikernels提供了显著减少应用程序和内核代码之间交互开销的 > Looking at Figure 5 again, the green arrows show that read and write calls, after all the polymorphism, eventually translate into tcp_recvmsg and tcp_sendmsg respectively. To investigate any potential benefit of shortcutting deep into the kernel, we wrote some code in the kernel to interface read and write with tcp_recvmsg and tcp_sendmsg respectively. We then modified Redis (10 lines modified) to call our interface functions instead of read and write. Our results show (Figure 4) further improvement in average and 99th percentile tail latency i.e., UKL_RET_BYP (shortcut). Table 3 shows that UKL_RET_BYP (shortcut) has 22% better tail latency and 26% better throughput. -再次查看图 5,绿色箭头显示在所有多态性之后,读和写调用最终分别转换 tcp_recvmsg 和 tcp_sendmsg。为了研究深入内核的快捷方式的潜在好处,我们在内核中编写了一些代码,分别使用 tcp_recvmsg 和 tcp_sendmsg 进行读写操作。然后我们修改了 Redis (修改了 10 行)来调用我们的接口函数,而不是读写。我们的结果显示 (图4) 平均和第 99 百分位尾部延迟的进一步改善,即 UKL_RET_BYP (快捷方式)。表3显示 UKL_RET_BYP (快捷方式) 的尾部延迟提高 22%,吞吐量提高 26%。 +再次查看图 5,绿色箭头显示在所有多态性之后,读和写调用最终分别转换 tcp_recvmsg 和 tcp_sendmsg。为了研究深入内核的快捷方式的潜在好处,我们在内核中编写了一些代码,分别使用 tcp_recvmsg 和 tcp_sendmsg 进行读写操作。然后我们修改了 Redis(修改了 10 行)来调用我们的接口函数,而不是读写。我们的结果显示(图 4)平均和第 99 百分位尾部延迟的进一步改善,即 UKL_RET_BYP(快捷方式)。表 3 显示 UKL_RET_BYP(快捷方式)的尾部延迟提高 22%,吞吐量提高 26%。 > Figure 4 provides us some nice insights into future possibilities. There is almost a 0.5ms difference in the shortest latencies for Linux versus UKL_RET_BYP (shortcut) case. This means that there is an opportunity to further reduce the average and tail latencies to sit closer to the smallest latency case. -图4为我们提供了一些关于未来可能性的深刻见解。Linux与UKL_RET_BYP(快捷方式)相比,最短延迟几乎相差0.5ms。这意味着有机会进一步减少平均和尾部延迟,使其更接近最小延迟情况。 +图 4 为我们提供了一些关于未来可能性的深刻见解。Linux 与 UKL_RET_BYP(快捷方式)相比,最短延迟几乎相差 0.5ms。这意味着有机会进一步减少平均和尾部延迟,使其更接近最小延迟情况。 > Lupine shows slightly better results than baseline Linux for Redis, but it does so in virtualization on a lightweight hypervisor. It would be interesting to see how UKL performs in that setting, even though there is a huge difference in kernel versions used by Lupine and UKL. -Lupine在Redis上显示的结果略好于基线Linux,但它是在轻量级管理程序上进行虚拟化的。尽管Lupine和UKL使用的内核版本存在巨大差异,但看看UKL在这种情况下的表现将是一件很有趣的事情。 +Lupine 在 Redis 上显示的结果略好于基线 Linux,但它是在轻量级管理程序上进行虚拟化的。尽管 Lupine 和 UKL 使用的内核版本存在巨大差异,但看看 UKL 在这种情况下的表现将是一件很有趣的事情。 -2. 复杂应用: Memcached +2. 复杂应用:Memcached > Memcached is a multithreaded workload that relies heavily on pthreads library and glibc ’s internal synchronization mechanisms. It is an interesting application because unikernels generally don’t support complex applications, and systems like EbbRT first have to port Memcached. To evaluate Memcached, we use the Mutilate benchmark. This benchmark uses multiple clients to generate a fixed queries-per-second load on the server and then measures the latency. We ran the clients in userspace on the same node as Memcached UKL to remove any network delays, and we pinned the Memcached server and clients to separate cores. We used Mutilate to generate queries based on Facebook’s workloads. For different configurations of UKL, we measured how many queries per second Memecached can serve while keeping the 99% tail latency under the 500 us service level agreement. Figure 6 shows Memcached with UKL_RET performs similar to Memcached on Linux, i.e., both serve around 73 thousand queries before exceeding the 500 us threshold. Memcached on UKL_RET_BYP can serve around 77 thousand queries(around 5% improvement), and Memcached on UKL_RET_BYP (shortcut) can serve up to 79 thousand queries (around 8% improvement) before going over the 500 us threshold. -Memcached 是一个严重依赖 pthread 库和 glibc 的内部同步机制的多线程工作负载。这是一个有趣的应用程序,因为 unikernels 通常不支持复杂的应用程序,像 EbbRT 这样的系统首先必须移植 Memcached。为了评估 Memcached,我们使用了 mutlate 基准测试。此基准测试使用多个客户机在服务器上生成固定的每秒查询数负载,然后测量延迟。我们在用户空间中与 Memcached UKL 在同一个节点上运行客户端,以消除任何网络延迟,并且我们将 Memcached 服务器和客户端固定在不同的核心上。我们使用 mutinate 来生成基于 Facebook 工作负载的查询。对于不同的UKL配置,我们测量了 Memecached 每秒可以处理多少查询,同时在 500 us 服务级别协议下保持 99% 的尾部延迟。图 6 显示了具有 UKL_RET 的 Memcached 执行类似于 Linux 上的 Memcached,例如,它们都在超过 500 个请求的阈值之前提供大约 73000 个查询。Memcached 上 UKL_RET_BYP 可以提供大约 77000 个查询而在 UKL_RET_BYP (快捷方式) 上的 Memcached 在超过 500 us 阈值之前可以提供多达 79000 个查询 (大约提高8%)。 +Memcached 是一个严重依赖 pthread 库和 glibc 的内部同步机制的多线程工作负载。这是一个有趣的应用程序,因为 unikernels 通常不支持复杂的应用程序,像 EbbRT 这样的系统首先必须移植 Memcached。为了评估 Memcached,我们使用了 mutlate 基准测试。此基准测试使用多个客户机在服务器上生成固定的每秒查询数负载,然后测量延迟。我们在用户空间中与 Memcached UKL 在同一个节点上运行客户端,以消除任何网络延迟,并且我们将 Memcached 服务器和客户端固定在不同的核心上。我们使用 mutinate 来生成基于 Facebook 工作负载的查询。对于不同的 UKL 配置,我们测量了 Memecached 每秒可以处理多少查询,同时在 500 us 服务级别协议下保持 99% 的尾部延迟。图 6 显示了具有 UKL_RET 的 Memcached 执行类似于 Linux 上的 Memcached,例如,它们都在超过 500 个请求的阈值之前提供大约 73000 个查询。Memcached 上 UKL_RET_BYP 可以提供大约 77000 个查询而在 UKL_RET_BYP(快捷方式)上的 Memcached 在超过 500 us 阈值之前可以提供多达 79000 个查询(大约提高 8%)。
> This experiment also serves as a functionality and compatibility result; a comparatively large application with multiple threads etc. can run on UKL. -本实验也作为功能性和兼容性的结果;具有多个线程等的较大应用程序可以在UKL上运行。 +本实验也作为功能性和兼容性的结果;具有多个线程等的较大应用程序可以在 UKL 上运行。 -3. 对延迟敏感的应用: Secrecy +3. 对延迟敏感的应用:Secrecy > Secrecy is a multi-party computation framework for secure analytics on private data. While Redis and Memcached are throughput sensitive, Secrecy is latency-sensitive. This represents an important class of applications, e.g., highspeed financial trading, etc. Secrecy is a three node protocol with each node sending data to its successor and receiving from its predecessor with the third node sending to the first. Computation is done row by row with a round of messages that act as a barrier between each row. @@ -173,7 +173,7 @@ Secrecy 是一个多方计算框架,用于对私有数据进行安全分析。 > We used a test in the Secrecy implementation for a GROUPBY operator which groups rows in a table by key attributes and counts the number of rows per group. Messages used in a round of communication are each very small, between 8 and 24 bytes each, so we configured each TCP socket to use TCP_NODELAY to avoid stalls caused by congestion control. Using this test executable, we ran experiments with 100, 1000, and 10,000 input rows and measured the time required to complete the GROUP-BY. Each system and row size combination was run 20 times, and the worst two runs for each combination were discarded. -我们在 Secrecy 实现中对 GROUPBY 操作符进行了测试,该操作符根据键属性对表中的行进行分组,并计算每组的行数。在一轮通信中使用的每个消息都非常小,每个消息在8到24字节之间,因此我们配置了要使用的每个 TCP 套接字 TCP_NODELAY 避免拥塞控制造成的延时。使用这个测试可执行文件,我们运行了 100、1000 和 10000 个输入行的实验,并测量了完成 GROUPBY 所需的时间。每个系统和行大小组合运行 20 次,每个组合的最差的两次运行被丢弃。 +我们在 Secrecy 实现中对 GROUPBY 操作符进行了测试,该操作符根据键属性对表中的行进行分组,并计算每组的行数。在一轮通信中使用的每个消息都非常小,每个消息在 8 到 24 字节之间,因此我们配置了要使用的每个 TCP 套接字 TCP_NODELAY 避免拥塞控制造成的延时。使用这个测试可执行文件,我们运行了 100、1000 和 10000 个输入行的实验,并测量了完成 GROUPBY 所需的时间。每个系统和行大小组合运行 20 次,每个组合的最差的两次运行被丢弃。 > Figure 7 shows the run times of the three systems normalized to the run time of Linux and the error bars show the coefficient of variation for each configuration. As with other experiments, the UKL_BYP configuration shows a modest improvement in run time. However, when we use the deeper shortcut to the TCP send and receive functions, we see significant (100x) runtime improvements. @@ -189,7 +189,7 @@ Secrecy 是一个多方计算框架,用于对私有数据进行安全分析。 > It appears that, with the shortcut, the systemis never having to wait on packet delivery on top of bypassing system call entry and exit paths, so the shortcut system is never put to sleep waiting on incoming messages. We believe that because Secrecy is latency-sensitive and because we accelerate the send path, we ensure that no node ever has to wait for data and can move to the next round of processing immediately. Moreover, the shortcut implicitly disables scheduling on transitions, ensuring that the application is always run to completion. This is critical for an application with frequent barriers. -看起来,使用快捷方式,系统在绕过系统调用进入和退出路径的基础上永远不必等待数据包传递,因此快捷方式系统永远不会在等待传入消息时处于休眠状态。我们相信,因为Secrecy是延迟敏感的,因为我们加速了发送路径,我们确保没有节点需要等待数据,可以立即进入下一轮处理。此外,该快捷方式隐式地禁用了转换调度,确保应用程序始终运行到完成。这对于具有频繁障碍的应用程序至关重要。 +看起来,使用快捷方式,系统在绕过系统调用进入和退出路径的基础上永远不必等待数据包传递,因此快捷方式系统永远不会在等待传入消息时处于休眠状态。我们相信,因为 Secrecy 是延迟敏感的,因为我们加速了发送路径,我们确保没有节点需要等待数据,可以立即进入下一轮处理。此外,该快捷方式隐式地禁用了转换调度,确保应用程序始终运行到完成。这对于具有频繁障碍的应用程序至关重要。 ## 相关工作 @@ -203,7 +203,7 @@ Secrecy 是一个多方计算框架,用于对私有数据进行安全分析。 > These unikernel offer compelling trade-offs to generalpurpose operating systems. These include improved security and smaller attack surfaces e.g., Xax and MirageOS, shorter boot times e.g., ClickOS and LightVM, efficient memory use through single address space e.g., OSv and many others, and better run-time performance e.g., EbbRT, Unikraft and SUESS. Some approaches target direct access to virtual or physical hardware. A number of researchers have directly confronted the problem of compatibility, e.g., OSv is almost Linux ABI compatible and HermiTux is fully ABI compatible with Linux binaries. Other projects aim to make building unikernels easier e.g., EbbRT, Libra and Unikraft. -这些 unikernel 为通用操作系统提供了令人信服的折衷。这些包括改进的安全性和更小的攻击面,例如 Xax 和 MirageOS,更短的启动时间,例如 ClickOS 和 LightVM,通过单个地址空间高效地使用内存,例如OSv和许多其他,以及更好的运行时性能,例如,EbbRT、Unikraft、SUESS。一些方法针对直接访问虚拟或物理硬件。许多研究者直接面对兼容性问题,例如 OSv 几乎与 Linux ABI 兼容,HermiTux 与 Linux 二进制文件完全 ABI 兼容。其他项目旨在使构建 unikernel 更容易,例如 EbbRT,Libra和Unikraft。 +这些 unikernel 为通用操作系统提供了令人信服的折衷。这些包括改进的安全性和更小的攻击面,例如 Xax 和 MirageOS,更短的启动时间,例如 ClickOS 和 LightVM,通过单个地址空间高效地使用内存,例如 OSv 和许多其他,以及更好的运行时性能,例如,EbbRT、Unikraft、SUESS。一些方法针对直接访问虚拟或物理硬件。许多研究者直接面对兼容性问题,例如 OSv 几乎与 Linux ABI 兼容,HermiTux 与 Linux 二进制文件完全 ABI 兼容。其他项目旨在使构建 unikernel 更容易,例如 EbbRT,Libra 和 Unikraft。 > The UKL effort was inspired by the tremendous results demonstrated by clean slate unikernels. Our research targets trying to find ways to integrate some of the advantages these systems have shown into a general-purpose OS. @@ -211,7 +211,7 @@ UKL 的努力受到了由全新 unikernels 所展示的巨大结果的启发。 > Forks of General Purpose OS. A number of projects either fork an existing general-purpose OS code base or reuse a significant portion of one. Examples include Drawbridge which harvests code from Windows, Rump kernel which uses NetBSD drivers and Linux Kernel Library (LKL) which borrows code from Linux. These systems, although constrained by the design and structure of the original OS, generally have better compatibility with existing applications. The codebase these systems fork are well tested and can serve as building blocks for other research projects, e.g., Rump has been used in other projects. -通用操作系统的分支。许多项目要么派生现有的通用操作系统代码库,要么重用其中的很大一部分。例如,Drawbridge 从 Windows 中获取代码,Rump kernel 使用 NetBSD 驱动程序,Linux kernel Library (LKL) 从 Linux 中借用代码。这些系统虽然受到原始操作系统的设计和结构的限制,但通常与现有应用程序具有更好的兼容性。这些系统分叉的代码库经过了良好的测试,可以作为其他研究项目的构建块,例如: Rump 已在其他项目中使用。 +通用操作系统的分支。许多项目要么派生现有的通用操作系统代码库,要么重用其中的很大一部分。例如,Drawbridge 从 Windows 中获取代码,Rump kernel 使用 NetBSD 驱动程序,Linux kernel Library (LKL) 从 Linux 中借用代码。这些系统虽然受到原始操作系统的设计和结构的限制,但通常与现有应用程序具有更好的兼容性。这些系统分叉的代码库经过了良好的测试,可以作为其他研究项目的构建块,例如:Rump 已在其他项目中使用。 > Our goal in UKL is to try to find a way to integrate unikernel optimizations without having the fork the original OS. @@ -219,21 +219,21 @@ UKL 的努力受到了由全新 unikernels 所展示的巨大结果的启发。 > IncrementalSystems. There are systems, e.g.,KernelMode Linux (KML), Lupine and X-Containers which use an existing general-purpose operating system (Linux) but make comparatively fewer changes. This way, a lot of working knowledge of users of Linux can easily transfer over to these systems, but in doing so, these systems only expose the system call entry points to applications and don’t make any further specializations. Unlike UKL, they don’t co-optimize the application and kernel together. Lupine and X-Containers demonstrate opportunities in customizing Linux through build time configurations, and that is orthogonal and complementary to UKL. UKL can also benefit from a customized Linux and then add unikernel optimizations on top of that. -增量系统。有一些系统,例如 KernelModeLinux (KML),Lupine 和 X-Containers,它们使用现有的通用操作系统 (Linux),但进行的更改相对较少。这样,Linux 用户的许多工作知识可以很容易地转移到这些系统中,但是这样做,这些系统只向应用程序公开系统调用入口点,而不进行任何进一步的专门化。与UKL不同的是,它们不会共同优化应用程序和内核。Lupine 与 X-Containers 展示了通过构建时配置定制 Linux 的机会,这与 UKL 是正交的和互补的。UKL 还可以从定制的然后在此基础上添加单内核优化。 +增量系统。有一些系统,例如 KernelModeLinux (KML),Lupine 和 X-Containers,它们使用现有的通用操作系统 (Linux),但进行的更改相对较少。这样,Linux 用户的许多工作知识可以很容易地转移到这些系统中,但是这样做,这些系统只向应用程序公开系统调用入口点,而不进行任何进一步的专门化。与 UKL 不同的是,它们不会共同优化应用程序和内核。Lupine 与 X-Containers 展示了通过构建时配置定制 Linux 的机会,这与 UKL 是正交的和互补的。UKL 还可以从定制的然后在此基础上添加单内核优化。 ## 总结 > UKL creates a unikernel target of glibc and the Linux kernel. The changes are modest, and we have shown even with these, it is possible to achieve substantial performance advantages for real workloads, e.g., 26% improvement in Redis throughput while improving tail latency by 22%. UKL supports both virtualized platforms and bare-metal platforms. While we have not tested a wide range of devices, we have so far experienced no issues using any device that Linux supports. Operators can configure and control UKL using the same tools they are familiar with, and developers have the ability to use standard Linux kernel tools like BPF and perf to analyze their programs. -UKL 创建 glibc 和 Linux 内核的单内核目标。这些变化是适度的,我们已经证明,即使有了这些,也有可能在实际工作负载中实现实质性的性能优势,例如,在 Redis 吞吐量提高 26% 的同时将尾部延迟提高 22%。UKL 同时支持虚拟化平台和裸机平台。虽然我们没有测试过大量的设备,但到目前为止,我们在使用 Linux 支持的任何设备时都没有遇到任何问题。操作人员可以使用他们熟悉的相同工具配置和控制 UKL,开发人员可以使用标准的 Linux 内核工具 (如 BPF 和 perf) 来分析他们的程序。 +UKL 创建 glibc 和 Linux 内核的单内核目标。这些变化是适度的,我们已经证明,即使有了这些,也有可能在实际工作负载中实现实质性的性能优势,例如,在 Redis 吞吐量提高 26% 的同时将尾部延迟提高 22%。UKL 同时支持虚拟化平台和裸机平台。虽然我们没有测试过大量的设备,但到目前为止,我们在使用 Linux 支持的任何设备时都没有遇到任何问题。操作人员可以使用他们熟悉的相同工具配置和控制 UKL,开发人员可以使用标准的 Linux 内核工具(如 BPF 和 perf)来分析他们的程序。 > UKL differs in a number of interesting ways from unikernels. First, while application and kernel code are statically linked together, UKL provides very different execution environments for each; enabling applications to run in UKL with no modifications while minimizing changes to the invariants (whatever they are) that the kernel code expects. Second, UKL enables a knowledgable developer to incrementally optimize performance by modifying the application to directly take advantage of kernel capabilities, violating the normal assumptions of kernel versus application code. Third, processes can run on top of UKL, enabling the entire ecosystem of Linux tools and scripting to just work. -UKL 在许多有趣的方面与 unikernels 不同。首先,虽然应用程序和内核代码是静态链接在一起的,但 UKL 为两者提供了非常不同的执行环境;使应用程序无需修改就可以在 UKL 中运行,同时最大限度地减少对不变量的更改(不管它们是什么)内核代码所期望的。其次,UKL 使开发人员能够通过修改应用程序来直接利用内核功能,从而逐步优化性能,这违反了内核代码与应用程序代码之间的常规假设。第三,进程可以在 UKL 之上运行,使整个 Linux 工具和脚本的生态系统能够正常工作。 +UKL 在许多有趣的方面与 unikernels 不同。首先,虽然应用程序和内核代码是静态链接在一起的,但 UKL 为两者提供了非常不同的执行环境;使应用程序无需修改就可以在 UKL 中运行,同时最大限度地减少对不变量的更改(不管它们是什么)内核代码所期望的。其次,UKL 使开发人员能够通过修改应用程序来直接利用内核功能,从而逐步优化性能,这违反了内核代码与应用程序代码之间的常规假设。第三,进程可以在 UKL 之上运行,使整个 Linux 工具和脚本的生态系统能够正常工作。 > We have repeatedly thought that we were only a few weeks away from a stable system, and it has only been recently that we had a design and a set of changes that met our fundamental goals. While the set of changes to create UKL ended up being very small, it has taken us several years of work to get to this point. The unique design decisions are a result of multiple, typically much more pervasive, changes to Linux as we changed directions and gained experience with how the capability we wanted could be integrated into Linux. It is in some sense an interesting experience that the very modularity of Linux that enables a broad community to participate both: 1) makes it very difficult to understand how to integrate a change like UKL and, 2) can be harnessed to enable the change in a very small number of lines of code. -我们一再认为,我们离一个稳定的系统只有几周的时间了,直到最近,我们才有了一个设计和一系列的改变,达到了我们的基本目标。虽然创建 UKL 的更改集最终非常小,但我们花了几年的时间才达到这一点。这种独特的设计决策是对 Linux 的多次(通常是更普遍的)更改的结果,因为我们改变了方向,并获得了如何将我们想要的功能集成到 Linux 中的经验。从某种意义上说,Linux 的模块化使广泛的社区能够参与其中,这是一种有趣的体验:1)很难理解如何集成这样的更改可以利用UKL和(2)在非常少的代码行中启用更改。 +我们一再认为,我们离一个稳定的系统只有几周的时间了,直到最近,我们才有了一个设计和一系列的改变,达到了我们的基本目标。虽然创建 UKL 的更改集最终非常小,但我们花了几年的时间才达到这一点。这种独特的设计决策是对 Linux 的多次(通常是更普遍的)更改的结果,因为我们改变了方向,并获得了如何将我们想要的功能集成到 Linux 中的经验。从某种意义上说,Linux 的模块化使广泛的社区能够参与其中,这是一种有趣的体验:1)很难理解如何集成这样的更改可以利用 UKL 和(2)在非常少的代码行中启用更改。 > The focus of our work so far has been on functionality and just a proof of concept of a performance advantage in order to justify integrating the code into Linux. Now that we have achieved that, we plan to start working on getting UKL upstreamed as a standard target of Linux so that the community will continue to enhance it. @@ -241,15 +241,14 @@ UKL 在许多有趣的方面与 unikernels 不同。首先,虽然应用程序 > We have only started performance optimizing UKL. As our knowledge of Linux has increased, a whole series of simple optimizations that can be readily adopted have become apparent beyond the current efforts. How hard will it be to introduce and/or exploit zero-copy interfaces to the application? How hard will it be to reduce some of the privacy assumptions implicit in the BSD socket interface when only one application consumes incoming data? -我们才刚刚开始对 UKL 进行性能优化。随着我们对 Linux 知识的增加,一系列易于采用的简单优化已经变得明显,超出了当前的努力。在应用程序中引入和/或利用零复制接口有多难?当只有一个应用程序使用传入数据时,减少BSD套接字接口中隐式的一些隐私假设有多难? +我们才刚刚开始对 UKL 进行性能优化。随着我们对 Linux 知识的增加,一系列易于采用的简单优化已经变得明显,超出了当前的努力。在应用程序中引入和/或利用零复制接口有多难?当只有一个应用程序使用传入数据时,减少 BSD 套接字接口中隐式的一些隐私假设有多难? > These kernel-centric optimizations are just the start. From an application perspective, we believe that UKL will provide a natural path for improving performance and reducing the complexity of complex concurrent workloads. Concurrent operations on shared resources must be regulated. Often the burden falls onto the user code. From the user-level, it is hard to determine whether synchronization is needed, and the controlling operations and controlled entities usually live in the kernel. If the user code moves into the kernel and has the same privileges, some operations might become faster or possible in the first place. For instance, in a garbage collector, it might be necessary to prevent or at least detect whether concurrent accesses happen. With easy and fast access to the memory infrastructure (e.g., page tables) and the scheduler, many situations in which explicit, slow synchronization is needed might get away with detecting and cleaning up violations of the assumptions. -这些以内核为中心的优化仅仅是个开始。从应用程序的角度来看,我们相信 UKL 将为提高性能和降低复杂并发工作负载的复杂性提供一条自然的途径。必须规范对共享资源的并发操作。通常负担落在用户代码上。从用户级别来看,很难确定是否需要同步,并且控制操作和控制实体通常位于内核中。如果用户代码移到内核中并具有相同的特权,那么某些操作可能会变得更快,或者可能首先变得更快。例如,在垃圾收集器中,可能需要防止或至少检测并发访问是否发生。通过对内存基础设施 (例如页表) 和调度器的简单快速访问,在许多需要显式缓慢同步的情况下,可以检测和清除违反假设的情况。 +这些以内核为中心的优化仅仅是个开始。从应用程序的角度来看,我们相信 UKL 将为提高性能和降低复杂并发工作负载的复杂性提供一条自然的途径。必须规范对共享资源的并发操作。通常负担落在用户代码上。从用户级别来看,很难确定是否需要同步,并且控制操作和控制实体通常位于内核中。如果用户代码移到内核中并具有相同的特权,那么某些操作可能会变得更快,或者可能首先变得更快。例如,在垃圾收集器中,可能需要防止或至少检测并发访问是否发生。通过对内存基础设施(例如页表)和调度器的简单快速访问,在许多需要显式缓慢同步的情况下,可以检测和清除违反假设的情况。 > If the Linux community accepts UKL, we believe it will not only impact Linux but may become a very important platform for future research. While the benefits to researchers of broad applications on HCL support are obvious. Perhaps less obvious, as unikernel researchers, is the ability to use tools like ktest to deploy and manage experiments, BPF and perf to be able to understand performance, have been incredibly valuable. ## 参考资料 - -如果 Linux 社区接受 UKL,我们相信它不仅会影响 Linux,而且可能成为未来研究的一个非常重要的平台。而HCL支持的广泛应用对研究人员的好处是显而易见的。也许不太明显的是,作为 unikernel 研究人员,使用像 ktest 这样的工具来部署和管理实验的能力,使用 BPF 和 perf 理解性能,已经非常有价值。 +如果 Linux 社区接受 UKL,我们相信它不仅会影响 Linux,而且可能成为未来研究的一个非常重要的平台。而 HCL 支持的广泛应用对研究人员的好处是显而易见的。也许不太明显的是,作为 unikernel 研究人员,使用像 ktest 这样的工具来部署和管理实验的能力,使用 BPF 和 perf 理解性能,已经非常有价值。 -- Gitee From b3c4dff3f4d2b7eb9d690403b7628e39eb57594f Mon Sep 17 00:00:00 2001 From: Gege-Wang <2891067867@qq.com> Date: Fri, 28 Jul 2023 10:53:24 +0800 Subject: [PATCH 11/16] tiny --- .../20230715-porting-riscv-ukl-translate-part3.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/articles/20230715-porting-riscv-ukl-translate-part3.md b/articles/20230715-porting-riscv-ukl-translate-part3.md index 8156b4b..f5b74af 100644 --- a/articles/20230715-porting-riscv-ukl-translate-part3.md +++ b/articles/20230715-porting-riscv-ukl-translate-part3.md @@ -1,4 +1,4 @@ -> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [spaces refs pangu]
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [spaces refs pangu autocorrect]
> Title: [Integrating Unikernel Optimizations in a General Purpose OS](https://arxiv.org/pdf/2206.00789.pdf)
> Author: Ali Raza
> Translator: Gege-Wang <2891067867@qq.com>
@@ -40,7 +40,7 @@ UKL 项目的基本目标是在不失去 Linux 对应用程序、硬件和生态 > There are some challenges in getting some applications running on UKL. First, as expected, one needs to be able to re-compile and statically link both the application and all its dependencies. Second, we have hit a number of programs that by default invoke fork followed by exec e.g., Postgress, and many that are dependent on the dynamic loader through calls to dlopen and others. Third, we have run into issues of proprietary applications available in only binary form, e.g., user-level libraries for GPUs. -让一些应用程序在 UKL 上运行存在一些挑战。首先,正如预期的那样,需要能够重新编译和静态链接应用程序及其所有依赖项。其次,我们遇到了一些默认情况下先调用 fork 再调用 exec 的程序,例如 Postgress,以及许多依赖于动态加载器的程序调用 dlopen 和其他。第三,我们遇到了专有应用程序仅以二进制形式可用的问题,例如,用于 gpu 的用户级库。 +让一些应用程序在 UKL 上运行存在一些挑战。首先,正如预期的那样,需要能够重新编译和静态链接应用程序及其所有依赖项。其次,我们遇到了一些默认情况下先调用 fork 再调用 exec 的程序,例如 Postgress,以及许多依赖于动态加载器的程序调用 dlopen 和其他。第三,我们遇到了专有应用程序仅以二进制形式可用的问题,例如,用于 GPU 的用户级库。 > Hardware support: For hardware, we have not run into any compatibility issues and have booted or kexeced to UKL on five different x86-64 servers and virtualization platforms. The scripts and tools used to deploy and manage normal Linux machines were used for UKL deployments as well. @@ -65,7 +65,7 @@ code paths that could be squashed for performance benefits(see fig. 5). > Unikernels offer the opportunity to dramatically reduce the overhead of interactions between application and kernel code. We evaluate how UKL optimizations impact the overhead of simple system calls (§5.3.1), more expensive system calls (§5.3.2), and page faults (§5.3.3). Our results contradict recent work that suggests that the advantages are modest; we see that the reduction in overhead is larger (e.g., 90%) than previously reported and has a significant impact even for requests with large payloads (e.g., 24% with 8KByte recvfrom()). -Unikernels 提供了显著减少应用程序和内核代码之间交互开销的机会。我们评估了 UKL 优化如何影响简单系统调用(§5.3.1)和更昂贵的系统调用的开销(第 5.3.2 节)和页面错误(第 5.3.3 节)。我们的结果与最近的研究结果相矛盾,该研究表明,这种优势是适度的;我们看到开销的减少比之前报告的更大(例如,90%),甚至对于具有大效负载的请求也有显著的影响(例如,对于 8KByte 的 recvfrom(),减少了 24%)。 +Unikernels 提供了显著减少应用程序和内核代码之间交互开销的机会。我们评估了 UKL 优化如何影响简单系统调用 (§5.3.1) 和更昂贵的系统调用的开销(第 5.3.2 节)和页面错误(第 5.3.3 节)。我们的结果与最近的研究结果相矛盾,该研究表明,这种优势是适度的;我们看到开销的减少比之前报告的更大(例如,90%),甚至对于具有大效负载的请求也有显著的影响(例如,对于 8KByte 的 recvfrom(),减少了 24%)。 1. 系统调用的基础性能 @@ -93,7 +93,7 @@ Unikernels 提供了显著减少应用程序和内核代码之间交互开销的 > It is interesting to contrast our results with those from the recent Lupine work. Surprisingly they observed that just eliminating the system call overhead is significant (40%) for a null system call, but since they found that (like us) the improvement dropped to below 5% in most cases, they concluded that the benefit of co-locating the application and kernel is minimal. Our results suggest that the major performance gain comes not from eliminating the hardware cost but from eliminating all the checks on the transition between the application and kernel code and that reducing this overhead has a significant impact on even expensive system calls. -将我们的结果与最近 Lupine 的研究结果进行对比是很有趣的。令人惊讶的是,他们发现仅仅消除系统调用开销就很重要 (40%),但是由于他们发现(和我们一样)在大多数情况下,改进下降到 5%以下,将应用程序和内核放在一起的好处是最小的。我们的结果表明,主要的性能增益不是来自消除硬件成本,而是来自消除应用程序和内核代码之间转换的所有检查,并且减少这种开销对昂贵的系统调用也有重大影响。 +将我们的结果与最近 Lupine 的研究结果进行对比是很有趣的。令人惊讶的是,他们发现仅仅消除系统调用开销就很重要 (40%),但是由于他们发现(和我们一样)在大多数情况下,改进下降到 5% 以下,将应用程序和内核放在一起的好处是最小的。我们的结果表明,主要的性能增益不是来自消除硬件成本,而是来自消除应用程序和内核代码之间转换的所有检查,并且减少这种开销对昂贵的系统调用也有重大影响。 3. 页面故障处理 @@ -199,7 +199,7 @@ Secrecy 是一个多方计算框架,用于对私有数据进行安全分析。 > CleanSlateUnikernels: Many unikernel projects arewritten from scratch or use a minimal kernel like MiniOS for bootstrapping. These projects have complete control over the language and methodology used to construct the kernel. MirageOS uses OCaml to implement the unikernel and uses the language and compiler level features to ensure robustness against vulnerabilities and small attack surface. Similarly, OSv uses lock-free scheduling algorithms to gain performance benefits for unmodified applications. Implementations in clean-slate unikernels can also be fine-tuned for performance of specific applications, e.g., Minicache optimizes Xen and MiniOS for CDN based use case. Further, from scratch implementations can easily expose efficient, low-level interfaces to applications e.g., EbbRT. Different clean slate unikernels can often be polar opposites in some regards, exposing the wide range of choices available to them. Forinstance, some might target custom APIs for performance while like HermiTux target full Linux ABI compatibility. Recently, efforts like Unikraft provide strong POSIX support while also allowing custom APIs for further performance gains. -全新设计。许多 unikernel 项目都是从头开始编写的,或者使用像 MiniOS 这样的最小内核来引导。这些项目完全控制用于构造内核的语言和方法。MirageOS 使用 OCaml 实现单内核,并使用语言和编译器级别的特性来确保对漏洞的鲁棒性和较小的攻击面。同样,OSv 使用无锁调度算法来获得未修改应用程序的性能优势。在全新 unikernel 中的实现也可以针对特定应用程序的性能进行微调,例如,Minicache 优化了 Xen 和基于 CDN 的 MiniOS 用例。此外,从头开始实现可以很容易地将高效、低级的接口暴露给应用程序,例如 EbbRT。不同的全新单内核在某些方面通常是截然相反的,这就为它们提供了广泛的选择。例如,有些可能针对自定义 api 的性能,而像 HermiTux 目标是完全兼容 Linux ABI。最近,像 Unikraft 这样的努力提供了强大的 POSIX 支持,同时还允许自定义 api 来进一步提高性能。 +全新设计。许多 unikernel 项目都是从头开始编写的,或者使用像 MiniOS 这样的最小内核来引导。这些项目完全控制用于构造内核的语言和方法。MirageOS 使用 OCaml 实现单内核,并使用语言和编译器级别的特性来确保对漏洞的鲁棒性和较小的攻击面。同样,OSv 使用无锁调度算法来获得未修改应用程序的性能优势。在全新 unikernel 中的实现也可以针对特定应用程序的性能进行微调,例如,Minicache 优化了 Xen 和基于 CDN 的 MiniOS 用例。此外,从头开始实现可以很容易地将高效、低级的接口暴露给应用程序,例如 EbbRT。不同的全新单内核在某些方面通常是截然相反的,这就为它们提供了广泛的选择。例如,有些可能针对自定义 API 的性能,而像 HermiTux 目标是完全兼容 Linux ABI。最近,像 Unikraft 这样的努力提供了强大的 POSIX 支持,同时还允许自定义 API 来进一步提高性能。 > These unikernel offer compelling trade-offs to generalpurpose operating systems. These include improved security and smaller attack surfaces e.g., Xax and MirageOS, shorter boot times e.g., ClickOS and LightVM, efficient memory use through single address space e.g., OSv and many others, and better run-time performance e.g., EbbRT, Unikraft and SUESS. Some approaches target direct access to virtual or physical hardware. A number of researchers have directly confronted the problem of compatibility, e.g., OSv is almost Linux ABI compatible and HermiTux is fully ABI compatible with Linux binaries. Other projects aim to make building unikernels easier e.g., EbbRT, Libra and Unikraft. @@ -233,7 +233,7 @@ UKL 在许多有趣的方面与 unikernels 不同。首先,虽然应用程序 > We have repeatedly thought that we were only a few weeks away from a stable system, and it has only been recently that we had a design and a set of changes that met our fundamental goals. While the set of changes to create UKL ended up being very small, it has taken us several years of work to get to this point. The unique design decisions are a result of multiple, typically much more pervasive, changes to Linux as we changed directions and gained experience with how the capability we wanted could be integrated into Linux. It is in some sense an interesting experience that the very modularity of Linux that enables a broad community to participate both: 1) makes it very difficult to understand how to integrate a change like UKL and, 2) can be harnessed to enable the change in a very small number of lines of code. -我们一再认为,我们离一个稳定的系统只有几周的时间了,直到最近,我们才有了一个设计和一系列的改变,达到了我们的基本目标。虽然创建 UKL 的更改集最终非常小,但我们花了几年的时间才达到这一点。这种独特的设计决策是对 Linux 的多次(通常是更普遍的)更改的结果,因为我们改变了方向,并获得了如何将我们想要的功能集成到 Linux 中的经验。从某种意义上说,Linux 的模块化使广泛的社区能够参与其中,这是一种有趣的体验:1)很难理解如何集成这样的更改可以利用 UKL 和(2)在非常少的代码行中启用更改。 +我们一再认为,我们离一个稳定的系统只有几周的时间了,直到最近,我们才有了一个设计和一系列的改变,达到了我们的基本目标。虽然创建 UKL 的更改集最终非常小,但我们花了几年的时间才达到这一点。这种独特的设计决策是对 Linux 的多次(通常是更普遍的)更改的结果,因为我们改变了方向,并获得了如何将我们想要的功能集成到 Linux 中的经验。从某种意义上说,Linux 的模块化使广泛的社区能够参与其中,这是一种有趣的体验:1) 很难理解如何集成这样的更改可以利用 UKL 和 (2) 在非常少的代码行中启用更改。 > The focus of our work so far has been on functionality and just a proof of concept of a performance advantage in order to justify integrating the code into Linux. Now that we have achieved that, we plan to start working on getting UKL upstreamed as a standard target of Linux so that the community will continue to enhance it. -- Gitee From 4d7a887bd513c2a7e75d31274681acefe4f7174d Mon Sep 17 00:00:00 2001 From: Gege-Wang <2891067867@qq.com> Date: Fri, 28 Jul 2023 10:53:38 +0800 Subject: [PATCH 12/16] porting-riscv-ukl-translate-part3.md: commit correct result of tinycorrect-refs Signed-off-by: Gege-Wang <2891067867@qq.com> --- articles/20230715-porting-riscv-ukl-translate-part3.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/articles/20230715-porting-riscv-ukl-translate-part3.md b/articles/20230715-porting-riscv-ukl-translate-part3.md index f5b74af..dbe32e8 100644 --- a/articles/20230715-porting-riscv-ukl-translate-part3.md +++ b/articles/20230715-porting-riscv-ukl-translate-part3.md @@ -1,4 +1,4 @@ -> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [spaces refs pangu autocorrect]
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [refs]
> Title: [Integrating Unikernel Optimizations in a General Purpose OS](https://arxiv.org/pdf/2206.00789.pdf)
> Author: Ali Raza
> Translator: Gege-Wang <2891067867@qq.com>
@@ -251,4 +251,7 @@ UKL 在许多有趣的方面与 unikernels 不同。首先,虽然应用程序 ## 参考资料 +## 参考资料 + + 如果 Linux 社区接受 UKL,我们相信它不仅会影响 Linux,而且可能成为未来研究的一个非常重要的平台。而 HCL 支持的广泛应用对研究人员的好处是显而易见的。也许不太明显的是,作为 unikernel 研究人员,使用像 ktest 这样的工具来部署和管理实验的能力,使用 BPF 和 perf 理解性能,已经非常有价值。 -- Gitee From 60da8da1e0ee96eaf09fd44274b6a16d79f7212d Mon Sep 17 00:00:00 2001 From: Gege-Wang <2891067867@qq.com> Date: Fri, 28 Jul 2023 10:53:40 +0800 Subject: [PATCH 13/16] porting-riscv-ukl-translate-part3.md: commit correct result of tinycorrect-pangu Signed-off-by: Gege-Wang <2891067867@qq.com> --- articles/20230715-porting-riscv-ukl-translate-part3.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/articles/20230715-porting-riscv-ukl-translate-part3.md b/articles/20230715-porting-riscv-ukl-translate-part3.md index dbe32e8..a841229 100644 --- a/articles/20230715-porting-riscv-ukl-translate-part3.md +++ b/articles/20230715-porting-riscv-ukl-translate-part3.md @@ -1,4 +1,4 @@ -> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [refs]
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [refs pangu]
> Title: [Integrating Unikernel Optimizations in a General Purpose OS](https://arxiv.org/pdf/2206.00789.pdf)
> Author: Ali Raza
> Translator: Gege-Wang <2891067867@qq.com>
@@ -253,5 +253,4 @@ UKL 在许多有趣的方面与 unikernels 不同。首先,虽然应用程序 ## 参考资料 - 如果 Linux 社区接受 UKL,我们相信它不仅会影响 Linux,而且可能成为未来研究的一个非常重要的平台。而 HCL 支持的广泛应用对研究人员的好处是显而易见的。也许不太明显的是,作为 unikernel 研究人员,使用像 ktest 这样的工具来部署和管理实验的能力,使用 BPF 和 perf 理解性能,已经非常有价值。 -- Gitee From 80743ffa2612d67c7c21a2ae90433777cc56d486 Mon Sep 17 00:00:00 2001 From: Gege-Wang <2891067867@qq.com> Date: Fri, 28 Jul 2023 10:53:50 +0800 Subject: [PATCH 14/16] porting-riscv-ukl-translate-part3.md: commit correct result of tinycorrect-epw Signed-off-by: Gege-Wang <2891067867@qq.com> --- .../20230715-porting-riscv-ukl-translate-part3.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/articles/20230715-porting-riscv-ukl-translate-part3.md b/articles/20230715-porting-riscv-ukl-translate-part3.md index a841229..20cb915 100644 --- a/articles/20230715-porting-riscv-ukl-translate-part3.md +++ b/articles/20230715-porting-riscv-ukl-translate-part3.md @@ -1,4 +1,4 @@ -> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [refs pangu]
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [refs pangu epw]
> Title: [Integrating Unikernel Optimizations in a General Purpose OS](https://arxiv.org/pdf/2206.00789.pdf)
> Author: Ali Raza
> Translator: Gege-Wang <2891067867@qq.com>
@@ -17,7 +17,7 @@ > In Section 5.4 we evaluate applying unikernel optimizations to both throughput (Redis §5.4.1, Memcached §5.4.2) and latency bound (Secrecy §5.4.3) applications. We find that configuration options provided by UKL can enable significant throughput improvements (e.g., 12%) and a simple 10 line change in Redis code results in more significant gains (e.g., 26%). The results are even more dramatic for latency-sensitive applications where configuration changes result in 15% improvement and a trivial application change enables a 100x improvement in performance. -在 5.4 节中,我们评估将单内核优化应用于吞吐量 (Redis§5.4.1,Memcached§5.4.2) 和延迟绑定 (Secrecy§5.4.3) 的应用程序。我们发现,UKL 提供的配置选项可以显著提高吞吐量(例如,12%),Redis 代码中简单的 10 行更改会带来更显著的收益(例如,26%)。对于对延迟敏感的应用程序,结果更加显著,其中配置更改导致 15% 的改进,而一个微不足道的应用程序更改可以使性能提高 100 倍。 +在 5.4 节中,我们评估将单内核优化应用于吞吐量(Redis§5.4.1,Memcached§5.4.2)和延迟绑定(Secrecy§5.4.3)的应用程序。我们发现,UKL 提供的配置选项可以显著提高吞吐量(例如,12%),Redis 代码中简单的 10 行更改会带来更显著的收益(例如,26%)。对于对延迟敏感的应用程序,结果更加显著,其中配置更改导致 15% 的改进,而一个微不足道的应用程序更改可以使性能提高 100 倍。 ### 实验设置 @@ -65,7 +65,7 @@ code paths that could be squashed for performance benefits(see fig. 5). > Unikernels offer the opportunity to dramatically reduce the overhead of interactions between application and kernel code. We evaluate how UKL optimizations impact the overhead of simple system calls (§5.3.1), more expensive system calls (§5.3.2), and page faults (§5.3.3). Our results contradict recent work that suggests that the advantages are modest; we see that the reduction in overhead is larger (e.g., 90%) than previously reported and has a significant impact even for requests with large payloads (e.g., 24% with 8KByte recvfrom()). -Unikernels 提供了显著减少应用程序和内核代码之间交互开销的机会。我们评估了 UKL 优化如何影响简单系统调用 (§5.3.1) 和更昂贵的系统调用的开销(第 5.3.2 节)和页面错误(第 5.3.3 节)。我们的结果与最近的研究结果相矛盾,该研究表明,这种优势是适度的;我们看到开销的减少比之前报告的更大(例如,90%),甚至对于具有大效负载的请求也有显著的影响(例如,对于 8KByte 的 recvfrom(),减少了 24%)。 +Unikernels 提供了显著减少应用程序和内核代码之间交互开销的机会。我们评估了 UKL 优化如何影响简单系统调用(§5.3.1)和更昂贵的系统调用的开销(第 5.3.2 节)和页面错误(第 5.3.3 节)。我们的结果与最近的研究结果相矛盾,该研究表明,这种优势是适度的;我们看到开销的减少比之前报告的更大(例如,90%),甚至对于具有大效负载的请求也有显著的影响(例如,对于 8KByte 的 recvfrom(),减少了 24%)。 1. 系统调用的基础性能 @@ -134,7 +134,7 @@ Unikernels 提供了显著减少应用程序和内核代码之间交互开销的
-为了更好地了解时间消耗在哪里,我们用 perf 对 Redis UKL 进行了分析。图 5 是我们生成的 flame graph 的一部分,它显示了两个明显的性能改进机会。蓝色箭头显示了我们如何通过绕过读写系统调用的入口和退出代码来缩短执行路径,并直接调用底层功能。图 4 显示了当 Redis 绕过进入和退出代码 (UKL_RET_BYP) 时,UKL_RET 上的平均和第 99 百分位尾部延迟是如何改善的。表 3 显示,UKL_RET_BYP 的尾部延迟提高了 11%,吞吐量提高了 12%。 +为了更好地了解时间消耗在哪里,我们用 perf 对 Redis UKL 进行了分析。图 5 是我们生成的 flame graph 的一部分,它显示了两个明显的性能改进机会。蓝色箭头显示了我们如何通过绕过读写系统调用的入口和退出代码来缩短执行路径,并直接调用底层功能。图 4 显示了当 Redis 绕过进入和退出代码(UKL_RET_BYP)时,UKL_RET 上的平均和第 99 百分位尾部延迟是如何改善的。表 3 显示,UKL_RET_BYP 的尾部延迟提高了 11%,吞吐量提高了 12%。
@@ -177,7 +177,7 @@ Secrecy 是一个多方计算框架,用于对私有数据进行安全分析。 > Figure 7 shows the run times of the three systems normalized to the run time of Linux and the error bars show the coefficient of variation for each configuration. As with other experiments, the UKL_BYP configuration shows a modest improvement in run time. However, when we use the deeper shortcut to the TCP send and receive functions, we see significant (100x) runtime improvements. -图 7 显示了三个系统的运行时间归一化为 Linux 的运行时间,误差条显示了每种配置的变异系数。与其他实验一样,UKL_BYP 配置在运行时显示出适度的改进。然而,当我们对 TCP 发送和接收函数使用更深的快捷方式时,我们看到了显著的 (100x) 运行时改进。 +图 7 显示了三个系统的运行时间归一化为 Linux 的运行时间,误差条显示了每种配置的变异系数。与其他实验一样,UKL_BYP 配置在运行时显示出适度的改进。然而,当我们对 TCP 发送和接收函数使用更深的快捷方式时,我们看到了显著的(100x)运行时改进。
@@ -233,7 +233,7 @@ UKL 在许多有趣的方面与 unikernels 不同。首先,虽然应用程序 > We have repeatedly thought that we were only a few weeks away from a stable system, and it has only been recently that we had a design and a set of changes that met our fundamental goals. While the set of changes to create UKL ended up being very small, it has taken us several years of work to get to this point. The unique design decisions are a result of multiple, typically much more pervasive, changes to Linux as we changed directions and gained experience with how the capability we wanted could be integrated into Linux. It is in some sense an interesting experience that the very modularity of Linux that enables a broad community to participate both: 1) makes it very difficult to understand how to integrate a change like UKL and, 2) can be harnessed to enable the change in a very small number of lines of code. -我们一再认为,我们离一个稳定的系统只有几周的时间了,直到最近,我们才有了一个设计和一系列的改变,达到了我们的基本目标。虽然创建 UKL 的更改集最终非常小,但我们花了几年的时间才达到这一点。这种独特的设计决策是对 Linux 的多次(通常是更普遍的)更改的结果,因为我们改变了方向,并获得了如何将我们想要的功能集成到 Linux 中的经验。从某种意义上说,Linux 的模块化使广泛的社区能够参与其中,这是一种有趣的体验:1) 很难理解如何集成这样的更改可以利用 UKL 和 (2) 在非常少的代码行中启用更改。 +我们一再认为,我们离一个稳定的系统只有几周的时间了,直到最近,我们才有了一个设计和一系列的改变,达到了我们的基本目标。虽然创建 UKL 的更改集最终非常小,但我们花了几年的时间才达到这一点。这种独特的设计决策是对 Linux 的多次(通常是更普遍的)更改的结果,因为我们改变了方向,并获得了如何将我们想要的功能集成到 Linux 中的经验。从某种意义上说,Linux 的模块化使广泛的社区能够参与其中,这是一种有趣的体验:1) 很难理解如何集成这样的更改可以利用 UKL 和(2)在非常少的代码行中启用更改。 > The focus of our work so far has been on functionality and just a proof of concept of a performance advantage in order to justify integrating the code into Linux. Now that we have achieved that, we plan to start working on getting UKL upstreamed as a standard target of Linux so that the community will continue to enhance it. -- Gitee From 33bde7a79b29f78dcf949b391726e19eecdeba52 Mon Sep 17 00:00:00 2001 From: Gege-Wang <2891067867@qq.com> Date: Fri, 28 Jul 2023 10:58:07 +0800 Subject: [PATCH 15/16] porting-riscv-ukl-translate-part3.md: commit correct result of tinycorrect-refs Signed-off-by: Gege-Wang <2891067867@qq.com> --- articles/20230715-porting-riscv-ukl-translate-part3.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/articles/20230715-porting-riscv-ukl-translate-part3.md b/articles/20230715-porting-riscv-ukl-translate-part3.md index 20cb915..049582e 100644 --- a/articles/20230715-porting-riscv-ukl-translate-part3.md +++ b/articles/20230715-porting-riscv-ukl-translate-part3.md @@ -1,4 +1,4 @@ -> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [refs pangu epw]
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [refs]
> Title: [Integrating Unikernel Optimizations in a General Purpose OS](https://arxiv.org/pdf/2206.00789.pdf)
> Author: Ali Raza
> Translator: Gege-Wang <2891067867@qq.com>
@@ -253,4 +253,7 @@ UKL 在许多有趣的方面与 unikernels 不同。首先,虽然应用程序 ## 参考资料 +## 参考资料 + + 如果 Linux 社区接受 UKL,我们相信它不仅会影响 Linux,而且可能成为未来研究的一个非常重要的平台。而 HCL 支持的广泛应用对研究人员的好处是显而易见的。也许不太明显的是,作为 unikernel 研究人员,使用像 ktest 这样的工具来部署和管理实验的能力,使用 BPF 和 perf 理解性能,已经非常有价值。 -- Gitee From 52d4b965f31add98c7414e1bcdc15376b9b2925d Mon Sep 17 00:00:00 2001 From: Gege-Wang <2891067867@qq.com> Date: Fri, 28 Jul 2023 10:58:11 +0800 Subject: [PATCH 16/16] porting-riscv-ukl-translate-part3.md: commit correct result of tinycorrect-pangu Signed-off-by: Gege-Wang <2891067867@qq.com> --- articles/20230715-porting-riscv-ukl-translate-part3.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/articles/20230715-porting-riscv-ukl-translate-part3.md b/articles/20230715-porting-riscv-ukl-translate-part3.md index 049582e..c4162bf 100644 --- a/articles/20230715-porting-riscv-ukl-translate-part3.md +++ b/articles/20230715-porting-riscv-ukl-translate-part3.md @@ -1,4 +1,4 @@ -> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [refs]
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc1 - [refs pangu]
> Title: [Integrating Unikernel Optimizations in a General Purpose OS](https://arxiv.org/pdf/2206.00789.pdf)
> Author: Ali Raza
> Translator: Gege-Wang <2891067867@qq.com>
@@ -255,5 +255,4 @@ UKL 在许多有趣的方面与 unikernels 不同。首先,虽然应用程序 ## 参考资料 - 如果 Linux 社区接受 UKL,我们相信它不仅会影响 Linux,而且可能成为未来研究的一个非常重要的平台。而 HCL 支持的广泛应用对研究人员的好处是显而易见的。也许不太明显的是,作为 unikernel 研究人员,使用像 ktest 这样的工具来部署和管理实验的能力,使用 BPF 和 perf 理解性能,已经非常有价值。 -- Gitee