加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

优先考虑的5个物联网安全威胁

发布时间:2021-02-06 18:19:41 所属栏目:外闻 来源:互联网
导读:从上述输出结果我们可以看出,该机器上包含两个 NUMA 节点,每个节点上都包含 24 个 CPU 以及 64GB 的内存,最后的节点距离(node distances)告诉我们两个 NUMA 节点访问内存的开销,其中 NUMA 节点 0 和 NUMA 节点 1 互相访问对方内存的延迟是各自节点访问本

从上述输出结果我们可以看出,该机器上包含两个 NUMA 节点,每个节点上都包含 24 个 CPU 以及 64GB 的内存,最后的节点距离(node distances)告诉我们两个 NUMA 节点访问内存的开销,其中 NUMA 节点 0 和 NUMA 节点 1 互相访问对方内存的延迟是各自节点访问本地内存的 2.1 倍(21 / 10 = 2.1),所以如果 NUMA 节点 0 上的进程如果在节点 1 上分配内存,会增加进程的延迟。

正是因为 NUMA 节点访问不同内存的开销不同,所以操作系统会为应用程序提供接口控制 CPU 和内存的分配策略,在 Linux 系统中,我们可以使用 numactl 命令控制进程使用的 CPU 和内存。

numactl 提供了 cpunodebind 和 physcpubind 两种策略为进程分配 CPU,这两种策略分别提供了不同粒度的绑定方法:

  • cpunodebind — 将进程绑定到某几个 NUMA 节点上;
  • physcpubind — 将进程绑定到某几个物理 CPU 上;

除了这两种 CPU 分配策略之外,numactl 还提供四种不同的内存分配策略,分别是:localalloc、preferred、membind 和 interleave:

  • localalloc — 总是在当前节点上分配内存;
  • preferred — 倾向于在特定节点上分配内存,当指定节点的内存不足时,操作系统会在其他节点上分配;
  • membind — 只能在传入的几个节点上分配内存,当指定节点的内存不足时,内存的分配就会失败;
  • interleave — 内存会在传入的节点上依次分配(Round Robin),当指定节点的内存不足时,操作系统会在其他节点上分配;

上述的两种 CPU 分配策略和四种内存分配策略是我们与 NUMA 打交道时经常需要接触的,当进程的性能受到 NUMA 的影响时,我们可能需要通过 numactl 命令调整 CPU 或者内存的分配策略。

交换分区

NUMA 架构虽然能够解决总线上的性能瓶颈并可以让我们在同一个主机上运行更多的 CPU,但是如果不了解 NUMA 的工作原理或者使用错误的策略会带来一些问题,Jeremy Cole 的文章 The MySQL “swap insanity” problem and the effects of the NUMA architecture 就曾经分析过 NUMA 架构下 MySQL 可能出现的问题 — 频繁发生的交换分区影响服务延迟[^4],我们在这里简单介绍一下该问题背后的原因:
 

图 4 - 双节点 NUMA 架构

如上图所示,该主机中包含 2 个 NUMA 节点,每个 NUMA 节点都包含物理 CPU 和内存,从图中我们可以看出 CPU 1 访问本地内存和远程内存会经过不同的通道,这是访问内存时间不同的根本原因。

操作系统作为管理计算机硬件、软件资源并为应用程序提供通用服务的软件,它本身就会与底层的硬件打交道,Linux 操作系统就会为我们提供硬件相关的 NUMA 信息,你可以直接通过 numactl 命令查看机器上的 NUMA 节点[^3]:
 

图 1 - UMA 和 NUMA

作为应用程序的开发者,因为操作系统为我们屏蔽了很多硬件层面的实现细节,所以不太需要直接接触硬件,不过因为 NUMA 会影响应用程序,所以想要写出高性能、低延迟的服务,NUMA 是我们必须要了解并熟悉的,本文将从以下两个方面介绍它的影响:

  • NUMA 引入了本地内存和远程内存,CPU 访问本地内存的延迟会小于访问远程内存;
  • NUMA 的内存分配与内存回收策略结合时会可能会导致 Linux 的频繁交换分区(Swap)进而影响系统的稳定性;

本地内存

如果主机使用 NUMA 这种架构设计,那么 CPU 访问本地内存的延迟会小于访问远程内存,这种现象并不是 CPU 设计者刻意制造的,而是物理层面的限制。不过 NUMA 这种设计并不是与计算机一同诞生的,我们在继续分析 NUMA 对程序的影响之前先来分析一下 CPU 架构的演进过程。

在计算机诞生的最初几十年,处理器基本都是单核的,根据摩尔定律,随着技术的进步,处理器的性能每隔两年就会翻一倍[^2],这一定律在上个世纪基本都是生效的,然而在过去十几年,单个处理器中晶体管数目的增加速度逐渐放缓,很多厂商开始推出了双核以及多核的计算机。

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读