【CXL协议-ARB/MUX层(5)】

5.0 Compute Express Link ARB/MUX

前言:
在CXL协议中,ARB/MUX层(Arbitration/Multiplexer layer)是负责管理资源共享和数据通路选择的一层。CXL协议包含了几个子协议,主要有CXL.io、CXL.cache 和 CXL.memory。ARB/MUX层在这些子协议之间起到了关键的调度和选择作用,以确保数据流和控制流的正确传输。
下面是ARB/MUX层的一些主要职能:
仲裁 (Arbitration): 在多个请求同时争用相同资源的情况下,仲裁逻辑确保了系统中的各种请求能够公平且有效地访问到共享资源。比如,当多个加速器试图通过CXL访问系统内存时,ARB层会决定哪一个请求先被处理。
多路复用 (Multiplexing): CXL协议支持多种类型的事务(如CXL.io、CXL.cache 和 CXL.memory事务)。MUX层负责将来自不同类型的事务的数据流按照其目的地进行路由,保证每种事务能够在正确的地址和时间到达目的地。
数据流控制: ARB/MUX层还需要处理不同速率的数据流,确保数据包能够按照正确的顺序进行转发,以及处理拥塞和压力情况。
接口协调: 在实际的硬件实现中,ARB/MUX层可能需要与物理层(PHY)协调,以匹配不同的传输速率和时序要求。
ARB/MUX层在CXL协议栈中起到了桥梁的作用,它使得数据包能够在CXL的不同协议组件之间高效、有序地传递,同时保持高效的带宽利用和低延迟。这一层对于保证CXL接口的性能和可靠性是至关重要的。由于CXL是建立在PCIe基础上的,所以ARB/MUX层也承担了与PCIe标准协议相兼容和转换的任务。

下图显示了CXL ARB/MUX在Flex Bus分层中的位置等级制度ARB/MUX提供CXL.io和CXL.cachemem的动态复用链路层控制和数据信号,以与Flex总线物理层接口。
图5-1 Flex Bus 分层 - CXL ARB/MUX (部分已经高亮)
在这里插入图片描述

在传输方向上,ARB/MUX在来自CXL链路的请求之间进行仲裁分层并多路复用数据。它还处理来自链路层:将它们解析为单个请求以转发到物理层,为每个链路层接口维护虚拟链路状态机(vLSM),以及生成ARB/MUX链路管理包(ALMP)以传送功率代表每个链路层跨链路的状态转换请求。
提到第10.3节、第10.4节和第10.5节,了解有关ALMP如何在用于功率状态转换的整个流程中使用。在PCIe*模式下,ARB/MUX旁路,因此ARB/MUX的ALMP生成被禁用
在接收方向上,ARB/MUX确定与CXL相关联的协议并将该微片转发到适当的链路层。它还处理ALMP,参与任何所需的握手并酌情更新其vLSM。
对于256B Flit模式,重放缓冲区是物理层的一部分。ALMP有与68B flit模式不同的微片格式,并受到前向纠错保护FEC)和循环冗余校验(CRC)。它们也必须分配给重播缓冲区,并遵循重放序列协议。因此,它们是保证无错误地传送到远程ARB/MUX。

5.1 vLSM状态

ARB/MUX为与其接口的每个CXL链路层维护vLSM从本地链路层接收的基于电源状态转换请求的状态或者来自代表远程链路层的远程ARB/MUX。
下表5-1列出了vLSM的不同可能状态。
PM状态和Retrain是虚拟状态可以在接口(CXL.io和CXL.cache以及CXL.mem)之间有所不同;
然而,所有其他诸如LinkReset、LinkDisable和LinkError之类的状态被转发到链路层,并且因此跨接口同步。
表5-1。每个链路层接口维护的vLSM状态
在这里插入图片描述

Note: 当物理层LTSSM进入热重置或禁用状态时,该状态为分别作为LinkReset或LinkDisable传送到所有链路层。没有ALMP交换,而不管是谁请求它们,以进行这些转换。LinkError必须将LTSSM设为检测或禁用。例如,允许映射CXL.io下游端口包含到链路错误(当LTSSM处于禁用状态时)
ARB/MUX查看每个vLSM的状态,以解析为单个状态请求转发到表5-2中指定的物理层。例如,如果vLSM[0]状态为L1.0(行=L1.0),当前vLSM[1]状态为Active(列=活跃),则从ARB/MUX到物理层的已解析请求将是活跃的
表5-2。ARB/MUX多vLSM分辨率表
在这里插入图片描述

基于来自一个或多个链路层的请求状态,ARB/MUX将将所述状态请求改变到所述物理层以获得期望的链路状态。
对于链路层支持将ARB/MUX定向到LinkReset或LinkError或LinkDisable,ARB/MUX必须无条件传播这些从请求链路层到物理层的请求;这个优先超过表5-2
表5-3描述了vLSM从一种状态转换到下一个在触发条件中的所有步骤之后发生到下一个状态的转换列已完成。一些触发条件是连续的,表明来自多个来源的一系列操作。例如,在从“活动”转换为上游端口上的L1.x状态,直到vLSM接收到来自链路层的进入L1.x的请求,随后vLSM发送向远程vLSM请求ALMP{L1.x}。接下来,vLSM必须等待接收状态来自远程vLSM的ALMP{L1.x}。一旦所有这些条件依次满足vLSM将根据请求转换到L1.x状态。某些触发条件是仅在68B Flit模式下运行时适用,并且这些在表中突出显示“仅适用于68B Flit模式”

表5-3。ARB/MUX状态转换表(第1页,共2页)
在这里插入图片描述

表5-3。ARB/MUX状态转换表(第2页,共2页)
在这里插入图片描述

5.1.1本地vLSM转换的附加规则

1.对于68B Flit模式,如果任何链路层请求进入到ARB/MUX的Retrain,ARB/MUX必须将请求转发到物理层以启动LTSSM过渡到恢复。根据Active to Retrain转换触发器条件下,LTSSM处于恢复状态后,ARB/MUX应将Retrain反映为所有处于活动状态的vLSM。对于256B Flit模式,没有Active to Retrain arc在ARB/MUX vLSM中,因为物理层LTSSM转换到恢复不会影响vLSM状态。
注意:对于256B Flit模式:不将物理层LTSSM转换为恢复暴露到链路层vLSM允许Rx重试缓冲区可能耗尽的优化而LTSSM处于恢复中。它还避免了vLSM变成与远程链接伙伴不同步。处理错误情况,如UpdateFCDLLP超时,实现必须具有来自链接的边带机制用于触发LT的物理层的层SSM过渡到恢复。
2.一旦vLSM处于Retrain状态,预计相应的链路层将最终请求ARB/MUX转换到活动。
3.如果LTSSM移动到检测,则每个vLSM最终必须转换到重置。

5.1.2 vLSM跨链路状态转换规则

本节涉及vLSM状态转换。

5.1.2.1 一般规则

如果CXL.io协议断开,则链路无法对任何其他协议进行操作(CXL.io操作是最低要求)

5.1.2.2进入主动交换协议

进入活动状态所需的ALMP协议由4个ALMP交换机组成在本地和远程vLSM之间,如图5-2所示。进入Active以开头发送到远程vLSM的活动状态请求ALMP状态ALMP。对活动状态请求的唯一有效响应是活动一旦相应的链路层准备好接收协议微片,状态状态。这个远程vLSM还必须向本地vLSM发送活动状态请求ALMP以活动状态ALMP进行响应
在初始链路训练期间,上游端口(图5-2中的UP)必须等待非物理层微片(即,不是由下游端口(图5-2中的DP))第6.4.1节)。因此,在初始链路训练期间,第一个ALMP总是从下行端口到上行端口。如果有其他活动交换机握手随后发生(例如,作为PM退出的一部分),可以启动活动请求ALMP从两侧。
一旦vLSM发送并接收到活动状态ALMP,vLSM转换到活动状态。
图5-2。进入活动协议交换
在这里插入图片描述

5.1.2.3状态同步协议

对于256B Flit模式,由于重试缓冲区位于物理层,因此所有ALMP保证无错误地传送到远程ARB/MUX。此外,所有ALMP保证会得到回应。因此,不存在上游端口和下游端口vLSM可能不同步。
状态同步协议仅适用于68B Flit模式。以下内容描述和规则适用于68B Flit模式。
在初始链路训练期间达到协商的最高操作速度之后随后的LTSSM恢复转换必须用信号通知ARB/MUX。vLSM状态退出恢复后必须执行同步协议。链接层不能在LTSSM恢复后的链路上进行任何其他通信,直到相应vLSM的状态同步协议已完成。图5-3显示了状态同步协议的示例。
状态同步协议完成需要中的以下事件列出的订单:
1.状态交换:传输状态状态ALMP,并接收无错误状态状态ALMP。传输的状态状态ALMP中指示的状态为vLSM状态的快照。参见第5.1.2.3.1节。
2.基于发送和接收状态的相应状态状态决议同步交换期间的状态ALMP。确定见表5-4已解析的vLSM状态。
3.新状态请求和状态ALMP交换(如适用)。如果解析的vLSM状态与链路层请求的状态不同。

5.1.2.3.1 vLSM快照规则

STATUS_EXCHANGE_PENDING变量用于确定可以采用vLSM。以下规则适用:
•如果为该vLSM清除STATUS_EXCHANGE_PENDING变量
•一旦拍摄快照,就会为vLSM设置STATUS_EXCHANGE_PENDING变量
•STATUS_EXCHANGE_PENDING变量在重置或完成时被清除
状态交换(即,传输状态ALMP,并接收无错误状态ALMP)这是为了说明在状态期间损坏的状态ALMP的情况Exchange可以通过恢复导致更多LTSSM转换。见图5-16以该流程为例

图5-3。状态交换示例
在这里插入图片描述

表5-4。状态交换后的vLSM状态解析(第1张,共2张)
在这里插入图片描述

表5-4。状态交换后的vLSM状态解析(第2页,共2页)
在这里插入图片描述

5.1.2.3.2状态交换后状态解析说明(表5-4)

1、对于解析状态为活动的行,相应的ARB/MUX必须确保在状态状态ALMP之后立即从远程ARB/MUX可以由相应vLSM的链路层来服务。保证这一点的一种方法是确保对于这些情况,链路层接收器在状态交换期间发送状态状态ALMP之前已准备就绪。
2、第7行和第11行将导致L1退出流遵循状态解析。这个相应的ARB/MUX必须通过新状态启动向活动的转换请求ALMP。一旦上游端口VLSM和下游端口VLSM处于活动状态时,如果需要,链路层可以重新进行PM条目协商。类似地,对于行10,如果在PM协商期间达到,则要求两个vLSM都启动主动请求ALMP。
3、如果支持,第3行和第8行将导致L2出口流遵循状态解析。由于LTSSM最终将移动到Detect,因此每个vLSM最终都将转换到重置状态。
4、第7行和第8行仅适用于上游端口。由于进入PM总是由上游端口启动,并且它不能将其vLSM转换为PM,除非下游港口已经这样做了,不存在这些行可以申请的情况下游端口。
5、行为未定义,并且实现特定于中未捕获的组合表5-4。
5.1.2.4状态请求ALMP
以下规则适用于发送状态请求ALMP。状态请求ALMP是发送以请求将状态更改为活动或PM。对于PM,只能启动请求通过上游端口上的ARB/MUX。

5.1.2.4.1进入活动

1、所有恢复状态操作必须在进入活动序列之前完成启动。对于68B Flit模式,这包括完成状态同步LTSSM从恢复转换到L0后的协议
2、发送ALMP状态请求以启动进入活动状态。
3、vLSM必须发送请求并接收状态,然后发射器才能被认为是活跃的。这并不等同于vLSM活动状态。
4、只有当vLSM达到活动状态时,才能传输协议层微片状态
图5-4显示了进入活动状态的示例。图5-4中的流程显示四个不一定在中发生的独立操作(ALMP握手)所示的顺序或小时间段。vLSM发射机和接收机可能会彼此独立地活动。发射器和接收器必须在vLSM状态为活动。vLSM发送后,发送器变为活动状态请求ALMP{Active}并且接收到状态ALMP{Active}。接收器变成在vLSM接收到请求ALMP{active}并发送状态ALMP{active}之后处于活动状态作为回应有关活动状态请求/状态的规则,请参阅第5.1.2.2节握手协议。
图5-4。CXL进入活动示例流
在这里插入图片描述

5.1.2.4.2进入PM状态(L1/L2)

1、发送ALMP状态请求以启动进入PM状态。仅上游端口可以启动进入PM态。
2、对于上游端口,vLSM必须在对于相应的vLSM,PM协商被认为是完成的。
图5-5显示了由上游端口启动的进入PM状态(L1)的示例(图中向上)ARB/MUX。一旦vLSM已发送请求ALMP{L1},并收到状态ALMP{L1}作为返回或vLSM已接收到请求ALMP{L1}并发送状态ALMP{L1}作为返回。vLSM独立操作,操作可能无法按顺序或在时间表显示。一旦所有vLSM都准备好进入PM状态(L1),通道将完成EIOS交换并输入L1。
图5-5。CXL进入PM状态示例

5.1.2.5 State Status ALMP
5.1.2.5.1 When State Request ALMP is received(当收到状态请求 ALMP 时)

• 当接受进入PM 状态时,在接收到进入活动状态或PM 状态的状态请求ALMP 后,发送状态ALMP。 如果不接受 PM 状态,则不发送状态 ALMP。 有关更多详细信息,请参见第 10.3 节“Compute Express Link 电源管理”。

5.1.2.5.2 Recovery State

• 如果在 vLSM 未首先发送状态请求的情况下接收到状态 ALMP,则 vLSM 将触发链路恢复,除非出于同步目的而接收到状态 ALMP(即在链路退出恢复之后)。
图 89 显示了恢复退出的一般示例。 状态同步协议的详细内容请参见5.1.2.3 节。
在这里插入图片描述
退出恢复时,通道两侧的 vLSM 将发送状态 ALMP 以便同步 vLSM。 如果解析的状态和链路层请求的状态不相同,则用于同步的状态 ALMP 可能会触发状态请求 ALMP,如图 90 所示。请参阅第 5.1.2.3 节了解状态同步期间应用的规则。 在出现意外 ALMP 的情况下,用于同步的 ALMP 可能会触发重新进入恢复。 使用第 5.1.3.1 节中的初始链路训练流程示例对此进行了解释。 如果两个 vLSM 解析的状态与链路层请求的状态相同,则 vLSM 被视为已同步并将继续正常操作。

图 90 显示了通过恢复退出 PM 状态 (L1) 的示例。 L1状态的DP vLSM[0]收到Active Request,链路进入Recovery状态。 退出恢复后,每个vLSM都会发送Status ALMP{L1}以同步vLSM。
由于同步后的resolved状态不等于请求状态,所以Request ALMP{Active}和Status ALMP{Active}握手完成,进入Active状态。
在这里插入图片描述

5.1.2.6 Unexpected ALMPs

以下情况描述了意外 ALMP 将触发链路恢复的情况:
• 当退出恢复后执行状态同步协议时,除状态ALMP 之外的任何ALMP 均被视为意外ALMP,并将触发恢复。
• 发送主动请求ALMP 后,收到除主动状态ALMP 或主动请求ALMP 之外的任何ALMP 均被视为意外ALMP,并将触发恢复。
• 如第 5.1.2.5.2 节所述,在未首先发送状态请求 ALMP 的情况下接收到的状态 ALMP 是意外 ALMP,除非在状态同步协议期间。

5.1.3 vLSM状态转换规则的应用

5.1.3.1 初始链路训练

当链路从 Gen1 速度训练到最高支持速度(CXL 的 Gen3 或更高速度)时,LTSSM 可能会经历多次恢复到 L0 到恢复的转换。
实现不需要将 ARB/MUX 暴露给所有这些恢复转换。 根据这些初始恢复转换是否对 ARB/MUX 隐藏,初始 ALMP 握手可能会发生四种不同的情况。 在所有情况下,vLSM 状态转换规则保证情况会自行解决,vLSM 达到活动状态。 这些场景如下图所示。 请注意,这些图是说明性示例,实现必须遵循前面几节中概述的规则。 图中只显示了一次 vLSM 握手,但第二次 vLSM 也可能发生类似的握手。
图 91 显示了 DP 和 UP 都隐藏来自 ARB/MUX 的初始恢复转换的场景示例。 由于它们都没有看到恢复条目的通知,因此它们继续交换 Active 请求和状态 ALMP 以转换为 Active 状态。 请注意,第一个 ALMP(Active request ALMP)是从 DP 发送到 UP 的。

在这里插入图片描述
图 92 显示了一个示例,其中 DP 和 UP 在初始链路训练期间向 ARB/MUX 通知至少一个恢复转换。 在这种情况下,首先交换状态同步 ALMP(指示重置状态),然后定期交换活动请求和状态 ALMP(未明确显示)。 请注意,第一个 ALMP(复位状态)是从 DP 发送到 UP 的。
在这里插入图片描述
图 93 显示了 DP 隐藏来自 ARB/MUX 的初始恢复转换但 UP 不隐藏的场景示例。 在这种情况下,DP ARB/MUX 尚未看到恢复转换,因此它首先向 UP 发送活动状态请求 ALMP。 这被 UP 解释为意外的 ALMP,并触发链路恢复(现在必须通知 ARB/MUX,因为它是在以最高支持的链路速度达到操作之后)。 使用 state=Reset 进行状态同步,然后执行常规的 Active 请求和状态握手(未明确显示)。
在这里插入图片描述
图 94 显示了 UP 隐藏初始恢复转换但 DP 不隐藏的场景示例。 在这种情况下,DP首先发送复位状态ALMP。
这将导致 UP 根据第 5.1.2.5 节中的规则触发链路恢复(现在必须通知 ARB/MUX,因为它是在以最高支持的链路速度达到操作之后)。 使用 state=Reset 进行状态同步,然后执行常规的 Active 请求和状态握手(未明确显示)。
在这里插入图片描述

5.1.3.2 Status Exchange Snapshot Example(状态交换快照示例)

图 95 显示了 UP 上 vLSM[1] 的状态交换期间状态 ALMP 损坏的情况示例。 损坏的 ALMP 是指较低的四个 DW 与接收到的 ALMP 不匹配; 它表示传输期间 ALMP 的低 4 个 DW 上出现位错误。 ARB/MUX 会因此触发 LTSSM 恢复。 当收到第二个恢复条目的恢复条目通知时,UP 上的 vLSM[1] 快照仍处于活动状态 - 因为状态交换尚未成功完成。
在这里插入图片描述

5.1.3.3 L1 中止示例

图 96 显示了物理链路 L1 转换期间可能出现的场景示例。 首先,两个 vLSM 通过相应的 PM 请求和状态 ALMP 握手成功进入 L1。 ARB/MUX 甚至请求物理层将 LTSSM 带到 DP 和 UP 的 L1。 然而,恰好存在竞争,并且在 DP 物理层接收到 EIOS 之前,其中一个 vLSM 请求“活动”。 这会导致 ARB/MUX 删除 L1 条目请求(L1 中止),同时向 UP 发送主动请求 ALMP。 当EIOS最终被物理层接收时,由于DP侧的ARB/MUX没有请求L1(并且没有
支持 CXL 中的 L0),物理层必须将 LTSSM 恢复以解决此情况。 在恢复退出时,DP 和 UP ARB/MUX 都会发送其相应的 vLSM 状态作为同步协议的一部分。 对于vLSM[1],由于已解决的状态状态(Retrain)与期望的状态状态(Active)不同,因此DP必须向UP发送另一个Active请求ALMP。 类似地,在 UP 侧,接收到的状态状态(L1)与期望的状态状态(Active - 因为 vLSM 移动到 Retrain 会触发 UP 链路层请求 Active)不同,UP ARB/MUX 将发起 向 DP 发出主动请求 ALMP。 一旦发送和接收了 Active 状态 ALMP,相应的 ARB/MUX 会将 vLSM 移至 Active,并且可以开始协议级 flit 传输。
在这里插入图片描述

5.2 ARB/MUX Link Management Packets

ARB/MUX 使用 ALMP 将与每个链路层相关的虚拟链路状态转换请求和响应传送到远程 ARB/MUX。
ALMP 是一个 1DW 数据包,其格式如下图 97 所示。 该 1DW 数据包在 528 位 flit 的低 16 字节上复制四次,以提供数据完整性保护; flit 在高位上用零填充。 如果 ARB/MUX 检测到 ALMP 中的错误,它会启动链路重新训练。
在这里插入图片描述
ALMP数据包的字节1、2和3如下表62所示。 ALMP 的字节 1 中使用的消息代码是 0000_1000b。 ALMP 可以是请求类型或状态类型。 本地 ARB/MUX 使用请求 ALMP 启动远程 vLSM 的转换。 接收到请求ALMP后,本地ARB/MUX处理转换请求并返回状态ALMP以指示转换已经发生。 如果不接受转换请求,则不会发送状态 ALMP,并且本地和远程 vLSM 均保持其当前状态。
在这里插入图片描述

5.2.1 ARB/MUX 旁路功能

当 Flex Bus 链路在 PCIe 模式下运行时,ARB/MUX 必须禁用 ALMP 的生成。 可以通过 hwinit 或在链路训练期间确定旁路条件。

5.3 仲裁和数据复用/解复用

ARB/MUX 负责在来自 CXL 链路层的请求之间进行仲裁,并根据仲裁结果复用数据。 仲裁策略是特定于实现的,只要它满足通过 Flex 总线链路传输的更高级别协议的时序要求即可。 此外,必须有一种方法来编程与 CXL.io 和 CXL.cache+CXL.mem 链路层相关的相对仲裁权重,因为它们仲裁通过 Flex Bus 链路传输流量。 更多详细信息,请参见第 8.2.6.1 节。 不同 CXL 协议之间的流量交错是在 528 位 flit 边界处完成的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/773315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 面试经典150题 383.赎金信

题目: 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 思路&#x…

计算机网络——数据链路层(差错控制)

计算机网络——数据链路层(差错控制) 差错从何而来数据链路层的差错控制检错编码奇偶校验码循环冗余校验(CRC)FCS 纠错编码海明码海明距离纠错流程确定校验码的位数r确定校验码和数据位置 求出校验码的值检错并纠错 我们今年天来继…

【Linux】-Linux下的编辑器Vim的模式命令大全及其自主配置方法

目录 1.简单了解vim 2.vim的模式 2.1命令模式 2.2插入模式 2.3底行模式 3.vim各模式下的命令集 3.1正常(命令模式下) 3.1.1光标定位命令 3.1.2 复制粘贴 3.1.3 删除 3.1.4 撤销 3.1.5大小写转换 3.1.6替换 「R」:替换光标所到之处的字符&…

ComfyUI SDWebUI升级pytorch随记

目前使用的版本是去年10月的1.6版本,有点老。希望支持新的特性,于是乎开始作死。从升级torch开始。先看看已有的版本: (venv) rootubuntu-sd-server:~# pip show torch Name: torch Version: 2.0.1 Summary: Tensors and Dynamic neural net…

【贪心]【字符串】【分类讨论】420 强密码检验器

本文涉及知识点 贪心 字符串 分类讨论 LeetCode420 强密码检验器 满足以下条件的密码被认为是强密码: 由至少 6 个,至多 20 个字符组成。 包含至少 一个小写 字母,至少 一个大写 字母,和至少 一个数字 。 不包含连续三个重复字…

Reactor 模式全解:实现非阻塞 I/O 多路复用

Reactor网络模式是什么? Reactor网络模式时目前网络最常用的网络模式。如果你使用Netty,那么你在使用Reactor;如果你使用Twisted,那么你子啊使用Reactor;如果你使用netpoll,那么你在使用Reactor。 这里先给出答案:Reactor I/O多…

204基于matlab的图像融合

基于matlab的图像融合,包括三种方式,加权、PCA、IHS变换。比较三者融合后的图像差异。程序已调通,可直接运行。 204 matlab 图像融合 信息融合 - 小红书 (xiaohongshu.com)

【二叉树】Leetcode 94. 二叉树的中序遍历【简单】

二叉树的中序遍历 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2] 解题思路 中序遍历是一种二叉树遍历方式,按照“左根右”的顺序遍历二叉树节点。 1、递归…

python 处理png图片无损压缩

代码利用了Pillow库来处理图片的压缩,并使用了 glob 模块来搜索所有的 .png 文件。这个脚本应该能够按照当前的编写来完成预期的工作。 请注意,compress_level9 指定了Pillow保存PNG图片时采用的最大压缩等级。这确保了每张图片都被以可能的最小文件大小…

【Spring】Spring框架中的一个核心接口ApplicationContext 简介,以及入口 Run() 的源码分析

一、简介 ApplicationContext 是Spring框架中的一个核心接口,它是Spring IoC容器的实现之一,用于管理和组织应用程序中的各种Bean,同时提供了一系列功能来支持依赖注入、AOP等特性。 简单来说,ApplicationContext 是一个大型的、…

求两个单链表的差集

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 但行前路,不负韶华&#…

发车,易安联签约某新能源汽车领军品牌,为科技创新保驾护航

近日,易安联成功签约某新能源汽车领军品牌,为其 数十万终端用户 建立一个全新的 安全、便捷、高效一体化的零信任终端安全办公平台。 随着新能源汽车行业的高速发展,战略布局的不断扩大,技术创新不断引领其市场价值走向高点&am…

移动端Web笔记day03

移动 Web 第三题 01-移动 Web 基础 谷歌模拟器 模拟移动设备,方便查看页面效果,移动端的效果是当手机屏幕发生了变化,页面和页面中的元素也要跟着等比例变化。 屏幕分辨率 分类: 硬件分辨路 -> 物理分辨率:硬件…

GTC 2024 火线评论:DPU 重构文件存储访问

编者按:英伟达2024 GTC 大会上周在美国加州召开,星辰天合 CTO 王豪迈在大会现场参与了 GPU 与存储相关的最新技术讨论,继上一篇《GTC 2024 火线评论:GPU 的高效存储利用》之后,这是他发回的第二篇评论文章。 上一篇文章…

pear-admin 项目结构讲解

上一篇文章介绍了pear-admin用到flask的技术, 深入代码后发现其结构也是令人眼前一亮, 结构化,模块化, 解耦做得非常优秀。 整个项目数据库使用migrate做了版本管理, 使用marshmallow做了序列化,这样数据库…

vue实现文字一个字一个字的显示(开箱即用)

图示&#xff1a; 核心代码 Vue.prototype.$showHtml function (str, haveCallback null) {let timeFlag let abcStr for (let i 0; i < str.length; i) {(function (i) {timeFlag setTimeout(function () {abcStr str[i]haveCallback(abcStr)if ((i 1) str.length…

EPSON推出的实时时钟模块RX8130CE功耗低至300nA、从容应对各种使用场景

随着科技的进步和消费者需求的不断变化&#xff0c;笔记本电脑市场继续展现出强劲的发展势头一方面移动性和轻薄性成为主流&#xff0c;另外一方面性能在不断提升&#xff0c;功能也日益丰富。实时时钟模组&#xff0c;作为提供时间和定时功能的单元模块&#xff0c;是笔记本电…

解决错误LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to

react native pod第三方包或者git clone的时候遇到 OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443两种解决方案 方法一 修改计算机网络配置 由于使用 IPv6 的原因&#xff0c;可能会导致这一问题的出现 系统在解析hostname时使用了ipv6 可以配…

【工具】秘塔AI搜索|强烈推荐,中文免费搜索神器!堪比做报表的员工

网址&#xff1a;https://metaso.cn/ 使用时间&#xff1a;2024/03/27 以前其实用过它家的秘塔写作猫&#xff0c;当时感觉非常不错。 这次看到它出AI搜索&#xff0c;感觉开发者挺有野心和实力的。 推荐原因&#xff1a; 国产产品&#xff0c;中文适用性强。目前还免费。【不…

工业镜头常用参数之实效F(Fno.)和像圈

Fno. 工业镜头中常用到的参数F&#xff0c;有时候用F/#&#xff0c;Fno.来表示&#xff0c;指的是镜头通光能力的参数。它可用镜头焦距及入瞳直径来表示&#xff0c;也可通过镜头数值孔径&#xff08;NA&#xff09;和光学放大倍率&#xff08;β&#xff09;来计算。有效Fno.…