blockdev --setra read ahead performance

以下CentOS 6.4 x64上的测试结果,

硬盘OCZ RevoDrive3 X2 240G

读取94393左右个数据块, 

在read ahead=256(默认)情况下的时间为2376毫秒左右. (当然还有除掉cpu tuples operator的时间, 这里不额外叙述, 只是表面read ahead的影响.)

在read ahead=0时, 时间为18773毫秒左右.

在read ahead=512时, 时间为2115毫秒左右.

在read ahead=1024时, 时间为2082毫秒左右.

一般情况下, 默认的设置256就差不多了, 无需多调.

每次查询前清理OS CACHE.
[root@db-172-16-3-150 ~]# sync
[root@db-172-16-3-150 ~]#  echo 3 > /proc/sys/vm/drop_caches

设置块设备read ahead
[root@db-172-16-3-150 ~]# blockdev --setra 512 /dev/sdb
[root@db-172-16-3-150 ~]# blockdev --setra 1024 /dev/sdb
...

digoal=# explain (analyze,verbose,costs,buffers,timing) select * from tbl_cost_align;
                                                               QUERY PLAN                                                           

------------------------------------------------------------------------------------------------------------------------------------
----
 Seq Scan on postgres.tbl_cost_align  (cost=0.00..195393.00 rows=10100000 width=45) (actual time=2.742..2115.588 rows=10100000 loops
=1)
   Output: id, info, crt_time
   Buffers: shared hit=256 read=94137
 Total runtime: 3148.863 ms
(4 rows)

-- 清理OS CACHE
digoal=# explain (analyze,verbose,costs,buffers,timing) select * from tbl_cost_align;
                                                               QUERY PLAN                                                           

------------------------------------------------------------------------------------------------------------------------------------
----
 Seq Scan on postgres.tbl_cost_align  (cost=0.00..195393.00 rows=10100000 width=45) (actual time=2.502..2082.989 rows=10100000 loops
=1)
   Output: id, info, crt_time
   Buffers: shared hit=288 read=94105
 Total runtime: 3103.415 ms
(4 rows)

-- 清理OS CACHE
digoal=# explain (analyze,verbose,costs,buffers,timing) select * from tbl_cost_align;
                                                               QUERY PLAN                                                           

------------------------------------------------------------------------------------------------------------------------------------
-----
 Seq Scan on postgres.tbl_cost_align  (cost=0.00..195393.00 rows=10100000 width=45) (actual time=0.652..18773.211 rows=10100000 loop
s=1)
   Output: id, info, crt_time
   Buffers: shared read=94393
 Total runtime: 19824.287 ms
(4 rows)
...

[参考]
1. http://unix.stackexchange.com/questions/71364/persistent-blockdev-setra-read-ahead-setting

2. man blockdev

BLOCKDEV(8)                                                        BLOCKDEV(8)

NAME
       blockdev - call block device ioctls from the command line

SYNOPSIS
       blockdev [options] commands devices
       blockdev --report [devices]

DESCRIPTION
       The utility blockdev allows one to call block device ioctls from the command line.

OPTIONS
       -V     Print version and exit.

       -q     Be quiet.

       -v     Be verbose.

       --report
              Print a report for devices.  Note that the partition StartSec is in 512-byte sectors.

COMMANDS
       --setro
              Set read-only.

       --setrw
              Set read-write.

       --getro
              Get read-only. Print 1 if the device is read-only, 0 otherwise.

       --getss
              Print sectorsize in bytes - usually 512.

       --getbsz
              Print blocksize in bytes.
       --setbsz N
              Set blocksize to N bytes.

       --getsize
              Print device size in sectors (BLKGETSIZE). Deprecated in favor of the --getsz option.

       --getsize64
              Print device size in bytes (BLKGETSIZE64)

       --getsz
              Get size in 512-byte sectors (BLKGETSIZE64 / 512).

       --setra N
              Set readahead to N 512-byte sectors.

       --getra
              Print readahead (in 512-byte sectors).

       --setfra N
              Set filesystem readahead (same like --setra on 2.6 kernels).

       --getfra
              Get filesystem readahead.

       --flushbufs
              Flush buffers.

       --rereadpt
              Reread partition table.

AUTHOR
       blockdev was written by Andries E. Brouwer.

AVAILABILITY
       The   blockdev   command   is   part  of  the  util-linux-ng  package  and  is  available  from  ftp://ftp.ker-
       nel.org/pub/linux/utils/util-linux-ng/.

                                   Jun 2007                        BLOCKDEV(8)
时间: 2024-11-03 04:59:17

blockdev --setra read ahead performance的相关文章

Linux性能优化之IO子系统介绍

本文的大部分内容来自 IBM Redbook - Linux Performance and Tuning Guidelines . FileSystem VFS(Virtual FileSystem) 虚拟文件系统 文件系统是内核的功能,是一种工作在内核空间的软件,访问一个文件必须需要文件系统的存在才可以.Linux 可以支持多达数十种不同的文件系统,它们的实现各不相同,因此 Linux 内核向用户空间提供了虚拟文件系统这个统一的接口用来对文件系统进行操作. 虚拟文件系统是位于用户空间进程和内

Linux内核的文件预读详解

  Linux文件预读算法磁盘I/O性能的发展远远滞后于CPU和内存,因而成为现代计算机系统的一个主要瓶颈.预读可以有效的减少磁盘的寻道次数和应用程序的I/O等待时间,是改进磁盘读I/O性能的重要优化手段之一.本文作者是中国科学技术大学自动化系的博士生,他在1998年开始学习Linux,为了优化服务器的性能,他开始尝试改进Linux kernel,并最终重写了内核的文件预读部分,这些改进被收录到Linux Kernel 2.6.23及其后续版本中. 从寄存器.L1/L2高速缓存.内存.闪存,到磁

PgSQL · 性能优化 · PostgreSQL TPC-C极限优化玩法

简介 本文以工业界测试模型TPC-C为测试模型,介绍PostgreSQL数据库从系统层面的优化到数据库层面的优化方法. TPmC从 256195.32 提升到 606466.31 是如何做到的. 测试环境介绍 16核开HT共32线程 256G 1600MHz 内存 万兆网卡 3 块 6.4TB AliFlash PCI-E SSD 逻辑卷条带 XFS 数据块对齐 XFS文件系统优化 主要分3块: 逻辑卷优化部分 XFS mkfs 优化部分 XFS mount 优化部分 以上几个部分都可以通过ma

Linux内核的文件预读readahead

Linux的文件预读readahead,指Linux系统内核将指定文件的某 区域预读进页缓存起来,便于接下来对该区域进行读取时,不会因缺页(page fault)而阻塞.因为从内存读取比从磁盘读取要快很多.预读可以有效的减少磁盘的寻道次数和应用程序的I/O等待时间,是改进磁盘读I/O性能的重要 优化手段之一. 维基百科上关于readhead的介绍资料: readahead is a system call of the Linux kernel that loads a file's conte

Linux IO 之 系统缓存(pdflush & dirty page) 及 扩展知识

[原文] http://www.phpfans.net/article/htmls/201010/MzEwNzAx.html 延伸阅读: cgroup限制用户IOPS,共用文件系统,引发的思考: http://blog.163.com/digoal@126/blog/static/163877040201571403648184/ 系统缓存相关的几个内核参数 (还有2个是指定bytes的,含义和ratio差不多): 1.         /proc/sys/vm/dirty_background

Linux Mint 18.2 安装与调整

安装系统 连接到wifi网络下再从U盘安装.会自动安装中文语言包 磁盘划分的时候开启 LVM 便于后期调整 U盘安装完以后重启系统 重启后关闭蓝牙接收以及任务栏图标 [开始菜单] - [系统管理] - [软件源] 调整镜像源(可以考虑使用阿里源.根据自己的测试结果综合选择,如果速度不慢的话 最好使用官方源) sudo apt update sudo apt install gedit unzip zip rar unrar axel git tlp 再使用[更新管理器] 安装更新补丁,更新完后重

pdflush机制

在做进程安全监控的时候,拍脑袋决定的,如果发现一个进程在D状态时,即TASK_UNINTERRUPTIBLE(不可中断的睡眠状态),时间超过了8min,就将系统panic掉.恰好DB组做日志时,将整个log缓存到内存中,最后刷磁盘,结果系统就D状态了很长时间,自然panic了,中间涉及到Linux的缓存写回刷磁盘的一些机制和调优方法,写一下总结. 目前机制需要将脏页刷回到磁盘一般是以下情况: 脏页缓存占用的内存太多,内存空间不足: 脏页已经更改了很长时间,时间上已经到了临界值,需要及时刷新保持内

Nginx下载服务生产服务器的调优

一.内存调优 内核关于内存的选项都在/proc/sys/vm目录下. 1.pdflush,用于回写内存中的脏数据到硬盘.可以通过 /proc/sys/vm/vm.dirty_background_ratio调整. 首先查看这个值默认应该是10. [root@esf ~]# cat /proc/sys/vm/dirty_background_ratio 10 这个值是一个阀值,说明如果内存中的脏数据达到系统总内存的10%时,那么pdflush进程就会启动,将内存中的脏数据写回硬盘.这个值可适当调高

Greenplum 扩展 segment个数

扩展Greenplum segment个数,总共分三步. 1. 将主机加入集群(如果在原有主机扩展,不需要这一步) 这一步主要做的是 环境配置,例如OS kernel 参数: 创建gp管理用户: ssh key的交换(使用gpssh-exkeys -e exist_hosts -x new_hosts): greenplum bin软件的拷贝: 规划segment 数据目录: 使用gpcheck检查 (gpcheck -f new_hosts ): 使用gpcheckperf检查性能 (gpch