zoukankan      html  css  js  c++  java
  • (性能测试笔记)逻辑IO和物理IO的区别

    IO性能对于一个系统的影响是至关重要的。 一个系统经过多项优化以后,瓶颈往往落在数据库;而数据库经过多种优化以后,瓶颈最终会落到IO。而IO性能的发展,明显落后于CPU的发展。Memchached也好,NoSql也好,这些流行技术的背后都在直接或者间接地回避IO瓶颈,从而提高系统性能。

    IO系统的分层:

    1.   三层结构

    上图层次比较多,但总的就是三部分。磁盘(存储)、VM(卷管理)和文件系统。专有名词不好理解,打个比方说:磁盘就相当于一块待用的空地;LVM相当于空地上的围墙(把空地划分成多个部分);文件系统则相当于每块空地上建的楼房(决定了有多少房间、房屋编号如何,能容纳多少人住);而房子里面住的人,则相当于系统里面存的数据。

    • 文件系统—数据如何存放?

    对应了上图的File System和Buffer Cache。

    File System(文件系统):解决了空间管理的问题,即:数据如何存放、读取。

    Buffer Cache:解决数据缓冲的问题。对读,进行cache,即:缓存经常要用到的数据;对写,进行buffer,缓冲一定数据以后,一次性进行写入。

    • VM—磁盘空间不足了怎么办?

    对应上图的Vol Mgmt。

    VM其实跟IO没有必然联系。他是处于文件系统和磁盘(存储)中间的一层。VM屏蔽了底层磁盘对上层文件系统的影响。当没有VM的时候,文件系统直接使用存储上的地址空间,因此文件系统直接受限于物理硬盘,这时如果发生磁盘空间不足的情况,对应用而言将是一场噩梦,不得不新增硬盘,然后重新进行数据复制。而VM则可以实现动态扩展,而对文件系统没有影响。另外,VM也可以把多个磁盘合并成一个磁盘,对文件系统呈现统一的地址空间,这个特性的杀伤力不言而喻。

    • 存储—数据放在哪儿?如何访问?如何提高IO速度?

    对应上图的Device Driver、IO Channel和Disk Device

    数据最终会放在这里,因此,效率、数据安全、容灾是这里需要考虑的问题。而提高存储的性能,则可以直接提高物理IO的性能

        2. Logical IO vs Physical IO

    逻辑IO是操作系统发起的IO,这个数据可能会放在磁盘上,也可能会放在内存(文件系统的Cache)里。

    物理IO是设备驱动发起的IO,这个数据最终会落在磁盘上。

          逻辑IO和物理IO不是一一对应的。

    这部分的东西在网络编程经常能看到,不过在所有IO处理中都是类似的。

    IO请求的两个阶段:

           等待资源阶段:IO请求一般需要请求特殊的资源(如磁盘、RAM、文件),当资源被上一个使用者使用没有被释放时,IO请求就会被阻塞,直到能够使用这个资源。

           使用资源阶段:真正进行数据接收和发生。

           举例说就是排队和服务。

     在等待数据阶段,IO分为阻塞IO和非阻塞IO。

           阻塞IO:资源不可用时,IO请求一直阻塞,直到反馈结果(有数据或超时)。

           非阻塞IO:资源不可用时,IO请求离开返回,返回数据标识资源不可用

     在使用资源阶段,IO分为同步IO和异步IO。

           同步IO:应用阻塞在发送或接收数据的状态,直到数据成功传输或返回失败。

           异步IO:应用发送或接收数据后立刻返回,数据写入OS缓存,由OS完成数据发送或接收,并返回成功或失败的信息给应用。

    按照Unix的5个IO模型划分

    • 阻塞IO
    • 非阻塞IO
    • IO复用
    • 信号驱动的IO
    • 异步IO

    从性能上看,异步IO的性能无疑是最好的。

    各种IO的特点

    • 阻塞IO:使用简单,但随之而来的问题就是会形成阻塞,需要独立线程配合,而这些线程在大多数时候都是没有进行运算的。Java的BIO使用这种方式,问题带来的问题很明显,一个Socket需要一个独立的线程,因此,会造成线程膨胀。
    • 非阻塞IO:采用轮询方式,不会形成线程的阻塞。Java的NIO使用这种方式,对比BIO的优势很明显,可以使用一个线程进行所有Socket的监听(select)。大大减少了线程数。
    • 同步IO:同步IO保证一个IO操作结束之后才会返回,因此同步IO效率会低一些,但是对应用来说,编程方式会简单。Java的BIO和NIO都是使用这种方式进行数据处理。
    • 异步IO:由于异步IO请求只是写入了缓存,从缓存到硬盘是否成功不可知,因此异步IO相当于把一个IO拆成了两部分,一是发起请求,二是获取处理结果。因此,对应用来说增加了复杂性。但是异步IO的性能是所有很好的,而且异步的思想贯穿了IT系统放放面面。

    转载:https://blog.csdn.net/lileizhang/article/details/20623415

  • 相关阅读:
    python 计算 父亲节
    python 计算 母亲节
    python 计算 感恩节
    《AINLP年度阅读收藏清单》,2020-01-01,52nlp
    《命名实体识别 NER 论文综述:那些年,我们一起追过的却仍未知道的花名 (一)》,2020-05,龚俊民(昵称: 除夕)
    《How to Automate Manual Steps after SSH》2019-03,amitness
    《Back Translation for Text Augmentation with Google Sheets》,2020-02,amitness
    《BERT 的优秀变体:ALBERT 论文图解介绍》2020-05,作者:amitness,译者:ronghuaiyang
    《NLP中数据增强的综述,快速的生成大量的训练数据》2020-05,作者:amitness ,编译:ronghuaiyang
    《努力成为优秀的工程师》李航,2013-03
  • 原文地址:https://www.cnblogs.com/worldbugMsg/p/14607088.html
Copyright © 2011-2022 走看看