- 浏览: 346177 次
文章分类
最新评论
-
亚当爱上java:
"给pre-commit添加可执行权限:chmod ...
svn强制要求提交注释--pre-commit钩子 -
rosasyou:
不知道这篇文章是怎么才让人看的?估计不是浏览器兼容问题。 ,与 ...
Zend Framework的DB处理 -
jinjiankang:
$youngest=`svnlook youngest $sv ...
svn备份策略 -
wangxc:
你好,我按照你介绍的方法在创建完weekly_backup.p ...
svn备份策略 -
yangfuchao418:
...
关于memcached的浅见
从上一篇文章的计算中我们可以看到一个15k转速的磁盘在随机读写访问的情况下IOPS竟然只有140左右,但在实际应用中我们却能看到很多标有5000IOPS甚至更高的存储系统,有这么大IOPS的存储系统怎么来的呢?这就要归结于各种存储技术的使用了,在这些存储技术中使用最广的就是高速缓存(Cache)和磁盘冗余阵列(RAID)了,本文就将探讨缓存和磁盘阵列提高存储IO性能的方法。 在当下的各种存储产品中,按照速度从快到慢应该就是内存>闪存>磁盘>磁带了,然而速度越快也就意味着价格越高,闪存虽然说是发展势头很好,但目前来说却还是因为价格问题无法普及,因此现在还是一个磁盘作霸王的时代。与CPU和内存速度相比,磁盘的速度无疑是计算机系统中最大的瓶颈了,所以在必须使用磁盘而又想提高性能的情况下,人们想出了在磁盘中嵌入一块高速的内存用来保存经常访问的数据从而提高读写效率的方法来折中的解决,这块嵌入的内存就被称为高速缓存。 说到缓存,这东西应用现在已经是无处不在,从处于上层的应用,到操作系统层,再到磁盘控制器,还有CPU内部,单个磁盘的内部也都存在缓存,所有这些缓存存在的目的都是相同的,就是提高系统执行的效率。当然在这里我们只关心跟IO性能相关的缓存,与IO性能直接相关的几个缓存分别是文件系统缓存(File System Cache)、磁盘控制器缓存(Disk Controller Cache)和磁盘缓存(Disk Cache,也称为Disk Buffer),不过当在计算一个磁盘系统性能的时候文件系统缓存也是不会考虑在内的,因此我们重点考察的就是磁盘控制器缓存和磁盘缓存。 不管是控制器缓存还是磁盘缓存,他们所起的作用主要是分为三部分:缓存数据、预读(Read-ahead)和回写(Write-back)。 缓存的命中率跟缓存的大小有很大的关系,理论上是缓存越大的话,所能缓存的数据也就越多,这样命中率也自然越高,当然缓存不可能太大,毕竟成本在那儿呢。如果一个容量很大的存储系统配备了一个很小的读缓存的话,这时候问题会比较大的,因为小缓存缓存的数据量非常小,相比整个存储系统来说比例非常低,这样随机读取(数据库系统的大多数情况)的时候命中率也自然就很低,这样的缓存不但不能提高效率(因为绝大部分读IO都还要读取磁盘),反而会因为每次去匹配缓存而浪费时间。 执行读IO操作是读取数据存在于缓存中的数量与全部要读取数据的比值称为缓存命中率(Read Cache Hit Radio),假设一个存储系统在不使用缓存的情况下随机小IO读取能达到150IOPS,而它的缓存能提供10%的缓存命中率的话,那么实际上它的IOPS可以达到150/(1-10%)=166。 读缓存虽然对效率提高是很明显的,但是它所带来的问题也比较严重,因为缓存和普通内存一样,掉点以后数据会全部丢失,当操作系统发出的写IO命令写入到缓存中后即被认为是写入成功,而实际上数据是没有被真正写入磁盘的,此时如果掉电,缓存中的数据就会永远的丢失了,这个对应用来说是灾难性的,目前解决这个问题最好的方法就是给缓存配备电池了,保证存储掉电之后缓存数据能如数保存下来。 和读一样,写缓存也存在一个写缓存命中率(Write Cache Hit Radio),不过和读缓存命中情况不一样的是,尽管缓存命中,也不能将实际的IO操作免掉,只是被合并了而已。 控制器缓存和磁盘缓存除了上面的作用之外还承当着其他的作用,比如磁盘缓存有保存IO命令队列的功能,单个的磁盘一次只能处理一个IO命令,但却能接收多个IO命令,这些进入到磁盘而未被处理的命令就保存在缓存中的IO队列中。 如果你是一位数据库管理员或者经常接触服务器,那对RAID应该很熟悉了,作为最廉价的存储解决方案,RAID早已在服务器存储中得到了普及。在RAID的各个级别中,应当以RAID10和RAID5(不过RAID5已经基本走到头了,RAID6正在崛起中,看看这里了解下原因)应用最广了。下面将就RAID0,RAID1,RAID5,RAID6,RAID10这几种级别的RAID展开说一下磁盘阵列对于磁盘性能的影响,当然在阅读下面的内容之前你必须对各个级别的RAID的结构和工作原理要熟悉才行,这样才不至于满头雾水,推荐查看wikipedia上面的如下条目:RAID,Standard RAID levels,Nested RAID levels。 读取数据的情况相对就要复杂的多了,先来看下RAID5奇偶校验数据写入的过程,我们把写入的数据称为D1,当磁盘拿到一个写IO的命令的时候,它首先会读取一次要入的地址的数据块中修改之前的数据D0,然后再读取到当前条带中的校验信息P0,接下来就根据D0,P0,D1这三组数据计算出数据写入之后的条带的奇偶校验信息P1,最后发出两个写IO的命令,一个写入D1,另一个写入奇偶校验信息P1。可以看出阵列在实际操作的时候需要读、读、写、写一共4个IO才能完成一次写IO操作,也就是实际上的写入速度只有所有磁盘速度总和的1/4。从这点可以看出RAID5是非常不适合用在要大批量写入数据的系统上的。 在写IO上也很是类似,不同的是RAID将一个命令分成了三次读、三次写一共6次IO命令才能完成,也就是RAID6实际写入磁盘的速度是全部磁盘速度之和的1/6。可以看出从写IO看RAID6比RAID5差别是很大的。 因为RAID10其实就是RAID1,所以它的性能与RAID1也就是一样的了,这里不需要再做过多的讨论。 在任何时候IO响应时间值得都是单个IO的响应时间,因此,不管磁盘是否组成了磁盘阵列,它的IO响应时间应该都是一样的。从前面的计算中我们可以看到,如果IO响应时间在10ms左右的话是很正常的,但是当IO响应时间比这个值超出太多的时候,你就要开始注意了,很可能就意味着此时你的磁盘系统已经成为了一个瓶颈。 综合上面两个部分的讨论我们来估算一下阵列下的磁盘总体IOPS,在这里我们先假设组成阵列的单个磁盘的随机读写的IOPS为140,读写缓存命中率都为10%,组成阵列的磁盘个数为4。 因为不管是那种阵列,磁盘的读取性能都是所有磁盘之和,所以可以得出下面的读取IOPS: 而写入性能就完全不一样了,根据上面的讨论我们可以得出下面结论: 由此我们也可以计算出写入IOPS估算公式: 实际上从通过上面的计算方法我们还可以估算当给定一个要求的IOPS的情况下,估计下使用各个阵列级别所需要的磁盘的数量。当然我们上面的计算方法只是一个估算,我们忽略很多其他的因素,得出的只是一个大概的数值,不过在实际的应用还是有一定的参考作用的。 本篇最后附送一个计算磁盘系统IOPS的网站――wmarow’s disk & disk array calculator,这个网站提供的计算公式还考虑了诸如阵列条带大小以及主机方面的因素,很有参考价值,至于怎么选择合适的条带大小,请参考【延伸阅读】部分。 实际上估算除了随机读写的IOPS也就知道了随机读写的吞吐率。对于顺序读写的呢,还是跟前一篇所讲的一样,主要受限于磁盘的限制,不能再拿IOPS来衡量了。
高速缓存(Cache)
RAID(Redundant Array Of Inexpensive Disks)
四个性能指标的变化
IO响应时间(IO Response Time)
IOPS
RAID1: 1 IO request => need 2 actual IO on disk
RAID5: 1 IO request => need 4 actual IO on disk
RAID6: 1 IO request => need 6 actual IO on disk
RAID1 write IOPS =disk_IOPS/(1-write_cache_hit_ratio)*disk_num/acture_IO_num =140/(1-10%)*4/2 = 311
RAID5 write IOPS =disk_IOPS/(1-write_cache_hit_ratio)*disk_num/acture_IO_num =140/(1-10%)*4/4 = 155
RAID6 write IOPS =disk_IOPS/(1-write_cache_hit_ratio)*disk_num/acture_IO_num =140/(1-10%)*4/6 = 103
传输速度(Transfer Rate)/吞吐率(Throughput)
发表评论
-
vim操作
2010-08-01 22:55 1072s -
Linux环境进程间通信(一)
2010-07-03 22:49 953http://www.ibm.com/developerwor ... -
深刻理解Linux进程间通信(IPC)
2010-07-03 11:51 1632www.ibm.com/developerworks/cn ... -
APACHE中虚拟目录和虚拟主机设置
2009-02-02 14:41 2969在apache的配置文件http.conf中设置如下信息, ... -
LINUX新手要了解的十个知识点
2009-02-02 14:40 950Linux新手要了解的十个 ... -
LINUX下如何安装、卸载软件
2009-02-02 14:39 1394在Linux下有一个功能强大的软件安装卸载工具,名为RPM ... -
LINUX:常用命令
2009-02-02 14:38 1210一: Linux下的mysql数据库常用操作 1.登入登 ... -
LINUX下SVN命令大全
2009-02-02 14:35 64421、将文件checkout到本地目录 svn check ... -
linux下crontab的使用
2008-11-14 13:31 6714crontab- - 1.作用 使用crontab命令可以修 ... -
在Linux下压缩文件 tar命令的使用
2008-09-23 15:05 2121对许多用户来说,在DOS和Windows环境下利用工具软件W ... -
Linux小技巧收集
2008-07-10 11:07 1854前言:因为用Linux的时 ... -
Linux下perl文件的执行
2008-07-04 14:04 3142#! /usr/bin/perl 第一个“#”表 ... -
Linux crontab-自动化的任务
2008-07-04 00:51 1679http://www.eygle.com/digest/200 ... -
linux ip设置
2008-07-04 00:09 1574示例环境: CODE:OS: FC2 NIC: eth0 h ... -
Linux应用问答(三)
2008-07-03 14:24 1041问:安装完Linux后,根目录下有很多子目录,其意义如何? ... -
Fedora下开启telnet服务
2008-06-12 23:37 76451。基础知识 linux提供服务是由运行在后台的守护程序(da ...
相关推荐
总之,高速缓存和RAID是提升IO性能的有效手段,它们通过缓存策略、数据预读和写缓存优化,以及磁盘阵列的并行处理,使得存储系统能够在有限的成本下实现更高的性能。在设计和部署存储解决方案时,理解这些技术原理并...
从上一篇文章:IO系统性能之一:衡量性能的几个指标的计算中我们可以看到一个15k转速的磁盘在随机读写访问的情况下IOPS竟然只有140左右,但在实际应用中我们却能看到很多标有5000IOPS甚至更高的存储系统,有这么大IO
3. **IO子系统优化**:升级硬盘到更快的SSD,或者使用RAID配置提高磁盘读写速度。 4. **查询优化**:通过执行计划分析慢查询,优化查询语句,减少全表扫描和避免不必要排序。 5. **定期维护**:执行DBCC CHECKDB和...
生产系统主机IO性能分析是确保业务稳定运行的关键环节,尤其在面对高负载和大数据量时,磁盘IO性能成为衡量系统效能的重要指标。本文将深入探讨如何在Linux环境下监测和分析主机IO性能,涵盖dd命令的基本应用、...
6. **I/O优化策略**: 了解磁盘IO占用可以帮助我们优化系统设置,如调整文件系统参数、分配更大的缓存、使用SSD(固态硬盘)替换HDD(机械硬盘)或者采用RAID配置以提高I/O性能。 7. **日志分析**: 通过记录和分析...
在Unix和Linux操作系统中,磁盘I/O性能监控是系统管理员进行性能调优的关键环节。...通过理解和监控这些指标,结合适当的调优策略,可以显著提高Unix和Linux系统的磁盘I/O性能,从而提升整个系统的整体效率。
首先,手册会讲解Oracle数据库I/O基础,包括磁盘I/O体系结构、RAID技术、存储子系统以及Oracle的数据块和表空间管理。理解这些基础知识对于识别性能瓶颈和制定调优策略至关重要。 其次,书中将详细介绍Oracle的I/O...
**Iowait 成因** Iowait 是操作系统中一个关键指标,它反映了系统因为等待输入/输出(IO)操作完成而使CPU处于...总之,理解并监控iowait可以帮助识别系统瓶颈,从而采取相应的优化措施,提高系统的整体性能和效率。
1. 磁盘IO:关注磁盘队列深度、IOPS、吞吐量和平均等待时间,工具如vmstat、iostat可以帮助实时监控这些指标。 2. 网络IO:注意带宽、TCP连接数、丢包率和网络延迟,ntop、Wireshark等工具能提供详尽的网络性能数据...
- **RAID技术**: 利用多个磁盘组合提高I/O性能或数据冗余。 - **SSD缓存**: 使用SSD作为HDD的高速缓存,提升整体性能。 - **优化文件系统**: 根据工作负载选择合适的文件系统,如NTFS或ReFS。 7. **故障排查** ...
这种设计大大提升了数据库的整体性能,但也带来了如何平衡内存与磁盘IO的问题。 IO配置是优化的关键一环。Oracle提供了多种IO配置选项,如ASM(Automatic Storage Management)和RAC(Real Application Clusters)...
Linux操作系统存储系统软件层原理剖析以及IO调度优化原理 Linux操作系统是现代计算机系统中广泛使用的开源操作...在实际工作中,系统管理员和数据库管理员应当综合考虑不同因素,采用恰当的策略来提高系统的整体性能。
磁盘I/O(Input/Output)测试工具是评估和优化系统存储性能的关键工具,尤其在大数据、数据库和高性能计算等领域中至关重要。FIO(Flexible I/O Tester)是一款强大的开源工具,能够模拟多种I/O工作负载,对磁盘、...
- **磁盘IO**:RAID技术(如RAID0、1、5、01、10)用于提高磁盘性能。SSD磁盘在数据库服务器中提供更快的IO速度。 - **网络带宽**:选择合适的网卡和交换机,并通过双网卡绑定提升带宽,例如在hadoop平台和视频...
**Iometer:全面解析磁盘与网络IO性能测试工具** Iometer是一款由Intel公司研发的高性能、跨平台的输入/输出(I/O)基准测试工具,主要用于评估系统在处理磁盘和网络I/O请求时的性能。它适用于各种操作系统,包括...
* 性能方面:RAID 技术可以通过分块提高性能,将 IO 操作分散到各个不同的磁盘驱动器中,使主机 I/O 控制器能够处理更多的操作。 * 可用性方面:RAID 技术可以通过镜像冗余或校验冗余,提供了在个别磁盘失效的情况下...
首先,RAID是一种通过将多个硬盘组合起来提供数据冗余和性能提升的技术。常见的RAID级别如RAID 0、RAID 1、RAID 5、RAID 6和RAID 10等,每种都有其特定的优势和应用场景。在RAID系统中,锂电池通常用于保存缓存数据...
条带化是提高磁盘性能的一种有效方法,尤其在RAID 0和RAID 5等配置中应用广泛。条带化的基本思想是将数据分散到多个磁盘上,以实现并行读写操作,从而显著提高整体性能。 1. **条带化原理**:通过将数据分割成固定...