写点什么

性能优化 - 文件硬盘 I/O,数据结构算法,网络通讯

用户头像
garlic
关注
发布于: 2020 年 11 月 15 日
性能优化-文件硬盘I/O,数据结构算法,网络通讯

文件硬盘 I/O


存储金字塔



寄存器 CPU 中的 Regs 速度与 CPU 同步

SRAM 通电状态的话数据一直保持,断电数据丢失

DRAM 需要不断刷新但是实现复杂,导致访问效率低于 SRAM

SSD 固态硬盘

HDD 硬盘,指传统的机械硬盘

硬盘


  1. HDD :


机械硬盘组成及细分

  • 盘片

  • 磁头

  • 悬臂

  • 磁道:


磁道分成扇区,盘面上同一扇区组成柱面

几何扇区与扇区



蓝色部分式扇区,几何扇区时到


指标参数

  • 转速单位 RPM:每分钟旋转圈数

  • 平均时延 把几何扇区对准悬臂的时间

7200 转磁盘 每秒 120 圈, 240 个半圈 1/240 = 4.17ms

5400 转磁盘 每秒 90 圈, 180 个半圈 1/180 = 5.55ms

  • 平均寻道时间 :HDD 平均寻道时间在 4-10ms


一个 7200 转的磁盘找到一个数据需要 8-14ms 5400 转的需要 9-15ms, 对应的

7200 转的 IOPS 1/8ms = 125IOPS 到 1/14ms =70IOPS

5400 转的 IOPS 1/9ms = 111IOPS 到 1/15ms = 66IOPS


  1. SSD


SSD 实现


SDD 使用了类似 SRAM,电容电压模式存放数据 , SDD 速度比传统磁盘速度快,但是耐用性差。


按照最小存储单位分为四类:

  • SLC

  • MLC

  • TLC

  • QLC


同样的存储单位上要存的数据位逐渐增大,内部操作复杂 速度也是逐步减慢。


SSD 就是一块电路板子,像下面这样。


SSD 单位是 Page, 删除单位 Block, SLC 的芯片,可以擦除的次数大概在 10 万次,MLC 就在 1 万次左右,而 TLC 和 QLC 在几千次左右。 这直接影响了其价格


SSD 优化


  1. 磨损均衡-FTL:通过引入中间层处理来自操作系统的请求,均衡各个磁盘块的读写请求。 如果一个物理块上数据擦写次数多, 可以将其移动到擦写请求少的物理块上。 

  2. TRIM 标识数据是否失效, 防止移动已经失效的数据

  3. 留存足够的空余空间,防止写入放大(为了写入一个数据要移动更多的数据)


存储数据结构


B+ 树

排序树,一个块存储多个数据,非叶子节点还存放指针,使用指针完成索引, 通过 4 级结构能访问几千万记录。 问题在于 数据块离散存储, 每次根据索引进行查找还是要进行多次读写。 性能较差。


一个简单的 B +树示例,将键 1–7 链接到数据值 d1-d7。 链接列表(红色)允许快速有序遍历


LSM 树

数据连续存储, 内存中构建树, 合并时以日志方式进行逐级合并。



存储管理

  • 文件控制块 :

Linux inode/ windows FAT ,通过控制块记录数据元数据, 通过控制块获取数据块最终获取数据

通过多级索引可以访问更多的数据块。

  • RAID: 

   磁盘阵列:






  • HDFS


类比 linux 文件系统 NameNode 类似 iNode 节点 DataNode 类似 Blocks


数据结构算法


相关概念


  • 时间复杂度

  • 空间复杂度

  • NP 问题

  • P 问题:能在多项式时间复杂度内解决的问题。

  • NP 问题:能在多项式时间复杂度内验证答案正确与否的问题

数独和最短路径查找属于 NP 问题


数据结构

  • 数组

  • 链表

  • hash 表

  • 队列

  • 二叉树

  • 二叉排序树

  • 平衡二叉树

  • 旋转二叉树

  • 红黑树

  • 跳表

常用算法


  • 穷举

  • 递归

  • 贪心 :改进:迪杰斯特拉算法

  • 动态规划

  • 遗传算法


网络通讯


通讯模型


OSI 模型:


  • 应用层: Application Layer

  • 表示层: Presentaion Layer

  • 会话层: Session Layer

  • 传输层: Transport Layer

  • 网络层: Network Layer

  • 数据链路层: Data Link Layer

  • 物理层: Physical Layer


TCP/IP


  • 应用层: Application Layer

  • 传输层: Transport Layer

  • 网络互联层: Internet Layer

  • 网络访问层: Network Access(Link ) Layer


数据包格式 :


  • 物理层:二进制数据

  • 链路层:帧 数据链路层负载

  • 网络层;IP IP 负责均衡

  • 传输层:TCP 协议 三次握手, 四次挥手

  • 应用层:

  • HTTP 1.0.

  • HTTP 1.1 复用链接 keepalve

  • HTTP 2 引入"流"

  • HTTP3 使用 QUIC 协议


通讯方式:

  • socket,端口

  • 服务器-客户端

  • 服务器多线程-客户端

  • 服务器线程池-客户端


内核处理:


Socket linux 内核处理过

  1. 网络数据到达网卡

  2. 通过中断通知 cpu

  3. 拷贝数据到 Socket 接收缓冲

  4. 拷贝完成,唤醒线程 A


阻塞 I/O:

  • BIO Blocking I/O 一直等到操作完成。


非阻塞 I/O :

  • Java NIO

  • 多路复用 select poll epoll


参考及引用


架构师训练营作业-李智慧老师相关讲义

徐文浩深入浅出计算及组成原理

Photo by Tatiana Syrikova from Pexels


用户头像

garlic

关注

还未添加个人签名 2017.11.15 加入

还未添加个人简介

评论

发布
暂无评论
性能优化-文件硬盘I/O,数据结构算法,网络通讯