做电影资源网站有哪些内容,wordpress插件安装教程,网站建设流程包括哪些内容,内销网站怎么做背景 磁盘可以说是计算机系统重最慢的硬件之一#xff0c;读写速度相对内存10以上#xff0c;所以针对优化磁盘的技术非常的多#xff0c;比如#xff1a;零拷贝、直接I/O、异步I/O等等#xff0c;这些优化的目的就是为了提高系统的吞吐量#xff0c;另外操作系统内核中的…背景 磁盘可以说是计算机系统重最慢的硬件之一读写速度相对内存10以上所以针对优化磁盘的技术非常的多比如零拷贝、直接I/O、异步I/O等等这些优化的目的就是为了提高系统的吞吐量另外操作系统内核中的磁盘高速缓存区也可以有效的减少磁盘的访问次数。
传统的数据传输方式
如果服务端提供数据传输功能传统方式将文件从磁盘上读取出来然后通过网络协议写入发送给客户端。
read(file, tmp_buf, len);
write(socket, tmp_buf, len);
其中涉及到的内部流程如下 第一次拷贝DMA拷贝把数据从磁盘上拷贝到操作系统内核缓冲区。第二次拷贝CPU拷贝把内核缓冲区的数据拷贝到用户缓冲区此时我们的程序就可以使用读到的数据第三次拷贝CPU拷贝把用户缓冲区的数据再拷贝到内核的socket缓冲区套接字缓冲区。第四次拷贝DMA拷贝把内核的socket缓冲区数据拷贝到网卡缓冲区中。
零拷贝方式 第一次拷贝DMA拷贝通过DMA技术将磁盘数据拷贝到内核缓冲区中。第二次拷贝DMA拷贝内核缓冲区的“描述符”“长度”传到socket缓冲区然后SG-DMA控制器可直接将内核缓冲区中的数据拷贝到网卡中。此过程不需要将内核缓冲区中的数据拷贝到socket缓冲区中这样减少了一次数据拷贝。
总结 零拷贝技术相对于传统文件传输减少了2次上下文切换、2次CPU拷贝最终只用2次上下文切换和2次DMA拷贝不经过CPU拷贝。
扩展
内核缓冲区实际上是磁盘高速缓存PageCache通常刚被访问的数据段时间内再次被访问的概率很高于是我们可以用PageCache来缓存最近被访问的数据当空间不足时淘汰最久未被访问的缓存所以读磁盘数据的时候优先在PageCache中找如果有就返回没有则从磁盘读取然后缓存在PageCache中。PageCache也具备预读功能。
例假设read方法每次读取32kb字节虽然read刚开始只读0~32kb的字节但是内核会将后面的32~64KB也读取到PageCache这样读取后面32~64kb的时候如果在32~64kb数据被淘汰出PageCache前进程读取到它了此时速度就很快。