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. Redis中算法之——Raft算法

    Sentinel系统选举领头的方法是对Raft算法的领头选举方法的实现. 在分布式系统中一致性是很重要的.1990年Leslie Lamport提出基于消息传递的一致性算法Paxos算法,解决分布式系 ...

  2. SpringBoot + Spring MVC国际化使用示例

    项目中需要显示中英文两种语言,所以需要对显示的内容进行国际化,如下是一个示例程序. 程序文件结构,如下图,后面详细列出各文件的代码. 1. 编写maven的pom.xml文件,如下: <proj ...

  3. 怎么高效查找和正确改变谷歌浏览器编码格式(新版和旧版Google Chrome)(图文详解)

    前言 今天,无意中在解决一个乱码问题,后台是有过判断解决兼容性问题,但是有个别电脑还是有乱码问题,就去想改变下前台的编码格式,突然发现一向好用的谷歌,居然找不到编码格式了! 上网百度了半天,查阅各种网 ...

  4. CentOS下MySQL的安装过程

    1 查看 CentOS 自带的 mysql 输入命令: rpm -qa | grep mysql 2 将自带的MySQL卸载了 输入命令: rpm -e --nodeps mysql-libs-5.1 ...

  5. r.js 配置文件 example.build.js 不完整注释

    /* * This is an example build file that demonstrates how to use the build system for * require.js. * ...

  6. FLUSH TABLES WITH READ LOCK 和 LOCK TABLES 之种种

    1.FLUSH TABLES WITH READ LOCK 这个命令是全局读锁定,执行了命令之后所有库所有表都被锁定只读.一般都是用在数据库联机备份,这个时候数据库的写操作将被阻塞,读操作顺利进行. ...

  7. rem单位怎么使用

    rem这是个低调的css单位,近一两年开始崭露头角,有许多同学对rem的评价不一,有的在尝试使用,有的在使用过程中遇到坑就弃用了.但是我对rem综合评价是用来做web app它绝对是最合适的人选之一. ...

  8. 配置nginx服务器全局命令

    service nginx start|stop|reload 报错:Failed to reload nginx.service: Unit not found.[解决方案] 在执行service ...

  9. Mac OS X安装OpenGL

    Mac OS X安装OpenGL 安装最新的cmake brew install cmake brew upgrade cmake 安装glew brew install glew 安装GLTools ...

  10. leetcode_787【K 站中转内最便宜的航班】

    有 n 个城市通过 m 个航班连接.每个航班都从城市 u 开始,以价格 w 抵达 v. 现在给定所有的城市和航班,以及出发城市 src 和目的地 dst,你的任务是找到从 src 到 dst 最多经过 ...