btrfs cfq, noop, deadline三种IO调度策略下的IO性能表现

简介:
btrfs 格式化和挂载参数:
# mkfs.btrfs -m raid10 -d raid10 -n 4096 -f /dev/sdb /dev/sdc /dev/sdd /dev/sde
# mount -o noatime,nodiratime,ssd_spread,discard,space_cache /dev/sdb /data01

从结果来看,建议使用deadline。

测试结果:
[root@digoal data01]# echo noop > /sys/block/sdb/queue/scheduler 
[root@digoal data01]# echo noop > /sys/block/sdc/queue/scheduler 
[root@digoal data01]# echo noop > /sys/block/sdd/queue/scheduler 
[root@digoal data01]# echo noop > /sys/block/sde/queue/scheduler
                                                              random    random     bkwd    record    stride                                    
              kB  reclen    write  rewrite    read    reread    read     write     read   rewrite      read   fwrite frewrite    fread  freread
         2097152      32    77720    77709   159983   159439    72330    70935    77846     64188     75000   854586   902220  7489696  7600964
         2097152      64   104428   106089   366463   368877   113952   110715   105357     66938    107051   876465   910270  6748265  8533791
         2097152     128   107704   109132   417146   437318   181536   117572   184871    116503    173504   891273   910735  7083844  7465699
         2097152     256   127308   127662   476936   478925   235094   126306   240252     66889    235473   890735   812143  6920494  7527925
         2097152     512   146141   147122   478253   476208   301315   131230   295966    115434    303665   884662   906913  7406058  6196435
         2097152    1024   147223   151444   451993   450326   329316   136489   321772    159823    313979   870263   888099  6985407  7544033
         2097152    2048   164547   162438   442901   441851   360306   153920   353463    160712    366146   879602   933799  5629273  5824271
         2097152    4096   171985   174225   425775   439573   392926   164443   403381    172532    379402   858670   913175  4698700  5271105
         2097152    8192   190121   187834   454027   449194   422420   171070   396334    184075    407093   863424   894932  4980056  5343132
         2097152   16384   196351   194956   435803   448469   438458   178073   407322    196700    424138   877813   906542  5018610  5129252

[root@digoal data01]# echo cfq > /sys/block/sdb/queue/scheduler 
[root@digoal data01]# echo cfq > /sys/block/sdc/queue/scheduler 
[root@digoal data01]# echo cfq > /sys/block/sdd/queue/scheduler 
[root@digoal data01]# echo cfq > /sys/block/sde/queue/scheduler
                                                              random    random     bkwd    record    stride                                    
              kB  reclen    write  rewrite    read    reread    read     write     read   rewrite      read   fwrite frewrite    fread  freread
         2097152      32    76377    74073   176852   173711    73787    71035    72462     82506     75436   855067   862604  8392099  8536847
         2097152      64   118443   112069   362156   365841   108131   115517   106261    106888    107198   875728   870956  8345543  9060610
         2097152     128   108947   105955   438897   422408   180859   107215   181540    112327    179464   871145   727476  7369672  8227769
         2097152     256   117518   119458   477368   479421   227802   117237   230453     70101    223893   885953   861748  6833536  7385041
         2097152     512   137452   142118   468122   457083   292588   141234   294708    115448    289653   882885   852336  7254241  7617057
         2097152    1024   146782   147708   450453   456297   325155   139924   303286    154319    313172   865120   892726  6888216  6888939
         2097152    2048   164938   157667   460494   441980   353312   151031   349135    152418    351972   855243   875387  5648743  6312290
         2097152    4096   170055   165014   405079   410577   376776   162120   385417    167159    340488   841613   890966  4832346  4476693
         2097152    8192   188404   179583   414861   420485   359677   169331   392425    188238    369951   834353   839714  4510701  4163766
         2097152   16384   189633   186795   409104   404502   392445   178677   398647    195776    383146   877292   880568  5164979  5244586

[root@digoal data01]# echo deadline > /sys/block/sdb/queue/scheduler 
[root@digoal data01]# echo deadline > /sys/block/sdc/queue/scheduler 
[root@digoal data01]# echo deadline > /sys/block/sdd/queue/scheduler 
[root@digoal data01]# echo deadline > /sys/block/sde/queue/scheduler
                                                              random    random     bkwd    record    stride                                    
              kB  reclen    write  rewrite    read    reread    read     write     read   rewrite      read   fwrite frewrite    fread  freread
         2097152      32    76297    76606   178461   179875    73916    69297    76670     68967     76358   878081   894038  7831190  8524173
         2097152      64   109962   117287   374097   377030   111773   115772   112564    113903    109150   862310   910522  7558613  8480125
         2097152     128   109667   109676   422206   418074   173976   109262   176331    109806    162484   891411   916651  7289953  7381088
         2097152     256   119929   120698   435433   444379   215671   113361   227020     67289    233705   891307   857827  7031756  7217077
         2097152     512   150384   139186   459279   447765   295988   131709   292982    113496    271109   881912   887563  6786156  7488542
         2097152    1024   149161   143798   452386   451975   329657   140954   324087    153979    306680   875291   893943  5424631  5784479
         2097152    2048   160770   162023   444445   448918   363688   150719   342115    160651    346611   859319   875966  5287293  6258249
         2097152    4096   179407   173476   423748   434952   397429   163437   394059    175363    401404   861316   885105  4928385  5440945
         2097152    8192   184741   187554   441951   448512   417487   172784   406814    190259    418868   870022   888991  5025779  5308948
         2097152   16384   191530   193142   429578   445846   440323   178951   434807    186504    417491   878968   886187  4908488  4978142


附录:
IO调度器的总体目标是希望让磁头能够总是往一个方向移动,移动到底了再往反方向走,这恰恰就是现实生活中的电梯模型,所以IO调度器也被叫做电梯. (elevator)而相应的算法也就被叫做电梯算法.而Linux中IO调度的电梯算法有好几种,一个叫做as(Anticipatory),一个叫做 cfq(Complete Fairness Queueing),一个叫做deadline,还有一个叫做noop(No Operation).具体使用哪种算法我们可以在启动的时候通过内核参数elevator来指定.

一)I/O调度的4种算法
1)CFQ(完全公平排队I/O调度程序)
特点:
在最新的内核版本和发行版中,都选择CFQ做为默认的I/O调度器,对于通用的服务器也是最好的选择.
CFQ试图均匀地分布对I/O带宽的访问,避免进程被饿死并实现较低的延迟,是deadline和as调度器的折中.
CFQ对于多媒体应用(video,audio)和桌面系统是最好的选择.
CFQ赋予I/O请求一个优先级,而I/O优先级请求独立于进程优先级,高优先级的进程的读写不能自动地继承高的I/O优先级.

工作原理:
CFQ为每个进程/线程,单独创建一个队列来管理该进程所产生的请求,也就是说每个进程一个队列,各队列之间的调度使用时间片来调度,
以此来保证每个进程都能被很好的分配到I/O带宽.I/O调度器每次执行一个进程的4次请求.

2)NOOP(电梯式调度程序)
特点:
在Linux2.4或更早的版本的调度程序,那时只有这一种I/O调度算法.
NOOP实现了一个简单的FIFO队列,它像电梯的工作主法一样对I/O请求进行组织,当有一个新的请求到来时,它将请求合并到最近的请求之后,以此来保证请求同一介质.
NOOP倾向饿死读而利于写.
NOOP对于闪存设备,RAM,嵌入式系统是最好的选择.
电梯算法饿死读请求的解释:
因为写请求比读请求更容易.
写请求通过文件系统cache,不需要等一次写完成,就可以开始下一次写操作,写请求通过合并,堆积到I/O队列中.
读请求需要等到它前面所有的读操作完成,才能进行下一次读操作.在读操作之间有几毫秒时间,而写请求在这之间就到来,饿死了后面的读请求.
3)Deadline(截止时间调度程序)
特点:
通过时间以及硬盘区域进行分类,这个分类和合并要求类似于noop的调度程序.
Deadline确保了在一个截止时间内服务请求,这个截止时间是可调整的,而默认读期限短于写期限.这样就防止了写操作因为不能被读取而饿死的现象.
Deadline对数据库环境(ORACLE RAC,MYSQL等)是最好的选择.

4)AS(预料I/O调度程序)
特点:
本质上与Deadline一样,但在最后一次读操作后,要等待6ms,才能继续进行对其它I/O请求进行调度.
可以从应用程序中预订一个新的读请求,改进读操作的执行,但以一些写操作为代价.
它会在每个6ms中插入新的I/O操作,而会将一些小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量.
AS适合于写入较多的环境,比如文件服务器
AS对数据库环境表现很差.
查看当前系统支持的IO调度算法
dmesg | grep -i scheduler
[root@localhost ~]# dmesg | grep -i scheduler
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
查看当前系统的I/O调度方法:
cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
临地更改I/O调度方法:
例如:想更改到noop电梯调度算法:
echo noop > /sys/block/sda/queue/scheduler
想永久的更改I/O调度方法:
修改内核引导参数,加入elevator=调度程序名
vi /boot/grub/menu.lst
更改到如下内容:
kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet

重启之后,查看调度方法:
cat /sys/block/sda/queue/scheduler
noop anticipatory [deadline] cfq
已经是deadline了
目录
相关文章
|
6月前
|
缓存 监控 IDE
linux如何查看io性能
linux如何查看io性能
113 0
|
29天前
|
存储 缓存 算法
如何优化阻塞IO的性能?
【10月更文挑战第6天】如何优化阻塞IO的性能?
31 5
|
30天前
|
存储 算法 固态存储
IO调度算法
【10月更文挑战第5天】IO调度算法
35 3
|
7天前
|
存储 弹性计算 固态存储
阿里云服务器ESSD Entry系统盘测评IOPS、IO读写和时延性能参数
ESSD Entry云盘是阿里云推出的新一代云盘,具备高IOPS、低延迟和企业级数据保护能力。适用于开发与测试场景,支持按量付费和包年包月计费模式。99元和199元的ECS经济型e实例和通用算力型u1实例均采用ESSD Entry系统盘,性价比高。详细性能参数和价格请参考阿里云官方页面。
37 0
|
30天前
|
存储 算法 固态存储
IO调度算法
【10月更文挑战第5天】IO调度算法
38 2
|
2月前
|
算法 Java 程序员
解锁Python高效之道:并发与异步在IO与CPU密集型任务中的精准打击策略!
在数据驱动时代,高效处理大规模数据和高并发请求至关重要。Python凭借其优雅的语法和强大的库支持,成为开发者首选。本文将介绍Python中的并发与异步编程,涵盖并发与异步的基本概念、IO密集型任务的并发策略、CPU密集型任务的并发策略以及异步IO的应用。通过具体示例,展示如何使用`concurrent.futures`、`asyncio`和`multiprocessing`等库提升程序性能,帮助开发者构建高效、可扩展的应用程序。
83 0
|
3月前
|
存储 Java 数据库连接
BIO阻塞IO流与数据存储大揭秘:性能与资源消耗,一文让你彻底解锁!
【8月更文挑战第25天】本文探讨了Java中BIO阻塞IO流与数据存储的概念及其实现。BIO作为一种传统IO模型,在处理每个客户端请求时需创建新线程并等待响应,这在并发量大时会导致性能下降和高资源消耗。示例代码展示了如何利用`ServerSocket`实现基于BIO的简单服务器。此外,文章还介绍了数据存储的基本方法,例如通过`BufferedWriter`向文件写入数据。两者对比显示,BIO适合连接数稳定的场景,而数据存储则适用于需要持久化保存信息的情况。通过这些分析和实例,希望能帮助读者更好地掌握这两种技术的应用场景及其优缺点。
43 0
|
3月前
|
C# 开发者 设计模式
WPF开发者必读:命令模式应用秘籍,轻松简化UI与业务逻辑交互,让你的代码更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,命令模式是简化UI与业务逻辑交互的关键技术,通过将请求封装为对象,实现UI操作与业务逻辑分离,便于代码维护与扩展。本文介绍命令模式的概念及实现方法,包括使用`ICommand`接口、`RelayCommand`类及自定义命令等方式,并提供示例代码展示如何在项目中应用命令模式。
47 0
|
4月前
|
算法 Java 程序员
解锁Python高效之道:并发与异步在IO与CPU密集型任务中的精准打击策略!
【7月更文挑战第17天】在数据驱动时代,Python凭借其优雅语法和强大库支持成为并发处理大规模数据的首选。并发与异步编程是关键,包括多线程、多进程和异步IO。对于IO密集型任务,如网络请求,可使用`concurrent.futures`和`asyncio`;CPU密集型任务则推荐多进程,如`multiprocessing`;`asyncio`适用于混合任务,实现等待IO时执行CPU任务。通过这些工具,开发者能有效优化资源,提升系统性能。
89 4
|
4月前
|
分布式计算 并行计算 Java
Python并发风暴来袭!IO密集型与CPU密集型任务并发策略大比拼,你站哪队?
【7月更文挑战第17天】Python并发处理IO密集型(如网络请求)与CPU密集型(如数学计算)任务。IO密集型适合多线程和异步IO,如`ThreadPoolExecutor`进行网页下载;CPU密集型推荐多进程,如`multiprocessing`模块进行并行计算。选择取决于任务类型,理解任务特性是关键,以实现最佳效率。
62 4