在 Linux 中使用 Azure Premium 存储的基本优化指南
Note
以下测试和结果都是基于 CentOS 6.5。对于其他版本,请参考本文档,并自行进行相关测试。
建议使用最新的内核版本
一般情况下,新的内核版本能解决老版本中存在的问题,添加对新出现硬件的支持,以及改进对硬件的支持程度。
建议使用你当前 Linux 发行版本中最新的内核版本;如有可能,定期更新到大版本中最新的补丁版本。更新 Linux LIS 驱动
官方文档中提到,CentOS 和 Oracle 特定的发行版本,需要更新 LIS 以支持 Premium storage。具体如下图所示:

在磁盘分区时,与设备的页大小对齐
在
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即可。文件系统格式
在 CentOS 7 以后,默认使用
XFS作为文件系统格式。在 CentOS 6 中,推荐使用ext4或者XFS。挂载选项
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 filesystemIO调度算法
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或者noopIO 算法时,平均 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 存储的基本优化指南的更多相关文章
- ASP.NET Core 2.0中的Azure Blob存储
问题 如何在ASP.NET Core中使用Azure Blob存储 解 创建一个类库并添加NuGet包 - WindowsAzure.Storage 添加一个类来封装设置, publicclass A ...
- 杀死Linux中的defunct进程(僵尸进程)的方法指南
杀死Linux中的defunct进程(僵尸进程)的方法指南_LINUX_操作系统_脚本之家https://www.jb51.net/LINUXjishu/457748.html 这样能看到僵尸进程.
- 软硬链接、文件删除原理、linux中的三种时间、chkconfig优化
第1章 软硬链接 1.1 硬链接 1.1.1 含义 多个文件拥有相同的inode号码 硬链接即文件的多个入口 1.1.2 作用 防止你误删除文件 1.1.3 如何创建硬链接 ln 命令,前面是源文件 ...
- docker4dotnet #4 使用Azure云存储构建高速 Docker registry
使用Docker来构建应用程序最常见的操作就是 docker run 或者 docker pull了,但是由于众所周知的原因,在国内想要高速稳定的获取docker hub上面的资源并不是件容易的事情, ...
- 使用Azure云存储构建高速 Docker registry
使用Azure云存储构建高速 Docker registry 使用Docker来构建应用程序最常见的操作就是 docker run 或者 docker pull了,但是由于众所周知的原因,在国内想要高 ...
- 使用 Azure 创建存储和检索文件
本指南将以循序渐进的方式帮助您使用 Azure 将文件存储到云中.我们将逐一介绍如何创建存储账户.创建容器.上传文件.检索文件和删除文件.在本教程中完成的所有操作均符合 1 元试用条件. 本指南将以循 ...
- Linux中检索文件
1 , Use locate command It is a fast way to find the files location, but if a file just created ,it w ...
- 【转载】Linux中常用操作命令
说明:开始学习linux系统,为了方便查看,特转载一篇Linux中常用操作命令,转载地址:http://www.cnblogs.com/laov/p/3541414.html 正文: Linux简介及 ...
- Microsoft Azure 云存储服务概念
本文包括了以下几点内容: 什么是Azure云存储服务? 云存储服务分类 云存储服务的优势 什么是Azure云存储服务? Azure 云存储服务可以说是Azure 上最重要的SAAS服务了. 在Azur ...
随机推荐
- Redis中算法之——Raft算法
Sentinel系统选举领头的方法是对Raft算法的领头选举方法的实现. 在分布式系统中一致性是很重要的.1990年Leslie Lamport提出基于消息传递的一致性算法Paxos算法,解决分布式系 ...
- SpringBoot + Spring MVC国际化使用示例
项目中需要显示中英文两种语言,所以需要对显示的内容进行国际化,如下是一个示例程序. 程序文件结构,如下图,后面详细列出各文件的代码. 1. 编写maven的pom.xml文件,如下: <proj ...
- 怎么高效查找和正确改变谷歌浏览器编码格式(新版和旧版Google Chrome)(图文详解)
前言 今天,无意中在解决一个乱码问题,后台是有过判断解决兼容性问题,但是有个别电脑还是有乱码问题,就去想改变下前台的编码格式,突然发现一向好用的谷歌,居然找不到编码格式了! 上网百度了半天,查阅各种网 ...
- CentOS下MySQL的安装过程
1 查看 CentOS 自带的 mysql 输入命令: rpm -qa | grep mysql 2 将自带的MySQL卸载了 输入命令: rpm -e --nodeps mysql-libs-5.1 ...
- r.js 配置文件 example.build.js 不完整注释
/* * This is an example build file that demonstrates how to use the build system for * require.js. * ...
- FLUSH TABLES WITH READ LOCK 和 LOCK TABLES 之种种
1.FLUSH TABLES WITH READ LOCK 这个命令是全局读锁定,执行了命令之后所有库所有表都被锁定只读.一般都是用在数据库联机备份,这个时候数据库的写操作将被阻塞,读操作顺利进行. ...
- rem单位怎么使用
rem这是个低调的css单位,近一两年开始崭露头角,有许多同学对rem的评价不一,有的在尝试使用,有的在使用过程中遇到坑就弃用了.但是我对rem综合评价是用来做web app它绝对是最合适的人选之一. ...
- 配置nginx服务器全局命令
service nginx start|stop|reload 报错:Failed to reload nginx.service: Unit not found.[解决方案] 在执行service ...
- Mac OS X安装OpenGL
Mac OS X安装OpenGL 安装最新的cmake brew install cmake brew upgrade cmake 安装glew brew install glew 安装GLTools ...
- leetcode_787【K 站中转内最便宜的航班】
有 n 个城市通过 m 个航班连接.每个航班都从城市 u 开始,以价格 w 抵达 v. 现在给定所有的城市和航班,以及出发城市 src 和目的地 dst,你的任务是找到从 src 到 dst 最多经过 ...