Linux I/O缓冲】的更多相关文章

Linux禁用显示"缓冲调整" youhaidong@youhaidong-ThinkPad-Edge-E545:~$ free -o total used free shared buffers cached Mem: 3103064 1586140 1516924 7724 66760 651072 Swap: 3998716 0 3998716 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ free --old total used fr…
为什么需要标准IO缓冲? LINUX用缓冲的地方遍地可见,不管是硬件.内核还是应用程序,内核里有页高速缓冲,内存高速缓冲,硬件更不用说的L1,L2 cache,应用程序更是多的数不清,基本写的好的软件都有.但归根结底这些缓冲的作用是相同的,都是为了提高机器或者程序的性能.而需要缓冲大部分的情况都是为了协调两个设备或者两个系统间速度的不匹配. 大家都知道IO设备的访问速度与CPU的速度相差好几个数量级,所以为了协调IO设备与CPU的速度的不匹配,对于块设备内核使用了页高速缓存.也就是说,数据会先被…
1:两类I/O函数的缓冲机制 1.1 系统调用(System call) 这类代表就是read/write等系统函数,它们是不带缓冲的,这里的缓冲指的是进程缓冲,在内核到磁盘之间还是有内核缓冲的. 1.2 标准I/O 这类代表就是fread/fwrite等函数,它们带有进程缓冲,可移植性强,最后还是通过read/write函数实现的. 2:两种缓冲的作用 首先要了解一下写一条内容到文件中的过程,以标准I/O的fwrite为例,首先将buffer拷贝到进程缓冲区,fwrite函数即刻就返回,标准I…
每个块设备或者块设备的分区,都对应有自身的请求队列(request_queue),而每个请求队列都可以选择一个I/O调度器来协调所递交的request.I/O调度器的基本目的是将请求按照它们对应在块设备上的扇区号进行排列,以减少磁头的移动,提高效率.每个设备的请求队列里的请求将按顺序被响应.实际上,除了这个队列,每个调度器自身都维护有不同数量的队列,用来对递交上来的request进行处理,而排在队列最前面的request将适时被移动到请求队列中等待响应. IO调度器在内核栈中所处位置如下: 内核…
I/O 调度算法再各个进程竞争磁盘I/O的时候担当了裁判的角色.他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能.在linux下面列出4种调度算法CFQ (Completely Fair Queuing 完全公平的排队)(elevator=cfq): 这是默认算法,对于通用服务器来说通常是最好的选择.它试图均匀地分布对I/O带宽的访问.在多媒体应用, 总能保证audio.video及时从磁盘读取数据.但对于其他各类应用表现也很好.每个进程一个queue,每个queue按照上…
http://blog.chinaunix.net/uid-7530389-id-2050116.html 由于各种的I/O负载情形各异,Linux系统中文件系统的缺省配置一般来说都比较中庸,强调普遍适用性.然而在特定应用下,这种配置往往在I/O性能方面不能达到最优.因此,如果应用对I/O性能要求较高,除了采用性能更高的硬件(如磁盘.HBA卡.CPU.MEM等)外,我们还可以通过对文件系统进行性能调优,来获得更高的I/O性能提升.总的来说,主要可以从三个方面来做工作: 1.Disk相关参数调优…
我 们在磁盘写操作持续繁忙的服务器上曾经碰到一个特殊的性能问题.每隔 30 秒,服务器就会遇到磁盘写活动高峰,导致请求处理延迟非常大(超过3秒).后来上网查了一下资料,通过调整内核参数,将写活动的高峰分布成频繁的多次写, 每次写入的数据比较少.这样可以把尖峰的写操作削平成多次写操作.以这种方式执行的效率比较低,因为内核不太有机会组合写操作.但对于繁忙的服务器,写操 作将更一致地进行,并将极大地改进交互式性能. 下面是相关参数的调整:一.2.6内核下    1./proc/sys/vm/dirty…
 linux setsockopt Socket描述符选项[SOL_SOCKET] #include <sys/socket.h> int setsockopt( int socket, int level, int option_name, const void *option_value, size_t option_len); 第一个参数socket是套接字描述符.第二个参数level是被设置的选项的级别,如果想要在套接字级别上设置选项,就必须把level设置为 SOL_SOCKET. …
Linux IO Scheduler(Linux IO 调度器) 每个块设备或者块设备的分区,都对应有自身的请求队列(request_queue),而每个请求队列都可以选择一个I/O调度器来协调所递交的request.I/O调度器的基本目的是将请求按照它们对应在块设备上的扇区号进行排列,以减少磁头的移动,提高效率.每个设备的请求队列里的请求将按顺序被响应.实际上,除了这个队列,每个调度器自身都维护有不同数量的队列,用来对递交上来的request进行处理,而排在队列最前面的request将适时被移…
    I/O 调度算法再各个进程竞争磁盘I/O的时候担当了裁判的角色.他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能. 在linux下面列出4种调度算法 CFQ (Completely Fair Queuing 完全公平的排队)(elevator=cfq):     这是默认算法,对于通用服务器来说通常是最好的选择.它试图均匀地分布对I/O带宽的访问.在多媒体应用, 总能保证audio.video及时从磁盘读取数据.但对于其他各类应用表现也很好.每个进程一个queue,…