CXL:拯救NVMe SSD缓存不足设计难题-2
LMB提出了基于CXL协议的内存扩展框架和内核模块。该方案利用CXL内存扩展器作为物理DRAM源,旨在提供一个统一的内存分配接口,使PCIe和CXL设备都能方便地访问扩展的内存资源。通过这个接口,NVMe驱动和CUDA的统一内存内核驱动可以直接高效地访问CXL内存扩展器,让SSD和GPU设备能够像使用板载内存一样轻松地利用LMB提供的内存资源。这一设计旨在消除内存短缺问题,同时保持高性能和灵活性,是解决现代高性能计算和数据中心内存需求增长的有效途径。
CXL Linked Memory Buffer (LMB) 是一种创新的框架,旨在通过CXL(Compute Express Link)技术扩展设备内存,而非仅仅扩展主机内存。这项技术弥补了现有研究的空白,后者主要集中在通过CXL构建主机内存池上。
LMB的核心在于CXL内存扩展器(CXL Memory Expander)与CXL交换机的结合使用。扩展器通过CXL交换机与主机及CXL/PCIe设备相连,为它们提供一个集中管理的内存池。该内存池包含多个汇集的Host-Managed Device Memories (HDMs),并支持基本的地址映射、访问控制等功能。LMB框架基于CXL协议,将扩展器作为Global Fabric Device (GFD),不仅服务于CXL设备,还能服务主机上的其他PCIe设备。它在内核级别实现了一个统一框架,支持CXL和PCIe设备,并为设备驱动程序提供内存分配、释放和访问控制等API。
LMB组件与功能
-
CXL内存扩展器与Fabric Manager (FM):扩展器作为GFD,由FM直接管理,负责全局内存资源的分配与动态管理。FM可以实现在主机软件中或交换机/设备固件中,管理CXL架构中的设备与资源。宿主机可通过FM的API动态查询和配置扩展器状态,实现多宿主机间动态内存分配。扩展器内部管理HDMs,通过地址映射将宿主机请求中的Host Physical Addresses (HPAs) 转换为Device Physical Addresses (DPAs)。
-
LMB内核模块:考虑到PCIe设备与CXL设备访问内存协议的不同,以及现有CXL内存池设计难以兼容PCIe设备,LMB内核模块被设计成一座桥梁,提供统一的内存分配和共享接口。该模块首先向FM请求内存块,然后与设备驱动交互完成内存分配,并通过提升加载优先级避免PCIe设备初始化阶段的内存请求失败。
内存管理
-
内存分配器:内核模块通过FM API向扩展器请求内存,映射到主机物理地址空间后等待分配给本地设备。当内存不足时,模块会请求256MB的内存块。所有设备内存释放后,模块会将内存区域归还给FM。通过在主机上维护内存分配器元数据,可以优化大内存映射对齐,减少CXL内存访问次数。
-
数据路径:PCIe设备不能直接使用CXL协议访问扩展器,但可以通过CPU将PCIe TLP转换为CXL.mem协议中的MemRd/MemWr命令,访问映射到物理地址的HDM。由于PCIe设备不支持CXL缓存一致性,所以内存被设置为非缓存类型。尽管PCIe设备和CXL设备共享内存时,PCIe设备收不到回写的监听信息,但这不会引起一致性问题。(浅析CXL P2P DMA加速数据传输的原理)
LMB API提供与设备驱动交互
LMB内核模块为支持分配、释放和共享操作的设备驱动程序提供了一系列API接口,使得驱动程序能够调用这些API来高效地管理外部扩展内存。这些API包括但不限于分配内存(lmb_PCIe_alloc, lmb_CXL_alloc)、释放内存(lmb_PCIe_free, lmb_CXL_free)以及内存共享(lmb_PCIe_share, lmb_CXL_share)。
SSD应用LMB存储L2P表的流程
下图展示了SSD如何利用LMB申请内存来存储其逻辑到物理(L2P)映射表的过程。在这个过程中,PCIe设备通过LMB获取到设备可访问的总线地址和在本地主机上的唯一内存标识符。除了获取GFAM(Global Fabric-Attached Memory)的HPA(Host Physical Address)之外,CXL设备还会得到扩展器PID(Process ID),以便发起P2P请求。这样,共享内存可以充当IO缓冲区,减少设备间的数据复制操作,例如,通过共享内存直接从SSD发送数据到加速器进行计算,实现了零拷贝数据路径,极大地提升了数据传输效率。
内核模块负责维护HPA和总线地址到物理地址的映射关系,通过地址翻译机制实现PCIe设备与CXL设备之间的内存共享,无需数据复制,从而优化了内存使用效率。
为了确保不同设备间内存访问的安全性,LMB整合了两种访问控制模式:
-
对于PCIe设备,采用IOMMU来限制设备只能访问分配给它的内存范围,避免非法访问。
-
对于CXL设备,通过SPID Access Table (SAT) 来管理对Global Fabric Device (GFD)的访问控制。GFD能够根据内存请求中的SPID字段识别请求发起方是CXL设备还是主机。内核模块在分配内存给PCIe设备时创建IOMMU页表,在CXL设备请求内存时将其SPID添加到SAT中。当内存释放或共享时,相关的表项会被相应更新,确保访问权限的实时性和准确性。
LMB方案通过统一的API接口、高效的内存共享机制以及严格的访问控制策略,有效解决了PCIe和CXL设备内存扩展和访问安全问题,提升了系统整体的性能和效率。
论文中展示了初步的模拟结果,以证明LMB(Linked Memory Buffer)在扩展SSD DRAM用于L2P索引方面的有效性。研究对比了LMB方案与理想情况(即所有映射表均存储于板载DRAM中)以及DFTL(一种动态闪存转换层技术)方案的性能。LMB方案进一步细分为LMB-CXL和LMB-PCIe,以评估不同设备通过CXL或PCIe接口访问外部内存的场景。
此外,还利用了PCIe Gen4和Gen5标准的SSD进行测试,以考察不同PCIe标准的影响。评估工作负载包括随机/顺序读写,使用FIO工具进行,配置了队列深度为64、IO大小为4KB的libaio IO引擎。
由于真实CXL开发板的稀缺,LMB-CXL和LMB-PCIe的模拟是在修改了固件(特别是L2P索引模块)的PCIe Gen4和Gen5 SSD上进行的。通过比较这两种不同性能基线的SSD,观察CXL额外延迟对不同性能级别设备的潜在影响。
在理想情况方案中,为了模拟LMB和DFTL方案,特意在L2P索引操作中加入了延迟。模拟DFTL缓存未命中时,在理想方案中增加了25微秒的延迟;对于LMB-PCIe,分别在PCIe Gen4和Gen5 SSD上增加了880纳秒和1190纳秒的延迟;LMB-CXL则增加了190纳秒的延迟。
PCIe Gen4 SSD性能评估
在主流的PCIe Gen4 SSD上,LMB-CXL和LMB-PCIe在写工作负载下与理想方案的吞吐量相当,比DFTL方案高出7倍。在读工作负载下,LMB-CXL保持接近理想方案的表现,而LMB-PCIe在顺序和随机读取上分别下降了16.6%和13.3%,但仍优于DFTL方案14倍。这表明LMB机制对于解决高容量QLC SSD的板载内存短缺问题非常有效。
PCIe Gen5 SSD性能评估
在更高速的PCIe Gen5 SSD上,LMB-CXL和LMB-PCIe在写工作负载下与理想方案表现一致,吞吐量比DFTL方案高出20倍。然而,在读工作负载下,两者性能都有所下降,LMB-CXL在顺序和随机读取上分别低了8%和56%,而LMB-PCIe的性能降级更为严重,分别低了62%和70%。即便如此,LMB-PCIe依然比DFTL方案高出20倍的吞吐量。
模拟结果显示,尽管在索引操作中引入数百纳秒的CXL延迟显著影响了高性能SSD的性能,但这些结果是基于所有索引完全依赖于CXL扩展内存的假设。在实际工作负载中,如果大多数索引都能命中板载内存,利用数据访问的局部性,CXL二级索引对设备性能的影响将大大减少。因此,LMB方案特别是LMB-CXL,在解决高密度存储设备的DRAM短缺问题上展现出了潜力,特别是在能够有效利用混合存储方案和优化数据布局的情况下。
本文提出的LMB方案是针对PCIe设备DRAM短缺问题的一次重要探索,通过结合CXL技术,不仅为高性能计算领域带来了新的解决方案,也为未来的存储和计算架构设计提供了新思路。随着CXL技术的成熟与普及,LMB有望成为提升数据中心效率、支持大规模数据处理和复杂模型训练的关键技术之一。未来,继续优化LMB的设计与实施,降低延迟影响,提高内存扩展效率,将是持续的研究方向。
如果您看完有所受益,欢迎点击文章底部左下角“关注”并点击“分享”、“在看”,非常感谢!
精彩推荐:
-
数据中心:AI范式下的内存挑战与机遇
-
WDC西部数据闪存业务救赎之路,会成功吗?
-
属于PCIe 7.0的那道光来了~
-
深度剖析:AI存储架构的挑战与解决方案
-
浅析英伟达GPU NCCL P2P与共享内存
-
3D NAND原厂:哪家芯片存储效率更高?
-
大厂阿里、字节、腾讯都在关注这个事情!
-
磁带存储:“不老的传说”依然在继续
-
浅析3D NAND多层架构的可靠性问题
-
SSD LDPC软错误探测方案解读
-
关于SSD LDPC纠错能力的基础探究
-
存储系统如何规避数据静默错误?
-
PCIe P2P DMA全景解读
-
深度解读NVMe计算存储协议
-
浅析不同NAND架构的差异与影响
-
SSD基础架构与NAND IO并发问题探讨
-
字节跳动ZNS SSD应用案例解析
-
CXL崛起:2024启航,2025年开启新时代
-
NVMe SSD:ZNS与FDP对决,你选谁?
-
浅析PCI配置空间
-
浅析PCIe系统性能
-
存储随笔《NVMe专题》大合集及PDF版正式发布!
如果您也想针对存储行业分享自己的想法和经验,诚挚欢迎您的大作。
投稿邮箱:Memory_logger@163.com (投稿就有惊喜哦~)
《存储随笔》自媒体矩阵
更多存储随笔科普视频讲解,请移步B站账号:
如您有任何的建议与指正,敬请在文章底部留言,感谢您不吝指教!如有相关合作意向,请后台私信,小编会尽快给您取得联系,谢谢!
相关文章:
CXL:拯救NVMe SSD缓存不足设计难题-2
LMB提出了基于CXL协议的内存扩展框架和内核模块。该方案利用CXL内存扩展器作为物理DRAM源,旨在提供一个统一的内存分配接口,使PCIe和CXL设备都能方便地访问扩展的内存资源。通过这个接口,NVMe驱动和CUDA的统一内存内核驱动可以直接高效地访问…...
Opencv学习项目6——pyzbar
在之前我们学习了解码图片中的二维码,这次我们开启摄像头来解码视频中二维码 开启摄像头 # 打开摄像头 cap cv2.VideoCapture(0) cap.set(3, 640) # 设置摄像头画面宽度 cap.set(4, 480) # 设置摄像头画面高度 我使用的是笔记本上的摄像头来进行的,…...
Switch 刷安卓11 (LineageOS 18.1) 大气层双系统图文教程
很多朋友手上已经拥有了完成硬破的 Switch ,但又不甘心仅仅使用 Switch 本身的地平线系统,Switch 刷安卓 (Android 11) 会是一个好的选择,虽然 Switch 的 CPU 性能拉跨,但和桌面平台同一设计思路的TegraX1 GPU 可谓是先于时代&…...
Spring Boot与Spring Batch的深度集成
Spring Boot与Spring Batch的深度集成 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨在Spring Boot应用中如何实现与Spring Batch的深度集成…...
RTSP协议在视频监控系统中的典型应用、以及视频监控设备的rtsp地址格式介绍
目录 一、协议概述 1、定义 2、提交者 3、位置 二、主要特点 1、实时性 2、可扩展性 3、控制功能 4、回放支持 5、网络适应性 三、RTSP的工作原理 1、会话准备 2、会话建立 3、媒体流控制 4、会话终止 5、媒体数据传输 四、协议功能 1、双向性 2、带外协议 …...
Kotlin基础——异步和并发
同步和异步 同步指的是一种行为:当执行IO操作的时候,在代码层面上我们需要主动去等待结果,直到结果返回阻塞指的是一种状态:当执行IO操作的时候,线程处于挂起状态,就是该线程没有执行了 故同步不是阻塞&a…...
消防认证-防火卷帘
一、消防认证 消防认证是指消防产品符合国家相关技术要求和标准,且通过了国家认证认可监督管理委员会审批,获得消防认证资质的认证机构颁发的证书,消防产品具有完好的防火功能,是住房和城乡建设领域验收的重要指标。 二、认证依据…...
SpringBoot3.3集成knif4j-swagger文档方式和使用案例
springboot3 集成 knif4j : 访问地址: swagger 接口文档默认地址:http://localhost:8080/swagger-ui.html# Knife4j 接口文档默认地址:http://127.0.0.1:8080/doc.html Maven: <dependency><groupId>com.github.x…...
老年服务与管理实训室:制定教学模式
随着我国人口老龄化程度的加深,如何为老年人提供优质的养老服务成为社会关注的重点。作为培养老年服务人才的重要阵地,老年服务与管理实训室应制定科学合理的教学模式,满足行业发展需求,培养出高素质的老年服务专业人才。本文针对老年服务与管理实训室的教学模式展开探讨,提出相…...
4、DDD、中台和微服务的关系
DDD、中台和微服务的关系 1 DDD和中台的本质 领域驱动设计(DDD)和中台在企业架构中有着密切的关系。DDD的本质在于通过对业务领域的深入分析和建模,构建高内聚、低耦合的系统。而中台则是对企业核心业务能力的抽象和封装,以实现…...
【ACM出版,马来西亚-吉隆坡举行】第四届互联网技术与教育信息化国际会议 (ITEI 2024)
作为全球科技创新大趋势的引领者,中国不断营造更加开放的科技创新环境,不断提升学术合作的深度和广度,构建惠及各方的创新共同体。这是对全球化的新贡献,是构建人类命运共同体的新贡献。 第四届互联网技术与教育信息化国际学术会议…...
走进IT的世界
引言 随着高考的结束,对于即将踏入IT(信息技术)领域的新生而言,这个假期不仅是放松身心的时间,更是提前规划、深化专业知识、为大学生活奠定坚实基础的宝贵机会。以下是一份详尽的高考假期预习与规划指南,…...
Linux 时区文件编译器 zic【man 8 zic】
1. NAME(名) zic - 时区编译器 2. SYNOPSIS(概要) zic [-v] [-d directory] [-l localtime] [-p posixrules] [-L leapsecondfilename] [-s] [-y command] [filename ...]3. DESCRIPTION(函数描述) zic…...
Springboot下使用Redis管道(pipeline)进行批量操作
之前有业务场景需要批量插入数据到Redis中,做的过程中也有一些感悟,因此记录下来,以防忘记。下面的内容会涉及到 分别使用for、管道处理批量操作,比较其所花费时间。 分别使用RedisCallback、SessionCallback进行Redis pipeline …...
Vue技巧大揭秘:自定义指令的力量与应用
引言 自定义指令就像是给予开发者的一把魔法钥匙,它能够打开DOM操作的新世界,按我的理解就是把对DOM操作的逻辑进行封装 全局注册与局部注册 全局注册 定义: 全局注册意味着自定义指令在Vue实例创建之前通过Vue.directive()方法注册&…...
HR人才测评,如何考察想象力?
什么是想象力? 想象力是指,人们通过在已有物质的基础上,通过大脑想象、加工、创造出新事物的能力,举一个非常简单的例子,在提到鸟这种生活的时候,大家会联想到各种各样不同鸟的品种。 在企业招聘中常常应…...
Git命令远程分支的合并和本地分支的同步
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
墨烯的C语言技术栈-C语言基础-003
三.数据类型 1.char // 字符数据型 2.short // 短整型 3.int // 整型 4.long // 长整型 5.long long // 更长的整型 6.float // 单精度浮点数 7.double // 双精度浮点数 为什么写代码? 为了解决生活中的问题 购物,点餐,看电影 为什么有这么多类型呢? 因为说的话都是字符型…...
RpcRrovider分发rpc服务(OnMessage和Closure回调)
目录 1.完善rpcprovider.cc的OnConnection 2.完善rpcprovider.cc的OnMessage 3.完整rpcprovider.h 4.完整rpcprovider.cc 这篇文章主要完成,protobuf实现的数据序列化和反序列化。 1.完善rpcprovider.cc的OnConnection rpc的请求是短连接的,请求一次…...
分解+降维+预测!多重创新!直接写核心!EMD-KPCA-Transformer多变量时间序列光伏功率预测
分解降维预测!多重创新!直接写核心!EMD-KPCA-Transformer多变量时间序列光伏功率预测 目录 分解降维预测!多重创新!直接写核心!EMD-KPCA-Transformer多变量时间序列光伏功率预测效果一览基本介绍程序设计参…...
【Python】MacBook M系列芯片Anaconda下载Pytorch,并开发一个简单的数字识别代码(附带踩坑记录)
文章目录 配置镜像源下载Pytorch验证使用Pytorch进行数字识别 配置镜像源 Anaconda下载完毕之后,有两种方式下载pytorch,一种是用页面可视化的方式去下载,另一种方式就是直接用命令行工具去下载。 但是由于默认的Anaconda走的是外网&#x…...
自定义控件动画篇(四)ObjectAnimator的使用
ObjectAnimator 是 Android 属性动画框架中的一个重要组件,它允许你针对特定属性的值进行动画处理。与 ValueAnimator 相比,ObjectAnimator 更专注于 UI 组件,可以直接作用于视图的属性,如位置、尺寸、透明度等,而无需…...
实现List接口的ArrayList和LinkedList
package study;import java.util.*;public class day01_list {public static void main(String[] args) {// <Integer> 这个尖括号表示的是 Java 的泛型(Generics)// 泛型是 Java 5 引入的一项特性,它允许你在 类、接口和方法 中使用类…...
下拉选择输入框(基于elment-ui)
最近在需求中,需要有一个下拉选择功能,又得可以输入,在 element-ui 官网找了,发现没有适合的,然后在修炼 cv 大法的我,也在网上看了一下,但是也都感觉不合适,所以就自己写了两个&…...
CPP入门:日期类的构建
目录 1.日期类的成员 2.日期类的成员函数 2.1构造和析构函数 2.2检查日期合法 2.3日期的打印 2.4操作符重载 2.4.1小于号 2.4.2等于号 2.4.3小于等于号 2.4.4大于号 2.4.5大于等于号 2.4.6不等号 2.4.7加等的实现 2.4.8加的实现 2.4.9减去一个天数的减等实现 2.4.10…...
springboot学习,如何用redission实现分布式锁
目录 一、springboot框架介绍二、redission是什么三、什么是分布式锁四、如何用redission实现分布式锁 一、springboot框架介绍 Spring Boot是一个开源的Java框架,由Pivotal团队(现为VMware的一部分)于2013年推出。它旨在简化Spring应用程序…...
【MySQL】如果表被锁可以尝试看一下事务
今天在MySQL中删除表的时候,发现无法删除,一执行drop,navicat就卡死。 通过 SHOW PROCESSLIST显示被锁了 kill掉被锁的进程后依旧被锁 最后发现是由于存在为执行完的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; kill掉这些事务以…...
Datawhale - 角色要素提取竞赛
文章目录 赛题要求一、赛事背景二、赛事任务三、评审规则1.平台说明2.数据说明3.评估指标4.评测及排行 四、作品提交要求五、 运行BaselineStep1:下载相关库Step2:配置导入Step3:模型测试Step4:数据读取Step5:Prompt设…...
【Sql-驯化】sql中对时间的处理方法技巧总结
【Sql-驯化】sql中对时间的处理方法技巧总结 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 免费获取相关内容文档关注:微信公众…...
TFD那智机器人仿真离线程序文本转换为现场机器人程序
TFD式样那智机器人离线程序通过Process Simulation、DELMIA等仿真软件为载体给机器人出离线,下载下来的文本程序,现场机器人一般是无法导入及识别出来的。那么就需要TFD on Desk TFD控制器来进行转换,才能导入现场机器人读取程序。 导入的文…...
贪心+后缀和,CF 1903C - Theofanis‘ Nightmare
一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1903C - Theofanis Nightmare 二、解题报告 1、思路分析 我们任意一种分组其实都是若干个后缀和相加 比如我们分成了三组,第一组的数被加了一次,第二组的数被加了两次,第…...
10分钟完成微信JSAPI支付对接过程-JAVA后端接口
引入架包 <dependency><groupId>com.github.javen205</groupId><artifactId>IJPay-WxPay</artifactId><version>${ijapy.version}</version></dependency>配置类 package com.joolun.web.config;import org.springframework.b…...
如何寻找一个领域的顶级会议,并且判断这个会议的影响力?
如何寻找一个领域的顶级会议,并且判断这个会议的影响力? 会议之眼 快讯 很多同学都在问:学术会议不是期刊,即使被SCI检索,也无法查询影响因子。那么如何知道各个领域的顶级会议,并对各个会议有初步了解呢…...
真的假不了,假的真不了
大家好,我是瑶琴呀,拥有一头黑长直秀发的女程序员。 最近,17岁的中专生姜萍参加阿里巴巴 2024 年的全球数学竞赛,取得了 12 名的好成绩,一时间在网上沸腾不止。 从最开始的“数学天才”,到被质疑ÿ…...
看完这篇文章你就知道什么是未来软件开发的方向了!即生成式AI在软件开发领域的革新=CodeFlying
从最早的UGC(用户生成内容)到PGC(专业生成内容)再到AIGC(人工智能生成内容)体现了web1.0→web2.0→web3.0的发展历程。 毫无疑问UGC已经成为了当前拥有群体数量最大的内容生产方式。 同时随着人工智能技术…...
HTML5五十六个民族网站模板源码
文章目录 1.设计来源高山族1.1 登录界面演示1.2 注册界面演示1.3 首页界面演示1.4 中国民族界面演示1.5 关于高山族界面演示1.6 联系我们界面演示 2.效果和源码2.1 动态效果2.2 源代码2.3 源码目录 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.ne…...
Linux_fileio实现copy文件
参考韦东山老师教程:https://www.bilibili.com/video/BV1kk4y117Tu?p12 目录 1. 通过read方式copy文件2. 通过mmap映射方式copy文件 1. 通过read方式copy文件 copy文件代码: #include <sys/types.h> #include <sys/stat.h> #include <…...
【JavaEE精炼宝库】多线程进阶(2)synchronized原理、JUC类——深度理解多线程编程
一、synchronized 原理 1.1 基本特点: 结合上面的锁策略,我们就可以总结出,synchronized 具有以下特性(只考虑 JDK 1.8): 开始时是乐观锁,如果锁冲突频繁,就转换为悲观锁。 开始是轻量级锁实现ÿ…...
【Linux进程通信】使用匿名管道制作一个简单的进程池
进程池是什么呢?我们可以类比内存池的概念来理解进程池。 内存池 内存池是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继…...
Django 多对多关系
多对多关系作用 Django 中,多对多关系模型的作用主要是为了表示两个模型之间的多对多关系。具体来说,多对多关系允许一个模型的实例与另一个模型的多个实例相关联,反之亦然。这在很多实际应用场景中非常有用,比如: 博…...
构建 Audio Unit 应用程序
构建 Audio Unit 应用程序 构建 Audio Unit 应用程序从选择设计模式开始I/O Pass ThroughI/O Without a Render Callback FunctionI/O with a Render Callback FunctionOutput-Only with a Render Callback Function其他设计模式 构建应用程序配置 audio session指定 audio uni…...
JavaScript 实用技巧
1. 使用 const 和 let 替代 var 在 ES6 之前,我们通常使用 var 声明变量。但如今,推荐使用 const 和 let,因为它们具有块级作用域,可以避免很多潜在的问题。 const PI 3.14; // 常量,无法重新赋值 let age 25; // …...
Python协作运动机器人刚体力学解耦模型
🎯要点 🎯腿式或固定式机器人模型 | 🎯网格、点云和体素网格碰撞检测 | 🎯正反向运动学和动力学 | 🎯机器人刚体力学计算 | 🎯编辑参考系姿势和路径 | 🎯软件接口实体机器人模拟 | Ἲ…...
可重入锁思想,设计MQ迁移方案
如果你的MQ消息要从Kafka切换到RocketMQ且不停机,怎么做?在让这个MQ消息调用第三方发奖接口,但无幂等字段又怎么处理?今天小傅哥就给大家分享一个关于MQ消息在这样的场景中的处理手段。 这是一种比较特例的场景,需要保…...
Redis安装与使用
目录 1、介绍 1、redis的特点: 2、缓存 2、安装Redis 1、安装单机版redis 2、redis-cli命令参数 3、清空数据库的两种方式和作用域: 4、redis的增删查改命令 5、redis的查看所有分类命令 6、redis过期时间与控制键的行为 7、redis的相关工具 1、介绍 r…...
base64字符串空格问题
客户端使用的Content-Type为application/x-www-form-urlencoded时,字符串中出现了空格,base64解码时出错了,因为原来的字符有号, Spring Boot 对于Content-Type为application/x-www-form-urlencoded的HTTP请求,默认情…...
【BES2500x系列 -- RTX5操作系统】深入探索CMSIS-RTOS RTX -- 同步与通信篇 -- 消息队列和邮箱处理 --(四)
💌 所属专栏:【BES2500x系列】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! Ὁ…...
电信NR零流量小区处理
【摘要】随着目前网络建设逐步完善,5G用户的不断发展,针对零流量小区的分析及处理存在着必要性,零流量小区的出现既是用户分布及行为的直观体现,也是发展用户的一个指引,同时也能发现设备的一些故障。一个站点的能够带…...
ArcTs布局入门03——层叠布局(Stack)
如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧! 扫描下面的二维码关注公众号。 1、概述 叠布局(StackLayout)用于在屏幕上预留一块区域来显示组件中的元素,提供元素可以重叠的布局。层叠布局通过Stack容器组件实…...
C语言之线程的学习
线程属于某一个进程 共同点:都能并发 线程共享变量,进程不共享。 多线程任务中,其中某一个线程调用了exit了,其他线程会跟着一起退出 如果是特定的线程就调用pthread_exit 失败返回的是错误号 下面也是...
统计学与人工智能:历史渊源与方法比较
统计学与人工智能:历史渊源与方法比较 在当代技术讨论中,统计学和人工智能(AI)常常被提及,它们各自在数据分析和预测模型中扮演着重要角色。然而,这两种方法是否对立,以及它们之间的关系如何&a…...
2024微信小程序期末大作业-点奶茶微信小程序(后端nodejs-server)(附下载链接)_微信小程序期末大作业百度网盘下载
菜单展示 购物车展示: 提交订单: 支付详情页展示: 订单查看: 查看历史消费: 部分代码展示: <!--pages/home/home.wxml--> <block wx:for"{{listData}}" wx:key"itemlist&qu…...
Qt 基础组件速学 鼠标和键盘事件
学习目标: 鼠标事件和键盘事件应用 前置环境 运行环境:qt creator 4.12 学习内容和效果演示: 1.鼠标事件 根据鼠标的坐标位置,做出对应的事件。 2.键盘事件 根据键盘的输入做出对应操作 详细主要代码 1.鼠标事件 #include "main…...
【收藏级神丹】Liae384_刘亦菲_直播可用,平衡度最高的原创神丹,独家珍稀资源
Liae384_刘亦菲_DFL神丹:点击下载 此丹较重,小卡可以使用但不能训练,实测复训适合24G卡8G、12G、16G卡下载练好的专丹直接使用即可384的Liae对各类杂论视频兼容比较好,高参也能容忍高分辨率的DST复用方式: 非必要不用删除AB&…...
「植物大战僵尸杂交版」保姆级攻略大全以及下载指南
植物大战僵尸杂交版自推出以来,以其独特的植物组合和策略玩法,迅速赢得了玩家们的喜爱。如果你正准备加入这场植物与僵尸的战斗,或者已经在战斗中寻求突破,那么这份保姆级的攻略大全将是你的得力助手。同时,我们也提供…...
Astro新前端框架首次体验
Astro新前端框架首次体验 1、什么是Astro Astro是一个静态网站生成器的前端框架,它提供了一种新的开发方式和更好的性能体验,帮助开发者更快速地构建现代化的网站和应用程序。 简单来说就是:Astro这个是一个网站生成器,可以直接…...
依米康300249.SZ:长期为百度提供数据中心温控设备和部分微模块的施
:长期为百度提供数据中心温控设备和部分微模块的施工、安装等服务)格隆汇6月14日丨有投资者于投资者互动平台向依米康提问,“百度是公司的重要客户吗?公司与百度的合作主要是在哪方面呢?”,公司回复称,百度一直都是公司重要客户,公司长期为百度提供数据中心温控设备和部分…...
领克07EM-P正式上市售价16.98万-18.98万元
领克07 EM-P 官方指导售价 车型 售价 126长续航 Pro 16.98 126长续航 Halo 17.98 126长续航 Ultra 18.98 制表: Internet Info Agency 除此之外,领克07 EM-P还推出了多重上市权益,包括选配基金礼:至高7000元选配基金,选装“高阶智驾…...
市场巨变,移动开发行业即将迎来“第二春”?
随着鸿蒙生态的不断壮大,越来越多的企业开始加入其中,对鸿蒙OS开发工程师的需求也越来越迫切。 年初时还只有200个APP宣布加入鸿蒙生态,而最近华为也已经官宣,已经有4000多个应用加入鸿蒙,短短三个月就增加了20倍。 …...
基于文本来推荐相似酒店
基于文本来推荐相似酒店 查看数据集基本信息 import pandas as pd import numpy as np from nltk.corpus import stopwords from sklearn.metrics.pairwise import linear_kernel from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extrac…...
开源工具专题-04 Atlassian Crowd部署备份及迁移
开源工具专题-04 Atlassian Crowd部署备份及迁移 注: 本教程由羞涩梦整理同步发布,本人技术分享站点:blog.hukanfa.com转发本文请备注原文链接,本文内容整理日期:2024-05-29csdn 博客名称:五维空间-影子&…...
docker-compose 映射端口失败! docker端口映射失败 ,docker映射只能使用老端口,映射无法使用
1. 现象 使用docker-compose 启动项目,发现映射端口出现问题,不能映射端口! 如图: 使用原来端口是可以使用的 2. 问题原因: 使用了docker-mode 为host模式,所以不能换端口,只能写为"8086:…...