想学生时代,小编最爱做的就是研究电脑硬件,然后给自己、朋友和童鞋装机。装好后呢?当然要第一时间跑分了!各种跑分软件运行一遍,不断优化,不断测试。终于得到一个满意成绩,截图分享到网上显摆一下。当年为啥就没朋友圈呢ㄟ( ▔, ▔ )ㄏ)

时至今日,研究个人电脑 DIY 的人越来越少,甚至很多电脑已变得看不见摸不着,成了云端运行的虚拟机。但传统不能丢吧,虚拟机的性能到底达标没有,能否满足要求,还是得“跑个分”才知道。

CPU、内存、网络,这些相对都比较容易进行判断和测试,今天小编想带大家了解的是:存储性能方面的问题。尤其是很多童鞋会通过 Azure 虚拟机运行 IO 密集型工作负载,存储将直接影响到整个系统的性能。

首先是几个重点,注!意!啦!

Azure 存储空间的可伸缩性和性能目标

Azure 虚拟机运行在 Azure 平台上,因此存储方面要遵守整个平台有关可伸缩性和性能的目标,如:

  • 单个标准存储帐户总请求率上限为 20,000 IOPS,所有虚拟机磁盘的 IOPS 总数不应超过此限制。

  • 标准层虚拟机的单个磁盘 IOPS 上限约为 500。

  • 单个标准存储帐户中用于生产应用的磁盘不应超过 40 个。

更详细指标点这里查看。

此外对于虚拟机操作内部,不同的应用也有不同的磁盘系统优化方案,例如:

  • 使用虚拟机允许的最大磁盘数和最大磁盘容量构建存储空间。

  • 使用合理的 Interleave 避免 Split IO。

  • 根据实际生产的单个 IO 数据大小规划文件系统簇的大小,例如 SQL 服务,建议使用 64K 的簇。

建个测试环境,试着测试一下

在 Windows 平台,用户常常选择通过文件管理器直接进行文件拷贝来观察磁盘性能。这种测试往往很容易进行。为方便说明,下文测试部分我们在中国东区的数据中心创建了一个服务器,具体的参数为:

  • 服务器大小:Standard_D4

  • 标准存储账户,该账户中仅存储该测试服务器的磁盘,以排除干扰

  • 该服务器未运行任何生产业务。闲置时没有 CPU、内存和磁盘 IO 压力

  • 虚拟机加载的 D 盘为本地 SSD 磁盘

  • 服务器加载 8 块 1TB 数据盘,使用其中 4 块创建存储池并建立 Simple 的虚拟磁盘

  • 在此虚拟磁盘上创建两个简单卷,E 卷的簇大小为 4K,G 卷的簇为 64K

  • 另外使用一个简单磁盘创立 N 卷,簇大小为 4K

同时为了通过文件拷贝的方式进行测试,我们准备了三种不同类型的数据文件:

  • 文件夹 MixFiles 中含有各种随机大小的文件

  • 文件夹 SingleFile 中含有一个 6GB 大小的文件

  • 文件夹 SmallFiles 中含有 200,000 个小文件,每个文件大小为 3KB

使用 Windows 资源管理器直接将所有数据从 N 卷复制到 E 卷,结果如下:

处理随机大小文件时,拷贝性能在 10MB/s 到 25MB/s 间变化;处理单个大文件,性能上升到 40MB/s 以上,但是即便单个文件的拷贝性能也不稳定;处理 200000 个 3KB 大小的小文件时,拷贝性能急剧下降到500KB/s 左右。

多次重复文件拷贝,随着文件系统碎片状态的变化,服务器缓存的使用情况变化等,同样的文件拷贝性能的差异性很大:

Windows 中提供了一个叫做「性能监视器」的工具(Win-R 组合键打开运行对话框,输入 Perfmon.msc 按回车即可打开),可以更详细地检测不同的性能指标,当我们使用 Perfmon 来具体分析单个磁盘的性能时,无论处理哪种类型的文件拷贝,磁盘仍未处于完全忙碌的状态,而磁盘数据吞吐量和 IOPS 都处于不稳定状态!

好奇怪,莫非使用了假的 Azure 虚拟机和存储?

异常结果的原理分析

其实这是文件拷贝操作本身的一些局限导致的,这种方法并不适合用来测试存储性能。原因是:

  • 文件拷贝,特别是 Windows 图形界面下的拷贝过程并没有针对磁盘系统本身进行优化。为了达到磁盘系统最佳性能,需要在存储系统中积累足够的 IO 请求来促使磁盘始终处于忙碌状态。

  • 使用 Windows 文件拷贝引擎拷贝大文件时,默认情况下系统会发起 8 个 1MB 的异步 IO 请求。而在进行小文件拷贝时,除非多线程拷贝,否则很难在存储系统中产生足够的 IO 积压。

  • 多数文件拷贝操作是顺序操作,通常只有在一个文件拷贝完后才会处理下一个文件。这种顺序化的处理会导致文件拷贝的性能远低于存储系统的实际处理能力。

  • 为了加快处理,文件拷贝时 Windows 会尝试使用内核文件缓存机制进行 Buffered IO 处理。这无法正常反应物理存储的处理能力,同时也会受到操作系统内存、缓存管理机制影响。

  • 文件拷贝是一个端对端操作,任何一端的限制都会导致拷贝速率受影响,因此很难隔离瓶颈出现的具体位置。

简而言之:普通的文件拷贝操作还不足以推动存储系统发挥出全部潜力!那么……

正确的测试方法是什么

术业有专攻,存储的性能测试,也需要专门的工具。例如 DiskSPD 或 IOMeter 都是极好的。这些工具通常会使用服务器的 CPU 资源产生多个工作线程,每个线程根据设定的 IO 读或写的比例、IO 请求的大小、顺序读写或随机读写等,可以产生大量并发请求,直接作用于目标存储设备。

以同一个测试服务器为例,通过以下命令分别对于 D、E、F 和 N 卷进行 4K、8K、64K 大小的随机读写 IO压力测试(80% 读操作,20% 写操作)。这些测试运行的命令如下:

限于篇幅,完整的结果就不展示了,仅以 4K 大小的结果为例,是这样的:

根据测试时生成的 Perfmon 日志可以清晰地看到:单个磁盘在进行测试时基本保持在完全忙碌的状态下,并体现出一致的 IO 性能指标 (第一个测试为 4K 读写,第二个为 8K 读写,第三个为 64K 读写,每个测试区间前者为 E 卷,后者为 G 卷)。

  • IO 为 4K 时,单个磁盘吞吐量 (Disk Bytes/sec),D 卷和 G 卷 2MB 左右,IOPS(Disk Transfer/sec)约 480。

  • IO 为 8K 时,单个磁盘吞吐量,D 卷 3.4MB 左右,G 卷约 4MB,IOPS 约 440。

  • IO 为 64K 时,单个磁盘吞吐量,D 卷 24MB 左右,G 卷约 31MB,IOPS 约 450。

  • 对于同一类测试,G 卷(64K 簇大小)的性能要稍好于 E 卷(4K 簇大小)。                                                                                                                                                      

    面对这个结果,应该可以安心了吧~                                                                                                                                                                                                                           重点:该记笔记啦

    最重要的一点:性能测试必须使用专门的工具,才能得到最准确真实的结果。

    另外,虽然 DiskSPD 和 IOMeter 可以模拟不同类型的 IO 请求,但它们同真实生产环境中的 IO 模型还是有一定区别。如果可能,尽可能使用生产环境的真实 IO 来判断当前的存储系统是否满足需求。

    如果用户环境中的虚拟机出现类似存储瓶颈的问题,建议通过以下步骤快速排查:

    1. 1.      通过 Perfmon 等性能监控工具收集生产环境下的服务器数据,包括内存、CPU、磁盘、网络等。

    2. 2.      暂停所有生产压力,使用 DiskSPD 或 IOMeter 等工具进行单纯存储压力测试。

    3. 3.      使用 Microsoft Automated Troubleshooting Services 快速自动排查虚拟机内部可能影响磁盘性能的问题。

    4. 4.      检查存储账户容量、虚拟大小等配置信息,避免由于并发 IO 或容量配置导致问题。

    当然,联系 Azure 24 小时随时待命的专业支持部门也是一种好办法哦!

    立即访问http://market.azure.cn

Azure 进阶攻略 | 电脑跑分你会,但虚拟机存储性能跑分的正确姿势你造吗?的更多相关文章

  1. Azure进阶攻略丨Azure网络通不通,PsPing&PaPing告诉你答案

    很多时候,为了解决一些问题,要查各种文档,很麻烦你造吗!做「伸手党」又容易被鄙视,这时候就需要用到[Azure 进阶攻略]啦!特此,我们推出关于 Azure 常用操作指南的系列文章,每篇涉及一个 Az ...

  2. Azure进阶攻略丨共享访问签名是个什么东东?

    Azure 进阶攻略]一经推出便受到了广大粉丝的热情追捧,大家纷纷表示涨了姿势,并希望能了解更多的攻略~根据大家的投票结果,本期,小编将为大家讲解“如何生成 Shared Access Signatu ...

  3. Azure进阶攻略 | 下载还是在浏览器直接打开,MIME说了算!

    多年来,从一开始的网络菜鸟发展成 Azure 云专家,想必你一定学到了很多知识.不知道在这个过程中你自己是否遇到过,或者被人问到过类似下面这样的问题: 同样是直接点击网页上提供的 .mp4 视频文件链 ...

  4. Azure进阶攻略丨如何驾驭罢工的Linux虚机网卡?

    很多人的生活中,流传着一个屡试不爽,据说可以解决任何问题的百宝锦囊: 所以经常可以听到类似这样的对话: -我的电脑咋上不去网了? -重启一下电脑. -还是不行呢! -重启一下路由器. -怎么还不行-_ ...

  5. Azure进阶攻略 | 该如何唤醒你?因内核超时而沉睡的Linux虚拟机!

    周五下午,当你收拾好东西准备下班,奔赴 Happy Hour 时,突然接到开发团队的电话: 对方:伙计救命啊,我在搭建开发环境,但 Azure 上的 Linux 虚拟机无法启动! 你(心里想着:你要加 ...

  6. Azure 进阶攻略 | 文件完整性,你打算如何证明?

    假设你是一位独立软件开发者,通过自己的网站提供软件下载.网站完全托管在 Azure 中,并且软件下载也是通过 Azure Blob 存储和 Azure CDN 服务提供的. 这做法真不错,不需要自己管 ...

  7. Azure 进阶攻略 | 关于Java 和事件中心的那不得不说的事

    物联网技术辣么火,虽然之前有说过不少,但今天,仍有一个憋在我心里已久,不得不说的话题:基于Azure 的物联网平台必不可少,你可能已经在使用,但也许并没有意识到的服务:Azure 事件中心. 啊?事件 ...

  8. Azure进阶攻略 | VS2015和Azure,想要在一起其实很容易

    下雨天,巧克力和音乐很配…… 大冬天,男神和捧在手里的奶茶很配…… 「驴牌」的包包,和女神的全部衣服都配…… 对于「王首富」,容易实现的小目标和一个亿是绝配…… …… 醒醒吧!!这些事情和每天只会写代 ...

  9. Azure 进阶攻略 | 上云后的系统,「门禁」制度又该如何实现?

    各位办公室白领们,不妨回想一下自己每天去公司上班时的一些细节. 为避免「闲杂人等」进入工作场所,我们需要证明自己是这家公司的员工才能进入,对吧!所有员工,无论所属部门或职位,都必须先证明自己身份,例如 ...

随机推荐

  1. MYSQL查询字段全部为中文的字段

    在实际使用mysql的过程中,会遇到这样的问题,查询字段内容全部为中文内容的数据,对于刚用mysql的小伙伴可能就比较迷失了,不知道怎么使用,其实这个问题很简单,使用下面这个sql语句就可以了 SEL ...

  2. C语言中的常用函数_持续更新

    isspace函数: 背景:之前遇到scanf()输入时会把换行符留在输入队列的情况,如果下次要用到getchar(),但是会导致其先返回这个我们不需要的换行符:从而导致不希望出现的行为: 说明:检查 ...

  3. hdu6229 Wandering Robots 2017沈阳区域赛M题 思维加map

    题目传送门 题目大意: 给出一张n*n的图,机器人在一秒钟内任一格子上都可以有五种操作,上下左右或者停顿,(不能出边界,不能碰到障碍物).题目给出k个障碍物,但保证没有障碍物的地方是强联通的,问经过无 ...

  4. Codeforces Round #482 (Div. 2) B、Treasure Hunt(模拟+贪心)979B

    题目 大致题意 n表示要进行n次操作,接着给出三个字符串,表示三个人初始拥有的串.每次操作要替换字符串中的字母,询问最后在游戏中曾出现过的相同的子串谁最多. 思路 (1)  讨论最多的子串,肯定是全部 ...

  5. Jury Jeopardy (这是一道单纯的模拟题)

    Description What would a programming contest be without a problem featuring an ASCII-maze? Do not de ...

  6. The MathType DLL cannot be found 一劳永逸的方法

    可能会看到下面的情况,然后实际上我们也能用过外部打开直接使用,那要你何用? 于是,我们找到这个文件,删除就OK 反正我写完论文就卸载了...

  7. LINUX下用PHPIZE安装PHP GD扩展

    环境:LNMP in centOS 6.4. linux下PHP的扩展可以用phpize的方法,比较简单地进行启用. 以下以PHP-GD2 库安装为例子. sudo yum install php-g ...

  8. Laravel5.1接收json数据

    <?php namespace App\Http\Controllers;use Illuminate\Routing\Controller as BaseController; use Ill ...

  9. python3 生成器笔记

    #生成器def MyDemo(M): for i in range(M): yield i**2for item in MyDemo(9): print(item) # #生成器import sysa ...

  10. ubuntu简单的小命令

    1. gnome-system-monitor,用作調处系统管理窗口,方便结束相关程序. 2. sudo python setup.py install,用作对.py文件的安装,但注意要先cd /ho ...