【转帖】虚拟化Pod性能比裸机还要好,原因竟然是这样!
虚拟化Pod性能比裸机还要好,原因竟然是这样!
http://www.itpub.net/2020/02/27/5340/ 其实感觉 linux也可以做到 NUMA的节点优化 其实 直接在 ESXi上面跑Pod的化 理论上跟 裸机道理一样。
之前的文章介绍过 VMware 在 VMworld 上宣布的太平洋项目 (Project Pacific) ,这是 vSphere 向 Kubernetes 原生平台的演进。太平洋项目引入了 vSphere 主管集群( Supervisor Cluster )的概念,该集群能够在 ESXi 上原生地运行 Kubernetes Pod(称为 Native Pod )。
根据 VMware 官博上发布的信息,太平洋项目中通过虚拟化实现的 Native Pods,竟然比物理机(裸机)上 Kubernetes 的 pod 有8%的性能提升!
是的,你的确没有看错,虚拟化 Pod 的性能要比裸机 Pod 要好,这似乎有悖常理,众所周知,虚拟化是有性能损失的,怎能优于裸机呢?且听笔者慢慢道来。
为什么太平洋项目的 Native Pods 更快?
现代的服务器一般有多个处理器(CPU),采用的是 NUMA(非统一内存访问)的内存访问方式。在 NUMA 体系架构中,每个 CPU 负责管理一块内存,称为本地(local)内存。
当 CPU 访问自己管理的内存时,因为是就近访问,速度比较快;但如果需要访问其它 CPU 名下的内存时(称为远程访问),往往需要经过若干个电路开关,通常会慢一些。
ESXi 在调度 Pod 的时候,考虑到了 Pod 使用内存的本地性(locality),会确保其尽量访问本地内存,这样 Pod 运行性能比较好,并提高总体 CPU 效率。另一方面,裸机 Linux 中的进程调度程序可能无法在 NUMA 域之间提供类似的功能,因此性能有一定的损失。
ESXi CPU 调度程序知道 Pod 是独立的运行实体,因此会尽量确保其内存访问位于本地 NUMA 域内,大大减少了远程内存访问的次数,从而为 Pod 中的工作负载提供更好的性能,并提高 CPU 总体效率。另一方面,Linux 中的进程调度程序无法较好地识别 NUMA 域之间差异,所以不能提供类似的调度能力。
太平洋项目 Native Pods 的性能评估实验
为了比较性能,VMware 的工程师在相同的硬件上配置了图1所示的测试平台,每台服务器硬件是 2.2 GHz 的内核 44 个以及 512 GB 内存:
a) 两个太平洋项目的ESXi节点和其上的主管集群
b) 两个缺省配置的某主流企业级 Linux 裸机集群节点

图1:测试平台配置
通常,超线程处理器内核具有多个逻辑内核(超线程),它们之间共享硬件资源。为了减少对测试影响的因素,在两个测试平台中都禁用了超线程。在每个集群中,使用其中一个节点作为被测系统(Worker Node),而在另一个节点上运行 Kubernetes Master 。

图2:Pod配置
在 Worker 节点中部署了10个 Kubernetes Pod,每个 Pod 的资源限制为 8个CPU,42 GB 内存,并在每个容器中运行一个标准 Java 事务基准测试,如图2所示。
考虑到用于我们的工作负载的复杂性和性质,在实验中使用了较大的 Pod ,以便管理测试样例运行和 Pod 的评分汇总。使用 Pod 定义将 Pod 固定(affinitized)到每个测试平台中的 Worker节点。使用所有10个 Pod 的汇总分数(最大吞吐量)来评估被测系统的性能。测试中基本没有设计I / O或网络传输,并且所有实验都限于单个 Kubernetes节点。因此,I / O或网络性能方面的影响不在本文中讨论。
测试结果
图3显示了某主流企业级 Linux 裸机节点的性能和太平洋主管群集的性能(绿色条)对比,裸机 Linux 的性能作为基准1.0。
与裸机企业级 Linux 相比,太平洋主管群集的性能提高了8%。

图3:太平洋主管集群与裸机企业级Linux节点相对性能
测试重复了多次并用平均数减少了实验的误差。与裸机情况相比,太平洋主管群集可实现约8%的总体性能提升。
分析和优化
查看系统统计信息,与 vSphere 主管集群相比,裸机上运行的工作负载被许多远程 NUMA 内存访问拖累了性能。vSphere 主管群集的性能优势主要来自更优的CPU调度方法,同时还抵扣掉因虚拟化带来的性能额外开销。
进一步分析发现,在裸机 Linux 中,只有约43.5%的非命中L3高速缓存的数据可从本地 DRAM 中获取,其余的则需要由远程内存提供。相比之下,vSphere 主管群集得益于ESXi中出色的 CPU 调度功能,有 99.2%的未命中 L3 数据可在本地 DRAM中获得,从而避免了远程内存访问,提高了vSphere主管群集的性能。(如图4所示)

图4:vSphere 主管群集与裸机 Linux上的 DRAM 命中率对比(数值越大越好)
为了减少裸机 Linux上非本地 NUMA 访问对性能的影响,工程师们尝试了一些基本的优化,例如切换 NUMA 平衡开关和使用基于任务集的Pod固定到 CPU,但是这些都没有实质性地提高性能。目前 Kubernetes 没有对 NUMA 架构的 CPU 使用纳入 Pod 规范,因此暂时没有教好的方法解决这个问题。
在本实验的结论取决于Pod访问内存的密集度情况,如果工作负载具有不同的内存需求,则 NUMA 本地性对其性能的影响可能会有所不同。简而言之,对内存访问频率高的 Pod 应用,跑在 vSphere 主管群集上可能比裸机上性能更好。
更多信息,参见:
【转帖】虚拟化Pod性能比裸机还要好,原因竟然是这样!的更多相关文章
- k8s集群Job Pod 容器可能因为多种原因失效,想要更加稳定的使用Job负载,有哪些需要注意的地方?
k8s集群Job Pod 容器可能因为多种原因失效,想要更加稳定的使用Job负载,有哪些需要注意的地方? 面试官:"计数性Job默认完成模式是什么?Indexed模式如何发布自定义索引呢?& ...
- 比 Navicat 还要好用、功能更强大的工具!
DBeaver 是一个基于 Java 开发,免费开源的通用数据库管理和开发工具,使用非常友好的 ASL 协议.可以通过官方网站或者 Github 进行下载. 由于 DBeaver 基于 Java 开发 ...
- 阿里巴巴 Kubernetes 能力再获 CNCF 认可 | 云原生生态周报 Vol. 32
作者 | 丁海洋 陈有坤 李鹏 孙健波 业界要闻 阿里巴巴 Kubernetes 技术能力再获 CNCF 认可 CNCF 官网发布博文<Demystifying Kubernetes as ...
- Immutable 详解
Shared mutable state is the root of all evil(共享的可变状态是万恶之源) -- Pete Hunt 有人说 Immutable 可以给 React 应用带来 ...
- [转] Immutable 详解及 React 中实践
https://zhuanlan.zhihu.com/p/20295971 作者:camsong链接:https://zhuanlan.zhihu.com/p/20295971来源:知乎著作权归作者所 ...
- Immutable 详解及 React 中实践
本文转自:https://github.com/camsong/blog/issues/3 Shared mutable state is the root of all evil(共享的可变状态是万 ...
- Immutable的认识
Facebook 工程师 Lee Byron 花费 3 年时间打造,与 React 同期出现,但没有被默认放到 React 工具集里(React 提供了简化的 Helper).它内部实现了一套完整的 ...
- Immuable详解以及在React中的实战
转载自:https://zhuanlan.zhihu.com/p/20295971, 今天看到这篇文章后情不自禁的转载过来了,我的天老爷,我看到后直接菊花一紧,这写的太好了,直接写进我心坎里了,我必须 ...
- 【Java入门提高篇】Day32 Java容器类详解(十四)ArrayDeque详解
今天来介绍一个不太常见也不太常用的类——ArrayDeque,这是一个很不错的容器类,如果对它还不了解的话,那么就好好看看这篇文章吧. 看完本篇,你将会了解到: 1.ArrayDeque是什么? 2. ...
随机推荐
- 解析基于keras深度学习框架下yolov3的算法
一.前言 由于前一段时间以及实现了基于keras深度学习框架下yolov3的算法,本来想趁着余热将自己的心得体会进行总结,但由于前几天有点事就没有完成计划,现在趁午休时间整理一下. 二.Keras框架 ...
- 安装python包的两种方法
1.在 anaconda 环境中安装包 selenium conda install selenium 2.python 下安装包 selenium pip install selenium 3.测试 ...
- Ajax学习系列——jQuery中Ajax的请求方式
在jQuery中,Ajax常见的请求方式主要有4种. 1.$.ajax()返回其创建的XMLHttpRequest对象. $.ajax({ type:"POST", content ...
- 二十一、JavaScript之访问对象属性
一.代码如下 二.执行效果如下 <!DOCTYPE html> <html> <meta http-equiv="Content-Type" cont ...
- 九、JavaScript之分号使用,支持一行多语句
一.代码如下 二.执行效果如下 <!DOCTYPE html> <html> <meta http-equiv="Content-Type" cont ...
- 164-PHP 文本替换函数str_replace(五)
<?php $str='Hello world!'; //定义源字符串 $search=array('Hello','world','!'); //定义将被替换的字符数组 $replace=ar ...
- 054-for循环
<?php for($i=1;$i<=5;$i++){ echo "$i<br />"; //循环体 } ?>
- 20 - CommonJS - 规范的具体内容
- 【LeetCode】四数之和
[问题]给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找 ...
- js连续的日期判断,判断相差几天
var startTime=Date.parse(new Date('2020-02-28')); var endTime=Date.parse(new Date('2020-02-29')); $. ...