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

news/2024/4/27 14:11:26/文章来源:https://blog.csdn.net/qq_36159989/article/details/137105576

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安全内存中透明的使用零拷贝,其他使用复制。

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

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

相关文章

短视频矩阵系统--技术3年源头迭代

短视频矩阵系统核心技术算法主要包括以下几个方面: 1. 视频剪辑:通过剪辑工具或API从各大短视频平台抓取符合要求的视频。这些视频通常符合某些特定条件,如特定关键词、特定时间段发布的视频、视频点赞评论转发等数据表现良好的视频。 2. 视…

每日一题 --- 209. 长度最小的子数组[力扣][Go]

长度最小子数组 题目: 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组&#xff0c…

深度学习项目-基于深度学习的股票价格预测研究

概要 随着经济的发展,中国股票市场的规模持续扩大,早已成为金融投资的重要部分,掌握股票市场的变化规律无论是对监管者还是投资者都具有极其重要的意义。正因如此,人们不断探索着股票市场的变化规律,其中使用深度学习预…

知行之桥EDI系统功能介绍——FlatFile 端口介绍

FlatFile 端口能够实现平面文件与XML文件的互相转换。 每个 Flat File 端口配置一个特定的平面文件格式,从而实现与 XML 格式的互相转换。Flat File 端口有两个主要的模式: Position DelimitedCharacter Delimited 对于 Position Delimited 平面文件&a…

V R社交平台的用处|虚拟现实体验馆加盟|V R设备在线价格

VR(虚拟现实)社交平台的用处可以体现在以下几个方面: VR社交平台不仅可以丰富用户的社交体验,还可以在教育、艺术、商务等领域发挥重要作用,为用户提供更加多样化、互动性强的社交平台体验。 VR游乐设备|VR娱乐设备|VR…

CleanMyMac X 4.15.1 for Mac 最新中文破解版 系统优化垃圾清理工具

CleanMyMac X for Mac 是一款功能更加强大的系统优化清理工具,相比于 CleanMyMac 4.15.1来说,功能增加了不少,此版本为4.15.1官方最新中英文正式破解版本,永久使用,解决了打开软件崩溃问题,最新版4.15.1版本…

微信开发者工具创建一个小程序

创建项目 对于上面这个AppID可以自行选择是注册还是测试号,我是使用的测试号,之后再下面选择模板,我这里选择了JS-基础模板。 进入项目后在模拟器中可看到如下页面: 添加提交按钮进行页面跳转 添加需要跳转的文件夹,…

Leetcode 3.25

LeetCode Hot 100 栈1.有效的括号2.最小栈3.字符串解码 栈 1.有效的括号 有效的括号 这道题肯定是利用了栈先入后出的特性。有以下几种情况 如果当前元素是左括号则push进栈不弹出; 如果当前元素是右括号则弹出栈中前一个元素,并判断是否与当前元素匹配…

http模块—http请求练习

题目要求:搭建如下http服务: 1.当浏览器向我们的服务器发送请求时,当请求类型是get请求,请求的url路径地址是/login。响应体结果是登录页面 2.当浏览器向我们的服务器发送请求时,当请求类型是get请求,请求…

ubuntu 首次登录mysql8 未设置密码或忘记密码解决方法 亲测可用

-1.首先输入以下指令: sudo cat /etc/mysql/debian.cnf2. 再输入以下指令: mysql -u debian-sys-maint -p //注意! //这条指令的密码输入是输入第一条指令获得的信息中的 password ZCt7QB7d8O3rFKQZ 得来。 //请根据自己的实际情况填写!运…

QT文件读写操作和内容提取

访问IO设备,需要先调用open()来设置正确的OpenMode(例如ReadOnly或ReadWrite) 打开设备后后,使用write() 或putChar() 写入数据到文件和设备,并通过调用read(),readLine() 或readAll() 进行读取;使用完设备后&#xf…

离线数仓(八)【DWD 层开发】

前言 1、DWD 层开发 DWD层设计要点: (1)DWD层的设计依据是维度建模理论(主体是事务型事实表(选择业务过程 -> 声明粒度 -> 确定维度 -> 确定事实),另外两种周期型快照事实表和累积型…

【自我提升】一、Hyperledger Fabric 概念梳理

写在前面:最近因为业务需要,开始学习Hyperledger Fabric了,做java全栈工程师可真难搞。现在算是啥类型的都在涉及了,现在这个技术啥都不懂,就先开个学习专栏,记录记录。顺带也给各位道友参考参考。 目录 …

【Bug】记录2024年遇到的Bug以及修复方案

--------------------------------------------------------分割线 2024.3.22------------------------------------------------------- 1、load_sample_image raise AttributeError(“Cannot find sample image: %s” % image_name) AttributeError: Cannot find sample imag…

[linux初阶][vim-gcc-gdb] OneCharter: vim编辑器

一.vim编辑器基础 目录 一.vim编辑器基础 ①.vim的语法 ②vim的三种模式 ③三种模式的基本切换 ④各个模式下的一些操作 二.配置vim环境 ①手动配置(不推荐) ②自动配置(推荐) vim是vi的升级版,包含了更加丰富的功能. ①.vim的语法 vim [文件名] ②vim的三种模式 命令…

WPF —— DockPanel、ProgressBar 控件详解

ProgressBar 控件详解 1Progress bar简介 ProgressBar:进度条控件。 WPF带有一个方便的控件用于显示进度,称ProgressBar。它的工作原理就是设置最小值和最大值然后通过递增一个值,这样就可以直观的显示当前进度情况。 2 Progress bar常用的…

DFS:从递归去理解深度优先搜索

一、深入理解递归 二、递归vs迭代 三、深入理解搜索、回溯和剪枝 四、汉诺塔问题 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public: //笔试题&#xff0c;不讲武德&#xff0c;CAvoid move(int n,vector<int>& A, vector<int>& B, ve…

前端实现浏览器自定义滚动条

前言&#xff1a; 最近有个项目&#xff0c;产品觉得浏览器默认滚动条太丑了。想美化一下&#xff0c;比如自定义颜色&#xff0c;加上圆角&#xff0c;宽高都要更改一下。我查了资料和文档总结了一下 写法&#xff0c;特此记录以便之后使用。 浏览器滚动条api 总结&#xff…

【爬取网易财经文章】

引言 在信息爆炸的时代&#xff0c;获取实时的财经资讯对于投资者和金融从业者来说至关重要。然而&#xff0c;手动浏览网页收集财经文章耗时费力&#xff0c;为了解决这一问题&#xff0c;本文将介绍如何使用Python编写一个爬虫程序来自动爬取网易财经下关于财经的文章 1. 爬…

代码随想录 Day-25

力扣题目 509.斐波那契数 思路 很理所当然的&#xff0c;可以使用递归的方式其次是用动态规划的方式&#xff0c;动态规划的核心就是递推公式。 那么递推和递归一字之差&#xff0c;有什么区别呢&#xff1f;&#xff08;递推和递归的区别&#xff09; 1、递归 class Solutio…