面试知识点整理

计算机的物理内存是有限的,所以操作系统在遇到内存不足时,会通过换页机制暂时把
某个进程未使用的内存中的数据搬移到硬盘上(比如 Linux 的 swap 分区),并在系统页表中
删除相应的表项。当该进程访问数据已经被搬移到硬盘中的内存时,会触发缺页中断,随后
操作系统会把硬盘中的数据重新移回内存中新分配的内存页,并在页表中添加表项,以保证
内存页的虚拟地址不变。对于进程而言,此时数据所在的内存的虚拟地址没有变化,但物理
地址很可能已经和原来不一样了。所以,这一过程很可能导致虚拟地址和物理地址的映射关
系发生改变

由于 RDMA 网卡经常会绕过 CPU 对用户提供的虚拟地址所指向的内存区域进行访问,
如果虚拟地址和物理地址的映射关系发生改变,因此前文提到的 MR 地址转换表的原有内容
会失去意义,RDMA 网卡将无法找到正确的物理地址。
为了防止换页所导致的地址映射关系发生改变,在应用程序为缓存注册 MR 的过程中,
运行在内核态的 RDMA 网卡驱动程序会调用 Linux 内核提供的 pin_user_pages_fast 函数, Pin
这块缓存(亦称锁页),即锁定缓存的虚拟地址和物理地址的映射关系。也就是说,MR 这
块内存区域会长期存在于物理内存中,其数据不会被 swap 到硬盘,直到完成 RDMA 通信之
后,应用程序主动调用 Verbs API ibv_dereg_mr 注销此 MR。

要实现可靠服务,必须有以下几个关键机制。
• 能够检测到受损数据的保护机制,比如循环冗余校验(CRC)。
• 使发送者能够确定消息已成功传递的确认机制(ACK)。
用于检测丢失的数据包并允许发送者将对端响应与发送请求关联的数据包序列号
(packet sequence number,PSN)机制。
• 计时器,用于检测被丢弃(dropped)或丢失(missed)的确认消息

rdma

在 InfiniBand 和 RoCEv2 方案中,因为绕过了内核协议栈,相较于传统 TCP/IP 网络,时延性能会有数十倍的改善。在
同集群内部一跳可达的场景下,InfiniBand 和 RoCEv2 与传统 IP 网络的端到端时延在实验室的测试数据显示,绕过内核
协议栈后,应用层的端到端时延可以从 50us(TCP/IP),降低到 5us(RoCE)或 2us(InfiniBand)。

在这里插入图片描述

在这里插入图片描述

AI训练与网络

梯度同步

在完成计算任务后,智算集群内部的计算节点需要将计算结果快速地同步给其他节点,以便进行下一轮计算。在结果同步
完成前,计算任务处于等待状态,不会进入下一轮计算。如果带宽不够大,梯度传输就会变慢,造成卡间通信时长变长,
进而影响加速比。
在这里插入图片描述

稳定

由于计算量比较大,分布式训练任务有可能需要数天或数周。在训练期间如果出现网络不稳定的问题,会影响整个训练任
务的进度。因为网络故障导致的故障域通常会比较大,轻则需要回退到上一个分布式训练的断点进行重训,重则可能要将
整个任务从 0 开始重训。因此,网络稳定性对分布式训练任务十分重要

大规模

随着数据并行和模型并行技术的不断完善和提升,分布式训练中可以使用千卡或万卡规模的 GPU 来缩短整体训练时长。
**这就需要智算网络能够具备支持大规模 GPU 服务器集群的能力,并且能具备较强的扩展性,**以应对未来更大规模 GPU
集群的业务需求。

可运维

InfiniBand

InfiniBand网络的关键组成包括Subnet Manager(SM)、InfiniBand 网卡、InfiniBand交换机和InfiniBand连接线缆
在这里插入图片描述
InfiniBand 交换机上不运行任何路由协议。整个网络的转发表是由集中式的子网管理器(Subnet Manager,简称 SM)
进行计算并统一下发的。除了转发表以外,SM 还负责管理 InfiniBand 子网的 Partition、QoS 等配置。
SM 有 OpenSM(开源)和 UFM(收费)两种模式。SM 通常部署在接入 InfiniBand 子网的一台服务器上,可以把
子网管理器理解为 InfiniBand 网络的控制器。一个子网内同时只能有一个 SM 工作,如有多个设备配置成为 SM,则
只有一个 SM 能成为主 SM。SM 可以控制整个子网内所有的 InfiniBand 交换机和 InfiniBand 网卡,控制信令也通过
InfiniBand 网络带内下发和上传(统称 MAD,Management Datagram)。所有 InfiniBand 网卡端口和交换芯片都
有一个子网内唯一的身份标识 LID(Local ID),由 SM 赋予。SM 会计算每个交换芯片的路由表并下发。这里需要特别
指出的是,SM 控制 InfiniBand 网卡,并不需要 InfiniBand 网卡所在服务器的协助。InfiniBand 网卡内部有一个称为
SMA(SM Agent)的功能,会直接处理 SM 发来的 MAD 报文。
InfiniBand 网络采用基于 credit 信令机制来从根本上避免缓冲区溢出丢包。只有在确认对方有额度能接收对应数量的报
文后,发送端才会启动报文发送
。InfiniBand 网络中的每一条链路都有一个预置缓冲区。发送端一次性发送数据不会超过
接收端可用的预置缓冲区大小,而接收端完成转发后会腾空缓冲区,并且持续向发送端返回当前可用的预置缓冲区大小。
依靠这一链路级的流控机制,可以确保发送端绝不会发送过量,网络中不会产生缓冲区溢出丢包
在这里插入图片描述

RoCEv2 流控机制

PFC

PFC(Priority Flow Control)是 Hop By Hop 的流控策略,其特点就是通过配置水线合理的使用交换机的缓存,在以
太网络中实现完全的无丢包能力。
具体实现步骤是,当下游交换机端口的入队列缓存达到阈值 Xoff 时,该交换机就会向上游设备(交换机或者网卡)发
PFC PAUSE 帧。上游设备收到 PFC Pause 帧后,该端口会停止发包,从而减少下游设备的缓存区压力。而在这个过
程中上游设备已经发送到链路中的报文不会被丢弃,依旧会发送到下游交换机并存储在下游交换机预先分配的 Headroom
缓存中。由于 PAUSE 帧的发送,下游交换机的 buffer 占用开始下降。等到该端口的 buffer 计数器下降到 Xon 这个值
的时候,端口 A 将会向上游发送一个持续时间为 0 的 PAUSE 帧,上游设备开始进行数据包发送。
在这里插入图片描述

ECN

显式拥塞通知(ECN,Explicit Congestion Notification) 定义了一种基于 IP 层和传输层的流量控制和端到端拥塞通
知机制。ECN 是 IP 层的机制,它主要是用来在拥塞场景下,通过在交换机上标记报文特定向服务器端传递拥塞信息,从
而通知到服务器端发生了拥塞。然后服务器端再通过发送 CNP 报文至客户端通知源端降速从而实现拥塞控制的目的。在
RFC 3168 中定义了 ECN。
需要注意以下两点,第一点是必须在端点上以及端点之间的所有中间设备上启用 ECN。若传输路径中有不支持 ECN 的任
何设备,将中断端到端 ECN 功能
Server 端的网卡收到了存在 ECN 标记的报文,会向 Client 端的网卡发送 CNP 报文,CNP 报文中包含着 QPs(Queue Pairs)等相关信息。第二点是 CNP 报文一般需要和 RDMA 业务报文处在不同的队列中,并且设置合适的 QoS 策略保证 CNP 报文的发送,要确保 CNP 报文不会被丢弃,进而避免流控失效。

DCQCN

在这里插入图片描述
数据中心量化拥塞通知 (DCQCN) 是 ECN 和 PFC 的组合,可支持端到端无损以太网。DCQCN 的设计理念是在拥
塞时通过 ECN 让发送端降低传输速率,从而尽量避免触发 PFC,因为 PFC 被触发,发送流量会完全停止,DCQCN
需要考虑如下两个关键点:

  • 确保 PFC 不会太早触发,即先使用 ECN 发送拥塞反馈使流量变慢。
  • 确保 PFC 不会太晚触发,即拥塞较严重产生缓冲区溢出进而出现丢包。
    通过合理设置下面三个参数,可以满足上述需求:
    • Headroom Buffers:发送至上游设备的 PAUSE 消息需要一些时间到达并生效。为避免丢包,PAUSE 发送方
      必须保留足够的缓冲区,以处理在此期间可能收到的任何数据包。这包括发送 PAUSE 时正在传输的数据包,以及 上游设备在处理 PAUSE
      消息时发送的数据包。
    • PFC Threshold:这是一个入口阈值。当到达该阈值时,会向上游发送 PFC PAUSE 报文。 ·
    • ECN Threshold:这是一个出口阈值。ECN 阈值等于 WRED 开始填充级别值。一旦出口队列超过此阈值,交换
      机将开始为该队列中的数据包进行 ECN 标记。DCQCN 要有效,此阈值必须低于入口 PFC 阈值,以确保 PFC 不
      会在交换机有机会使用 ECN 标记数据包之前触发。设置非常低的 WRED 填充级别可提高 ECN 标记概率。例如,
      使用默认共享缓冲区设置,WRED 开始填充级别为 10% 可确保标记无丢失数据包。但是,如果填充级别较高,则 ECN 标记的概率降低

具体开发

ib_verbs和rdma_cm 都是Mellanox公司提供的两个动态链接库,基于这两个动态链接库,向用户提供了RDMA原生编程API(verbs/RDMA_CM)。这两种 API比较复杂,需要对RDMA技术有深入理解才能做好开发,学习成本较高。目前主流实现是利用rdma_cm来建立连接,然后利用verbs来传输数据。

相关头文件:

#include <infiniband/verbs.h>   // IB_VERBS 基础头文件
#include <rdma/rdma_cma.h>      // RDMA_CM CMA 头文件 用于CM建链
#include <rdma/rdma_verbs.h>    // RDMA_CM VERBS 头文件 用于使用基于CM的Verbs接口

编程范式:

在这里插入图片描述



int Main()
{
    print_config();

    resources_init();

    resources_create();

    sock_connect();

    connect_qp();

    post_send;

    poll_completion;

    resources_destroy;

}

//
//
int print_config()
{
    打印出configuration 配置信息。
}

int resources_init()
{
    resources struct结构体清0。
}

int resources_create()
{
    Call sock_connect
    调用sock_connect用TCP套接字连接到peer(对等方)。

    获取设备列表(devices list),找到我们想要的设备,然后将其打开。

    释放设备列表。(Free device list.)

    Get the port information. #获取port 信息
    Create a PD. //ibv_alloc_pd
    Create a CQ. //ibv_create_cq
    Allocate a buffer,并初始化和注册。
    res->buf = (char *)malloc(size);
    memset(res->buf, 0, size);
    ibv_reg_mr(res->pd, res->buf);
    分配一个缓冲区,对其进行初始化,然后对其进行注册。

    Create a QP. //res->qp = ibv_create_qp(res->pd, &qp_init_attr);
}

sock_connect()
{
    如果是客户端,请解析服务器的DNS地址并启动与服务器的连接。
    如果是服务器,请在指示的端口上侦听传入的连接。
}

connect_qp()
{
    Call modify_qp_to_init.
    Call post_receive.
    Call sock_sync_data  在服务器和客户端之间交换信息。
    Call modify_qp_to_rtr.
    Call modify_qp_to_rts.
    Call sock_sync_data  同步客户端<->服务器
}

post_send
{
    为要发送(或在RDMA读取情况下接收)的数据准备scatter/gather 条目。
    创建一个SR。请注意,IBV_SEND_SIGNALED是冗余的(Note that IBV_SEND_SIGNALED is redundant.)。
    如果这是RDMA操作,请设置address 和key。
    Post SR。
}

poll_completion()
{
    Poll CQ,直到找到一个CQE或达到MAX_POLL_CQ_TIMEOUT毫秒 超时。
}

resources_destroy()
{
    释放资源。
 }

以上参考大佬知乎文章:RDMA基础概念及编程例子 - 灵丹的文章 - 知乎
https://zhuanlan.zhihu.com/p/533124053

TCP拥塞控制BBRv3

BBRv3(Bottleneck Bandwidth and Round-trip time version 3)是一种拥塞控制算法,它旨在通过更准确地测量网络瓶颈带宽和往返时延来提高网络的传输性能。

BBRv3的关键思想是基于新的拥塞信号——“Bottleneck Bandwidth Estimation(BWE)”。这个拥塞信号允许发送方根据连接路径上的实际瓶颈带宽和时延来调整发送速率。

BBRv3的工作原理如下:

  1. 带宽探测阶段(ProbeBW):在这个阶段,BBR尝试测量网络的瓶颈带宽。它通过发送数据包以探测网络的带宽,并观察数据包的发送速率和往返时延来推断瓶颈带宽。

  2. 往返时延探测阶段(ProbeRTT):在这个阶段,BBR尝试测量往返时延(RTT)。它通过发送小的数据包并观察往返时延的变化来计算RTT,从而更准确地估计网络路径的延迟。

  3. 拥塞窗口调整阶段(ProbeLR):在这个阶段,BBR使用上述的瓶颈带宽和RTT信息来调整拥塞窗口的大小,以实现更高效的传输。BBR会根据路径的带宽和RTT的变化来动态调整拥塞窗口的大小,以优化网络资源的利用和降低传输时延。

BBRv3的优势在于它能够更准确地测量网络的瓶颈带宽和时延,并根据实际情况调整发送速率。这使得它能够在高延迟或带宽受限的网络环境中取得更好的性能,提供更快的数据传输速度和更低的时延。

BBRv3已经被广泛应用于Google的网络基础设施中,并且也在TCP协议的实现中得到了支持。但要注意,BBRv3并不适用于所有网络环境,特别是具有严重丢包问题的网络。在使用BBRv3之前,建议进行充分的测试和评估,以确保它适合你的网络需求和情况。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"Java高级架构面试知识点整理.pdf"是一份关于Java高级架构的面试知识点的文档。该文档主要包括以下几个方面的内容: 1. Java多线程和并发:讲解Java中的多线程概念、线程安全性、线程的生命周期和状态转换、线程同步与锁、并发工具类(如CountDownLatch、Semaphore等)、线程池等相关知识点。 2. JVM与GC算法:了解Java虚拟机(JVM)的基本原理、内存结构和内存模型,理解垃圾回收(GC)算法的原理和常见的垃圾回收器(如Serial、Parallel、CMS、G1等),掌握GC调优的一般方法。 3. 分布式架构和并发编程模型:认识分布式系统的基本概念、CAP定理、分布式存储和分布式计算的方案,了解常见的并发编程模型(如Actor模型、异步编程等)和实现方式。 4. 高性能网络编程:熟悉Java NIO的基本原理、底层实现和使用方式,了解Java网络编程的相关API和概念(如Socket、ServerSocket、Selector等),了解基于Netty框架的高性能网络编程。 5. 分布式消息队列和中间件:了解消息队列的基本概念、常见的消息中间件(如RabbitMQ、Kafka等)的特点和使用场景,理解消息队列的高可用、持久化、消息顺序等特性。 6. 微服务和服务治理:理解微服务的概念、优劣势和架构特点,了解微服务的拆分和组织原则,熟悉常见的服务治理框架(如Spring Cloud、Dubbo等)和相关的技术组件。 7. 高可用和容灾设计:掌握高可用架构的设计原则和常见的高可用技术方案(如集群、负载均衡、故障切换等),了解容灾方案的设计和实现方法,学习如何保证系统的可靠性和稳定性。 8. 性能优化与调优:了解性能优化的基本思路和方法,熟悉性能调优的一般流程和工具,掌握常见的性能调优技术(如缓存、异步、批处理等)和优化手段。 以上就是对于"Java高级架构面试知识点整理.pdf"文档的简要回答,希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值