首页 > 学技术 > 技术网文 > 存储备份之家 > 正文

[精彩] 为什么裸设备要比文件系统慢


来源 chinaunix.net 酷勤网整理

EMC的盘阵,前端服务器HP UNIX,用dd测试,发现裸设备比文件系统要慢的多,不知是那里出来问题。



 cddai 回复于:2005-05-19 10:26:00

改一下DD的块大小试试


 wolfop 回复于:2005-05-19 17:08:45

dd的结果不能说明什么问题。


 fengwy 回复于:2005-05-23 10:53:26

引用:原帖由 "wolfop"]dd的结果不能说明什么问题。
 发表:


那用什么来测试?


 fengwy 回复于:2005-05-23 10:55:13

引用:原帖由 "cddai"]改一下DD的块大小试试
 发表:


DD块的大小也改过了,改大以后是有提高,但是同样的块大小还是没有文件系统块。


 j97104 回复于:2005-05-23 14:00:52

引用:原帖由 "fengwy" 发表:

DD块的大小也改过了,改大以后是有提高,但是同样的块大小还是没有文件系统块。



是不是拿Powerpath的设备来测试的?如果那样可能会有些问题的。


 livefordie 回复于:2005-05-23 15:20:16

引用:原帖由 "j97104" 发表:


是不是拿Powerpath的设备来测试的?如果那样可能会有些问题的。



此话怎讲?按道理PP具有MPIO的功能,在负载均衡的情况下通道带宽会更好一些,为什么反而有问题了呢?关注。
另外,文件系统利用大文件缓存的功能可以大幅提高I/O性能,所以一般都建议数据并不关键的临时表临时库设备都采用文件系统。


 halex1227 回复于:2005-05-23 17:01:02

i think the reason is filesystem has cache, and raw device does not have it.


 wolfop 回复于:2005-05-23 17:04:33

最好得方法用你得应用测试,通常都是数据库拉。


 老邱 回复于:2005-05-23 21:30:19

肯定dd的裸设备和文件系统是同一设备吗?都是通过powerpath的?


 fengwy 回复于:2005-05-26 09:37:58

引用:原帖由 "老邱"]肯定dd的裸设备和文件系统是同一设备吗?都是通过powerpath的?
 发表:


对都是EMC的盘阵,都是通过POWERPATH.
反复测试了好几遍,都是RAW不如文件系统,在IOSTAT中看到顶多是接近文件系统。


 fengwy 回复于:2005-05-26 09:43:56

引用:原帖由 "livefordie" 发表:


此话怎讲?按道理PP具有MPIO的功能,在负载均衡的情况下通道带宽会更好一些,为什么反而有问题了呢?关注。
另外,文件系统利用大文件缓存的功能可以大幅提高I/O性能,所以一般都建议数据并不关键的临时表临时库..........


我也是非常奇怪,按理来说裸设备开销要比文件系统少,怎么会有这么大的差距?至少也不应该比文件系统差,况且是EMC的高端东西。


 fengwy 回复于:2005-05-26 09:47:29

引用:原帖由 "halex1227"]i think the reason is filesystem has cache, and raw device does not have it.
 发表:


我每次测试都是用不同的的设备和文件系统,就是要尽量减少CACHE对测试的影响。


 fengwy 回复于:2005-05-26 09:50:54

引用:原帖由 "wolfop"]最好得方法用你得应用测试,通常都是数据库拉。
 发表:


就是应用发现的问题,然后才用DD测试。
文件系统的话,数据量大致相同的情况下,都用来作恢复测试,大致用时3小时左右,但时裸设备的话在18个小时左右。


 wolfop 回复于:2005-05-26 16:54:45

什么操作系统,你用的哪个/dev下面的设备?


 halex1227 回复于:2005-05-27 00:08:05

问题在主机方面,当通过操作系统文件系统访问时文件系统会产生一定的缓冲区,存储设备数据写入文件系统缓冲就认为写完了,所以相应能力会感觉快一些,如果使用RAW的话都是不经过文件系统缓冲直接写入存储设备的,当然响应不如文件系统快了,但是数据库用文件系统作为数据库数据设备是有一定风险的,还是建议使用raw设备损失一点性能但可以提高安全性。


 fengwy 回复于:2005-05-27 09:22:39

引用:原帖由 "wolfop"]什么操作系统,你用的哪个/dev下面的设备?
 发表:


hp的操作系统,dd的时候当然时emc的设备了。


 fengwy 回复于:2005-05-27 12:58:54

引用:原帖由 "halex1227"]问题在主机方面,当通过操作系统文件系统访问时文件系统会产生一定的缓冲区,存储设备数据写入文件系统缓冲就认为写完了,所以相应能力会感觉快一些,如果使用RAW的话都是不经过文件系统缓冲直接写入存储设备的,当?.........
 发表:


在主机方面也测试过了,在本地磁盘测试,裸设备的性能要比文件系统要好。


 fengwy 回复于:2005-05-27 13:19:20

引用:原帖由 "halex1227"]但是数据库用文件系统作为数据库数据设备是有一定风险的,还是建议使用raw设备损失一点性能但可以提高安全性。
 发表:


这个不知你是如何认为的,在数据库用文件系统为什么会有风险呢?什么风险?
而且“使用raw设备损失一点性能但可以提高安全性”这句话不知怎么解释?


 wolfop 回复于:2005-05-27 13:56:13

引用:原帖由 "fengwy" 发表:

hp的操作系统,dd的时候当然时emc的设备了。


具体的设备路径?


 wind521 回复于:2005-05-27 15:33:23

dd的测试有的时候有问题


 fengwy 回复于:2005-05-27 17:12:42

引用:原帖由 "wolfop" 发表:

具体的设备路径?


/dev/vgpc/rlv001
这有关系吗?


 gunguymadman 回复于:2005-05-27 17:26:06

halex1227  说的对     缓冲有很大关系


 halex1227 回复于:2005-05-27 22:23:17

引用:原帖由 "fengwy" 发表:

这个不知你是如何认为的,在数据库用文件系统为什么会有风险呢?什么风险?
而且“使用raw设备损失一点性能但可以提高安全性”这句话不知怎么解释?



数据库使用文件系统作为数据设备的风险在于:
当系统突然掉电时,文件系统缓冲中会有一些数据并未写入相应磁盘中,但是数据库已经认为写入数据完成造成数据不一致。
使用RAW设备时,每一次数据库写入数据都真实的写在相应磁盘中不存在数据不一致的可能,应为若写入失败,数据库也不会认为写入成功。


 netzh 回复于:2005-05-28 01:04:17

dd 测试文件系统肯定会比raw设备快,因为文件系统有缓冲区而raw没有,正因为如此raw设备对数据库而言性能不会比文件系统慢。
首先,如果数据库使用文件系统的话1个IO写操作需要这么一个过程:
IO write==>;database buffer==>;file system buffer ==>;array controller cache==>;hard disk
最后看看用raw设备需要的过程
IO write==>;database buffer==>;array controller cache==>;hard disk
这样开销就降低了很多,而且可以空出来更多的free memory给数据库使用,这又能大大增加database buffer的命中率。
而且确实用文件系统有数据不一致的风险,虽然很多高级文件系统都有自己的日志,但这仍是一种风险。


 fengwy 回复于:2005-05-28 18:58:35

引用:原帖由 "halex1227" 发表:


数据库使用文件系统作为数据设备的风险在于:
当系统突然掉电时,文件系统缓冲中会有一些数据并未写入相应磁盘中,但是数据库已经认为写入数据完成造成数据不一致。
使用RAW设备时,每一次数据库写入数据都真实..........


如果从数据一致性来考虑的话,我觉得这和文件系统和裸设备关系都不大,因为数据库在处理这些东西有自己的方法,在写到磁盘上之前,数据库的日志写进程首先要一定写到自己的日志里,这一步是同步的,所以不要从这个方面考虑文件系统没有裸设备安全,而且我觉得可能文件系统会更好一些,因为文件系统还要有日志的保护。


 fengwy 回复于:2005-05-28 19:04:07

dd 测试文件系统肯定会比raw设备快,因为文件系统有缓冲区而raw没有,正因为如此raw设备对数据库而言性能不会比文件系统慢。 
-------------------------------
那本地硬盘的测试为什么裸设备要比文件系统快?


 cws_79 回复于:2005-05-28 23:08:10

文件系统通常会利用操作系统提供的读写缓存,等于有了二级缓存,自然会比裸设备快。


 fengwy 回复于:2005-05-28 23:33:28

引用:原帖由 "cws_79"]文件系统通常会利用操作系统提供的读写缓存,等于有了二级缓存,自然会比裸设备快。
 发表:


裸设备不经过文件系统的缓存为什么要比文件系统慢?


 fengwy 回复于:2005-05-29 01:02:07

首先,如果数据库使用文件系统的话1个IO写操作需要这么一个过程: 
IO write==>;database buffer==>;file system buffer ==>;array controller cache==>;hard disk 
最后看看用raw设备需要的过程 
IO write==>;database buffer==>;array controller cache==>;hard disk 
这样开销就降低了很多,而且可以空出来更多的free memory给数据库使用,这又能大大增加database buffer的命中率。 
------------------------------
这个没问题
agree


 jebtang 回复于:2005-05-29 10:00:47

引用:原帖由 "fengwy" 发表:

裸设备不经过文件系统的缓存为什么要比文件系统慢?



还是把你dd的命令协出来把。

我一般就是dd if=/dev/sda1 of=/dev/zero bs=4096 count=1000000

至少要比内存大才有意义。


 nntp 回复于:2005-05-30 18:58:08

晕, jeb 你咋在呢?  :")

顶楼的把在柜子上和在本地硬盘上对raw设备的dd测试命令写全了在这里

注意LVM !


 ljh1405 回复于:2005-05-31 22:47:15

这种情况我们也遇到过
情况是这样的:
如果你先把裸设备格式化好了,然后用dd对这这个裸设备或者文件系统测试,如果测试的的时候选择的block大小和文件系统在格式化这个裸设备时候所默认的block大小之间没有严格的比例关系就会出现这个问题.
是因为裸设备已经备格式化成了一个个block,如果用dd对这裸设备写的时候不按照文件系统block大小或者文件系统block大小的倍数写的话,那很可能就造成了文件系统block浪费,比如dd的时候用的大小是4098,比文件系统的4096多了2b,但是这2b对于已经格式话好的文件系统来说就又占用了一个新的4096的block,也就是对着文件系统写了2个block,这样算下来对这裸设备写可能要比对这文件系统写要慢.


 狡兔 回复于:2005-06-02 00:09:18

dd读的话,和文件系统缓存有什么关系,顺序读,不重复,缓存没有意义啊


 fengwy 回复于:2005-06-02 08:49:05

我用的测试命令:
dd if=/dev/vgxx/rlvxx of=/dev/null bs=4096 count=1000000
其中BS指定了若干值,最大给到8M


 fengwy 回复于:2005-06-02 08:56:47

引用:原帖由 "jebtang" 发表:


至少要比内存大才有意义。


为什么至少要比内存大才有意义?


 fengwy 回复于:2005-06-02 09:12:47

引用:原帖由 "ljh1405" 发表:
这种情况我们也遇到过
情况是这样的:
如果你先把裸设备格式化好了,然后用dd对这这个裸设备或者文件系统测试,如果测试的的时候选择的block大小和文件系统在格式化这个裸设备时候所默认的block大小之间没有严格的比?.........


我用的都是512的整数倍呀,这种情况应该排除了。


 ljh1405 回复于:2005-06-02 15:40:57

很有可能是这样的情况,裸设备的驱动根本不如文件系统驱动好.


 fengwy 回复于:2005-06-03 10:06:13

引用:原帖由 "ljh1405"]很有可能是这样的情况,裸设备的驱动根本不如文件系统驱动好.
 发表:


裸设备的驱动?文件系统的驱动?
能否详细解释一下


 ljh1405 回复于:2005-06-03 10:17:08

文件系统一方面是为了管理方便,另外一方面是为了最大的调度io资源.
当使用了文件系统以后会有很多好处,虽然多了一层处理,但是同样也多了很多裸设备所没有的好处,比如有自己的预读写机制,自己的缓存机制,这样也可能导致了很多时候文件系统的使用效率比裸设备好


 fengwy 回复于:2005-06-03 11:08:34

引用:原帖由 "ljh1405" 发表:
文件系统一方面是为了管理方便,另外一方面是为了最大的调度io资源.
当使用了文件系统以后会有很多好处,虽然多了一层处理,但是同样也多了很多裸设备所没有的好处,比如有自己的预读写机制,自己的缓存机制,这样也可能?.........


但是在本地的测试,都是用的本机硬盘,为什么裸设备要强于文件系统?


 jiangzx 回复于:2005-06-03 13:59:56

确定EMC的各个cache设定正常吗


 fengwy 回复于:2005-06-04 15:44:41

引用:原帖由 "jiangzx"]确定EMC的各个cache设定正常吗
 发表:


需要怎么设定


 unix007 回复于:2005-06-14 23:04:29

呵呵,这个问题有点意思。
实际上,块设备肯定比字符设备(raw设备)要快,因为两者的读写机制不同:块设备是以block来读写,字符是以一个Byte来读写的。
至于你的本地raw比block要快,可能是 连接EMC的adapter的CPU要比 连接本地的硬盘的adapter 的cpu 要慢点。
在做数据库方面,我建议用块文件,速度快至少2~3倍,不论数据库在本地还是在盘柜上。


 mrharong 回复于:2005-06-17 18:54:19

DBMS 基于raw采用高速缓冲对数据处理专用,比OS调用快!单纯的dd测试罗设备当然慢了,这个问题很多人都在莫名其妙地讨论,我觉得是忽略了很多必要的统一前提条件,扯淡了。


 fengwy 回复于:2005-06-20 09:03:50

引用:原帖由 "unix007" 发表:
呵呵,这个问题有点意思。
实际上,块设备肯定比字符设备(raw设备)要快,因为两者的读写机制不同:块设备是以block来读写,字符是以一个Byte来读写的。
至于你的本地raw比block要快,可能是 连接EMC的adapter的CPU?.........


虽然块设备是一block来读写,裸设备是以byte来读写,但是读取同样大小的数据,io的次数裸设备要比块设备少的多


 fengwy 回复于:2005-06-20 13:43:42

引用:原帖由 "mrharong"]DBMS 基于raw采用高速缓冲对数据处理专用,比OS调用快!单纯的dd测试罗设备当然慢了,这个问题很多人都在莫名其妙地讨论,我觉得是忽略了很多必要的统一前提条件,扯淡了。
 发表:


单纯dd测试裸设备为什么慢了?


 unix007 回复于:2005-06-22 10:55:56

引用:原帖由 "fengwy" 发表:

虽然块设备是一block来读写,裸设备是以byte来读写,但是读取同样大小的数据,io的次数裸设备要比块设备少的多



不知道你说的io次数要比块设备少得多,是如何得来的?
据我的了解,unix操作系统里面对block的读写,一次性会将block及block附近的块都读出来。
而字符设备就不会。


 fengwy 回复于:2005-06-28 13:55:50

引用:原帖由 "unix007" 发表:


不知道你说的io次数要比块设备少得多,是如何得来的?
据我的了解,unix操作系统里面对block的读写,一次性会将block及block附近的块都读出来。
而字符设备就不会。


IO次数,找本操作系统的课本,上面都有介绍,否则数据库干吗还用裸设备。
块设备确实有预读的功能,这一点不可否定。


 csfeng 回复于:2005-07-06 10:30:52

还是疑惑


 unix007 回复于:2005-07-07 20:44:05

引用:原帖由 "fengwy" 发表:

IO次数,找本操作系统的课本,上面都有介绍,否则数据库干吗还用裸设备。
块设备确实有预读的功能,这一点不可否定。



数据库用raw设备,只是可靠性比文件系统高一些而已,并不是io次数少。
而且有的数据库采用文件系统会比raw设备更加快,快好几倍,如sybase。


 jackylau 回复于:2005-07-20 17:07:11

我认为裸设备还有一点好处,就是在建表空间是,一下可以建个几十G,但文件系统就不行了吧?


 大山 回复于:2005-07-20 17:26:55

这就对了,现在裸设备已经没有任何优势了!!




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=547312
转载请注明作者名及原文出处



收藏本页到: