Note

以下测试和结果都是基于 CentOS 6.5。对于其他版本,请参考本文档,并自行进行相关测试。

  1. 建议使用最新的内核版本

    一般情况下,新的内核版本能解决老版本中存在的问题,添加对新出现硬件的支持,以及改进对硬件的支持程度。
    建议使用你当前 Linux 发行版本中最新的内核版本;如有可能,定期更新到大版本中最新的补丁版本。

  2. 更新 Linux LIS 驱动

    官方文档中提到,CentOS 和 Oracle 特定的发行版本,需要更新 LIS 以支持 Premium storage。具体如下图所示:

    高级存储:适用于 Azure 虚拟机工作负荷的高性能存储

  3. 在磁盘分区时,与设备的页大小对齐

    在 2.6.32-431.29.2.el6.x86_64 的内核中,fdisk 默认还是使用柱面为边界来分区;如果柱面与 SSD 磁盘的页大小没有对齐,文件系统层面的一个 IO,可能会在设备层产生额外的开销,影响读写响应时间。

    以下是 CentOS 6.5 执行 fdisk 不带参数时的警告信息。

    以下是通过不同参数进行磁盘分区后,使用 fdisk -u -c -l 的结果。/dev/sdc1 是从磁盘的第二个 1024k 开始的,/dev/sdd1 则是从第二个 8k 开始的。一般来讲,这个边界对齐最好是 128K 的偶数倍。

    复制
    #fdisk -u -c /dev/sdc
    #fdisk /dev/sdd

    在 CentOS 7 以后,fdisk 默认就使用了以 512Bytes 的 Sector 大小为单位来显示,分区时也默认从第 2048 个 sector 开始划第一个分区。所以不必担心 SSD 还会有边界对齐问题,使用默认命令 fdisk 即可。

    参考该文档:Improving performance/Storage devices

  4. 文件系统格式

    在 CentOS 7 以后,默认使用 XFS 作为文件系统格式。在 CentOS 6 中,推荐使用 ext4 或者 XFS

  5. 挂载选项

    Write barrier 是用来保证内存中数据以正确顺序写入磁盘,以防止突然断电而引起的数据不一致问题。如果在新建磁盘时设置的 cache 规则为 none 或者 readonly, 完全可以禁用该功能,因为数据会不经过 cache 直接写入 Azure Premium Storage 底层的磁盘。

    noatime/relatime : atime 是文件属性中的访问时间。每次文件被访问,该时间就会被更改。如果文件被频繁访问,那花费在记录该时间上的时间也很可观,会影响 IO 的效率。

    如果应用不需要比较文件访问时间,建议将其禁止;若因为某些原因要保持 atime 更新,可以设置 relatime,将 atime 设置成和 mtime 一起更新。

    Note

    在 Azure 提供的 CentOS 7 版本以后,默认挂载选项已经设置成 relatime

    操作方法:

    命令行中使用

    复制
    #mount -o noatime,barrier=0 /dev/sdxn /mount/point

    或者

    复制
    #mount -o relatime,barrier=0 /dev/sdxn /mount/point

    在挂载配置文件中更改

    复制
    #vi /etc/fstab
    /dev/sdxn /mount/point ext4 noatime,barrier=0 0 0

    或者

    复制
    /dev/sdxn   /mount/point    ext4    relatime,barrier=0  0 0

    Discard : 用来决定是否在有数据被删除时对 SSD block 进行整理,以备后续数据写入时提高速度;但如果小文件删除频繁,discard 本身可能引起性能下降。慎用之。

    参考:

    Impact of ext4’s discard option on my SSD 
    Performance of TRIM command on ext4 filesystem

  6. IO调度算法

    CFQ : CentOS 6 中的默认 IO 算法。特点是对所有有 IO 请求的进程,提供公平的磁盘 IO 带宽。
    NOOP : 即 none operation。对所有的 IO 请求,不做任何操作,直接发给磁盘控制器。
    Deadline : CentOS 7 中默认 IO 算法。其特点在于尽量将所有的 IO 请求的延迟保持在一定范围内,避免有的 IO 一直等待无法获取响应时间。

    根据应用的 IO 类型,选择合适的 IO 调度算法,能在一定程度上提供应用性能。这里讲的 IO 调度算法的主要目的是为了节省磁盘寻道时间。而 SSD 磁盘和 HDD 最大的不同,在于它没有寻道时间和旋转延迟。因此对于 HDD 性能有极大帮助的 CFQ 和 Deadline,以及 nr_requests/queue_depth 参数,对于 SSD 来讲意义不大;相反,使用 noop 或 deadline 这种基本不排序 IO 的算法,反倒能提升 SSD 的响应时间。

    Deadline 和 noop 的算法还是有所不同的,建议两种分别测试比较一下,择优而用。另外,IO 调度算法是根据底层磁盘来的,如果有多个磁盘,要分别进行设置。

    查看 IO 算法 :

    复制
    #cat /sys/block/sdx/queue/scheduler

    在线更改算法 :

    复制
    #echo noop > /sys/block/sdx/queue/scheduler

    将算法更新到启动参数中(CentOS 6):

    复制
    #vi /etc/grub.conf
    kernel /boot/vmlinuz-2.6.32-431.29.2.el6.x86_64 ro root=UUID=8fc4d768-29cd-462c-a7ab-5bf4bcfa9fa2 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 numa=off console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300 rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_NO_LVM rd_NO_DM elevator=deadline

    使用 sysbench 0.5,在 1 core, 3.5 GB memory 的 DS1 型号的 CentOS 6.5 中进行了文件读写测试。经过比较,使用了 noatime 和 barrier=0,且使用了边界对齐分区方法的 ext4 文件系统,在使用 deadline 或者 noop IO 算法时,平均 IO 时间和最大 IO 时间都有所下降,文件读写 IO 综合情况表现较好。

    上述情况仅从基本操作上进行了一些优化。在实际环境中,各个参数的调整,都需要进行反复测试,以求达到最佳状态。

更多参考

Azure Storage secrets and Linux I/O optimizations 
优化 Azure Linux VM 上的 MySQL 性能 
高级存储:适用于 Azure 虚拟机工作负荷的高性能存储 
Using the Deadline IO Scheduler

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

在 Linux 中使用 Azure Premium 存储的基本优化指南的更多相关文章

  1. ASP.NET Core 2.0中的Azure Blob存储

    问题 如何在ASP.NET Core中使用Azure Blob存储 解 创建一个类库并添加NuGet包 - WindowsAzure.Storage 添加一个类来封装设置, publicclass A ...

  2. 杀死Linux中的defunct进程(僵尸进程)的方法指南

    杀死Linux中的defunct进程(僵尸进程)的方法指南_LINUX_操作系统_脚本之家https://www.jb51.net/LINUXjishu/457748.html 这样能看到僵尸进程.

  3. 软硬链接、文件删除原理、linux中的三种时间、chkconfig优化

    第1章 软硬链接 1.1 硬链接 1.1.1 含义 多个文件拥有相同的inode号码 硬链接即文件的多个入口 1.1.2 作用 防止你误删除文件 1.1.3 如何创建硬链接 ln 命令,前面是源文件  ...

  4. docker4dotnet #4 使用Azure云存储构建高速 Docker registry

    使用Docker来构建应用程序最常见的操作就是 docker run 或者 docker pull了,但是由于众所周知的原因,在国内想要高速稳定的获取docker hub上面的资源并不是件容易的事情, ...

  5. 使用Azure云存储构建高速 Docker registry

    使用Azure云存储构建高速 Docker registry 使用Docker来构建应用程序最常见的操作就是 docker run 或者 docker pull了,但是由于众所周知的原因,在国内想要高 ...

  6. 使用 Azure 创建存储和检索文件

    本指南将以循序渐进的方式帮助您使用 Azure 将文件存储到云中.我们将逐一介绍如何创建存储账户.创建容器.上传文件.检索文件和删除文件.在本教程中完成的所有操作均符合 1 元试用条件. 本指南将以循 ...

  7. Linux中检索文件

    1 , Use locate command It is a fast way to find the files location, but if a file just created ,it w ...

  8. 【转载】Linux中常用操作命令

    说明:开始学习linux系统,为了方便查看,特转载一篇Linux中常用操作命令,转载地址:http://www.cnblogs.com/laov/p/3541414.html 正文: Linux简介及 ...

  9. Microsoft Azure 云存储服务概念

    本文包括了以下几点内容: 什么是Azure云存储服务? 云存储服务分类 云存储服务的优势 什么是Azure云存储服务? Azure 云存储服务可以说是Azure 上最重要的SAAS服务了. 在Azur ...

随机推荐

  1. 第六次 Scrum Meeting

    第六次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/4/10 22:00 30min 大运村1号楼6F 附Github仓库:WEDO 例会照片 工作情况总结(4.10 ...

  2. MB Star C3 vs MB Star C4

    New Mercedes Benz Star C3 is a professional diagnostic tool specially for mercedes benz cars. Merced ...

  3. Python学习 day12

    一.@wraps __name__    查看函数的名字 __doc__   查看函数的文档字符串 例: def func(arg): """ 这是一个测试函数,这里是函 ...

  4. 关于cg语言中求法向量 N=mul(worldMatrix_IT,normal); 的随笔

    解释一下标题,N是变换到世界坐标后的法向量,worldMatrix_IT是变换矩阵worldMatrix的逆的转置矩阵,normal就是模型坐标的法向量. 对于点p,我们根据变换矩阵M(即worldM ...

  5. unity3d vscode

    原来unity3d里assets store有一个插件,下载就行了,插件名就叫vscode 下载完了之后,preference里就会出现,vscode,Enable Integration 这一项勾上 ...

  6. 关于Sql注入的那些事

    登陆注册应该是每一个网站的必做的业务,但是在选择使用Django中的ORM还是说执行原生的Sql语句不同的人应该会有不同的建议,有经验的开发人员都喜欢原生的sql语句,因为相对于ORM来说,执行效率高 ...

  7. Kubernetes Running Locally

    1. Requirements 1) Linux Not running Linux? Consider running Minikube, or on a cloud provider like G ...

  8. 理解restful 架构 && RESTful API设计指南

    restful是前端和后端接口中都会使用的设计思想. 网站即软件,我们也常说的webapp,这种互联网软件采用的是“客户端/服务器”模式,建立在分布式体系上. 网站开发,也可以完全采用软件开发的模式, ...

  9. jquery colsest的用法

    如果有class,就是他自己,没有就在父级去找 e=e||window.event; var target=e.srcElement?e.srcElement:e.target; var parent ...

  10. 破解b站极验验证码

    这就是极验验证码,通过拖动滑块移动拼图来验证.我们观察到点击滑块时拼图才会出现,所以我们可以在点击滑块之前截取图像,点击滑块再截取一次图像,将前后两次图像做比较就可以找到图片改动的位置.获得位置后,我 ...