NFS缓存IO机制
NFS的缓存IO机制
<一> async 参数模式下分析
NFS 默认的mount参数为async,async 参数表示内核不会透传程序的IO请求给sever,对于写IO会延迟执行,积累一定的时间以便合并上层的IO请求以提高效率。
读分析
1: 顺序读请求的合并预读
dd if=/mnt/nfs/3 of=/dev/null bs=1500 count=100
测试发现仅仅发送了6个read请求 16384 + 32768 * 4 + 2544 =150000,并且其中后5个请求是连续发送的。
2:随机读读惩罚
随机读情况下,由于都有预读,所有每次预读都会多读一部分数据,导致可能实际使用的数据量不到接受到数据的10分之一,称为读惩罚。
写分析
1:追加写
dd if=/dev/zero of=/mnt/nfs/ddtest bs=1 count=100
dd将已经存在的文件的size(SETATTR)设置为0,然后从头开始追加写入这个文件,每次写1B,写100次。但是内核并没有像NFS服务器发送100次写,实际上指发送了一次写。
2:覆盖写
连续覆盖写:内核行为和追加写一样,内核对写操作进行了合并。
随机覆盖小:随机模式下,内核无法对写进行合并,直接完全透传用户程序发起的I/O。
<二> sync参数模式下的分析
读分析
1:如果mount的时候选用sync参数,或者如果上层使用 sync 调用,那么其产生的读I/O一定在内核处也是同步的,因为只有在前一个读请求数据成功返回给客户端程序,客户端程序才会发起下一个读请求,(对于异步读调用,内核可以在短时间内接受到多个读请求,此时内核可以将这些读请求合并,这就是异步过程)。但是同步读并不影响nfs的预读,比如
dd if=/mnt/nfs/ddtest bs=1 count=150,并不是向server发送150个一次1B的请求,而是根据rsize进行预读,把150B的数据一次性读回来,其他159次就直接命中缓存了。
写分析
1:对于sync同步的写调用,程序只有在第一个写调用结束之后才会发起下一个写。
dd if=/dev/zero of=/mnt/nfs/ddtest bs=1 count=1500 (1B为单位的写操作),那么就是发送150个write请求,效率非常低下。
注意:DIO模式由于每次都绕过了内核的pagecache ,所以每一个请求都会向服务端发起请求,不会进行预读,异步写,写合并,读合并等策略。
https://blog.csdn.net/ta_nk/article/details/7172845
NFS缓存IO机制的更多相关文章
- Linux的io机制
Linux的io机制 Buffered-IO 和Direct-IO Linux磁盘I/O分为Buffered IO和Direct IO,这两者有何区别呢? 对于Buffered IO: 当应用程序尝试 ...
- 磁盘IO:缓存IO与直接IO
文件系统IO分为DirectIO和BufferIO,其中BufferIO也叫Normal IO. 1. 缓存IO 缓存I/O又被称作标准I/O,大多数文件系统的默认I/O操作都是缓存I/O.在Linu ...
- Linux framebuffer deferred io机制
一.总体框架 deferred io机制主要用于驱动没有实现自刷新同时应用层又不想调用FBIOPAN_DISPLAY的一个折中方案, 使用ioctrl FBIOPAN_DISPLAY好处是节能, 驱 ...
- 使用Spring提供的缓存抽象机制整合EHCache为项目提供二级缓存
Spring自身并没有实现缓存解决方案,但是对缓存管理功能提供了声明式的支持,能够与多种流行的缓存实现进行集成. Spring Cache是作用在方法上的(不能理解为只注解在方法上),其核心思想是 ...
- 艺多不压身 -- 常用缓存Cache机制的实现
常用缓存Cache机制的实现 缓存,就是将程序或系统经常要调用的对象存在内存中,以便其使用时可以快速调用,不必再去创建新的重复的实例. 这样做可以减少系统开销,提高系统效率. 缓存主要可分为二大类: ...
- Linux framebuffer deferred io机制【转】
转自:https://www.cnblogs.com/vedic/p/10722514.html 一.总体框架 deferred io机制主要用于驱动没有实现自刷新同时应用层又不想调用FBIOPAN_ ...
- Redis 缓存失效机制
Redis缓存失效的故事要从EXPIRE这个命令说起,EXPIRE允许用户为某个key指定超时时间,当超过这个时间之后key对应的值会被清除,这篇文章主要在分析Redis源码的基础上站在Redis设计 ...
- Redis 的缓存淘汰机制(Eviction)
本文从源码层面分析了 redis 的缓存淘汰机制,并在文章末尾描述使用 Java 实现的思路,以供参考. 相关配置 为了适配用作缓存的场景,redis 支持缓存淘汰(eviction)并提供相应的了配 ...
- Mybatis缓存处理机制
一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Se ...
随机推荐
- Unity脚本引用原理,修复Unity脚本引用丢失,源码脚本与dll中的脚本引用互换 .
http://blog.csdn.net/gz_huangzl/article/details/52486509 前言 在我们开发游戏的过程中,经常会碰到脚本引用丢失的情况,但是怎么把它们修复到我们的 ...
- Web项目开发介绍及实战项目介绍
引言 本系列课程我们将学些Golang语言中的Web开发框架Iris的相关知识和用法.通过本系列视频课程,大家能够从零到一经历一个完整项目的开发,并在课程中了解实战项目开发的流程和项目设涉及的各个模块 ...
- linux mysql 简单记录
mysql 1.linux下启动mysql的命令:mysqladmin start/ect/init.d/mysql start (前面为mysql的安装路径) 2.linux下重启mysql的命令: ...
- 洛谷P2134 百日旅行
P2134 百日旅行 题目背景 重要的不是去哪里,而是和你在一起.——小红 对小明和小红来说,2014年7月29日是一个美好的日子.这一天是他们相识100天的纪念日. (小明:小红,感谢你2场大考时默 ...
- Oracle树查询总结
最近在做公司的项目中遇到一个问题,多级级联导航菜单,虽然只有三级目录,但<li>中嵌套<ul>,数据库表结构如下: CREATE TABLE FLFL ( ID NUMBER ...
- 12pm 究竟是中午还是午夜
12pm是中午=12noon12am是午夜=12midnightMN-midnight(午夜,中午) AM是after midnight开头字母 PM是prior to midnight开头字母正中午 ...
- GYM 101933D(最短路、二分、dp)
要点 非要先来后到暗示多源最短路,求最小的最大值暗示二分 二分内部的check是关键,dp处理一下,\(dp[i]\)表示第\(i\)笔订单最早何时送达,如果在ddl之前到不了则\(return\ 0 ...
- Netty(6)关闭
客户端: public static void main(String[] args) throws Exception { final SslContext sslCtx; if (SSL) { ...
- NET高性能IO
System.IO.Pipelines: .NET高性能IO https://www.cnblogs.com/xxfy1/p/9290235.html System.IO.Pipelines是一个新的 ...
- CSS——制作天天生鲜登陆页面
这个登陆页面主要是有一个form表单,其他的和首页差不多的. login.html: <!DOCTYPE html> <html lang="en"> &l ...