IO协议栈前沿技术研究动态(2015存储峰会分享)

栈的应用 二、栈的应用 栈是一个重要的数据结构,其特性简而言之就是“后进先出”,这种特性在计算机中有着广泛的运用。其实程序员无时无刻不在使用者栈,函数的调用是我们间接使用栈的最好的例子,但是栈在实际中的运用远不止这些,比较经典的应用还包括括号匹配、逆波兰表达式的求值等,下面就介绍这两个对栈的简单应用: 1、括号匹配问题 1)括号匹配问题的四种结果: (1)左右括号匹配正确 (2)左右括号匹配错误... 阅读详情

上周冬瓜哥在由DOIT传媒举办的中国存储峰会数据经济峰会上做了一次技术分享。那些没来得及现场参与的朋友们,冬瓜哥为大家奉上了由DOIT传媒整理的冬瓜哥现场演讲听记,其中可能有些错误,冬瓜哥初步稍微整理了一些,但是在所难免,见谅。



  冬瓜哥:谢谢大家,这是我的微信公众号,大家有兴趣可以关注一下,里面有我平时写的一些文章,结尾还有这么一个码,大家来不及,可以结尾再扫。先上一道开胃小菜,大家知道这是什么东西吗?我估计可能没有人见过,我也没有见过。这个东西是一圈一圈的铁丝,说白是铁丝,当然不是一般的铁丝,是经过设计的。


  这是半个世纪前的一种存储装置,是怎么存的呢?跟我在这个房间里面讲话有回声,我说出一句话,声波反射到我耳朵里面,我听到,再把这个话再说出去,它又反射回来。我用这种方式,让我要传达的信息,不断在这个媒介上,空气的振动,不断的振动,循环的振动,这个信息就保存在这儿了,除非我断电。这个装置跟这个原理是一样的。你把一个你要存储的信息,编码成也是一种声波,从这个铁丝上传过去,声波在铁丝里面绕绕绕,绕回来以后,你在这儿再把它重新加强,再发出去,不断的循环。这改变所谓的延迟线存储器。一般延迟五微秒左右。


  下面我们进入正题。我今天这个话题就是想为大家分享一下IO协议栈里面一些前沿技术和动态。首先搞清楚什么叫协议,什么叫做栈,什么叫IO。IO协议栈是一个操作系统里面一系列软件的模块,让你的应用要读盘的时候,比如读一个U盘,U盘插上以后,点一个复制粘贴,复制粘贴是一个程序,并不是某个菜单,你点的这个菜单,激发了这么一个进程,后面起了一个进程,比如Linux下的做运维的都知道有一个dd的程序,这个程序会调用系统提供的一些代码。当然先得打开,然后做一个准备工作,然后才读写。这些代码都是OS提供的,你只需要调用就可以了。这些代码会被映射到用户空间里面。你把IO下发给这些代码以后,你把这些参数传给他,要读写哪个文件,哪个路径,哪个设备,怎么度,怎么写?把所有的参数告诉它。

(本图在“大话存储”公众号的某文章中可以获取原图)


  它下一步实现一个操作叫陷入内核,中断到内核里面,这一步操作开始非常大,因为牵涉到权限的转换,开销是很大的。进入内核以后,先到一个VFS的层,这是一大块的代码,这个层就是目录层,比如C:/,Linux下/某个字母,再写一些字母。谁来维护目录和底层的存储的实体的映射关系呢?由VFS层维护,你访问的是一个网络盘的路径,还是一个本地盘的路径,是一个文件,串口,终端,其实都是符号,由VFS把IO下发给底下对应的承载者,底下画了四个承载者。还有跨设备的各种设备,还有网络的系统,还有内存里面的数据结构,比如/PROC,有一些运维的时候用的一些命令,把它从零改成一,触发了某一个逻辑,这都是内存里面的数据结构,也在这个符合下限。


  这层再往下,如果访问块设备,直接下到块层,块层是最终对存储设备的集中访问点,在这个层里面,有一些附加功能,比如多路径,加密这种分层,缓存,很多的开源的这些产品,其实都是基本上在块层这个功能上面做二次开发做出来的。块层下面就是一个IO的队列,在这儿做一下IO的优化,合并,存盘这些事情。在这儿会有一个瓶颈,就是IO这个里头的队列是一个瓶颈,上层把IO往这个队列里面放,下层不断把IO拿走。俗话说的SCSI协议栈,包括三层,一个是上层的协议驱动,指磁盘驱动,磁带驱动,如果有其他的设备,比如打印机之类的,SCSI打印机和扫描仪也有,很早的时候,这块就是驱动设备了。SCSI Middle 层就是管SCSI指令,下发下来都是在内存里的数据结构,每个OS都不一样,但是如果发到磁盘,发到外面的交换机,必须把它弄成标准化的,因为外面有很多厂商做硬件,你不标准,就没法做了这个硬件,你不能说为每个OS都做一个硬件。这层除了翻译成SCSI指令,这边有SCSI语义,还有管真正的SCSI的处理,比如超时了怎么办这些事情,这是中间层。


  底下这层是HBA层,首先要有驱动,在HBA上有设备发现的这么一层库,因为传统的SCSI几十年前,那时候只有SCSI这么一种物理硬件,大家可能有人见过,很粗很笨的线缆,后来出现了FC,SAS这些,更快速的、高效的物理链路类型。SCSI协议,如果想跑在这些物理链路类型说,就需要有这么一块代码,这个网络里面,把你对端的SCSI设备发现上来,如果后端改成SAS,这块代码就会往SAS网络上发出一些广播的消息,将设备探测到,然后才生成设备符号。


  再往下就是硬件,出了协议就是硬件,硬件你先得连到HBA上,SCSI卡、SAS卡、以太网卡、各种卡,通过这个卡,再通过网络,或者连交换机,或者直连,连到最终的设备上。所以,我这儿画了一些箭头,指的是什么呢?每一种硬件,每一个角色都有各自的驱动。最底层的设备,它的驱动在最上面,再往上一层,HBA驱动在这个地方,然后HBA上还有一个PCIE控制器,它是从里向外扩散的一个东西。但是,IO要先发给最上面的驱动,先冲着最底下的设备来,驱动是从上往下这么发出去。这是传统的协议栈。


  红色的这块,就是所谓NVMe的协议栈。刚才英特尔也讲过,NVMe跟PCIe有什么区别呢?NVMe它是一个协议栈,是一个协议。跟说话一样,我跟你说话,我们中文这就是比方说SCSI,非常博大精深了,语法,还有成语,非常厚重。NVMe相当于英文,简单直接26个字母。但是,我们都是用嗓子来说话,都是用空气来传播,振动来传播。就是这个道理。SCSI也可以跑在PCIe上,就像SCSI跑在FC上一样,同理NVMe也可以跑到以太网上,也可以跑到FC上,你怎么over都行,over在串口上都行,只要不嫌慢。下面再介绍NVMe这边的协议栈。这个协议栈非常轻量级,像英文一样,表达简单,所以它的速度要快。


  我们看看这个传统协议栈到底出了什么问题?为什么这么多人在尝试修改它?主要问题就在于闪存。它没出现之前,没有任何问题,它一出现,全是问题。我们看到底有哪些问题?第一个问题,太长,大家可以看到,我刚才讲的这一堆的东西,其实整个就是IO协议栈。当然,SCSI协议栈是泛式的,一般指下面这块,但是上面这块也应该算。它经历了多少个块?非常多的模块,你每经历一个模块,你这个代码就要在CPU内存之间交换、执行一会儿,还牵涉到来回切换。当然,你拿人的标准来判断,CPU执行的这一条IO可能费不了多长时间,比如微秒、毫秒级。但是,对于SSD,SSD响应非常快,如果上面太慢,你这个性能就发挥不出来。我们常说NVMe SSD性能很高,你是把它放到机箱里面性能很高,但是假设把一块NVMe SSD放到海南去,从北京发一个IO协议到海南,然后它返回,它肯定不会快了。也就是这个IO发出来,到磁盘被收到之间,经历的路径越长,这个时延就越大,经历的模块越多,每个模块处理的事情越多,时延越大。那就是说NVMe离远了,它就不快了。就因为这个时延太高。下面还有另外一个是吞吐量,到时候再说。



太重,所谓太重,每一层都有自己的处理逻辑在里面,比如下到VFS,要搜一下这个目录到底对应的谁?搜fstab表,要是访问文件系统,还得到文件系统把元数据读出来,也就是读元数据的时候,文件系统就会往磁盘上发IO,读上元数据,找到处理你这个IO必要的信息,然后IO才能下到盘,相当于一个IO触发了N个IO,有可能很慢,很重。Block层有很多协议要处理,SCSI协议栈更厚了,因为SCSI传统的东西,发展到现在几十年了,里面什么东西都往里加,各种库,各种不定都往里塞,塞的整个协议栈很重。再往下就是黑盒,到外面外面的设备怎么实现的,你也不知道,有可能就是一块盘,也可能是被别人虚拟出来的盘,也有可能是分布式的,像刚才讲的那种,也有可能是集中式的,你也不知道。但是,你可以猜到什么?下面的存储设备,其实它内部也是个OS,你的IO到他那儿,他也要经历这层,最后才下到真正的物理盘,可能经历N轮,IO才能下去,所以传统协议栈又长又重。


  还有一个窄的问题,就是Block层的队列只有一个。这个队列就是IO不断的往里堆,你有多个应用访问底下的设备,多个应用都是多盒CPU,每个CPU运行一个线程,每运行一个线程都往下发IO,如果正好四个线程都往里发IO,相当于一个单车道,两辆车同时往里塞,就会出现撞车,IO也是一样的。谁要往这里面发IO,要更新写指针,如果这个变量是双字节,或者四字节,你写一个字节,我写一个字节,最后写乱了,就崩溃了,乱套了。所以,你要往里插入IO,必须把这个队列锁住,又把这个变量锁住,先加锁,加锁别人就不能访问了,然后你再往里写。这样顶上看似是并行的,到这儿就变穿行了,再这么搞一个加锁,就开销非常大了,所以导致性能比较差。当然,对于机械硬盘,都不是问题,因为机械硬盘太慢了,这点开销对它来讲,根本就不算开销。这是窄,就一个队列。


  我们再看看浅。这个队列不但就一个队列,还窄,而且还浅,里面容纳不了多少IO,SATA最大32,SAS盘最大256,上去还有HBA卡的队列,驱动里面的队列,Block里的队列,这些队列都是照着这个盘设计的,比如256个盘,256×32,最大照着那个来,但是实际比这个还要少。浅会造成什么问题?如果底下很慢,浅没有问题,因为一时半会儿消耗不完这也IO。但是,如果很快,会发现一会儿这个队列就空了,一会儿IO还没有下来,又空了,整个这个跟开车一样,油给不上,就是这个道理,太浅了。


  “长+重=厚”。比如传统说的协议栈很厚,就指这个意思,又长又重。厚影响时延,刚才那个例子。什么场景下在乎这个时延呢?比如OLTP,用什么场景呢?就是在线处理。这个场景就相当于你在淘宝里买了东西,点个购买,你恨不得马上我就成功,点个付款,马上成功,你总有人等着你,马上回来。这就是证明有人在等,赶快回来。如果点击购买,发给谁,半天才回来,你肯定不再在网上买东西了,因为三天两头超时你就会很不爽,所以时延很重要。


  同步IO是典型的要求时延的场景,你发一遍IO以后,IO结果返回了,才发下一个IO。我IO调用下去以后,阻塞掉了,你不返回,我的代码就没法往下走,又被阻塞掉了。如果是同步IO,这个路又非常长,性能就非常差,但是,如果是异步IO,你流程长,我时延大没有关系,但是吞吐量还是可以上来的。因为我原端不断把IO往下发,IO不断的过去,你不断的接收,总体是有一个时延的,这个就看场景了。OLTP很在乎时延,对吞吐量要求不那么高。


  窄和浅就影响吞吐量,因为本来并发的变成串行了,一个一个来,最后吞吐量就上不去,OLAP场景最怕吞吐量低,比如大数据分析,因为没有人等着你马上把结果返回来,你这个任务下发下去,要分析谁谁谁,某处买个什么东西,哪个时间段干什么事,这就是定型的OLAP场景,不是点一个按纽,马上就知道结果的,可以等一分钟,这一分钟以内,你只要保证底层的吞吐量最大,完成的速度就快,它对时延反而没有什么要求。


  我们看看传统IO协议栈问题很严重,对于机械盘来讲,是没有问题的,你算算就可以了。协议栈引入比如0.01毫秒的时延,一个IO下去,一直到发给磁盘,出了这台机器,耗了0.01毫秒,别看这么大的带宽执行。机械盘执行这个IO,平均需要10毫秒,这么一比,开销就这么点,根本没有问题。但是,对于它就有问题了。SSD执行平均耗费比如10微秒,基本50%的开销了。所以,这个IO下去一半的时间在路上,一半的时间执行,这个效率非常差。所以,要着手去优化这个协议栈。


  NVMe协议栈是怎么优化的呢?就是把长、重、窄、浅取个反义词就完了。长就降低模块的数量,它从块层,把IO Scheduler下面一堆的东西全部格掉了,不再修改,从Block下来。设备发现一堆的库,这个不需要,如果是NVMe Over PCIe,它的设备发现都是PCIe给它做了,他自己不需要做,就变轻了。只有一组指令,很少的指令数量。关键是下面这两个,队列变宽了,之前只有一个队列,相当于只有一个单缸的发动机,如果来一个多缸发动机,动力当然强了,所以变宽。还有变深,每一个队列很深,这个汽缸排量就这么一点,坡都爬不上去,换个大的,一次让它玩命的爆炸,NVMe基本就这么干的。



变短、轻、宽、深了以后,基本就是这么一个情况。SCSI协议栈就这么一个队列,硬件队列,硬件队列,块层队列,块层最大支持64K的队列,当然现实产品没有用这么多的,但是将来不一定多,将来谁知道会发展成什么样呢。对传统的SATA SSD、SAS SSD,他们走的是SCSI协议栈及不是NVMe,他们只是SCSI指令,这个怎么优化?他们也是SSD。所以,最新版本内核,做了块层的多队列优化。底层驱动跟着多队列,这样就把它变宽的,当然这是在最新的内核下面才有这个特性。


  NVMe1.2版本里面有一个特性叫Controller Memory Buffer。传统的驱动模式是,先把命令准备好,在内核内存里面,然后由驱动去通知这个设备,我这儿有条命令,设备要自己到内存里面,把这个命令取回来,设备要自己来取,你看这里面,很麻烦,我不是把说命令直接扔给你了,你自己来取,我告诉你这条命令。那么,为什么这么设计呢?我也不清楚。但是,现在有了这个SSD以后,有了这条命令以后,直接把这个命令写到设备里的内存了,少了一轮交互,当然NVMe1.2现在还没有能支持,很快了,无非就是软件上,当然硬件上也会有一些改动,当然改动也不是非常大。


  驱动方面,早期的IO设备有一种模式,叫做Program IO,PIO,这个PIO是什么意思?很早的时候,比如打印机,把打印命令发出去以后,打印完没有,这个程序要不断的问这个设备,打印完了没有?不断的问,如果全速循环的问,CPU百分之百就耗进去了,所以每次执行都耗干净了,不断发N个指令问这个设备,打印完了没有,这很浪费的,CPU都干这个事了。因为这个打印机很慢。后来才出现中断方式,我这个打印机打印完以后,你命令下给我以后,你该干什么干什么,打印完了,我给你发个中断信号,你把你当前正在执行的程序保存起来,上下文保存起来,然后来处理我这个IO完成命令。这个就非常好了,又不耽误事,CPU又不会耗费这么高。


  这个模式一直发展到今天,终于出了问题了。当然也不是问题,只是效率显得低了。为什么?现在不是说SSD慢了,不是说CPU在等SSD完成IO指令了,是IO指令下去以后,SSD等待你CPU来处理这些IO的完成。我下面快了,怎么办?CPU就得回归到传统的模式。下面这么快,我就不断的问,每次问的时候,肯定会有完成的,因为底下太快了。每个io完成之后是在一个完成队列里面等着,告诉上层IO我完成了。


  所以,就有人在开发这种叫PMD,polling mode driver。中断模式的驱动其实还有一个致命的伤,对SSD有一个致命伤,就是中断IO完成模式,SSD收到指令完成,这个过程基本在8.5-9微秒之间完成。这是一个叫PDF的分布图,大部分的IO都集中在这个横坐标的时延,集中在这个区域完成。它完成以后要发中断,中断完了,CPU驱动处理。处理的时候,大家可以看到,99%点几都在5毫秒之内就完成了,但是百分之零点几的概率会在30微秒才完成,产生了一个叫长尾效应的这么一个效应。30微秒,一旦IO正好到这儿,30微秒才结束,这体现SSD的性能抖动,延时抖动,这个抖动会造成什么?比如高速路上突然有一个车停在车道上,后面的车就得绕过他,一变道,那个车又减速了,整个就堵在那儿了,就算不停下来,速度慢了点都会出现这个问题。SSD这么高的速度,上面使劲发IO,这么大的吞吐量,突然来这么一下,整个性能反馈上去,就会出现比较严重的后果,可能上层业务就卡在那儿了。这是刚才那个道理,高速路。这也是一个严重的问题,就是中断模式。


  所以,有人在研发Poldling额 Mode Driver,说白了就是用驱动不断的Poll这个完成队列,把IO赶紧拿出去,赶紧处理掉。其实代码上也比较简单,就是这三大块poll,然后锁住队列,执行一条IO,解锁。单个队列还得锁,多个队列之间就不用锁了,多个队列之间是毫无关系的。这个付出的代价就是CPU又达到百分之百,因为要不断的polling,不断的循环,你把CPU占满就体现为百分之百。


  我们看一下实际的测试效果。先看一下两种方式,一个是在内核里面poll。一个是在用户态poll。这个用户态是比内核态更高效的驱动,因为每次IO下去都要进内核,陷入内核,开销非常大,直接用户态Poll,这个性能更高,但是如果在用户态做个驱动,优势就是性能会有比如10%的提升。但是享受不到操作系统的任何功能。所以你的用户态自己开发的程序,自己做一个。一般人不敢玩这个,玩不好,反而还不如之前的性能。

  这是一个人做的测试,基本上三种模式,一个是传统的中断模式,这个是在内核态poll的模式,还有这个用户态poll模式。同样的方式,QD=1的时候,它的性能能到68000IOPS。换成轮询模式性能达到10800。换成用户态poll,需要自己在用户态写一些服务,用它来做,120K,12万,基本是中断模式的两倍了,所以这个效果提升非常明显,但是CPU的耗费也是上来了,基本都是百分之百。时延当然轻了,传统模式12微秒。


  这就是SPDK,它由好几部分组成,如果跑以太网,把DPDK也包进去了,其实都是在用户态运行的,绿色是你自己开发的的,三个蓝色就是用户态的NVMe驱动,包括Mcm Drive。这就是今天分享的东西,当然这块还有很多东西要说,这些后续有机会再和大家分享。谢谢大家!


  主持人:谢谢冬瓜哥的精彩分享!到此我们今天的分论坛就结束了。


长按识别二维码关注“大话存储”获取业界最高逼格的存储知识。


冬瓜哥简介:冬瓜哥是《大话存储》系列图书作者,现任PMC-Sierra存储系统架构师。


利用MATLAB 4f光学系统,在Python中进行弗劳恩霍夫衍射和傅里叶面滤波——用镜头模拟光学图像处理。.zip 1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 立即下载

相关推荐

利用MATLAB和Excel对逆流双管热交换器的热性能进行分析。.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

栈的一些应用

著名计算机科学家沃斯(Nikiklaus Wirth)提出一个公式:程序=数据结构+算法 算法是程序设计的的灵魂。 不知道为啥就想先打下这两句话,哈哈哈 栈的特点就是先进后出, 它可以用来进行 括号匹配,进制转换(十进制转换成二进制为例)等,今天我们先介绍这两个 先说下解决括号匹配的思想,先输入一些括号,即将一切的左括号({[()这些加到一个列表里,当碰到右边的括号(]}))时,再与列表里的最后一...

weixin_44540951的博客 712

利用MATLAB对5G NR波束成形技术的性能分析.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

第十八篇:稳定性之长尾延迟

你知道什么是长尾问题吗,带来的影响有哪些,应该如何去解决它呢

jackl 3112

上市公司赫芬达尔指数、企业勒纳指数(1999-2025年)

上市公司赫芬达尔指数(HHI)和勒纳指数(LI)是衡量市场结构和市场势力(垄断力量)的两个重要指标 赫芬达尔指数(HHI)可衡量一个公司在市场中的相对份额或集中度,通过计算公司在市场中份额的平方和得出。数值越小,说明市场份额分布越分散,竞争程度越高;数值越大,说明市场集中度越高,少数企业占据较大份额,垄断程度越高 勒纳指数(LI)用于衡量企业的市场势力,即企业偏离完全竞争价格、制定高于边际成本的价格的能力,数值越接近1,表示企业市场势力越强,垄断程度越高 本文借鉴刘贯春等(2021)、孙茹峰和李楠博(2024)的思路和方法,分别测算上市公司赫芬达尔指数、勒纳指数: 赫芬达尔指数 = (公司营业收入/同行业同年营业收入合计)的平方和 企业勒纳指数 =(营业收入-营业成本-销售费用-管理费用)/营业收入 一、数据介绍 数据名称:上市公司赫芬达尔指数、企业勒纳指数 数据范围:上市公司 时间范围:1999-2025年 样本数量:85810条 数据来源:上市公司年报 更新时间:2026年11月 数据说明:内含原始数据、测算结果 二、数据指标 股票代码 股票简称 年份 省份 城市 区县 省份代码 城市代码 区县代码 行业代码 行业名称 赫芬达尔指数 勒纳指数 营业收入 营业成本 销售费用 管理费用 三、参考文献 [1]刘贯春,叶永卫,张军.社会保险缴费、企业流动性约束与稳就业——基于《社会保险法》实施的准自然实验[J].中国工业经济,2021,(05):152-169. [2]孙茹峰,李楠博.金融化对企业绿色转型意向的影响研究[J].管理学报,2024,21(11):1612-1620+1677. [3]张倩肖,段义学.数字赋能、产业链整合与全要素生产率[J].经济管理,2023,45(04):5-21. [4]伍兆祥,代吉林,

海康威视后台摄像头视频管理系统

海康威视后台摄像头视频管理系统,vue+py框架

NVME协议栈剖析

从代码上来看,NVME的协议栈直接从Block层下来,不

LDD施工队 1万+

工业互联网工控安全与工业质检AI大模型建设方案.pptx

工业互联网工控安全与工业质检AI大模型建设方案.pptx

Intel Optane P4800X评测(3):Windows绑核优化篇

据了解,使用3D XPoint Memory的Optane P4800X在国内已经开始少量供货,除了一些测试过的人之外,已经开始有采购的用户了。有朋友问我,这个卡在测试中有没有需要注意/调优的地方,以便更好地发挥其性能价值。 此外,如果说Windows Server 2012和2016的内核I/O效率有差异,您能否先预测下性能结果? 接系列前文:...

weixin_34279579的博客 972

通信行业CentOS 7内核网络栈优化:高并发连接下UDP/TCP性能调优与系统资源管理

内容概要:本文聚焦于CentOS 7系统在通信行业高并发场景下的性能调优实践,重点围绕内核网络栈优化展开,涵盖UDP/TCP缓冲区调整、文件句柄与连接跟踪表扩容、TIME_WAIT状态复用、软中断分布优化及tuned工具的自动化调优。通过具体配置参数和实际案例(如VoIP软交换系统)深入解析各项调优措施的设计原理与实施效果,有效解决高CPS下丢包、连接失败等问题,并展望了向云化、eBPF等动态智能调优方向的发展趋势。; 适合人群:从事通信系统运维、网络开发或Linux系统性能优化的技术人员,具备一定操作系统和网络基础知识,工作经验1年以上的中初级工程师。; 使用场景及目标:①应用于软交换、媒体网关、信令网关等高并发通信设备的系统调优;②解决UDP丢包、conntrack表满、TCP连接队列溢出等典型性能瓶颈;③提升系统在小包高频、低时延要求场景下的稳定性和吞吐能力。; 阅读建议:建议结合实际生产环境或测试平台同步验证文中配置,重点关注参数背后的物理意义(如BDP、softirq、conntrack机制),并配合ss、conntrack、dmesg等命令进行调优前后对比分析,确保安全可控地实施变更。

从Elasticsearch的jvm.options读懂JVM参数的生效核验、内存分账与诊断兜底代码包

拿到一台机器和一个 Java 服务,怎样确认 JVM 实际吃进去了哪些参数,怎样给堆和堆外分配内存,怎样把 GC 日志、堆转储、异常栈这些“事后取证”的参数配齐,以及怎样在 JDK 8 与 JDK 9+ 之间安全迁移。 讲解的抓手是 Elasticsearch(下文简称 ES)的 jvm.options。这份文件经过 ES 团队多年打磨,又被无数生产集群验证过,几乎每一行都对应一个踩过的坑,是学习 JVM 参数最好的“样板间”。

CnOpenData 线上招聘网站信息数据

CnOpenData线上招聘网站信息数据库是一个覆盖中国主流招聘平台、时间跨度长、更新频率高的劳动力市场需求侧大数据集合。本数据库汇集了,为学术界和业界提供了一扇实时观察中国劳动力市场动态的窗口。

CnOpenData_wj的博客 2592

2024 《计算机网络》实验教学指导书.doc

2024 《计算机网络》实验教学指导书.doc

无刷直流电机BLDC无感+滑模观测器+转速电流双闭环PI控制(总共三个仿真模型)(Simulink仿真实现)

内容概要:本文档系统性地提供了无刷直流电机(BLDC)的高级控制策略仿真资源,聚焦于无位置传感器控制技术,重点实现了基于滑模观测器(SMO)的转子位置估算方法,并结合转速与电流双闭环PI控制结构,构建了完整的Simulink仿真模型体系。资源包含三个核心仿真模型:无感控制下的滑模观测器设计、双闭环PI控制器的参数整定与动态调节,以及系统整体的运行性能仿真分析。文档深入剖析了滑模观测器在反电动势提取与相位补偿中的关键技术,展示了其在不同工况下对电机启动、调速及负载扰动响应的鲁棒性表现,旨在帮助研究人员掌握BLDC在无传感器条件下的高精度控制实现路径,并为进一步引入模糊PID等先进控制策略提供对比基准与技术支撑。; 适合人群:具备电机控制理论基础、自动控制原理知识及Simulink建模经验,从事电气工程、自动化、电力电子或新能源驱动系统研究的科研人员、工程技术人员及高校研究生。; 使用场景及目标:①深入理解无刷直流电机无位置传感器控制的基本原理与实现流程;②掌握滑模观测器在转子位置与速度估算中的设计方法及其抗干扰特性;③学习并优化转速电流双闭环PI控制结构,提升系统动态响应性能与运行稳定性。; 阅读建议:建议结合Simulink模型进行同步仿真操作,重点关注滑模观测器的抖振抑制效果、系统启动过程的稳定性以及PI参数调节对动态性能的影响,同时可参照文档中提及的模糊PID等对比方案,拓展对先进控制算法的研究与实践应用。

不平衡电网下自抗扰顺序模型预测PWM整流器控制仿真模型(Simulink仿真实现)

内容概要:本文围绕面向城市空中交通的多无人机路径规划问题展开研究,提出了一套融合全局规划、动态避障与局部协同调整的综合路径规划方法。研究内容涵盖基于改进RRT算法与图论的全局路径规划、基于动态风险场和动态窗口法(DWA)的模型预测控制实现动态避障,以及基于分布式协同控制的多无人机局部路径协同策略。通过Matlab平台构建仿真环境,在多种典型城市交通场景下对所提方法进行了系统性验证,结果表明该方法在路径安全性、编队稳定性与任务效率方面表现优异。文章还深入探讨了算法的创新点与未来研究方向,为复杂城市环境下多无人机系统的自主协同提供了理论支撑与技术路径。; 适合人群:具备自动化、控制理论、计算机科学或相关领域基础知识,从事无人机系统、智能交通、路径规划、多智能体协同控制等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①为城市空中交通系统中的多无人机安全、高效飞行提供可靠的路径规划解决方案;②支持在复杂、动态的城市场景中开展无人机自主导航、编队飞行与协同控制的技术研究与仿真验证。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点关注算法的具体实现细节、参数配置对性能的影响以及不同仿真场景下的实验设计,以深入理解各模块的集成逻辑与实际应用效果。

【选址和定容】模拟退火改进多目标粒子群算法在分布式电源选址和定容中的应用【IEEE69节点】(Matlab代码实现)

内容概要:本文研究了模拟退火改进多目标粒子群算法在分布式电源选址和定容中的应用,以IEEE69节点配电系统为算例进行仿真分析。通过融合模拟退火算法的强全局搜索能力与粒子群算法的高效局部收敛特性,构建了一种改进的多目标优化算法,用于解决分布式电源在配电网中的最优位置选择与容量配置问题。研究旨在实现多重优化目标,包括最小化网络有功损耗、提升节点电压质量、增强系统运行的经济性与稳定性。文中详细阐述了多目标优化模型的数学构建、算法的改进机制与实现流程,并基于Matlab平台完成了算法编程与仿真验证,结果表明所提方法在求解质量和收敛性能上均优于传统算法。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力,从事配电网规划、分布式能源系统优化、智能优化算法应用等相关领域的科研人员、工程师以及高校研究生。; 使用场景及目标:①解决高比例分布式电源接入背景下配电网的科学规划问题;②为新型电力系统中源网协调设计提供有效的优化工具;③为相关领域的科研工作提供可复现、可拓展的算法模型与仿真代码实例,支持进一步的算法对比与功能升级。; 阅读建议:建议读者结合提供的Matlab代码与IEEE69节点标准数据,动手复现实验结果,深入理解算法的参数设置、迭代过程与多目标折衷分析方法,并可根据实际研究需求修改目标函数或引入新的约束条件以适应不同的应用场景。

上一篇: 你绝对想不到的两种高逼格存储器
下一篇: Raid组的Stripe Size到底设置为多少合适?
大话存储
博客等级 码龄9年 568粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值