理解延迟与吞吐量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解延迟与吞吐量相关的知识,希望对你有一定的参考价值。

参考技术A 采用高级综合设计方法( High Level Synthesis design methodology
)的影响之一是,“系统设计师”和“硬件设计师”之间的障碍即使没有完全消除,也会大大减少。突然之间,“系统设计人员”和“硬件设计人员”不仅使用相同的输入语言来指定他们的模型(c++ / System C),而且他们还接触到相同的术语。由于这个原因,“硬件设计师”突然接触到两个他们在过去很少或没有接触过的术语。

本文的目的是澄清两个经常被混淆的、有时可以互换使用的“系统”术语:延迟和吞吐量。

让我们试着给这两个术语下个定义:

延迟是执行某些操作或产生某些结果所需的时间。延迟是用时间单位来测量的——小时、分钟、秒、纳秒或时钟周期。

吞吐量是单位时间内执行的此类操作的数量或产生的结果。这是用单位时间内生产的任何东西(汽车、摩托车、I/O样本、记忆单词、迭代)来衡量的。术语“内存带宽”有时用来指定内存系统的吞吐量。

一个简单的例子

下面的制造例子应该澄清这两个概念:

一条装配线正在生产汽车。制造一辆汽车需要8个小时,这家工厂每天生产120辆汽车。

潜伏期为:8小时。

生产能力:120车/天或5车/小时。

现在这两个概念已经很清楚了,让我们将这些概念应用到本文要讨论的问题上。

设计人员的任务是为具有以下特点的通信设备创建硬件:

时钟频率 : 100兆赫

执行计算的可用时间:1000ns

设备吞吐量:640mbits / s

每个输出的字宽:64位

让我们将这些需求转换为延迟和吞吐量度量,从硬件设计人员的角度来看,这些度量更有意义。

延迟:1000 ns = 1000 ns * (1 s/ 10^9 ns) *(100 * 10^6时钟周期/1)= 10 11/10 9 = 100个时钟周期。

吞吐量= 640 mbit / s =(640 * 10 ^ 6比特/秒) (1字/ 64位) (1 s / 100 * 10 ^ 6时钟时间)= 640 * 10 ^ 6/64 * 100 * 10 ^ 6 = 10 * 10/100 = 1/10 = 0.1字/时钟周期。

吞吐量可以更方便地读取如下内容:“每10个时钟周期读取一个单词”

以时钟周期表示的延迟和以字与字之间可用的时钟周期数表示的吞吐量都是一些参数,设计者可以使用这些参数来根据性能规范创建所需的硬件。

最后一个澄清

有些工具不以单位时间表示吞吐量,而是以时钟周期表示。这是不正确的,但因为方便而经常使用。因此,一些工具会将我们的通信算法的吞吐量报告为10。

引用:
https://community.cadence.com/cadence_blogs_8/b/sd/posts/understanding-latency-vs-throughput

VMWare ESXi、RHEL、LUKS 和网络延迟

【中文标题】VMWare ESXi、RHEL、LUKS 和网络延迟【英文标题】:VMWare ESXi, RHEL, LUKS and network latency 【发布时间】:2016-10-31 15:02:27 【问题描述】:

我的公司遇到了一个网络性能问题,似乎让我们正在与之合作的所有“专家”(VMWare 支持、RHEL 支持、我们的托管服务托管提供商)都陷入了困境。

问题在于,我们的虚拟机(甚至位于同一物理主机上的虚拟机)之间的网络延迟会随着网络吞吐量的增加而增加——高达 100 倍或更多!例如,在没有任何网络负载的情况下,延迟(通过 ping 测量)可能约为 0.1 毫秒。开始传输几个 100MB 的文件,延迟增长到 1ms。在两个 VM 之间启动一堆(约 20 个左右)并发数据传输,VM 之间的延迟可能会增加到 10 毫秒以上。

这对我们来说是个大问题,因为我们有应用服务器虚拟机托管进程,每小时可能会针对数据库服务器(不同的虚拟机)发出 100 万次左右的查询。因此,为每个查询增加一到两毫秒会大大增加我们的运行时间——有时会使我们的预期持续时间增加一倍或三倍。

我们拥有我认为非常标准的环境:

ESXi 6.0u2 4 个戴尔 M620 刀片,配备 2 个 Xeon E5-2650v2 处理器和 128GB RAM SolidFire SAN

我们的基本虚拟机配置包括:

RHEL7,最小安装 为 /boot、/、/var/log、/var/log/audit、/home、/tmp 和 swap 的挂载点配置了多个 LUN 所有分区除了 /boot 使用 LUKS 加密(通过 LVM)

我们的数据库服务器虚拟机正在运行 Postgres 9.4。

我们已经尝试了以下方法:

将虚拟网卡从 VMNETx3 更改为 e1000 并返回 调整 RHEL 以太网堆栈设置 为虚拟机使用 ESXi 的“低延迟”选项 将我们的主机和 vCenter 从 ESX 5.5 升级到 6.0u2 创建用于测试的准系统 VM(使用 LUKS 等进行上述设置,但没有我们的任何生产服务) 将数据存储从 SSD SolidFire SAN 移动到本地(刀片上)旋转存储

这些都没有改善网络延迟。唯一显示预期(非恶化)延迟的测试是我们设置第二对准系统虚拟机没有 LUKS 加密。不幸的是,我们需要完全加密的分区(我们为其管理密钥),因为我们正在处理受监管的敏感数据。

我不明白 LUKS——就其本身而言——在这里应该受到责备。相反,我怀疑使用 ESX、我们的托管硬件和/或我们的 VM 硬件配置的某种组合运行的 LUKS 是罪魁祸首。

我在更简陋的环境中进行了测试(MacBook Pro、i5、8GB RAM、VMWare Fusion 6.0、Centos7 虚拟机配置与 LVM 上的 LUKS 和相同的测试脚本类似),但无法重现延迟问题。无论我在虚拟机之间发送多少网络流量,延迟都保持稳定在 0.4 毫秒左右。这是在一台笔记本电脑上发生的大量事情!

任何指针/提示/解决方案将不胜感激!

【问题讨论】:

【参考方案1】:

经过大量审查并将性能不佳的虚拟机与性能良好的虚拟机进行比较后,我们确定该问题是高级“延迟敏感度”设置的错误选择。

对于我们性能不佳的虚拟机,此设置为“低”。将设置更改为“正常”并重新启动 VM 后,延迟下降了约 100 倍,吞吐量(我们最初没有注意到也是一个问题)增加了约 250 倍!

【讨论】:

以上是关于理解延迟与吞吐量的主要内容,如果未能解决你的问题,请参考以下文章

GPU结构与CUDA系列0背景知识:GFLOPS,带宽,延迟和吞吐量,乱序执行,上下文切换,指令集体系结构

线程数设置多少合适

99th percentile 延迟和吞吐量是啥意思

TCP 之上是不是有针对高吞吐量和低延迟进行优化的协议/标准?

AWS SNS 中的延迟和吞吐量是不是足以取代用于发布/订阅的专用 MQ?

sh 修改OSX上的TCP设置以获得更好的吞吐量和更低的延迟