1、IO性能解决方案整理
网卡性能优化方案
绑定中断 至特定CPU
减少接口属性设置
数据包打入CPU标签,提升缓存命中
磁盘随机读写优化方案
批量读写
寻道更快、转速更高的硬盘
内存作为缓存
SSD
RAID
磁盘顺序读写优化方案
RAID
SSD
2、磁盘性能测试
目前常用的存储介质有磁盘、SSD、Flash、内存(临时存储)。
存储加速技术有RAID、SAN、云硬盘等。
iops(每秒执行的IO次数)、bw(带宽,每秒的吞吐量)、lat(每次IO操作的延迟)
当每次IO操作的block较小时,如512bytes/4k/8k等,测试的主要是iops。
当每次IO操作的block较大时,如256k/512k/1M等,测试的主要是bw。
iops——写测试 dd if=/dev/zero of=./a.dat bs=8k count=1M oflag=direct
iops——读测试 dd if=./a.dat of=/dev/null bs=8k count=1M iflag=direct
bw——写测试 dd if=/dev/zero of=./a.dat bs=1M count=8k oflag=direct
bw——读测试 dd if=./a.dat of=/dev/null bs=1M count=8k iflag=direct
为何随机是关注IOPS,顺序关注吞吐量?
因为随机读写的话,每次IO操作的寻址时间和旋转延时都不能忽略不计,而这两个时间的存在也就限制了IOPS的大小;而顺序读写可以忽略不计寻址时间和旋转延时,
主要花费在数据传输的时间上。
但是编写应用程序时,是无法控制随机和顺序读写的,应用层无法保证,操作系统(确切地说是文件系统)会自动追求。
如果你想保证写入是顺序的,那么你需要直接操作磁盘,而不是文件系统,同时你需要维护当前从盘的数据,写的时候不会覆盖原有的数据总的来说,
为了这个的性能提升去开发这么一个系统是不太划算的,当然Google这么做了,不代表这么做是最合适的;直接换ssd带来的性能提升是这种方式的提升的数百倍
应用程序要保证的是尽可能的利用缓存,以提高文件读写的效率。不能一个字节一个字节的立刻写到硬盘里面去,而是要一块数据一起交给文件系统去写。
3、大页内存
除了标准的4KB内存页,你最大可以定义 1GB 的页面大小。在系统启动期间,你能用“大内存页”为应用程序预留一部分内存。这部分内存,
即被“大内存页”占用的这些存储器永远不会被交换出内存。它会一直保留其中,除非你修改了配置。这会极大地提高像 Oracle 数据库这样的需要海量内
存的应用程序的性能。
通过启用“大内存页”,系统具只需要处理较少的页面映射表,从而减少访问/维护它们的开销!
在通用程序中也可以使用大页内存。