场景问题(三)限流与零拷贝

七、有哪些常用限流算法?

Leaky Bucket 漏桶

漏桶可理解为是一个限定容量的请求队列。想象有一个桶,有水(指请求或数据)从上面流进来,水从桶下面的一个孔流出来。水流进桶的速度可以是随机的,但是水流出桶的速度是恒定的。 当水流进桶的速度较慢,桶不会被填满,请求就可以被处理。 当水流进桶的速度过快时,桶会逐渐被填满,当水超过桶的容量就会溢出,即被丢弃。

img

Token Bucket 令牌桶

在令牌桶算法中,系统会以一个固定的速率向桶中添加令牌。当有请求(或数据包)到来时,会从桶中删除一定数量的令牌。如果桶中有足够的令牌,请求就可以立即处理; 如果桶中没有足够的令牌,请求就会被阻塞或丢弃,具体行为取决于具体的实现。 桶有容量限制,如果添加令牌时桶已满,新的令牌就会被丢弃。

img

Fixed Window 固定窗口

在一个固定的时间窗口内,只允许一定数量的请求。如果在这个时间窗口内的请求已经达到了限制,那么新的请求就会被拒绝,过了当前时间窗口后,会进入下一个时间窗口,并重置窗口内的请求数量,重新计算。

img

Sliding Window 滑动窗口

在固定窗口限流算法中,如果大量请求在一个时间窗口的边界附近到达,可能会造成瞬时的流量突增。 滑动窗口随着时间的推移,动态统计请求量,避免了在窗口边界附近的流量突增。

九、零拷贝技术

Netty 用到了零拷贝来大幅提升网络吞吐量

正常流程:4次拷贝,4次用户态和内核态之间的切换

非DMA非零拷贝 (1).png

  1. 应用进程向系统申请读磁盘的数据,这时候程序从用户态切换成内核态。
  2. 系统也就是 linux 系统得知要读数据会通知 DMA 模块要读数据,这时 DMA 从磁盘拉取数据写到系统内存中。
  3. 系统收到 DMA 拷贝的数据后把数据拷贝到应用内存中,同时把程序从内核态变为用户态。
  4. 应用内存拿到从应用内存拿到数据后,会把数据拷贝到系统的 Socket 缓存,然后程序从用户态切换为内核态。
  5. 系统再次调用 DMA 模块,DMA 模块把 Socket 缓存的数据拷贝到网卡,从而完成数据的发送,最后程序从内核态切换为用户态。
MMAP + write
buf = mmap(file,length) 
write(socket,buf,length)// 所谓的 MMAP, 其实就是系统内存某段空间和用户内存某段空间保持一致,也就是说应用程序能通过访问用户内存访问系统内存
  • 应用进程通过接口调用系统接口 MMAP,并且进程从用户态切换为内核态。
  • 系统收到 MMAP 的调用后用 DMA 把数据从磁盘拷贝到系统内存,这时是第1次数据拷贝。由于这段数据在系统内存和应用内存是共享的,数据自然就到了应用内存中,这时程序从内核态切换为用户态。
  • 程序从应用内存得到数据后,会调用 write 系统接口,这时第2次拷贝开始,具体是把数据拷贝到 Socket 缓存,而且用户态切换为内核态。
  • 系统通过 DMA 把数据从 Socket 缓存拷贝到网卡。
  • 最后,进程从内核态切换为用户态。

这样做到收益是减少了一次拷贝但是用户态和内核态仍然是4次切换

sendfile

零拷贝之sendfile.png

  1. 应用进程调用系统接口 sendfile,进程从用户态切换完内核态。
  2. 系统接收到 sendfile 指令后,通过 DMA 从磁盘把数据拷贝到系统内存。
  3. 数据到了系统内存后,CPU 会把数据从系统内存拷贝到 socket 缓存中。
  4. 通过 DMA 拷贝到网卡中。
  5. 最后,进程从内核态切换为用户态。
零拷贝
  1. 应用进程调用系统接口 sendfile,进程从用户态切换完内核态。
  2. 系统接收到 sendfile 指令后,通过 DMA 从磁盘把数据拷贝到系统内存。
  3. 数据到了系统内存后,CPU 会把文件描述符和数据长度返回到 socket 缓存中(注意这里没有拷贝数据)。
  4. 通过 SG-DMA 把数据从系统内存拷贝到网卡中。
  5. 最后,进程从内核态切换为用户态。

真正的零拷贝.png

零拷贝在用户态和内核态之间的切换是2次,拷贝是2次,在内存之间没有拷贝,大大减少了切换次数和拷贝次数,而且全程没有 CPU 参与数据的拷贝。

## SG-DMA
在通常情况下,DMA 操作是在一个连续的内存块上执行的。然而,在实际应用中,所需的数据可能是分散的,即分布在物理内存的多个不同区域。Scatter-Gather DMA 就是为了解决这个问题而设计的:- 分散(Scatter):指的是从内存的多个不连续位置读取数据块,并"分散"到连续的硬件缓冲区中,或者相反,将数据从硬件的连续缓冲区写入到内存的分散区域。- 聚集(Gather):则是指将来自多个源的数据“聚集”起来,组合成一个大的数据块,以便连续地通过 DMA 传输。为实现这一过程,操作系统通常会维护一个描述符表或链表,列出所有分散内存区块的地址和大小。DMA 控制器使用这个表来了解每个数据块的位置,并按正确的顺序将它们聚集起来进行传输。Scatter-Gather DMA 在需要高效处理大量分散数据的场景下非常有用,比如在网络通信、文件系统管理和音视频数据流处理中。它消除了额外的数据拷贝步骤,因为它允许直接在分散的内存区块上操作,从而减少了延迟,提高了吞吐量,并减轻了 CPU 负担。

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

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

相关文章

测试用例的设计(2)

目录 1.前言 2.正交排列(正交表) 2.1什么是正交表 2.2正交表的例子 2.3正交表的两个重要性质 3.如何构造一个正交表 3.1下载工具 3.1构造前提 4.场景设计法 5.错误猜测法 1.前言 我们在前面的文章里讲了测试用例的几种设计方法,分别是等价类发,把测试例子划分成不同的类…

STM32CubeProgrammer + STLINK V2 烧录

发现使用STM32C8T6 STLINK V2 STM32CubeProgrammer无法成功烧录,总是报错 file error。至于原因,姑且参考:STLINK V2 无法用STM32CubeProgrammer下载程序-CSDN博客 解决方案: 烧录工具由STLINK换成OpenOCD。 stm32f1x.cfg # S…

深度解析:如何运用山海鲸可视化软件制作高效销售数据看板

在数字化时代,数据可视化已经成为企业决策和运营的重要工具。作为一名长期使用山海鲸可视化软件的资深用户,我深知其在制作销售数据可视化看板方面的优势。今天,我想分享一些我在使用山海鲸可视化软件制作销售数据可视化看板过程中的经验和感…

企业要搞IPO,IT部门该如何配合?

在企业筹备上市的过程中,IPO审计的重要性不言而喻。那么IT部门又该如何配合公司完成这一事项呢?这其中,系统数据集成的作用尤为关键,它既是企业透明度和合规性的体现,又是投资者评估企业经营状况和未来潜力的重要依据。…

YOLOv5+DeepSort的汽车流量统计

前言 先来看下实现效果: 上图展示了用yolov5作为检测器,DeepSort为追踪器实现了对车流量的统计并绘制了每辆车的运行轨迹。 一、整体目录结构 下图展示了项目的整体目录结构: 其中: deep_sort文件下为目标跟踪相关代码&#x…

面向IoT物联网的时间序列引擎

1、背景 随着近年来业务的发展,尤其是机器产生的数据占比越来越高的趋势下,时序数据因为其业务价值越来越被更多地关注,也因而催生了专用的时间序列数据库,简称时序数据库(TimeSeries Database,TSDB&#x…

在linux上部署yolov5和安装miniconda3

第一步:安装miniconda3 官网:Miniconda — Anaconda documentation 这四个命令快速而安静地安装最新的64位版本的安装程序,然后自行清理。要为Linux安装Miniconda的不同版本或体系结构,请在wget命令中更改.sh安装程序的名称。 …

淘宝客必看:微信公众号如何快速接入抖音本地团购并提高CPS收益

抖音已经成为社交媒体新的流量高地,抖音团购完全复刻了美团的模式,外卖、到店、吃喝玩乐全覆盖。很多淘宝客一直在寻找通过微信公众号实现营销变现的有效途径?是否对于如何将抖音团购转变为自己的佣金收入感到困惑?微信公众号接入…

Elasticsearch:在本地使用 Gemma LLM 对私人数据进行问答

在本笔记本中,我们的目标是利用 Google 的 Gemma 模型开发 RAG 系统。 我们将使用 Elastic 的 ELSER 模型生成向量并将其存储在 Elasticsearch 中。 此外,我们将探索语义检索技术,并将最热门的搜索结果作为 Gemma 模型的上下文窗口呈现。 此外…

19113133262(微信同号)2024年环境能源与全球市场营销国际学术会议(ICEEGM 2024)

2024年环境能源与全球市场营销国际学术会议(ICEEGM 2024) 会议主题: (主题包括但不限于, 更多主题请咨询会务组苏老师) 节能技术 煤矿工程与技术 能源存储技术 可再生能源 热能与动力工程 能源工程与环境工程 可再生能源技术和系统 能源安全和清洁利用 矿…

自动化运维工具 ---------------Ansible

一、Ansible 发展史及功能 作者:Michael DeHaan( Cobbler pxe kikstar 与 Func 作者)ansible 的名称来自科幻小说《安德的游戏》中跨越时空的即时通信工具,使用它可以在相距数光年的距离,远程实时控制前线的舰队战斗2…

ctf_show笔记篇(web入门---sql注入)171-189

sql注入 171:简单的sql注入,尝试万能密码直接过 172:基础联合查询可过 173:过滤flag那就利用substr少取几个flag的名字或者replace 174:两种方法,使用盲注或者利用replace嵌套替换,然后在逆…