kafka零拷贝sendfile及mmap简述

news/2024/11/9 16:37:50/

概述

通常在选型比较消息中间件时,都会在备选栏有kafka
kafka突出的特点就是高吞吐,零拷贝;

这里的零拷贝其实就是内核和用户空间之间没有copy,并不是真的0拷贝;
毕竟数据在磁盘,要读到网卡发送到网络上,至少得从磁盘copy到网卡吧;

说到零拷贝就要介绍下mmapsendfile了;kafka用的sendfilerocketmq用的mmap

rocketmq需要获取发送后的回执数据,所以用了mmap

# sendfile函数返回的是传输的字节数
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);# mmap成功返回指向目标内存区域的指针;失败,返回MAP_FAILED ((void*)-1),并设置errno
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
  • mmap 适合小数据量读写,sendFile 适合大文件传输。
  • mmap 需要 4 次上下文切换,3 次数据拷贝;sendFile 需要 3 次上下文切换,最少 2 次数据拷贝。
  • sendFile 可以利用 DMA 方式,减少 CPU 拷贝,mmap 则不能(必须从内核拷贝到 Socket 缓冲区)。

用户程序在操作系统中读取数据发送的过程
在这里插入图片描述

mmp映射优化后
mmap 通过内存映射,用户空间可以共享内核空间的数据。
这样,在进行网络传输时,减少了内核空间到用户空间的拷贝
在这里插入图片描述

sendfile优化后

linux2.1中内核buffer还会写到socket缓冲区,在linux2.4后直接就从内核copy到网络协议栈
在这里插入图片描述


http://www.ppmy.cn/news/1505659.html

相关文章

数据赋能(167)——开发:数据分析——概述、关注焦点

概述 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总和理解并消化,以求最大化地开发数据的功能,发挥数据的作用。 数据分析通常被视为一个独立的过程。 数据分析的主要目的是通过统计和分析方法,…

Apache Kafka 生产者 API 详解

Apache Kafka 生产者 API 详解 Apache Kafka 是一个高吞吐量、低延迟的分布式流处理平台,用于构建实时数据管道和流应用。在 Kafka 中,生产者负责将消息发布到 Kafka 集群。本文将详细演示 Kafka 生产者 API 的使用,包括配置、消息发送、错误…

HCIP笔记<1>--广域网

广域网 数据链路层面: 针对不同的物理链路定义不同的封装 局域网封装:Ethernet 2(TCP/IP) , IEEE802.3(OSI) 广域网封装:PPP HDLC FR ATM() HDLC&am…

怎么删除iPhone重复照片:解放你的存储空间

在数字化时代,iPhone已成为我们记录生活点滴的重要工具。从家庭聚会的快乐时光到户外冒险的壮观景象,我们依靠iPhone捕捉无数珍贵瞬间。然而,这种便利性带来的一个副作用是,相册很快就会充满重复的照片,不仅占用了宝贵…

目标检测的算法有哪些

目标检测(Object Detection)是一项计算机视觉任务,旨在识别和定位图像或视频中的目标物体。随着深度学习的发展,许多高效的目标检测算法被提出。以下是一些广泛使用的目标检测算法: 一阶段检测器(Single-S…

java集合面试题2

Java 中 HashMap 的扩容机制是怎样的? 在 Java 中,HashMap 的扩容机制主要是为了保持其性能和数据存储的效率。 当 HashMap 中的元素数量达到一定的负载因子(默认值为 0.75)和当前容量的乘积时,就会触发扩容操作。 扩…

使用Go语言绘制水平柱状图教程

使用Go语言绘制水平柱状图教程 在本教程中,我们将学习如何使用Go语言及gg包绘制水平柱状图,并将图表保存为PNG格式的图片。水平柱状图适用于展示多个类别的数据,且便于标签的排列和阅读。 安装gg包 首先,确保你已经安装了gg包。…

Linux服务器SSH远程密钥免密登录

说明 业务场景中经常需要进行跨服务器的操作,即从一台服务器上登录到另外一台服务器,默认情况下,SSH远程登录时需要输入远程服务器密码。当需要在可信任的服务器之间进行频繁或自动化的操作时,输入密码就会带来不便。 本文介绍如…