深入学习 Linux 操作系统的存储 IO 堆栈

这篇具有很好参考价值的文章主要介绍了深入学习 Linux 操作系统的存储 IO 堆栈。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Linux 存储堆栈图

当使用 read() 和 write() 系统调用向内核提交读写 I/O 请求操作时需要经历的步骤:

1)首先,请求经过虚拟文件系统,虚拟文件系统提供了统一的文件和文件系统的相关接口,屏蔽了不同文件系统的差异和操作细节;

2)其次,适配当前磁盘分区的文件系统,常见文件系统有 ext2/3/4、FATfs、sysfs、debugfs 等;

3)再次,内核将 I/O 请求交给 I/O 调度层进行排序和合并处理。经过 I/O 调度层加工处理后,将 I/O 请求发送给块设备驱动进行最终的 I/O 操作;

4)最后,通过总线协议对数据进行下盘或者读取操作。

深入学习 Linux 操作系统的存储 IO 堆栈

二、系统调用函数与存储介质交换

SQL 查询执行过程:

  • 客户端发送一条查询给服务器

  • 服务器优先检查查询缓存,如果命中了缓存,则立刻返回缓存中的结果,否则进入下一阶段

  • 服务器端进行 SQL 解析、预处理,再由优化器生成对应的执行计划

  • 根据优化器生成的执行计划,再调用存储引擎的 API 来执行查询

  • 最后将结果返回给客户端

深入学习 Linux 操作系统的存储 IO 堆栈

三、操作系统关于优化存储堆栈的参数

1) dirty_background_ratio:内存可以填充“脏数据”的百分比

这些“脏数据”后续将写入磁盘,后台进程会清理脏数据。比如现有 32G 内存,那么有 3.2G 的内存可以待着内存中,假设超过 3.2G 就会有后来进程来刷盘;

2) dirty_ratio 是绝对的脏数据限制,内存里的脏数据百分比不能超过这个值

如果脏数据超过这个数量,新的 IO 请求将会被阻挡,直到脏数据被写进磁盘。这是造成 IO 卡顿的重要原因,但也是保证内存中不会存在过量脏数据的保护机制;

3) dirty_expire_centisecs 指定脏数据能存活的时间

默认数值是 30 秒。当后台进程在刷盘时,它会检查是否有数据超时,如果超时就会触发刷盘操作,尽量规避数据在内存中储存过久后的丢失风险。

深入学习 Linux 操作系统的存储 IO 堆栈

四、IO 优化在 KaiwuDB 中的应用实践

1) 通过观察 CPU 使用情况并借助火焰图,发现 KaiwuDB 内核程序进程内的性能瓶颈点,包括但不限于:

a. 进程服务压力与后台服务处理能力不匹配;

b. 操作系统参数设置不匹配导致 CPU 占用低;

2) 通过 iostat 和 vmstat 观察磁盘性能工具,发现进程写入速度与后台处理速度、磁盘处理速度不匹配,需要进行参数调优;

3) 借助 KaiwuDB 内部的日志及性能统计工具(Trace 功能模块和监控工具 KAP),发现某些应用及服务的性能瓶颈,调整优化进程程序逻辑。文章来源地址https://www.toymoban.com/news/detail-481376.html

到了这里,关于深入学习 Linux 操作系统的存储 IO 堆栈的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux操作系统】深入理解Linux磁盘分区和挂载

    Linux磁盘分区和挂载是系统管理中非常重要的一部分,它们可以帮助我们更好地管理存储空间和文件系统。本文将详细介绍Linux磁盘分区和挂载的概念、原理以及实践操作,并提供相应的例子、代码和指令,帮助读者全面了解和掌握这两个关键概念。 磁盘分区是将物理硬盘划

    2024年02月14日
    浏览(47)
  • 【Linux操作系统】深入探索Linux进程:创建、共享与管理

    进程的创建是Linux系统编程中的重要概念之一。在本节中,我们将介绍进程的创建、获取进程ID和父进程ID、进程共享、exec函数族、wait和waitpid等相关内容。 在Linux系统中,进程的创建使用 fork() 系统调用。 fork() 系统调用会创建一个与当前进程相同的子进程,子进程会复制父进

    2024年02月12日
    浏览(57)
  • 【Linux深入剖析】冯·诺依曼体系结构以及操作系统的深入理解

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 冯·诺依曼体系结构,也被称为普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储

    2024年03月17日
    浏览(48)
  • 【Linux】深入理解系统文件操作(1w字超详解)

    ❓是不是只有CC++有文件操作呢?💡Python、Java、PHP、go也有,他们的文件操作的方法是不一样的啊 1.1对于文件操作的思考: 我们之前就说过了: 文件=内容+属性 针对文件的操作就变成了对内容的操作和对属性的操作 ❓当文件没有被操作的时候,文件一般会在什么位置?💡

    2024年02月07日
    浏览(48)
  • 【Linux】深入了解冯诺依曼体系结构与操作系统

    目录 导读 🌞专栏导读 🌞冯·诺依曼 🌞冯诺依曼体系结构 🌛木桶效应 🌞操作系统(Operator System) 🌛概念 🌛设计OS的目的 🌛系统调用和库函数概念  六一儿童节快到了,提前祝大家六一儿童节快乐哦!!! 六一儿童节的即将来到,祝愿我家宝🧡,愿你童心未泯,无忧无虑

    2024年02月06日
    浏览(65)
  • 【Linux操作系统】深入理解系统调用中的read和write函数

    在操作系统中,系统调用是用户程序与操作系统之间进行交互的重要方式。其中,read和write函数是常用的系统调用函数,用于在用户程序和操作系统之间进行数据的读取和写入。本文将深入介绍read和write函数的工作原理、用法以及示例代码,以帮助读者更好地理解和应用这两

    2024年02月13日
    浏览(46)
  • 【linux深入剖析】操作系统与用户之间的接口:自定义简易shell制作全过程

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 Linux的Shell是一种命令行解释器,它是用户与操作系统内核之间的接口。 通过Shell,用户可以输入命令并与

    2024年03月18日
    浏览(56)
  • 『Linux从入门到精通』第 ⑫ 期 - 深入了解冯诺依曼体系结构与操作系统(Operator System)

    🌸作者简介: 花想云 ,在读本科生一枚,C/C++领域新星创作者,新星计划导师,阿里云专家博主,CSDN内容合伙人…致力于 C/C++、Linux 学习。 🌸 专栏简介:本文收录于 Linux从入门到精通 ,本专栏主要内容为本专栏主要内容为Linux的系统性学习,专为小白打造的文章专栏。

    2024年02月10日
    浏览(49)
  • 『Linux从入门到精通』第 ⑫ 期 -深入了解冯诺依曼体系结构与操作系统(Operator System)

    🌸作者简介: 花想云 ,在读本科生一枚,C/C++领域新星创作者,新星计划导师,阿里云专家博主,CSDN内容合伙人…致力于 C/C++、Linux 学习。 🌸 专栏简介:本文收录于 Linux从入门到精通 ,本专栏主要内容为本专栏主要内容为Linux的系统性学习,专为小白打造的文章专栏。

    2023年04月23日
    浏览(84)
  • Linux操作系统学习——启动

      Linux 操作系统内核是服务端学习的根基,也是提高编程能力、源码阅读能力和进阶知识学习能力的重要部分,本文开始将记录 Linux 操作系统中的各个部分源码学习历程。   以 Linux 源码举例,首先你得知道操作系统分为哪几个部分,他们单独做了什么功能,如何进行配合

    2024年02月09日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包