AIX中的裸设备指的是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
在AIX里,每个LVM设备支持两种操作方式,分别被抽象为 Block Device (块设备)和 Character Device (字符设备),
其中Character Device 又被称为 Raw Device (原因往下看):
比如:
# ls -l /dev/*hdisk0
brw——- 1 root system 22, 2 May 15 2007 hdisk0
crw——- 2 root system 22, 2 May 15 2007 rhdisk0
# ls -l /dev/*hd3
brw-rw—- 1 root system 10, 7 May 15 2007 /dev/hd3
crw-rw—- 1 root system 10, 7 May 15 2007 /dev/rhd3
这里文件属性开头的'c'字母代表Character, 文件名开头的'r'字母代表Raw。
字符设备支持不定长的数据传输 (data transfers of arbitrary sizes),最小一个字节(但绝不是每次只能传一个字节或字符!),
LVM和存储设备的单次最大I/O只受 LTG (logical track group) 大小的限制,缺省为128KB,可修改。
块设备只能做定长的数据传输,数据必须经过 'kernel buffer cache'。
这个以512-byte block 为单位的buffer cache是传统的块设备的缓存,千万不要和文件系统的缓存混为一谈!!
这样的存取方式不仅效率低,而且带来诸多问题,严重影响大数据量传输的性能,
所以现代操作系统中几乎不用块设备的方式进行高速存储设备的数据存取。
数据库建议直接使用裸设备,意指避开文件系统和文件系统的缓存管理,直接和字符设备打交道。
(注意:文件系统一定是建在字符设备上的,不可能建到块设备上)
这样做的好处主要是三个:
1. 实现每个I/O的代码大大减少:filesystem 和 virtual memory for filesystem 的代码都规避了。
2. 避免了重复缓存造成的内存浪费(数据库和文件系统都有自己的数据缓存)。
3. 避免了文件锁的问题:文件系统里的文件不能同时被多个进程或线程更新。
坏处也有:
1. 失去了通过对普通文件进行管理的易用性。
2. 不能利用文件系统的 Readahead 的功能,顺序读的速度可能做不到最优
自从有了DIO和CIO之后,基于文件系统的数据库性能得以大大提高。
CIO是最接近与裸设备的一种基于文件系统的数据库运行方式,因为它解决了两个问题:
没有文件缓存(就是裸设备优势之2.);
没有文件锁(就是裸设备优势之3.)。
它保持了文件的可见性,所以不存在裸设备劣势之1。
当然DIO和CIO同样不支持Readahead。
综上所述:
+字符设备和块设备是对同一个物理设备的两种不同的存储方式的抽象。
+裸设备这个感念是针对其上有无文件系统来说的,和字符及块设备在概念上没有任何实质联系;
+块设备的block buffer机制和文件系统的缓存是两回事;
+块设备在现代操作系统中基本没有任何用途。
+数据库用裸设备或文件系统mount with CIO, 结合AIO (异步I/O),可以达到最佳I/O性能
(在AIX 新版本中raw LV 和 CIO FS 均支持 AIO Fast Path );
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/200162.html