Chinaunix首页 | 论坛 | 博客
  • 博客访问: 270746
  • 博文数量: 53
  • 博客积分: 2580
  • 博客等级: 少校
  • 技术积分: 509
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-29 10:02
文章分类

全部博文(53)

文章存档

2014年(1)

2013年(1)

2011年(14)

2010年(37)

我的朋友

分类: LINUX

2011-08-18 10:34:08

目前,服务器性能上最容易受到磁盘IO的制约,而产生瓶颈。关于系统IO性能优化这块,我想主要有如下一些办法:

1、用内存做存储,把那种需要频繁调度而不用考虑持续性的内容放到内存中,提高速度 
mount tmpfs /usr/local/nginx/proxy_temp/ -t tmpfs -o size=14G
  
2、使用预读,并调整其大小。
blockdev --setra 2048 /dev/sdb
 
    简单的说,磁盘的一个典型I/O操作由两个阶段组成:
  1)数据定位,平均定位时间主要由两部分组成:平均寻道时间和平均转动延迟。寻道时间的典型值是4.6ms。转动延迟则取决于磁盘的转速:普通7200RPM桌面硬盘的转动延迟是4.2ms,而高端10000RPM的是3ms。这些数字多年来一直徘徊不前,大概今后也无法有大的改善了。
 
  2)数据传输,持续传输率主要取决于盘片的转速(线速度)和存储密度,最新的典型值为80MB/s。虽然磁盘转速难以提高,但是存储密度却在逐年改善。巨磁阻、垂直磁记录等一系列新技术的采用,不但大大提高了磁盘容量,也同时带来了更高的持续传输率。

    显然,I/O的粒度越大,传输时间在总时间中的比重就会越大,因而磁盘利用率和吞吐量就会越大。简单的估算结果如表1所示。如果进行大量4KB的随机I/O,那么磁盘在99%以上的时间内都在忙着定位,单个磁盘的吞吐量不到500KB/s。但是当I/O大小达到1MB的时候,吞吐量可接近50MB/s。由此可见,采用更大的I/O粒度,可以把磁盘的利用效率和吞吐量提高整整100倍。因而必须尽一切可能避免小尺寸I/O,这正是预读算法所要做的。

3、如类似视频这样的应用,内存盘其实不太现实,使用ssd成本又过高,一般是采用单台服务器挂大量硬盘,把IO分散到不同硬盘上来解决。每个硬盘都不做lvm或者riad,直接裸设备来跑
 
4、如果有钱的公司,可以在应用层面上做到冷热分离的话,可以冷片采用上述3的方法,而热片采用ssd存储,提高IO输出能力
阅读(3821) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~