00:03
其实说到这个读写以后啊,我们大家马上就会想到一个问题,什么呢?就你无论读还是写啊,都是对谁,对磁盘的操作都是我我们的,我们就是不管消息本身还是索引文件是不是都是写在磁盘上的。那么这样说了,那会不会影响到消息的消费?你要从硬盘上读啊是吧,这肯定效率要低啊,会不会影响呢?当然不会,为什么啊,其实让他Q性能啊,在目前MQ产品里边啊,它的性能是非常高的啊,因为系统。通过一系列相关的机制,大大提升了性能。呃,那么在这些机制里边啊。呃,主要是。这两个最重要的是这两个机制啊,他说了首先。Q,啊,对文件的读写操作是通过什么?
01:04
通过m map0拷贝进行的。这个MM0拷贝啊,我相信,呃,咱们大家应该应该说。应该说啊,嗯。在很多其他地方,大家都接触过他。这个定好位啊。呃,老雷在这儿呢,不给大家细说它了,因为关于这个零拷贝MM0拷贝啊这个内容,呃,还是要想给大家说清楚,不是一句话两句话能说清的,还是比较麻烦的,因为你要想搞明白什么是m map领拷贝。你你就得先知道是吧?呃,什么是普通领导赔。啊,什么是这个gather copy DMA领位。然后才能再说这个m map这个拷贝。而而而要把这些东西要说清楚啊,呃,还是。
02:03
一时半会啊,不容易给大家讲清,所以大家从网上可以找一些其他的资料,如果你不清楚的话啊,你可以找一些其他资料来看一下,反正这个东西我觉得大多数哥们啊,应该对这个应该是比较了解的啊,我所以我们在这就不再花费时间了。那么我们再来看其次是什么,其次啊,这个康。Q,里边的数据是顺序存放,其实我们大家是知道的,但顺序存放的。并且他还引入了。Page catch的读取机制。Three。佩的。欲读取记者。他引用了这样的机制。因为这个机制以后,因为我们主要是对它进行读的啊,所以我们这说的这个预读啊,所以使得对于consumer q。
03:02
啊,对,Q文件的读取几乎接近于内存读取。啊,即使在我们有消息堆积的情况下,也不会影响情。嗯,其实说到这儿啊,这个老雷就可以了,先给大家把这个解释一下,因为这个要给大家说清楚,还是比较比较简单一些的啊。嗯。我们先说一下谁呢,就是。配件。Catch。其实。配个就是页面缓存啊,我们叫。呃,页面或者缓存啊都行。呃,这种机制啊。实际上是操作系统,嗯,对文件的一种缓存机制。它主要是为了加速我们对文件的一种读写。
04:02
呃,这种机制啊,呃,会使我们的程序对文件它的注意,它是对谁对顺序读写啊。他就是对顺序读写起作用。对,顺序读写的速度能够啊,几乎接近于什么内存读写的速度。是,所以这点就是我们需要需要呃了解啊,就是呃是操作系统啊,呃对文件的缓存机制,首先这是一种什么机制是吧。嗯。干嘛呢,用于加速。呃。读写操作对吧。一般来说,呃,程序文件进行什么注意。
05:04
是肾虚。都写。行。速度。几乎。呃,接近。什么这个这个这个内存啊内存。读写。呃,主要主要原因在哪。主要嗯。原因。由于。操作系统啊使用。使用,嗯。使用。Page。Catch。机制,对。读写。访问进行了么?性能。优化。啊,将一部分。
06:02
对吧。内存怎么,嗯。用用作法。啊,用作。就是这个啊,给大家就是在那解释啊,解释什么。为什么我们对顺序读写的啊,对文件进行顺序读写,它的速度呃,几乎接近于啊内存读写来解释这个原因。为什么?因为用到了KK,那反过来说,就我们这个page k啊,实际上是对谁是对顺序读写是。起作用的,这随机读写它是不起作用的。明白吧,那那我们分开来说,你你比如说这个啊。这个。写操作,对,写操作。他是怎么做的?我们的系统啊,会先把我们要写入的这个数据。
07:04
给他写到哪,写到我们的catch上,就那个配catch啊,写到写他就叫catch上。呃,然后。再以这个异步的方式。当然你当你这个配看起来啊,当他呃写写写满了对吧,他才才会以什么以异步的方式。也有我们的内核线上。把我们缓存里边的数据给他。上盘到我们的物理磁盘上。际操作系统操作系统。写入到什么?配置。Catch。开得住。啊,然后随后啊,这个随后是指的什么,就是我们写满后啊,先满后随后啊会。呃。异步。方式。
08:00
由这里边有个线程叫K叫PD啊,叫PD。Blush。内核线程。内核。呃,现场第二。嗯。Catch中的数据。沙盘。这个物理。是的。这个pd flash是什么意思呢?Pd flash。D是dirty。何老师。这个dirty是。配德尔,你还没有,你还没有这这这个呃,上传到我们的物理磁盘的,那么他就是认为它是dirty啊。是叫pd flash。操作。对于我们。被操作。读操作,诶,因为我们这里面就涉及到读了,这里边有个什么叫什么叫预读取机制啊。
09:06
独操作者里边它有一个呃,命中率的问题,有个命中啊命中率的问题,就是说如果我要。呃,读取某个数据,它是先从哪,先从里边去读。啊,若。呃。怎么说呢?呃说呃,用户要读取数据。七。首先会从呃这个。Catch中。读取。说,呃,没有。如果没有命中啊,没有没有没有找到是吧,啊则。呃,操作系统啊,嗯。
10:05
是加载加。数据。Catch的同时。也会什么。顺序对。齐,这就是大家注意,这就是顺序读写这啊,你注意这个顺序也会顺序对齐。0000相邻。呃呃,数据块。呃,中的数据。嗯。进行什么?予以录取。所以预读题就把它相邻这个数据块里边数据也给它读到这个配开,那你下一次再读的时候,它里边自然就有。这就是为什么记。
11:01
几几乎接近于内存东西,是因为它实际上就已经把它读到内存了。已经把它读到内存了。明白吧,这我们说这个。这叫什么,这就是我们说的预读取机制啊,预读取机制。预读取啊好。这是保证了我们这个性能啊,能够得到很大提升的很重要的两点。当然这要说到啊,他说呃,热Q里边啊,可能会影响性能的是什么。是commit文件的读取,为什么?我们还知道commit log文件里边放的消息是不是?不分套。对吧,它不分的,因为对lock文件来说,读取消息时会产生大量的什么随机访问。
12:01
而随机访问会严重影响到性能。这说了,不过如果选择合适的系统IO调度算法,比如说我们的呃调度。呃,设置调度算法是这个。得到了。就是这采用什么啊SD啊,我们的固固盘啊,固态硬盘啊,如果用的是它的话啊,我们要设置成它,那么读取随机读取的性能也会得到提升,所以这个和和什么,和你用的磁盘是有关系的,而你不同的磁盘,那么可以选用不同的这种这种啊。调度算法。那这个是需要再设置的。这样可能会影响。是吧,那这是我们说的这个关于性能提升这个问题啊。
我来说两句