admin管理员组文章数量:1565258
一次在启动虚拟机的时候,发现有如下提示,drive cache: write through. 这究竟是什么意思呢?
Write-Through 模式:
1. DB向Cell发送一个写请求, cellsrv进行验证确认其请求有效;
2. cellsrv将发送指令将其写入到物理磁盘;
3. 写完成以后,给DB确认已经写成功;
4. cellsrv判断次数据是否适合缓存到cache中,如果满足条件则缓存,否则不缓存。
Write-Back 模式:
1. DB向Cell发送一个写请求, cellsrv进行验证确认其请求有效;
2. cellsrv将发送指令将其写入到磁盘Cache;
3. 将此数据的状态置为dirty的状态。(直到下次临界条件将脏数据刷新到磁盘,并判断此数据是否适合缓存,如果不适合,刷新完成以后会丢弃,刷新和缓存过程是异步的,并不在步骤3来完成)
4. 写完成以后,给DB确认已经写成功;
应用使用缓存作为主要的数据存储,将数据读写到缓存中,而缓存负责从数据库中读写数据。
应用向缓存中添加/更新数据
缓存同步地写入数据存储
返回所需内容
应用代码:
set_user(12345, {"foo":"bar"})
缓存代码:
def set_user(user_id, values):
user = db.query("UPDATE Users WHERE id = {0}", user_id, values)
cache.set(user_id, user)
由于存写操作所以直写模式整体是一种很慢的操作,但是读取刚写入的数据很快。相比读取数据,用户通常比较能接受更新数据时速度较慢。缓存中的数据不会过时。
直写模式的缺点:
由于故障或者缩放而创建的新的节点,新的节点不会缓存,直到数据库更新为止。缓存应用直写模式可以缓解这个问题。
写入的大多数数据可能永远都不会被读取,用 TTL 可以最小化这种情况的出现。
Write-Back 模式明显更高效,因为写数据到cache的速度比写到物理磁盘速度要快几个数量级。但是cache属于挥发性设备,无法持久的保存数据,所以需要磁盘控制器/Flash卡有独立的电源模块作为驱动将cache中的数据写回到磁盘。如果没有电源模块,则原本保存在cache中的数据并无法保障总能成功写入到磁盘,如果这个时候主机发生掉电,则可能造成数据不一致。为了保证数据的一致性,如果磁盘控制器或者flash卡的电量不足,则会自动从write-back模式转到write through 模式, 进而对系统的I/O造成影响。在exadata中可以使用exachk工具来检查,以下是Exachk中磁盘raid控制器电池不足导致自动切换到write-through的告警。
实际上可以在BIOS中强行修改磁盘控制器的wirte-back或者write-through模式,但是为了保证数据的一致性,我们并不建议这么做。如果出现了以上问题,正确的做法应该是开一个sr,上传对应的exachk报告要求更换电池。
在回写模式中,应用执行以下操作:
在缓存中增加或者更新条目
异步写入数据,提高写入性能。
回写模式的缺点:
缓存可能在其内容成功存储之前丢失数据。
执行直写模式比缓存或者回写模式更复杂。
版权声明:本文标题:Linux write through 和write back 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1725805650a1043997.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论