【rdma tx data flow问题】
rdma data flow问题
- 1 SQ_doorbell如何产生? --RDMA网卡doorbell寄存器触发;
- 2 CPU如何访问网卡的Doorbell寄存器?
- 3 为什么需要roce_qid_convert把local_qid转换成global_qid;
- 4.WQE的format是什么?
- 5.WQE在网卡硬件中的处理流程?
- 6.网卡读Host 内存--dma_read
- 7.rdma网卡解析sq_wqe,再从主机拉取payload进行组装RoCE包发送出去;
1 SQ_doorbell如何产生? --RDMA网卡doorbell寄存器触发;
SQ_doorbell: SQ Doorbell是由主机驱动通过PCIe Memory Write触发,目标地址是网卡映射的Doorbell寄存器。
网卡作为PCIe Target接收写入后,解析出QPN和PID,拉取WQE执行操作;
Doorbell:是一种主机通知网卡的机制,通过写入网卡的特定寄存器(doorbell register),告知网卡SQ中有新的WR待处理;
SQ(Send Queue) Doorbell 是主机通过PCIe向网卡通知新工作请求(Work Request, WR)的关键机制。其产生和触发过程涉及主机驱动、PCIe事务和网卡;
产生流程:
1.主机驱动准备WR–work request;
–1.填充WQE:主机驱动在内存中填充WQE,用来描述WR的详细信息(操作类型、数据地址和长度等);
WQE位于SQ的环形缓冲区内,由驱动维护生产者指针–来指示下一个可用的WQE位置;
–2.更新生产者指针:驱动更新SQ的本地生产者指针;
2. 触发Doorbell写入
–1.驱动生成PCIE TLP write req;
Doorbell写入是一个PCIE Memory Write(TLP),目标地址是网卡bar空间中的Doorbell寄存器地址;
–2.驱动通过写入网卡的doorbell寄存器(映射到PCIe BAR空间),通知网卡有新的WQE存在;
该寄存器包含信息;
-1.QP编号:标志目标队列; -2.生产者指针:告诉网卡从哪个位置开始读取WQE;
3.网卡处理Doorbell
–1.PCIE target接受写请求
-1.网卡的PCIE EP接受Memory TLP write,解析出写入的Doorbell寄存器地址和数据(生产者指针);
–网卡可能通过MSI-X中断或者RR轮询机制感知Doorbell寄存器配置;
-2.读取WQE并执行
–网卡根据生产者指针从主机内存中读取新的WQE(通过DMA);
–执行WR–比如RDMA读写;
Doorbell寄存器存在RDMA网卡中,但是需要通过PCIE BAR空间暴露给主机CPU访问;
完整流程示例(RDMA网卡Doorbell触发):
主机驱动:
将WQE(Work Queue Entry)写入主机内存中的SQ环形缓冲区。
更新生产者指针(Producer Index)。
通过MMIO写入网卡BAR空间中的Doorbell寄存器地址(如BAR0 + 0x1000),携带QP编号和生产者指针。
PCIe传输:
主机生成PCIe Memory Write TLP(事务层包),目标地址为BAR映射的Doorbell寄存器物理地址。
网卡作为PCIe Endpoint接收该TLP。
网卡硬件:
解码TLP地址,确认是Doorbell寄存器写入。
根据生产者指针,发起DMA读取主机内存中的WQE。
执行WR(如发送数据包)。
一般该doorbell寄存器内信息是:qp_id 和生产者指针PID(WQE位置);
2 CPU如何访问网卡的Doorbell寄存器?
• 物理位置:Doorbell寄存器位于RDMA网卡的硬件逻辑中,是网卡控制器的一部分。
• 访问方式:主机(CPU)不能直接访问网卡内部的寄存器,因此需要通过PCIe的BAR(Base Address Register)空间将网卡中的寄存器映射到主机的内存地址空间(MMIO,Memory-Mapped I/O),使得主机可以通过内存读写指令(如mov或writel)间接操作这些寄存器。
1.什么是PCIE设备寄存器映射到PCIE bar空间?
–1.PCIE bar:
PCIe设备(如RDMA网卡)通过BAR向主机报告其需要的内存或I/O空间大小,并请求一段主机物理地址空间的映射。每个PCIe设备最多有6个BAR(BAR0~BAR5),每个BAR可以映射一段连续的地址空间。BAR空间可以配置为内存映射(MMIO)或I/O端口映射(现代设备通常使用MMIO)。
–2.RDMA网卡映射到CPU PCIE bar空间流程
–1.设备初始化:网卡硬件/固件 在PCIE枚举阶段声明其需要的bar空间大小和类型;
示例:一个RDMA网卡可能声明BAR0为64KB的MMIO空间,用于映射控制寄存器和Doorbell寄存器。
–2. 操作系统分配物理地址
操作系统为bar分配一段物理地址范围: (如0x1FA00000~0x1FA0FFFF),并将其映射到内核的虚拟地址空间。届时主机驱动程序通过ioremap()或pci_iomap()访问这段地址。
3.驱动访问网卡寄存器
–网卡设计文档定义doorbell寄存器在bar空间中的偏移量;驱动通过写入bar地址+偏移量来出发doorbell;
3.sq_doorbell_handle是解析doorbell寄存器获取QPN和PID,再通过dma_read拉取主机内存中具体的WQE;
PID:软件驱动通过doorbell下发的;
CID:QPC硬件维护更新;
3 为什么需要roce_qid_convert把local_qid转换成global_qid;
在sq_doorbell中解析到的qp_id(实质是local_qp_id)转成global_qp_id;–是为了实现支持虚拟化支持(多个虚拟机VF,每个VF的locla_qp_id可能会重复)、硬件资源隔离(网卡内部队列资源唯一标识可以按照global_qp_id来划分来做优先级调度等)、流控QoS等;
struct qid_map_entry {uint16_t vf_id; // 虚拟机或功能标识(SR-IOV场景)uint16_t local_qid;uint32_t global_qid;
};
网卡硬件解析Doorbell,提取vf_id和local_qid,查询映射表得到global_qid。
4.WQE的format是什么?
WQE(Work Queue Entry,) 是RDMA(如Mellanox ConnectX、Intel E810)中主机软件(驱动/应用)与网卡硬件的关键交互媒介。它描述了需要硬件执行的操作(如数据传输、原子操作),由软件填充、硬件解析并执行。
• 1.WQE的典型格式;
–1.通用WQE头部
```c
struct mlx5_wqe_ctrl_seg {
__le32 opcode; // 操作类型(如RDMA_WRITE、SEND、ATOMIC)
__le32 qp_ds; // QP号(低24位) + WQE长度(高8位)
__le32 signature; // 可选,用于校验
__le32 fm_ce_se; // Flow Match、Completion Event等标志位
};
```
• 2.数据端–SQE;–描述待传输的数据地址和长度
struct mlx5_wqe_data_seg {__le32 byte_count; // 数据长度__le32 lkey; // 本地内存密钥(Memory Key,保护DMA访问)__le64 addr; // 数据物理地址};
3.rdma操作专用段
根据opcode不同,WQE可能包含额外字段(比如rmda_write/read):
struct mlx5_wqe_raddr_seg {__le64 remote_addr; // 远程内存地址__le32 rkey; // 远程内存密钥(Remote Key)__le32 reserved;};
5.WQE在网卡硬件中的处理流程?
1.软件/驱动填充WQE;
• 驱动在主机内存的SQ环形缓冲区中填充WQE,更新生产者指针-Pid;
struct mlx5_wqe *wqe = get_next_wqe(sq);wqe->ctrl.opcode = MLX5_OPCODE_RDMA_WRITE;wqe->data.addr = cpu_to_le64(data_phys_addr);wqe->data.lkey = cpu_to_le32(mr->lkey);
2.触发doorbell
• 驱动通过PCIE TLP MemWR TLP来写入doorbell寄存器,通知网卡有新WQE;
• Doorbell信息:QP_id 和 Producer_id;
3.网卡DMA读取WQE
网卡通过PCIE MemRD TLP从主机内存读取WQE(地址:SQ_BASE + Offset(PI * WQE_SIZE))
4.网卡解析WQE执行RDMA操作
网卡解析WQE,执行发起RDMA packet操作;
完成后生成CQE(Completion Queue Entry)通知主机;
6.网卡读Host 内存–dma_read
当网卡需要从主机内存读取数据(如WQE)时,它会发起一个**PCIe Memory Read TLP(MemRd)请求,主机收到该请求后,通过CplD(Completion with Data)**返回数据。
• DMA Read是抽象概念,而MemRd/CplD是PCIe协议的具体实现形式。
• 在硬件描述中,工程师可能直接说“DMA Read”,但实际硬件行为是通过PCIe TLP完成的。
示例:网卡如何读取WQE
–1.网卡发起DMA Read;
网卡硬件解析Doorbell后,确定需要读取的WQE地址(主机内存地址);
网卡生成PCIE Memory Read TLP,包含:
• 目标地址:主机内存的物理地址:SQ_base + offset;
• 数据长度:(Pid-Cid) * WQE_SIZE; --Pid代表生产者指针;Cid代表消耗者指针;
–2.主机响应
1.主机PCIE Root Complex接收到MemRd请求,转发到内存控制器;
2.内存控制器读取主机内存中的数据,生成CPLD TLP,将WQE数据返回给网卡;
–3.网卡接收数据
• 网卡通过PCIE接口接收CPLD TLP,提取WQE数据并存入片上缓存,供后续硬件流水线来处理;
7.rdma网卡解析sq_wqe,再从主机拉取payload进行组装RoCE包发送出去;
大致整理流程如下;整体流程概览:主机驱动填充 WQE(描述RDMA操作) → 触发 Doorbell(通知网卡)。网卡 DMA 读取 WQE(PCIe MemRd)→ 解析 WQE(操作类型、地址、长度等)。网卡 DMA 读取 Payload(若数据未内联在WQE中)→ 封装 RDMA 报文(如RoCEv2)。发送报文到网络(通过以太网接口)
详细分布流程(以rdma_write为示例)S1:主机驱动准备WQE和payload;WQE内容示例:```cstruct mlx5_wqe_ctrl_seg {__le32 opcode; // 操作码(如RDMA_WRITE)__le32 qp_num; // QP号(低24位)__le32 signature; // 校验字段};struct mlx5_wqe_raddr_seg {__le64 remote_addr; // 远程内存地址__le32 rkey; // 远程密钥(Remote Key)};struct mlx5_wqe_data_seg {__le32 byte_count; // 数据长度__le32 lkey; // 本地内存密钥(Local Key)__le64 addr; // 本地数据物理地址};```S2: 驱动触发Doorbell驱动写入Doorbell寄存器(MemWR TLP),通知网卡有新WQE处理;S3:网卡DMA读取WQE• 网卡解析doorbell,提取QPN和PID; 通过QP Context来获取SQ的基地址和WQE size;• 发起PCIE MemRD TLP: 从主机内存读取WQE(地址和长度:PID-CID);主机通过CPLD tlp返回数据;S4:网卡解析WQE字段和拉取Payload网卡发起第二次PCIE MemRD TLP,从主机内存读取payload(sge里字段);数据通过CPLD TLP返回网卡--payload.S5: 封装RDMA报文(RoCE v2)根据协议类型生成报文--RoCE v2(基于UDP/IP):```c| Ethernet | IP | UDP | InfiniBand BTH | RETH(RDMA Extended Transport Header) | Payload |```S6:发送报文到网络;以RDMA Write为示例:
```c
主机驱动:
1. 填充 WQE(SQ中) → 2. 写 Doorbell → 3. 等待完成事件(CQE)。网卡硬件:
1. 检测 Doorbell → 2. DMA 读 WQE → 3. DMA 读 Payload → 4. 封装报文 → 5. 发送。
```
相关文章:
【rdma tx data flow问题】
rdma data flow问题 1 SQ_doorbell如何产生? --RDMA网卡doorbell寄存器触发;2 CPU如何访问网卡的Doorbell寄存器?3 为什么需要roce_qid_convert把local_qid转换成global_qid;4.WQE的format是什么?5.WQE在网卡硬件中的处理流程&…...
Vue 框架组件间通信方式
组件间通信方式 不管是 vue2 还是 vue3,组件通信方式很重要,以下是常见的几种通信方式: props:可以实现父子组件、子父组件、甚至兄弟组件通信自定义事件:可以实现子父组件通信全局事件总线 $bus:可以实现…...
React 第三十节 使用 useState 和 useEffect Hook实现购物车
不使用 redux 实现 购物车案例 使用 React 自带的 useState 和 useEffect Hook 即可实现购物车 export default function ShoppingCar() {// 要结算的商品 总数 以及总价const [totalNum, setTotalNum] useState(0)const [totalPerice, setTotalPerice] useState(0)// 商品…...
卷积神经网络CNN
目录 一、图像基础知识 图像基本概念 图像的加载 二、CNN概述 CNN概述 三、卷积层 卷积计算 Padding Stride 多通道卷积计算 PyTorch卷积层API 四、池化层 池化层计算 Stride Padding 多通道池化层计算 PyTorch 池化 API 五、图像分类案例 CIFAR10 数据集 …...
【大数据生态】Hive的metadata服务未开启
解决办法 进入到Hive的bin目录下,键入命令: #启动元服务 [atguiguhadoop102 bin]$ pwd /opt/module/hive-3.1.2/bin [atguiguhadoop102 bin]$ ./hive --service metastore & #启动hive [atguiguhadoop102 hive-3.1.2]$ pwd /opt/module/hive-3.1.2 [atguiguhadoop102 hiv…...
【RabbitMQ】死信队列
1.概述 死信,顾名思义就是无法被消费的消息,也就是没有被传到消费者的消息,或者即使传到了也没有被消费。当然有死信就有死信队列。死信队列就是用来存储死信的。 它的应用场景就是保证订单业务的消息数据不丢失,当消息消费发 生…...
区间 dp 系列 题解
1.洛谷 P4342 IOI1998 Polygon 我的博客 2.洛谷 P4290 HAOI2008 玩具取名 题意 某人有一套玩具,并想法给玩具命名。首先他选择 W, I, N, G 四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用 W, I, N, G …...
Typora使用笔记
文章目录 主题自动编号字体设置两端对齐Step1Step 2 代码块显示行号设置快捷键参考文献 主题自动编号 typora-theme-auto-numbering 字体设置两端对齐 Step1 切记从typora的偏好设置中打开主题所在的文件夹,并修改对应的css文件。(以 github.css 为例…...
k8s部署grafana
先决条件 这里部署过程的前提是已经部署好storageclass,所以pv会根据pvc自动创建. 详情参考:k8s-StoargClass的使用-基于nfs_a volume that contains injected data from multiple-CSDN博客 直接开始: 部署pvc [rootmodule /zpf/grafana]$cat pvc.yml apiVersion: v1 kind…...
第三章:SQL 高级功能与性能优化
1. 窗口函数(Window Functions) 用于在结果集的“窗口”(指定行范围)内执行计算,保留原数据行的同时生成聚合或排序结果。 1.1 核心语法 SELECT column1,column2,[窗口函数] OVER (PARTITION BY 分组列…...
[ACM_3] n组数据 | getchar() | getline(cin,s)
目录 14. 第⼀⾏是⼀个整数n,表示⼀共有n组测试数据, 之后输⼊n⾏ 字符串 15. 第⼀⾏是⼀个整数n,然后是n组数据,每组数据2⾏,每⾏ 为⼀个字符串,为每组数据输出⼀个字符串,每组输出占⼀⾏ 16. 多组测试…...
富士相机照片 RAF 格式如何快速批量转为 JPG 格式教程
富士(Fujifilm)相机拍摄的 RAW 格式文件(RAF)因其高质量和丰富的图像信息而受到摄影师的喜爱。然而,RAF 文件通常体积较大且不易于分享或直接使用。为了方便处理,许多人选择将其转换为更通用的 JPG 格式。在…...
[特殊字符]【高并发实战】Java Socket + 线程池实现高性能文件上传服务器(附完整源码)[特殊字符]
大家好!今天给大家分享一个 Java Socket 线程池 实现的高性能文件上传服务器,支持 多客户端并发上传,代码可直接运行,适合 面试、项目实战、性能优化 学习! 📌 本文亮点: ✅ 完整可运行代码&a…...
2025 年天津消防设施操作员考试攻略:深挖地区特色考点
天津作为重要的港口城市与工业基地,消防安全形势复杂多样,其消防设施操作员考试也带有鲜明的地区特色。 地区特色考点解析:天津化工产业发达,涉及众多危化品场所。因此,危化品储存场所的消防设施配置与应急处置成为…...
chrome extension开发框架WXT之Browser.runtime
以下是对 Browser.runtime API 中主要方法的参数、返回值、作用及运用场景的详细解释: 1. 连接与通信方法 connect(connectInfo?: ConnectInfo) / connect(extensionId: string, connectInfo?: ConnectInfo) 参数: extensionId(可选):目标扩展的 ID,未指定时默认连接当…...
dav_1_MySQL数据库排查cpu消耗高的sql
CPU消耗高sql定位 以下从2个维度进行分析,一个是当前cpu高占用排查,一个是历史sql占用高排查 一.当前cpu占用高排查 1 从os资源消耗逐步到mysql查询 1.1 输入top 然后按大P 使之进程按照消耗cpu排序 比如3889为mysql进程ID,接下来再用它查…...
数据结构刷题之贪心算法
贪心算法(Greedy Algorithm) 是一种在每个步骤中都选择当前最优解的算法设计策略。它通常用于解决优化问题,例如最小化成本或最大化收益。贪心算法的核心思想是:在每一步选择中,都做出局部最优的选择,希望…...
每日一题(小白)暴力娱乐篇23
由题意得知给我们一串数字,我们每次交换两位,最少交换多少次成功得到有顺序的数组。我们以平常的思维去思考,加入给你一串数字获得最少的交换次数,意味着你的交换后续基本不会变,比如说2 1 3 5 4 中1与2交换后不变&…...
回归预测 | Matlab实现RIME-CNN-GRU-Attention霜冰优化卷积门控循环单元注意力机制多变量回归预测
回归预测 | Matlab实现RIME-CNN-GRU-Attention霜冰优化卷积门控循环单元注意力机制多变量回归预测 目录 回归预测 | Matlab实现RIME-CNN-GRU-Attention霜冰优化卷积门控循环单元注意力机制多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现RIME…...
第1章 对大型语言模型的介绍
人类正处在一个关键转折点。自2012年起,基于深度神经网络的人工智能系统研发进入快速通道,将这一技术推向了新高度:至2019年底,首个能够撰写与人类文章真假难辨的软件系统问世,这个名为GPT-2(生成型预训练变…...
PGA 简介
PGA(Programmable Gain Amplifier,可编程增益放大器)是一种可以通过外部控制信号改变增益大小的放大器,常用于需要灵活调节信号放大倍数的应用中,比如在模拟信号采集、数据转换(如 ADC 之前)、传…...
2025年CCF-C NCA:导航变量多目标粒子群算法NMOPSO,深度解析+性能实测
目录 1.摘要2.运动学模型和约束3.路径规划目标函数3.多目标粒子群算法4.结果展示5.参考文献6.代码获取 1.摘要 路径规划是无人机(UAV)任务执行的核心,因为它决定了无人机完成任务所需的飞行路径。为了解决这一问题,本文提出了一种…...
FFMpeg音视频解码实战
音频解码 一、初始化阶段 avformat_open_input 打开输入媒体文件。avformat_find_stream_info 读取媒体流信息,查找音频流。avcodec_find_decoder 查找对应的解码器(如 AAC、MP3 解码器)。avcodec_alloc_context3 分配解码器上下文。avcodec…...
day25学习Pandas库
文章目录 三、Pandas库4.函数计算7.合并8.随机抽样9.空值处理9.1检测空值9.2填充空值9.3删除空值行/列 5.读取CSV文件5.1 to_csv()5.2 read_csv() 6.绘图 三、Pandas库 4.函数计算 7.合并 merge 函数用于将两个 DataFrame 对象根据一个或多个键进行合并 函数: …...
去除Mysql表中的空格、回车、换行符和特殊字符
系列文章目录 文章目录 系列文章目录前言一、示例1.sql层面2.java层面 前言 一、示例 1.sql层面 参考 ## 例子1 ## CHAR(10) 表示换行符 ## CHAR(13) 表示回车UPDATE 表名 SET 列名 REPLACE(REPLACE(列名, CHAR(10), ), CHAR(13), )## 例子2 ## 删除字段中的空格、换行符、…...
以普通用户身份启动pure-ftpd服务端
Pureftp的优点包括 : 高性能,适用于大容量数据传输。安全性强,通过SSL/TLS加密和身份验证机制保证文件传输安全。易用性高,具有直观的用户界面。灵活性强,支持多种文件存储方式。没有漏洞,便于维护 基于Centos 9的pu…...
国内下载不了镜像,可以用国外机器下载完成,打成tar文件,在国内机器上重新加载
可以在 已经拉取过镜像的机器上打包(导出)镜像文件,然后 拷贝到另一台机器上导入使用。这是离线部署 Docker 镜像的常用方法,非常适合网络受限的环境。 🛠️ 步骤如下: ✅ 1. 在已有镜像的机器上打包镜像 …...
【Java】Java 中不同类型的类详解
目录 Java 中不同类型的类详解一、基础类类型1. 普通类(Concrete Class)2. 抽象类(Abstract Class)3. 接口(Interface)4. 枚举类(Enum Class) 二、嵌套类与特殊类5. 内部类ÿ…...
Cadence学习笔记之---热风焊盘制作
目录 01 | 前 言 02 | 环境描述 03 | 热风焊盘 04 | 规则热风焊盘制作 05 | 不规则热风焊盘制作 06 | 总 结 01 | 前 言 在上一篇Cadence小记中讲述了如何制作贴片(SMD)焊盘、通孔焊盘、以及过孔;本篇关于Cadence的小记主要讲如何制作热风焊盘。 上篇小记&a…...
518. Coin Change II
这是完全背包问题。 由于求的是组合数,所以外层循环只能是对硬币遍历,内层循环只能是对总金额的遍历。 另外,虽然题目数据保证结果符合 32 位带符号整数。但是第28个测试用例,dp[j]dp[j-conis[i]]中间结果会整数溢出,…...
GPIO子系统与Pinctrl子系统的交互
我们前面呢,已经讲过GPIO子系统的数据结构以及他的设备树信息是怎么转换成我们的C代码存储在结构体里面了,我们知道,如果想去使用一个GPIO,避免不了得把这个引脚复用成GPIO功能,那么就避不开Pinctrl子系统,…...
DeepSeek实用操作及行业应用系列2
DeepSeek的本地化部署与AI通识教育之未来 DeepSeek之火,可以燎原 面向审计行业DeepSeek大模型操作指南v1.0 DeepSeek提示词设计、幻觉避免与应用(大数据百家讲坛) DeepSeek 搞钱教程(0基础入门) DeepSeek基础知识…...
面向数据库场景的大模型交互微调数据集
关键要点 研究表明,面向数据库场景的大模型交互微调数据集通常包括数据库模式、自然语言查询和对应的SQL查询。证据倾向于认为,数据集应以JSON格式组织,覆盖多种查询类型,并确保高质量和多样性。对于自定义数据库,建议…...
解锁ChatGPT-4o文生图潜力:精选提示词收集整理更新中
示例一:按元素和描述要求生成图片 示例二:“吉卜力”风格 示例三:3D Q版风格 示例四:生成指定布局和主题图片 具体的提示词参考,陆续更新中:https://blog.luler.top/d/25...
WHAT - React 进一步学习推荐
书籍 adevnadia 的《Advanced React》TejasKumar_ 的《Fluent React》addyosmani 和 djirdehh 的《Building Large Scale Web Apps》 面试准备 reactjs-interview-questions 文章:最佳实践 如果你想了解最佳实践并学习技巧,请务必关注以下专家&…...
有关串口的知识点
轻微了解 一般都是 前这俩01 Ren1才能接受 开局T1 R1要给0 所以就是0x50的起手 终端服务是接受的 ———————————————————————————— 进入实际引用 使用的时候1 初始化 2要给个500ms的延时函数即可...
无线插卡话机如何接入呼叫中心系统?
一、接入原理与技术架构 无线插卡话机通过内置SIM卡模块(支持GSM/CDMA/4G/5G等网络制式),将移动网络信号转化为语音通信信号,再通过SIP协议或专用网关与呼叫中心系统对接。其核心流程包括: 1、网络信号…...
prometheus有几种数据类型
Prometheus 数据类型主要有以下四种: Counter(计数器): 单调递增的数值,表示某个事件发生的次数。计数器的值只会增加,除非被重置为0(例如在系统重启时)。示例:HTTP 请求…...
C++设计模式+异常处理
#include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory> #include <stdexcept> // 包含异常类using namespace std;// 该作业要求各位写一…...
字符串替换 (模拟)神奇数 (数学)DNA序列 (固定长度的滑动窗口)
⭐️个人主页:小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 字符串替换 (模拟)神奇数 (数学)DNA序列 (固定长度的滑动窗口&am…...
echarts地图详解
获取地图坐标json数据 <template><div id"china-map" style"width:500px;height:500px"></div> </template> <script>import * as echarts from echarts;// 坐标jsonimport chinaJson from "/assets/china.json" …...
Redis 哨兵模式:告别手动故障转移!
目录 前言一、 Redis哨兵模式是啥?🤔二、 为什么需要哨兵模式?🤷♀️三、 哨兵模式的原理是什么?🤝1. 监控(Monitoring)2. 信息共享与客观下线判断3. 哨兵领导者选举4. 故障转移5.…...
地理数据输出
为了便于数据共享和交换,可以将地理数据库中的要素数据输出为Shapefiles或者Coverage,将相应的属性表输出为Info或者dBase格式的数据文件。 1.输出为 Shapefile (1)在AreCatalog目录树或者内容栏中,右键点击需要输出的地理要素类,…...
springboot + security + redis + jwt 实现验证登录上
前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…...
SomeIP通讯机制
在SOME/IP协议中,通讯方式主要围绕服务的交互模式进行的设计,核心机制包括Event(时间)、Method(方法)以及其变种Fire-and-Forget(FF)。以下是SOME/IP中所有通信方式的总结࿱…...
线代第三课:n阶行列式
引言 行标取自然排列 不同行不同列的3个元素相乘 列标取排列的所有可能 列标排列的逆序数的奇偶性决定符号,- n阶行列式 第一种:按行展开 (1) 行标取自然排列 (2) 列标取排列的所有可能 (PS:可以理解为随意取) (3) 从…...
人工智能在高中教育中的应用现状剖析与挑战应对
第一章:绪论 1.1 研究背景与意义 随着全球化的加速和科技的飞速发展,高中教育在培养未来社会所需人才方面的重要性日益凸显。高中阶段是学生知识体系构建和思维能力发展的关键时期,然而,当前高中教育面临着诸多挑战,…...
如何在powerbi使用自定义SQL
我们在刚使用到powerbi的时候发现当直接连接到数据库的时候我们只能使用数据库中已存在的表,我们没有办法使用自定义SQL来准备数据,这给我们的开发造成很大的困扰;我目前使用的是vertica数据库,首先我们需要在本地有vertica的驱动…...
边缘计算盒子是什么?
边缘计算盒子是一种小型的硬件设备,通常集成了处理器、存储器和网络接口等关键组件,具备一定的计算能力和存储资源,并能够连接到网络。它与传统的云计算不同,数据处理和分析直接在设备本地完成,而不是上传到云端&#…...
【C++面向对象】封装(上):探寻构造函数的幽微之境
每文一诗 💪🏼 我本将心向明月,奈何明月照沟渠 —— 元/高明《琵琶记》 译文:我本是以真诚的心来对待你,就像明月一样纯洁无瑕;然而,你却像沟渠里的污水一样,对这份心意无动于衷&a…...