高吞吐,大并发,不怕数据大,最怕数量大。

网络处理怕小包,文件操作怕小文件,无论每一个小包还是每一个小文件,它们均消耗元操作和元数据,如每一个数据包都触发一次中断,而中断是有固有调度开销的,中断数量越多,开销越大。小文件类似,再小的文件也要有inode,ident等固定元数据描述。

元开销是固定的。

时间方面和空间方面元开销都与数量正相关。时间开销体现在并发调度,本质上是查找,这个已经说了好多次。空间上是元数据开销,这个不谈。

时间开销优化方法两种:

  • 一次处理尽可能多的量。
  • 多次操作尽可能合并成。

第一点最好的例子就是轮询替换中断,着重说第二点。

类比码头货物集散,为每一个包裹分配一辆卡车,就是小包场景,大量车辆将堵死道路,且需要大量的司机及装卸装置。因此采用集装箱才是提高吞吐的好方法,一辆卡车运输尽可能多的货物,以集装箱为单位装卸。

所谓机械磁盘调度算法也是希望磁盘转一圈尽可能读写更多数据。说到底还是希望减少操作数量,减少与数量正相关的损耗而提高吞吐。

当数据经过TCP或UDP隧道的时候,提高吞吐的最好方法就是将多个小包聚合成一个大包,类似在物理网卡执行一次GRO操作。

以wireguard-go为例,将1420 MTU大小的包聚集成65400字节的大包后,25Gbps网卡直连隧道,单流吞吐从不到1Gbps提升到了10Gbps。这里很容易理解省去了哪些开销:

  • 批量加解密,数据量越大,预处理次数越少。
  • tun设备,读写buffer越大,copy次数越少。
  • channel操作,包越大,包量少,竞争越少。
  • socket读写,buffer越大,读写竞争越少。
  • socket读写,buffer越大,copy次数越少。

减少数量,降低的就是元开销。

通过批量操作将数量降下来后,分离双工就是最后一击了。前面提到TCP的半双工实现,socket读写会互斥,为每一个peer创建两条隧道,分管两个方向,预期吞吐又会提升,实际10Gbps终于到了14Gbps。

除了减少数量,分离方向,其它的都是把戏。

只有抓住了核心瓶颈才能做优化,否则注定一场空。清晨有感而发。

浙江温州皮鞋湿,下雨进水不会胖。

提高吞吐就要减少操作次数相关推荐

  1. LeetCode 1887. 使数组元素相等的减少操作次数(map)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 nums ,你的目标是令 nums 中的所有元素相等.完成一次减少操作需要遵照下面的几个步骤: 找出 nums 中的 最大 值.记这个值 ...

  2. JS性能优化——减少DOM操作次数

    DOM操作会导致浏览器重解析,引起重排(回流)和重绘,直接影响页面性能 对DOM的操作一般有两种:修改已存在页面上的DOM元素(更改样式),创建插入新的DOM元素 这里提出几个方案来减少DOM操作次数 ...

  3. 一道题,最小操作次数使数组元素相等引发的思考

    前言 最近在打卡力扣刷题,一道简单题但是感觉挺好的. 力扣453:最小操作数使数组相等. 题目描述为: 给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 .返回让数组所有元素 ...

  4. leedcode04:转换字符串的最少操作次数

    一:题目 给你一个字符串 s ,由 n 个字符组成,每个字符不是 'X' 就是 'O' . 一次 操作 定义为从 s 中选出 三个连续字符 并将选中的每个字符都转换为 'O' .注意,如果字符已经是 ...

  5. LeetCode 1775. 通过最少操作次数使数组的和相等(贪心+双指针)

    文章目录 1. 题目 2. 解题 1. 题目 给你两个长度可能不等的整数数组 nums1 和 nums2 . 两个数组中的所有值都在 1 到 6 之间(包含 1 和 6). 每次操作中,你可以选择 任 ...

  6. 如何提高功率因数,减少线路损耗,节省用电成本

    安科瑞 李雨轩 摘要:无功补偿对电网的安全.经济运行有重要作用.配电网规模巨大,负荷情况复杂,使用环境条件恶劣,采用AZC低压无智能电力电容器进行无功补偿意义重大. 关键词:低压智能电力电容器,无功补 ...

  7. 【每日一题】 1319. 连通网络的操作次数

    [每日一题] 1319. 连通网络的操作次数 避免每日太过咸鱼,一天搞定一道LeetCode算法题 一.题目描述 用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1.线缆用 c ...

  8. Leetcode 第1342题:将数字变成 0 的操作次数 (位运算解题法详解)

    前言 Leetcode第1342题如果用直观方式来做,其实是一道难度极低的题目.但是如果采用位运算的方式来解,则会涉及许多有趣的衍生知识点,了解其背后的原理对我们认识位运算有很大的帮助.现在,就让我们 ...

  9. 【力扣】1319. 连通网络的操作次数

    以下为力扣官方题解 1319. 连通网络的操作次数 题目 示例1 示例2 示例3 示例4 提示 官方题解 思路一 深度优先搜索 代码 复杂度分析 思路二 并查集 代码 复杂度分析 题目 用以太网线缆将 ...

最新文章

  1. 语义分割--Pixel Deconvolutional Networks
  2. python学习笔记(二)---编辑工具sublimeText3运行python
  3. 手机屏大字滚动_在iPhone手机中,实现长截图的几种方法
  4. 图的存储结构matlab,matlab存储 一幅图像的的函数为( )
  5. Java学习小程序(9)冒泡排序算法实现
  6. 怎样编写测试类测试分支_编写干净的测试–从配置开始
  7. pip软件包安装 + Anaconda软件库安装 教程
  8. python求奇数的乘积_Python中的推导式使用详解
  9. 测试人员与开发人员之间的关系如何?
  10. Java字符串连接的几种方式
  11. html排版跟代码不一致_用壹伴助手,几分钟搞定公众号排版
  12. WINDOWS10经常莫名其妙的卡死一会
  13. 《区块链技术指南》笔记
  14. 卡通人物设计_40个很棒的卡通人物设计教程
  15. 那些年我们一起追寻过的考研(华科计算机)
  16. 如何开发一个App(Android)
  17. 计算机网络实验:路由器交换机与其基本配置操作、常见命令
  18. 电磁场与电磁波-2-泊松方程、拉普拉斯方程的推导
  19. Wikidata知识图谱介绍与数据处理
  20. 【附源码】计算机毕业设计JAVA东理咨询交流论坛

热门文章

  1. node.js+uniapp计算机毕业设计安卓电影院售票管理APP论文(程序+APP+LW)
  2. 群体智能算法之蚁群算法初探(一)
  3. Java NIO 应用案例:实现一个简单的群聊系统
  4. 集成融云 SDK 怎么实现多端同步未读数
  5. 基于JAVA房产中介预约看房系统设计与实现 开题报告
  6. 2021.3.12日报:修复miniblink vip版本的性能问题
  7. Comprehensive survey of computational ECG analysis: Databases,methods and applications
  8. WIFI6模块--RW6852_PCIE接口--WIFI/蓝牙协议讲解
  9. C语言:求100以内的素数
  10. 未来星计算机一级分数截图,学生成绩统计与分析系统2.0(全新升级)