系统性能是对整个计算机系统的性能的研究,包括主要硬件组件和软件组件。所有数据路径上和从存储设备到应用软件上所发生的事情都包括在内,因为这些都有可能影响性能。对于分布式系统来说,这意味着多台服务器和多个应用。
系统性能的典型目标是通过减少延时和降低计算成本来改善终端用户的体验。降低成本可以通过低效之处、提高系统吞吐量和进行常规性能调优来实现。
延时
对于某些环境,延时是被关注的性能焦点。而对于其他环境,它会是除了吞吐量以外,数一数二的分析要点。
操作是网络服务的数据传输请求。在这个操作发生之前,系统必须等待建立网络连接,这就是这个操作的延时。响应时间包括了延时和操作时间。
因为延时可以在不同点测量,所以通常会指明延时测量的对象。例如,网站的载入时间由三个从不同点测得的不同时间组成 :DNS 延时、TCP 连接延时和 TCP 数据传输时间。DNS 延时指的是整个 DNS 操作的时间,TCP 连接延时仅仅指的是初始化时间(TCP 握手)。
由于延时是一个时间上的指标,因此可能有多种计算方法。性能问题可以用延时来进行量化和评级,因为是用相同的单位来表达的(时间)。通过考量所能减少或移除的延时,预计的加速也可以被计算出来。这两者不能用 IOPS 指标很准确地描述出来。
时间量级
我们可以对时间进行量化的比较,同时对时间和各种来源的延时的合理预期有本能的认识。
权衡
许多 IT 项目选择了及时和成本低,留下了性能问题在以后解决。当早期的决定阻碍了性能提高的可能性时,这样的选择会变得有问题,例如,选择了非优的存储架构,或者使用的编程语言或操作系统缺乏完善的性能分析工具。
一个常见的性能调优的权衡是在 CPU 与内存之间,因为内存能用于缓存数据结果,降低 CPU 的使用率。在有着充足 CPU 资源的现代系统里,交换可以反向进行 :CPU 可以压缩数据来降低内存的使用。
调优的影响
性能调优实施在越靠近工作执行的地方效果显著。对于工作负载驱动的应用程序,这意味着调优性能的地方就在应用程序本身。
对应用程序层级进行调优,可能通过或减少数据库查询获得很大的性能提升(例如,20 倍)。在存储设备层级进行调优,可以精简或提高存储 I/O,但是性能提升的重要部分在更高层级的操作系统栈代码,所以对存储设备层级的调优对应用程序性能的提升有限,是百分比量级的
在应用程序层级寻求性能的巨大提升,还有一个理由。如今许多环境都致力于特性和功能的快速部署,按每周或每天将软件的变更推入生产环境。 因此,应用程序的开发和测试倾向于关注正确性,在部署前留给性能测量和优化的时间很少甚至没有。之后当性能成为问题时,才会去做这些与性能相关的事情。
虽然发生在应用程序层级的调优效果显著,但这个层级不一定是观测效果显著的层级。数据库查询缓慢从其所花费的 CPU 时间、文件系统和所执行的磁盘 I/O 方面来考查。使用操作系统工具,这些都是可以观测到的。
常见的系统性能指标:
吞吐量 :每秒的数据量或操作量。
IOPS :每秒的 I/O 操作数。
使用率 :资源的繁忙程度,以百分比表示。
延时 :操作时间,以平均数或百分数表示。
吞吐量的使用取决于上下文环境。数据库吞吐量通常用来度量每秒查询或请求的数目(操作量)。网络吞吐量度量的是每秒传输的比特数或字节数(数据量)。IOPS 度量的是吞吐量,但只针对 I/O 操作(读取和写入)。再次重申,上下文很关键,上下文不同,定义可能会有不同。
缓存
缓存被频繁使用来提高性能。缓存是将较慢的存储层的结果存放在较快的存储层中。
把磁盘的块缓存在主存(RAM)中就是一例。
一般使用的都是多级缓存。CPU 通常利用多级硬件缓存作为主缓存(L1、L2 和L3),开始是一个非常快但是很小的缓存(L1),后续的 L2 和 L3 逐渐增加了缓存容量和访问延时。这是一个在密度和延时之间经济上的权衡。缓存的级数和大小的选择以CPU 芯片内可用空间为准,确保达到优的性能。
已知的未知
已知的已知、已知的未知、未知的未知在性能领域是很重要的概念。下面是详细的解释,并提供了系统性能分析的例子。
已知的已知 :有些东西你知道。你知道你应该检查性能指标,你也知道它的当前值。举个例子,你知道你应该检查 CPU 使用率,而且你也知道当前均值是10%。
已知的未知 :有些东西你知道你不知道。你知道你可以检查一个指标或者判断一个子系统是否存在,但是你还没去做。举个例子,你知道你能用剖析检查是什么致使 CPU 忙碌,但你还没去做这件事。
未知的未知 :有些东西你不知道你不知道。举个例子,你可能不知道设备中断可以消耗大量 CPU 资源,因此你对此并不做检查。在性能领域,“你知道的越多,你不知道的也就越多”。