论文部分内容阅读
随着云计算的迅猛发展,IT厂商推出多种云计算平台,Docker出现后很多IT厂商构建了 CaaS (容器即服务,Container as a Service)云计算平台以提供更加高效、轻量的服务。Docker容器之间通过Linux系统的命名空间进行隔离,容器间的连接通常采用通过虚拟网桥的桥接模式,这限制了同宿主Docker容器间的通信性能。共享内存作为进程间高速的通信方式,将其引入到同宿主Docker容器间的通信场景中能有效地提升容器间的通信效率。本文提出了一种基于内核内存共享的同宿主Docker容器间高速通信方案,并针对NUMA (Non Uniform Memory Access Architecture)体系结构进行了性能优化。本文的研究内容主要包括:(1)同宿主Docker容器间进程的内存共享:在参考多种共享内存的实现方式和理解Docker隔离特点的情况下,设计通过在宿主系统上实现一个专有虚拟字符设备驱动,Docker容器间通信进程使用该设备驱动实现的内存映射方法将同一块内存空间映射到相应的进程地址空间中,该方式没有破坏Docker原有的隔离特性;(2)基于内存共享的进程间通信机制:共享内存空间作为通信进程的临界资源,在访问内存中数据时需要进行同步控制,该方案在共享内存之上设计了一种循环缓冲队列来实现高速的读写操作,同时设计实现面向连接的通信模型和容器感知的功能;(3)基于NUMA的方案优化:多核处理器和NUMA体系结构对基于内存共享的通信方案有很大的影响,因此提出了基于NUMA体系结构的共享内存池和NUMA感知的优化方案,通过合理地分配共享内存空间和设置通信进程的CPU亲和度来有效地提升该方案的通信效率。多核处理器和NUMA体系结构在服务器市场得到了普及,而NUMA体系结构导致不同的处理器对同一个NUMA节点内存数据的访问存在性能差异。所以,本文针对NUMA体系环境进行了测试实验,实验结果表明:基于内存共享的同宿主Docker容器间通信方案与Docker默认的虚拟网桥通信方式相比,对于Docker容器在同一 NUMA节点上和在跨NUMA节点上的两种通信场景,最大吞吐量分别提升了 350%和110%。