Cornflakes: Zero-Copy Serialization for Microsecond-Scale Networking——论文泛读

SOSP 2023 Paper 论文阅读笔记整理

问题

数据序列化对于许多数据中心应用程序来说至关重要,序列化的主要开销在于数据移动,将应用程序数据移动到数据包中所需的内存拷贝成本高昂。最近的零拷贝API暴露了NIC分散收集功能,增加了将数据移动卸载到NIC的可能性。然而,由于分散收集所需的内存协调增加了记账开销,因此分散收集并不总是有用的。

挑战

目前还没有人为现代数据中心NIC上的微秒级应用程序设计完整的序列化库。

  • API:为了易于使用并合并到应用程序中,这样的库必须具有与现有的基于复制的方法类似的API。

  • 内存安全:对于防止应用程序和NIC之间的数据竞争是必要的[48,58]。当NIC发送数据时,发送是异步的,如果应用程序在NIC访问数据时释放数据,则可能会发生竞争。零拷贝系统通过消息缓冲区的引用计数等技术来防止这些安全违规行为,而基于拷贝的方法则通过立即将数据返回应用程序来自动提供内存安全。

  • 内存透明度:指无论数据在地址空间的任何位置,都能接受数据。通常,NIC只能从内核物理固定的页面进行DMA(因此它们不会交换)。因此,库只能在固定页(DMA安全内存)中零复制应用程序数据。分散收集序列化堆栈必须接受指向任意应用程序地址的指针的对象,自动确定哪些字段不在固定内存中,并复制这些字段。

  • 延迟:内存安全性和透明性都有软件缺陷,这可能会抵消微秒环境中硬件卸载的好处。内存安全性和透明性要求堆栈在每次I/O上访问记账数据结构(例如,引用计数、固定内存地址范围)。这些访问可能会导致缓存未命中,从而增加数百纳秒的处理时间。例如,对于64字节对象,原始的分散聚集优于复制,但分散聚集路径中的缓存未命中会导致复制更快。

本文方法

本文提出了Cornflakes,一种混合序列化库堆栈,灵活选择分散聚集或内存副本进行序列化。

  • 对现代Mellanox NIC进行的实验发现,分散聚集I/O可以提高512字节以上的缓冲区序列化性能,这一结果包含了内存安全性和透明度的开销。

  • 提供了一个透明的混合序列化API,它保证了对零拷贝I/O使用无需保护,同时确保了拷贝和零拷贝的有效执行。

  • 当字段至少有512字节时,在DMA安全内存中透明的使用零拷贝。

开源代码:GitHub - deeptir18/cornflakes: A zero-copy serialization library and networking stack.

本文在UDP和TCP网络堆栈中,在Mellanox和Intel NIC上实现了Cornflakes。在Twitter缓存跟踪中,Cornflakes在自定义键值存储中的吞吐量比以前的软件方法高15.4%,在Redis中比Redis序列化的吞吐量高8.8%。

实验

实验环境:2个24核AMD EPYC ROME 7402P 2.80GHz服务器(Cloudlab c6525-100g服务器[10])、关闭C状态、运行Linux 5.04和Ubuntu 20.0、具有大约134MB的L1、L2和L3高速缓存、服务器通过双端口Mellanox ConnectX-5Ex 100 Gb NIC和一个打开巨型帧(MTU=9000字节)的100 Gb Dell Z9264交换机连接。6.4节中使用2台32核AMD EPYC ROME 7452 2.35Ghz服务器(Cloudlab d6515服务器)、通过双端口Mellanox ConnectX-5 100 Gb NIC和2 x 100 Gbs Dell Z9264F-ON交换机连接。6.3节比较了AMD EPYC Milan 7313P 3.0Ghz服务器上的Intel e810-CQDA2 NIC和Mellanox Connect X-6 NIC。6.3节使用一个客户端(带有Mellanox或Intel NIC),该客户端直接连接到一台服务器(分别带有Mellanix或Intel NIC。

数据集:Google protobuf [23]、Twitter缓存跟踪 [56]、Tragen缓存跟踪生成器 [45]、YCSB

实验对比:吞吐量、尾延迟、延迟分布、峰值性能

实验参数:负载强度、数据集、NIC设备、字节大小

总结

针对数据序列化传输,如何为微秒级应用程序设计更高性能的序列化库。需要同时实现:类似API、内存安全、内存透明、低延迟。本文提出了Cornflakes,混合序列化库堆栈,灵活选择分散聚集或内存副本进行序列化。(1)对现代Mellanox NIC进行的实验发现,分散聚集I/O可以提高512字节以上的缓冲区序列化性能。(2)提供了一个透明的混合序列化API,它保证了对零拷贝I/O使用无需保护,同时确保了拷贝和零拷贝的有效执行。(3)当字段至少有512字节时,在DMA安全内存中透明的使用零拷贝,其他使用复制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/495473.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vant4的dialog、toast不显示样式记录

使用的是按需加载,就是这个 插件会自动帮我们把组件加载上去,但是对于函数式的组件,比如dialog,toast这样的,就会显示的时候没有样式,类似这样 这是因为没有加载对应插件的样式,需要手动加载进来…

Java:反射 reflection ( 概念+相关类+使用方法)

文章目录 一、反射(reflection)1.概念优点:缺点 2.反射的相关类1.Class类1.**反射机制的起源**2.获得类相关的方法3.获得类中属性的相关方法4.获得类中注解相关的方法5.获得类中构造器相关的方法6.获得类中方法相关的方法 2.获取Class对象的三种方法:1.使…

python--冒泡排序和main函数

1.判断是不是回文数: x int(input("请输入一个正整数:")) x str(x) if x x[::-1]:print("是回文数。") else:print("不是回文数。") 2.冒泡排序 # 冒泡排序: # [30,8,-10, 50&am…

【技巧】PyTorch限制GPU显存的可使用上限

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 从 PyTorch 1.4 版本开始,引入了一个新的功能 torch.cuda.set_per_process_memory_fraction(fraction, device),这个功能允许用户为特定的 GPU 设备设置进程可使用的显存上限比例。 测试代…

从抛硬币试验看概率论的基本内容及统计方法

一般说到概率,就喜欢拿抛硬币做例子。大多数时候,会简单认为硬币正背面的概率各为二分之一,其实事情远没有这么简单。这篇文章会以抛硬币试验为例子并贯穿全文,引出一系列概率论和数理统计的基本内容。这篇文章会涉及的有古典概型…

后端前行Vue之路(二):模版语法之插值与指令

1.概述 Vue.js的模板语法是一种将Vue实例的数据绑定到HTML文档的方法。Vue的模板语法是一种基于HTML的扩展,允许开发者将Vue实例中的数据绑定到HTML元素,以及在HTML中使用一些简单的逻辑和指令。Vue.js 基于 HTML 的模板语法允许开发者声明式地将 DOM 绑…

eBMC套件固件烧录及上电过程

1 概述 本期讲解 eBMC 套件上电和固件烧录过程。关于 eBMC 套件的开关、接口和芯片位置,可查看前两期文章,里面有详细描述。 2 固件烧录 eBMC 套件烧录涉及以下固件、其芯片位置和烧录口位置: 其中,eBMC-D4 板上固件可…

【嵌入式机器学习开发实战】(七)—— 政安晨:通过ARM-Linux掌握基本技能【环境准备:树莓派】

ARM-Linux是一种针对ARM架构的操作系统,它的设计目标是在低功耗、低成本的硬件平台上运行。ARM-Linux可以运行在多种ARM处理器上,包括树莓派。 树莓派(Raspberry Pi)是一款基于ARM架构的单板计算机,由英国的树莓派基金…

Python模糊字符串匹配工具库之fuzzywuzzy使用详解

概要 Python的fuzzywuzzy库是一个强大的模糊字符串匹配工具,基于Levenshtein距离算法,可用于处理文本相似度匹配任务。本文将深入探讨fuzzywuzzy库的各种功能和用法,结合详细的描述和丰富的示例代码,带领大家全面了解这个工具的使用方法和实际应用场景。 安装 在开始使用…

react-navigation

Getting started | React Navigation

python实战之基础篇(一)

1. 注释 # coding utf-8 # 该注释放到文件第一行, 这个注释告诉python解释器该文件的编码集是UTF-82. 导入语句有三种形式 import <模块名> from <模块名> import <代码元素> from <模块名> import <代码元素> as <代码元素别名>3. 获取…

HCIP-Datacom(H12-821)题库补充(3/28)

最新 HCIP-Datacom&#xff08;H12-821&#xff09;完整题库请扫描上方二维码访问&#xff0c;持续更新中。 如图所示组网&#xff0c;以下关于R4优选路由的描述&#xff0c;正确的是哪一项&#xff1f; A&#xff1a;无法判断&#xff0c;MED不能作为AS之间BGP选路的条件 B&a…

Chakra UI:重塑React组件开发的未来

随着前端开发技术的不断演进&#xff0c;React已经成为了一个不可或缺的开源JavaScript库&#xff0c;用于构建用户界面。然而&#xff0c;虽然React提供了构建用户界面的强大工具&#xff0c;但在组件的可访问性、可重复使用性和可组合性方面仍存在挑战。Chakra UI正是一个为解…

三层交换机可以采用直通交换技术吗?

三层交换机是一种网络设备&#xff0c;它结合了二层交换机的高速数据转发能力和路由器的复杂网络功能&#xff0c;如IP路由、VLAN&#xff08;虚拟局域网&#xff09;支持等。在讨论三层交换机是否可以采用直通交换技术之前&#xff0c;我们先了解一下直通交换技术以及三层交换…

Nuxt3(路由)

说明 Nuxt的核心功能之一是文件系统路由。pages/目录中的每个Vue文件都会创建一个相应的URL&#xff08;或路由&#xff09;&#xff0c;用于显示文件的内容。通过为每个页面使用动态导入&#xff0c;Nuxt利用代码分割来仅加载所需路由的最小量JavaScript。 简单来说&#xf…

SAP中内部订单解锁操作实例

接用户反馈&#xff0c;在进行一笔采购订单收货&#xff08;带内部订单控制&#xff09;时&#xff0c;出现如下图提示。该提示指向内部订单&#xff0c;在本司采购订单中的内部订单用于控制采购预算费用。从提示看应该是订单的状态不对。 事务KO02打开内部订单&#xff0c;找到…

基于51单片机的厨房一氧化碳温湿度烟雾粉尘监测报警Proteus仿真

地址&#xff1a;https://pan.baidu.com/s/19tp61m5fOORP47RNh8TWGA 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectroni…

蓝桥杯(3):python搜索DFS

目录 1 DFS简介 1.1 DFS与n重循环 1.2 代码实现 1.3 例题 1.3.1 分糖果 1.3.2 买瓜 2 回溯 2.1 定义 2.2 代码实例 2.1.1 排列数 2.1.2 找子集 2.3 例题 2.3.1 N皇后 2.3.2 小朋友崇拜圈 2.3.3 全球变暖 3 剪枝 3.1 定义 3.2 分类 3.3 例子 3.3.1 数字王国之…

修改 RabbitMQ 默认超时时间

MQ客户端正常运行&#xff0c;突然就报连接错误&#xff0c; 错误信息写的很明确&#xff0c;是客户端连接超时。 不过很疑虑&#xff0c;为什么会出现连接超时呢&#xff1f;代码没动过&#xff0c;网络也ok&#xff0c;也设置了心跳和重连机制。 最终在官网中找到了答案&am…

【Flutter 面试题】 什么是Flutter插件(Plugin)?如何使用和创建插件?

【Flutter 面试题】 什么是Flutter插件&#xff08;Plugin&#xff09;&#xff1f;如何使用和创建插件&#xff1f; 文章目录 写在前面口述回答补充说明使用插件创建插件 写在前面 &#x1f64b; 关于我 &#xff0c;小雨青年 &#x1f449; CSDN博客专家&#xff0c;GitChat…