linux的IO子系统的认识

来源:互联网 发布:日式校服 男淘宝 编辑:程序博客网 时间:2024/06/05 15:49

author:skate
time:2009/09/09


 

1. linux开启AIO


从Oracle9iR2开始支持Linux上的异步IO,但是Oracle9iR2和Oracle10gR1中的AIO模块默认是disable的,如果要启用必须relink一下

   

 cd $ORACLE_HOME/rdbms/lib
    make -f ins_rdbms.mk async_on
    make -f ins_rdbms.mk ioracle

 

当然,如果要关闭AIO支持,只需要使用async_off选项进行relink即可。在Oracle10gR2中AIO默认已经是开启的了。

可以通过ldd或者nm来检查oracle是否已经启用了AIO支持,有输出代表已经启用

 

说明:

 

ldd:能够显示可执行模块的dependency
nm:这个命令列出目标文件的符号。如果没有指定目标文件,默认是a.out

 

oracle@dbolap ~]$ ldd /home/oracle/oracle/product/10.2.0/db_1/bin/oracle |grep libaio
        libaio.so.1 => /usr/lib64/libaio.so.1 (0x0000003036e00000)

 

[oracle@dbolap ~]$ nm /home/oracle/oracle/product/10.2.0/db_1/bin/oracle |grep io_getevent
                 w io_getevents@@LIBAIO_0.4

 

当然,Linux也必须已经安装了AIO相关的package

 

[oracle@dbolap ~]$ rpm -qa |grep aio
libaio-devel-0.3.105-2
libaio-0.3.105-2

 

可以通过查看slabinfo统计信息查看操作系统中AIO是否运行,slab是Linux的内存分配器,AIO相关的内存结构已经分配的话(第二列和第三列非0)说明AIO已经启用

 

cat /proc/slabinfo | grep kio
      kioctx 102 170 384 10 1 :tunables 54   27 8 : slabdata 17 17 0
      kiocb 488 495 256 15 1 :tunables 120 60 8 : slabdata 33 33 120

 


最后,还需要在Oracle中设置相关的初始化参数来使用AIO

 

      disk_asynch_io = true
      filesystemio_options = asynch #文件系统才需要

 

查看与修改


SQL> show parameter disk_asynch

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
disk_asynch_io                       boolean     TRUE


SQL> show parameter filesystem

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
filesystemio_options                 string      none

 

SQL> alter system set filesystemio_options=asynch scope =spfile;

System altered.

 

2.linux系统的块的大小

 

查看os系统块的大小

[root@dbolap ~]# /sbin/tune2fs -l /dev/sda1 |grep Block
Block count:              255024
Block size:               4096
Blocks per group:         32768

 

查看os页的大小

[root@dbolap ~]# getconf PAGESIZE
4096
[root@dbolap ~]#

 

 

块的大小修改:

 

是在创建文件系统时,指定块的大小

 

参考:
http://blog.csdn.net/wyzxg/archive/2008/03/13/2176520.aspx


3. linux的最大io:可以自己测试,例如用dd命令


dd if=/dev/zero of=/file 测试磁盘的纯写入性能

dd if=/file of=/dev/null 测试磁盘的纯读取性能

dd if=/file1 of=/file2 测试磁盘的读写性能

 

例如:

[root@dbolap ~]# time  dd if=/dev/zero of=/u01/disk_test bs=8192 count=1000k
1024000+0 records in
1024000+0 records out

real    2m14.593s
user    0m0.268s
sys     0m25.777s

 

共用了135秒然后人工的粗略计算下

 

SQL> select 8192*1000000/1024/1024/135 from dual;

8192*1000000/1024/1024/135
--------------------------
          57.8703703703704


然后在用iostat对比下


[root@dbolap ~]# iostat  -d -x 2

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda          0.00 13884.92  1.01 191.46    8.04 112542.71     4.02 56271.36   584.79   193.75  945.48   5.22 100.55
sda1         0.00   2.51  0.00  0.00    0.00   24.12     0.00    12.06     0.00     0.50    0.00   0.00  50.45
sda2         0.00 13873.37  1.01 187.94    8.04 112434.17     4.02 56217.09   595.11   190.78  935.43   5.32 100.55
sda3         0.00   1.01  0.00  1.01    0.00   12.06     0.00     6.03    12.00     1.05 1898.50 1000.50 100.55
sda4         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda5         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda6         0.00   7.54  0.00  2.51    0.00   64.32     0.00    32.16    25.60     1.21 1320.00 400.20 100.55
sda7         0.00   0.50  0.00  0.00    0.00    8.04     0.00     4.02     0.00     0.21    0.00   0.00  20.60
sda8         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-0         0.00   0.00  0.00  1.51    0.00   12.06     0.00     6.03     8.00     3.10 3163.67 667.00 100.55
dm-1         0.00   0.00  1.01 14054.27    8.04 112434.17     4.02 56217.09     8.00 14686.34  966.93   0.07 100.55


 可以看出两个值还是差不多的,很接近的


参考:
http://blog.csdn.net/wyzxg/archive/2008/03/13/2176520.aspx

sar命令说明
http://bbs.chinaunix.net/viewthread.php?tid=778325

dd命令参考
http://yayi.biz/post/13.html

 

 

 

4.linux的iops的计算

 


root@dbolap ~]# iostat -d  sda 2
Linux 2.6.9-78.ELsmp (dbolap.happypool.cn)      09/11/2009

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               7.40         5.41       721.20    7381654  984168616
sda             176.38       393.97     72156.78        784     143592
sda             230.85       963.18     99781.09       1936     200560
sda             253.77       470.35    127557.79        936     253840
sda             181.50       224.00    103668.00        448     207336
sda             173.50       600.00    109528.00       1200     219056
sda             181.09       517.41     65747.26       1040     132152
sda             200.00       508.00    115660.00       1016     231320
sda             172.00       288.00     72068.00        576     144136
sda             188.44       574.87    126653.27       1144     252040
sda             189.05       306.47    101213.93        616     203440


iostat的tps代表:每秒io的说量

 

tps:
Indicate the number of transfers per second that were
issued to the device. A transfer is an I/O request to the
device. Multiple logical requests can be combined into a
single I/O request to the device. A transfer is of inde-
terminate size

 


在只有的IO压力下,这个数据可以认为就是表征磁盘处理能力的iops,同时通过vmstat观察系统资源情况,
查看是否还有其他压力

 

 

[root@dbolap ~]# vmstat 2
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa
 1 20 122316  28260   6180 1703804    0    0     1    91    7     3  0  0 99  1
 0 19 122316  25452   6260 1703452    0    0   106 59678 1218   238  0  5 17 78
 0 19 122312  28012   6056 1699104    0    0    52 53200 1234   239  0  8  8 84
 1 19 122312  25004   6056 1717940    0    0   114 22970 1202   252  0  7  9 83
 0 17 122312  27620   5980 1714148    0    0   116 49656 1208   333  0  7 31 62
 0 17 122312  27476   5912 1710884    0    0   128 47120 1225   339  0  7 11 82
 0 21 122312  25108   5876 1711736    0    0    54 57868 1219   328  0  8  4 89
 0 20 122312  28628   5988 1706728    0    0    90 50950 1210   333  0  6 12 81
 1 20 122312  25940   6088 1705744    0    0    82 55006 1200   223  0  7  0 93
 0 22 122312  26116   6044 1702452    2    0   104 50190 1216   223  0  6  0 94
 0 22 122308  27396   6112 1698036    0    0    58 48906 1203   550  0  6  0 94
 0 22 122308  29260   6116 1695448    0    0    50 37316 1229   232  0  6  0 94
 0 28 122308  24300   6072 1695832    0    0   290 51034 1234   267  0  6  0 93

 

 

此时系统iowait很高,可以近似认为IO负载达到了峰值。

 

 


还可以用其他软件测试

orion,一款由Oracle公司提供,专门用于模拟数据库运行机制来测试存储的优秀IO存储测试软件,可以在不运行oracle数据库的情况下,仿真OLTP随机操作

http://www.ixdba.com/html/y2007/m06/125-orion-storage-test.html

 

 

 

5.linux的吞吐量

 

 

影响存储的iops: cache的算法(一般在oltp系统,cache的命中率在20%左右,)
                          磁盘的数量

 

影响存储吞吐量:磁盘的数量
                        存储的架构

 

 

SAN和NAS存储一般都具备2个评价指标:IOPS和带宽(throughput),两个指标互相独立又相互关联。体现存储系统性能的最主
要指标是IOPS。

 

IOPS(I/Os per second):即每秒输入输出次数。指的是系统在单位时间内能处理的最大的I/O频度;一般,OLTP应用涉及更多的
频繁读写,更多的考虑IOPS;


    IOPS测试结果与很多测试参数和存储系统具体配置有关。IOPS还可以细分为100%顺序读(Sequential Read)IOPS、100%顺序
写IOPS、100%随机读IOPS、100%随机写IOPS等,在同等情况下这四种IOPS中100%顺序读的IOPS最高。


    厂商公布的经常是IOPS很高的100%顺序读IOPS指标,但多数用户实际使用的环境既有顺序读写、也有随机读写操作;传输数
据块尺寸大小都有;所以产品在用户实际使用环境中性能自然就比标注的指标差。


    较权威的存储性能基准测试:SPC和SPC-1 IOPS™
    SPC(Storage Performance Council)即存储性能理事会。
    SPC的SPC-1基准测试主要是针对随机I/O应用环境的,SPC-2基准测试主要是针对顺序I/O应用环境的。SPC-1基准测试很好地
模拟了OLTP、数据库和e-mail等真实应用环境,使SPC-1基准测试结果具有很高权威性和可比性。


    SPC-1基准测试虽然规定了严格的顺序和随机读写比例和数据块尺寸以及在何种磁盘负载情况下取值,但没有规定被测存储
产品使用多少个磁盘,也没有规定被测存储产品设置何种RAID级别。好在存储性能理事会(SPC)要求测试报告必须详细地列出被
测存储系统的配置和价格。


    SPC网站(http://www.storageperformance.org/results)上公布了大多数存储厂商的存储产品的SPC-1基准测试报告,通过
查询这些报告中的SPC-1 IOPS™值和测试报告中所描述的被测存储产品的磁盘总数,用户就可以根据下列公式快速估算你所采购
配置的某一存储产品实际性能和可靠性:


  ·实际性能(实际SPC-1 IOPS™)= [实际采购存储系统的磁盘数 / 测试报告中被测系统的磁盘数] X 测试报告的SPC-1 IOPS™
  ·可靠性:MTTFarray=MTTFdisk / 实际采购存储系统的磁盘数

 

throughput:指的是单位时间内最大的I/O流量;一些大量的顺序文件访问,例如流媒体,更多的考虑throughput指标。

 

 带宽决定于整个阵列系统,与所配置的磁盘个数也有一定关系;而IOPs则基本由阵列控制器完全决定。在Web、E-mail、
 数据库等小文件频繁读写的环境下,性能主要由IOPs决定。在视频、测绘等大文件连续读写的环境下,性能主要由带宽
 决定。可见,在不同的应用方式中,需要考察的侧重点也不同。对NAS产品来说,主要性能指数也是两个:OPS和ORT,分
 别代表每秒可响应的并发请求数和每个请求的平均反应时间。对磁带存储设备来说,单个磁带驱动器的读写速度是最重
 要的性能指标。

 

 

 

 


--end---