关于i-o:Linux-IO-原理和-Zerocopy-技术全面揭秘
博客原文https://strikefreedom.top/lin... 导言现在的网络应用早已从 CPU 密集型转向了 I/O 密集型,网络服务器大多是基于 C-S 模型,也即 客户端 - 服务端 模型,客户端须要和服务端进行大量的网络通信,这也决定了古代网络应用的性能瓶颈:I/O。 传统的 Linux 操作系统的规范 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的缓冲区和用户过程地址空间定义的缓冲区之间进行传输。设置缓冲区最大的益处是能够缩小磁盘 I/O 的操作,如果所申请的数据曾经寄存在操作系统的高速缓冲存储器中,那么就不须要再进行理论的物理磁盘 I/O 操作;然而传统的 Linux I/O 在数据传输过程中的数据拷贝操作深度依赖 CPU,也就是说 I/O 过程须要 CPU 去执行数据拷贝的操作,因而导致了极大的零碎开销,限度了操作系统无效进行数据传输操作的能力。 I/O 是决定网络服务器性能瓶颈的要害,而传统的 Linux I/O 机制又会导致大量的数据拷贝操作,损耗性能,所以咱们亟需一种新的技术来解决数据大量拷贝的问题,这个答案就是零拷贝(Zero-copy)。 计算机存储器既然要剖析 Linux I/O,就不能不理解计算机的各类存储器。 存储器是计算机的核心部件之一,在齐全现实的状态下,存储器应该要同时具备以下三种个性: 速度足够快:存储器的存取速度该当快于 CPU 执行一条指令,这样 CPU 的效率才不会受限于存储器容量足够大:容量可能存储计算机所需的全副数据价格足够便宜:价格低廉,所有类型的计算机都能装备然而事实往往是残暴的,咱们目前的计算机技术无奈同时满足上述的三个条件,于是古代计算机的存储器设计采纳了一种分档次的构造: 从顶至底,古代计算机里的存储器类型别离有:寄存器、高速缓存、主存和磁盘,这些存储器的速度逐级递加而容量逐级递增。存取速度最快的是寄存器,因为寄存器的制作资料和 CPU 是雷同的,所以速度和 CPU 一样快,CPU 拜访寄存器是没有时延的,然而因为价格昂贵,因而容量也极小,个别 32 位的 CPU 装备的寄存器容量是 32✖️32 Bit,64 位的 CPU 则是 64✖️64 Bit,不论是 32 位还是 64 位,寄存器容量都小于 1 KB,且寄存器也必须通过软件自行治理。 ...