为什么在虚拟化场场景下,在host内只能用direct io不能用buffer io?
2013-10-17 20:23
423 查看
在虚拟化场景下,从虚拟机来的io,首先被传输到存储后端,xen在dom0上,kvm在内核或者qemu上。 如果在后端走buffer io,则数据被写到page cache后就返回了,从虚拟机的角度来看,认为这个IO 已经被写到存储里去了,这时候如果掉电,虚拟机已经被写入的数据有可能被丢弃。这是不可接受的。 这和正在写时掉电IO 丢失是不同的。
如果你不理解在虚拟化场景下,存储后端不能使用buffer IO, 你看看SAN (包括IPSAN和FCSAN)的情况就明白了,一般SAN 支持write back和write through. write back就是对应buffer IO. 数据写到SAN 的cache后,就返回IO 写入成功。那这时候SAN 断电了呢,SAN 对cache 的内存都有断电保护,当SAN 断电时,启用专门保护SAN cache的电池,保证能把cache的数据写入到磁盘。 如果SAN 的电池老化后不能使用,则不能设置write
back,已经设置的也会变成write through.
如果你不理解在虚拟化场景下,存储后端不能使用buffer IO, 你看看SAN (包括IPSAN和FCSAN)的情况就明白了,一般SAN 支持write back和write through. write back就是对应buffer IO. 数据写到SAN 的cache后,就返回IO 写入成功。那这时候SAN 断电了呢,SAN 对cache 的内存都有断电保护,当SAN 断电时,启用专门保护SAN cache的电池,保证能把cache的数据写入到磁盘。 如果SAN 的电池老化后不能使用,则不能设置write
back,已经设置的也会变成write through.
相关文章推荐
- 为什么我设置的OUTLOOK,只能收邮件不能发邮件,改了以后不能收只能发为什么???
- Hazelcast为什么Executor的执行,只能在运行节点,而不能在其它节点显示运行?
- 为什么oracle中rownum只能小于,不能大于
- 多找方法, 少找借口, 总有人可以找到问题的解决办法, 为什么不能是你我呢?---不能抓日志场景下如何抓到日志?
- [DHTML]让人郁闷的mouse Capture,为什么总是只能执行一个事件,不能执行后续的事件?
- 为什么CheckBox只能控制Panel控件的显示,不能控制它的隐藏呢?
- 流运算符为什么不能重载为成员函数,只能用友元函数重载
- 为什么const对象只能调用const成员函数,而不能调用非const成员函数?
- 众数问题(为什么只能输入一组数据,不能输入m组数据)
- 为什么phpmyadmin数据库中只能插入数字,不能插入中英文
- 为什么在头文件中只能放声明不能放定义
- 笔记本重装系统后为什么右边键盘不能打字母只能打数字?
- 为什么只能重置密码不能找回密码?
- 为什么const对象只能调用const成员函数,而不能调用非const成员函数?
- OUTLOOK,只能收邮件不能发邮件,改了以后不能收只能发为什么???
- 关于监听的总结(监听配置里的host部分只能使用主机名吗,用IP地址或localhost不能正确启动监听程序吗?)
- Android 为什么我的PullListView只能向下滑动,不能向上滑动加载更多???
- 流运算符为什么不能重载为成员函数,只能用友元函数重载
- 使用ScrollView实现滚动效果 出现 ScrollView can host only one direct child (ScrollView只能包裹一个直接子元素)
- 为什么对于类的const成员,只能使用初始化列表,而不能在构造函数内部进行赋值操作