Tips
Go
(18条消息) Go语言自学系列 | golang包_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之channel的遍历_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之select switch_COCOgsta的博客-CSDN博客_golang select switch
(18条消息) Go语言自学系列 | golang并发编程之runtime包_COCOgsta的博客-CSDN博客_golang runtime包
(18条消息) Go语言自学系列 | golang接口值类型接收者和指针类型接收者_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之Timer_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang方法_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之WaitGroup实现同步_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang构造函数_COCOgsta的博客-CSDN博客_golang 构造函数
(18条消息) Go语言自学系列 | golang方法接收者类型_COCOgsta的博客-CSDN博客_golang 方法接收者
(18条消息) Go语言自学系列 | golang接口_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang接口和类型的关系_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang结构体_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang结构体_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang标准库os模块 - File文件读操作_COCOgsta的博客-CSDN博客_golang os.file
(18条消息) Go语言自学系列 | golang继承_COCOgsta的博客-CSDN博客_golang 继承
(18条消息) Go语言自学系列 | golang嵌套结构体_COCOgsta的博客-CSDN博客_golang 结构体嵌套
(18条消息) Go语言自学系列 | golang并发编程之Mutex互斥锁实现同步_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发变成之通道channel_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之原子操作详解_COCOgsta的博客-CSDN博客_golang 原子操作
(18条消息) Go语言自学系列 | golang并发编程之原子变量的引入_COCOgsta的博客-CSDN博客_go 原子变量
(18条消息) Go语言自学系列 | golang并发编程之协程_COCOgsta的博客-CSDN博客_golang 协程 并发
(18条消息) Go语言自学系列 | golang接口嵌套_COCOgsta的博客-CSDN博客_golang 接口嵌套
(18条消息) Go语言自学系列 | golang包管理工具go module_COCOgsta的博客-CSDN博客_golang 包管理器
(18条消息) Go语言自学系列 | golang标准库os模块 - File文件写操作_COCOgsta的博客-CSDN博客_go os模块
(18条消息) Go语言自学系列 | golang结构体的初始化_COCOgsta的博客-CSDN博客_golang 结构体初始化
(18条消息) Go语言自学系列 | golang通过接口实现OCP设计原则_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang标准库os包进程相关操作_COCOgsta的博客-CSDN博客_golang os包
(18条消息) Go语言自学系列 | golang标准库ioutil包_COCOgsta的博客-CSDN博客_golang ioutil
(18条消息) Go语言自学系列 | golang标准库os模块 - 文件目录相关_COCOgsta的博客-CSDN博客_go语言os库
Golang技术栈,Golang文章、教程、视频分享!
(18条消息) Go语言自学系列 | golang结构体指针_COCOgsta的博客-CSDN博客_golang 结构体指针
Ansible
太厉害了,终于有人能把Ansible讲的明明白白了,建议收藏_互联网老辛
ansible.cfg配置详解
Docker
Docker部署
linux安装docker和Docker Compose
linux 安装 docker
Docker中安装Docker遇到的问题处理
Docker常用命令
docker常用命令小结
docker 彻底卸载
Docker pull 时报错:Get https://registry-1.docker.io/v2/library/mysql: net/http: TLS handshake timeout
Docker 拉镜像无法访问 registry-x.docker.io 问题(Centos7)
docker 容器内没有权限
Linux中关闭selinux的方法是什么?
docker run 生成 docker-compose
Docker覆盖网络部署
docker pull后台拉取镜像
docker hub
Redis
Redis 集群别乱搭,这才是正确的姿势
linux_离线_redis安装
怎么实现Redis的高可用?(主从、哨兵、集群) - 雨点的名字 - 博客园
redis集群离线安装
always-show-logo yes
Redis集群搭建及原理
[ERR] Node 172.168.63.202:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some - 亲爱的不二999 - 博客园
Redis daemonize介绍
redis 下载地址
Redis的redis.conf配置注释详解(三) - 云+社区 - 腾讯云
Redis的redis.conf配置注释详解(一) - 云+社区 - 腾讯云
Redis的redis.conf配置注释详解(二) - 云+社区 - 腾讯云
Redis的redis.conf配置注释详解(四) - 云+社区 - 腾讯云
Linux
在终端连接ssh的断开关闭退出的方法
漏洞扫描 - 灰信网(软件开发博客聚合)
find 命令的参数详解
vim 编辑器搜索功能
非root安装rpm时,mockbuild does not exist
Using a SSH password instead of a key is not possible because Host Key checking
(9条消息) 安全扫描5353端口mDNS服务漏洞问题_NamiJava的博客-CSDN博客_5353端口
Linux中使用rpm命令安装rpm包
ssh-copy-id非22端口的使用方法
How To Resolve SSH Weak Key Exchange Algorithms on CentOS7 or RHEL7 - infotechys.com
Linux cp 命令
yum 下载全量依赖 rpm 包及离线安装(终极解决方案) - 叨叨软件测试 - 博客园
How To Resolve SSH Weak Key Exchange Algorithms on CentOS7 or RHEL7 - infotechys.com
RPM zlib 下载地址
运维架构网站
欢迎来到 Jinja2
/usr/local/bin/ss-server -uv -c /etc/shadowsocks-libev/config.json -f /var/run/s
ruby 安装Openssl 默认安装位置
Linux 常用命令学习 | 菜鸟教程
linux 重命名文件和文件夹
linux命令快速指南
ipvsadm
Linux 下查找日志中的关键字
Linux 切割大 log 日志
CentOS7 关于网络的设置
rsync 命令_Linux rsync 命令用法详解:远程数据同步工具
linux 可视化界面安装
[问题已处理]-执行yum卡住无响应
GCC/G++升级高版本
ELK
Docker部署ELK
ELK+kafka+filebeat+Prometheus+Grafana - SegmentFault 思否
(9条消息) Elasticsearch设置账号密码_huas_xq的博客-CSDN博客_elasticsearch设置密码
Elasticsearch 7.X 性能优化
Elasticsearch-滚动更新
Elasticsearch 的内存优化_大数据系统
Elasticsearch之yml配置文件
ES 索引为Yellow状态
Logstash:Grok filter 入门
logstash grok 多项匹配
Mysql
Mysql相关Tip
基于ShardingJDBC实现数据库读写分离 - 墨天轮
MySQL-MHA高可用方案
京东三面:我要查询千万级数据量的表,怎么操作?
OpenStack
(16条消息) openstack项目中遇到的各种问题总结 其二(云主机迁移、ceph及扩展分区)_weixin_34104341的博客-CSDN博客
OpenStack组件介绍
百度大佬OpenStack流程
openstack各组件介绍
OpenStack生产实际问题总结(一)
OpenStack Train版离线部署
使用Packstack搭建OpenStack
K8S
K8S部署
K8S 集群部署
kubeadm 重新 init 和 join-pudn.com
Kubernetes 实战总结 - 阿里云 ECS 自建 K8S 集群 Kubernetes 实战总结 - 自定义 Prometheus
【K8S实战系列-清理篇1】k8s docker 删除没用的资源
Flannel Pod Bug汇总
Java
Jdk 部署
JDK部署
java线程池ThreadPoolExecutor类使用详解 - bigfan - 博客园
ShardingJDBC实现多数据库节点分库分表 - 墨天轮
Maven Repository: Search/Browse/Explore
其他
Git在阿里,我们如何管理代码分支?
chrome F12调试网页出现Paused in debugger
体验IntelliJ IDEA的远程开发(Remote Development) - 掘金
Idea远程调试
PDF转MD
强哥分享干货
优秀开源项目集合
vercel 配合Github 搭建项目Doc门户
如何用 Github Issues 写技术博客?
Idea 2021.3 Maven 3.8.1 报错 Blocked mirror for repositories 解决
列出maven依赖
[2022-09 持续更新] 谷歌 google 镜像 / Sci-Hub 可用网址 / Github 镜像可用网址总结
阿里云ECS迁移
linux访问github
一文教你使用 Docker 启动并安装 Nacos-腾讯云开发者社区-腾讯云
Nginx
Nginx 部署
Nginx 部署安装
Nginx反向代理cookie丢失的问题_longzhoufeng的博客-CSDN博客_nginx 代理后cookie丢失
Linux 系统 Https 证书生成与Nginx配置 https
数据仓库
实时数仓
松果出行 x StarRocks:实时数仓新范式的实践之路
实时数据仓库的一些分层和分层需要处理的事情,以及数据流向
湖仓一体电商项目
湖仓一体电商项目(一):项目背景和架构介绍
湖仓一体电商项目(二):项目使用技术及版本和基础环境准备
湖仓一体电商项目(三):3万字带你从头开始搭建12个大数据项目基础组件
数仓笔记
数仓学习总结
数仓常用平台和框架
数仓学习笔记
数仓技术选型
尚硅谷教程
尚硅谷学习笔记
尚硅谷所有已知的课件资料
尚硅谷大数据项目之尚品汇(11数据质量管理V4.0)
尚硅谷大数据项目之尚品汇(10元数据管理AtlasV4.0)
尚硅谷大数据项目之尚品汇(9权限管理RangerV4.0)
尚硅谷大数据项目之尚品汇(8安全环境实战V4.0)
尚硅谷大数据项目之尚品汇(7用户认证KerberosV4.1)
尚硅谷大数据项目之尚品汇(6集群监控ZabbixV4.1)
尚硅谷大数据项目之尚品汇(5即席查询PrestoKylinV4.0)
尚硅谷大数据项目之尚品汇(4可视化报表SupersetV4.0)
尚硅谷大数据项目之尚品汇(3数据仓库系统)V4.2.0
尚硅谷大数据项目之尚品汇(2业务数据采集平台)V4.1.0
尚硅谷大数据项目之尚品汇(1用户行为采集平台)V4.1.0
数仓治理
数据中台 元数据规范
数据中台的那些 “经验与陷阱”
2万字详解数据仓库数据指标数据治理体系建设方法论
数据仓库,为什么需要分层建设和管理? | 人人都是产品经理
网易数帆数据治理演进
数仓技术
一文看懂大数据生态圈完整知识体系
阿里云—升舱 - 数据仓库升级白皮书
最全企业级数仓建设迭代版(4W字建议收藏)
基于Hue,Dolphinscheduler,HIVE分析数据仓库层级实现及项目需求案例实践分析
详解数据仓库分层架构
数据仓库技术细节
大数据平台组件介绍
总览 2016-2021 年全球机器学习、人工智能和大数据行业技术地图
Apache DolphinScheduler 3.0.0 正式版发布!
数据仓库面试题——介绍下数据仓库
数据仓库为什么要分层,各层的作用是什么
Databend v0.8 发布,基于 Rust 开发的现代化云数据仓库 - OSCHINA - 中文开源技术交流社区
数据中台
数据中台设计
大数据同步工具之 FlinkCDC/Canal/Debezium 对比
有数数据开发平台文档
Shell
Linux Shell 命令参数
shell 脚本编程
一篇教会你写 90% 的 Shell 脚本
Kibana
Kibana 查询语言(KQL)
Kibana:在 Kibana 中的四种表格制作方式
Kafka
Kafka部署
canal 动态监控 Mysql,将 binlog 日志解析后,把采集到的数据发送到 Kafka
OpenApi
OpenAPI 标准规范,了解一下?
OpenApi学术论文
贵阳市政府数据开放平台设计与实现
OpenAPI简介
开放平台:运营模式与技术架构研究综述
管理
技术部门Leader是不是一定要技术大牛担任?
华为管理体系流程介绍
DevOps
*Ops
XOps 已经成为一个流行的术语 - 它是什么?
Practical Linux DevOps
Jenkins 2.x实践指南 (翟志军)
Jenkins 2权威指南 ((美)布伦特·莱斯特(Brent Laster)
DevOps组件高可用的思路
KeepAlived
VIP + KEEPALIVED + LVS 遇到Connection Peer的问题的解决
MinIO
MinIO部署
Minio 分布式集群搭建部署
Minio 入门系列【16】Minio 分片上传文件 putObject 接口流程源码分析
MinioAPI 浅入及问题
部署 minio 兼容 aws S3 模式
超详细分布式对象存储 MinIO 实战教程
Hadoop
Hadoop 部署
Hadoop集群部署
windows 搭建 hadoop 环境(解决 HADOOP_HOME and hadoop.home.dir are unset
Hadoop 集群搭建和简单应用(参考下文)
Hadoop 启动 NameNode 报错 ERROR: Cannot set priority of namenode process 2639
jps 命令查看 DataNode 进程不见了 (hadoop3.0 亲测可用)
hadoop 报错: Operation category READ is not supported in state standby
Spark
Spark 部署
Spark 集群部署
spark 心跳超时分析 Cannot receive any reply in 120 seconds
Spark学习笔记
apache spark - Failed to find data source: parquet, when building with sbt assembly
Spark Thrift Server 架构和原理介绍
InLong
InLong 部署
Apache InLong部署文档
安装部署 - Docker 部署 - 《Apache InLong v1.2 中文文档》 - 书栈网 · BookStack
基于 Apache Flink SQL 的 InLong Sort ETL 方案解析
关于 Apache Pulsar 在 Apache InLong 接入数据
zookeeper
zookeeper 部署
使用 Docker 搭建 Zookeeper 集群
美团技术团队
StarRocks
StarRocks技术白皮书(在线版)
JuiceFS
AI 场景存储优化:云知声超算平台基于 JuiceFS 的存储实践
JuiceFS 在 Elasticsearch/ClickHouse 温冷数据存储中的实践
JuiceFS format
元数据备份和恢复 | JuiceFS Document Center
JuiceFS 元数据引擎选型指南
Apache Hudi 使用文件聚类功能 (Clustering) 解决小文件过多的问题
普罗米修斯
k8s 之 Prometheus(普罗米修斯)监控,简单梳理下 K8S 监控流程
k8s 部署 - 使用helm3部署监控prometheus(普罗米修斯),从零到有,一文搞定
k8s 部署 - 使用 helm3 部署监控 prometheus(普罗米修斯),从零到有,一文搞定
k8s 部署 - 如何完善 k8s 中 Prometheus(普罗米修斯)监控项目呢?
k8s 部署 - k8s 中 Prometheus(普罗米修斯)的大屏展示 Grafana + 监控报警
zabbix
一文带你掌握 Zabbix 监控系统
Stream Collectors
Nvidia
Nvidia API
CUDA Nvidia驱动安装
NVIDIA驱动失效简单解决方案:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver.
ubuntu 20 CUDA12.1安装流程
nvidia开启持久化模式
nvidia-smi 开启持久化
Harbor
Harbor部署文档
Docker 爆出 it doesn't contain any IP SANs
pandoc
其他知识
大模型
COS 597G (Fall 2022): Understanding Large Language Models
如何优雅的使用各类LLM
ChatGLM3在线搜索功能升级
当ChatGLM3能用搜索引擎时
OCR神器,PDF、数学公式都能转
Stable Diffusion 动画animatediff-cli-prompt-travel
基于ERNIE Bot自定义虚拟数字人生成
pika负面提示词
开通GPT4的方式
GPT4网站
低价开通GPT Plus
大模型应用场景分享
AppAgent AutoGPT变体
机器学习
最大似然估计
权衡偏差(Bias)和方差(Variance)以最小化均方误差(Mean Squared Error, MSE)
伯努利分布
方差计算公式
均值的高斯分布估计
没有免费午餐定理
贝叶斯误差
非参数模型
最近邻回归
表示容量
最优容量
权重衰减
正则化项
Sora
Sora官方提示词
看完32篇论文,你大概就知道Sora如何炼成? |【经纬低调出品】
Sora论文
Sora 物理悖谬的几何解释
Sora 技术栈讨论
RAG垂直落地
DB-GPT与TeleChat-7B搭建相关RAG知识库
ChatWithRTX
ChatRTX安装教程
ChatWithRTX 踩坑记录
ChatWithRTX 使用其他量化模型
ChatWithRTX介绍
RAG 相关资料
英伟达—大模型结合 RAG 构建客服场景自动问答
又一大模型技术开源!有道自研RAG引擎QAnything正式开放下载
收藏!RAG入门参考资料开源大总结:RAG综述、介绍、比较、预处理、RAG Embedding等
RAG调研
解决现代RAG实际生产问题
解决现代 RAG 系统中的生产问题-II
Modular RAG and RAG Flow: Part Ⅰ
Modular RAG and RAG Flow: Part II
先进的Retriever技术来增强你的RAGs
高级RAG — 使用假设文档嵌入 (HyDE) 改进检索
提升 RAG:选择最佳嵌入和 Reranker 模型
LangGraph
增强型RAG:re-rank
LightRAG:使用 PyTorch 为 LLM 应用程序提供支持
模型训练
GPU相关资料
[教程] conda安装简明教程(基于miniconda和Windows)
PyTorch CUDA对应版本 | PyTorch
资料
李一舟课程全集
零碎资料
苹果各服共享ID
数据中心网络技术概览
华为大模型训练学习笔记
百度AIGC工程师认证考试答案(可换取工信部证书)
百度智能云生成式AI认证工程师 考试和证书查询指南
深入理解 Megatron-LM(1)基础知识
QAnything
接入QAnything的AI问答知识库,可私有化部署的企业级WIKI知识库
wsl --update失效Error code: Wsl/UpdatePackage/0x80240438的解决办法
Docker Desktop 启动docker engine一直转圈解决方法
win10开启了hyper-v,docker 启动还是报错 docker desktop windows hypervisor is not present
WSL虚拟磁盘过大,ext4迁移 Windows 中创建软链接和硬链接
WSL2切换默认的Linux子系统
Windows的WSL子系统,自动开启sshd服务
新版docker desktop设置wsl(使用windown的子系统)
WSL 开启ssh
Windows安装网易开源QAnything打造智能客服系统
芯片
国内互联网大厂自研芯片梳理
超算平台—算力供应商
Linux 磁盘扩容
Linux使用growpart工具进行磁盘热扩容(非LVM扩容方式)
关于centos7 扩容提示no tools available to resize disk with 'gpt' - o夜雨随风o - 博客园
(小插曲)neo4j配置apoc插件后检查版本发现:Unknown function ‘apoc.version‘ “EXPLAIN RETURN apoc.version()“
vfio-pci与igb_uio映射硬件资源到DPDK的流程分析
KubeVirt
vnc server配置、启动、重启与连接 - 王约翰 - 博客园
虚拟机Bug解决方案
kubevirt 如何通过CDI上传镜像文件
在 K8S 上也能跑 VM!KubeVirt 簡介與建立(部署篇) | Cloud Solutions
KubeVirt 04:容器化数据导入 – 小菜园
Python
安装 flash_attn
手把手教你在linux上安装pytorch与cuda
AI
在启智社区基于PyTorch运行国产算力卡的模型训练实验
Scaling law
免费的GPT3.5 API
AI Engineer Roadmap & Resources 🤖
模型排行
edk2
K8S删除Evicted状态的pod
docker 中启动 docker
远程本地多用户桌面1.17(一种不让电脑跟你抢键鼠的思路) - 哔哩哔哩
-
+
首页
数据中心网络技术概览
# **数据中心网络技术概览** ## **一、数据中心网络架构** 1. **Crossbar架构**:源自早期电话交换网络,由多个输入/输出端口和开关矩阵组成,实现设备间的任意连接,灵活且高效。 ![image-20240323141549643](http://yg9538.kmgy.top/202403231415685.png) **Crossbar架构(Crossbar Architecture)是一种计算机内存结构,用于连接处理器、存储器和其他组件。**在Crossbar架构中,所有的组件都通过一个交叉点矩阵(crossbar switch)相互连接。这种结构允许任何处理器同时访问任何存储器位置或其他资源,而不会互相干扰,从而提高了系统的并行性和性能。 Crossbar架构常见于高性能计算系统和一些专用硬件中,例如网络交换机和路由器。它也被用于某些类型的非易失性存储器技术,例如阻变随机存取存储器(ReRAM)和相变存储器(PCM)中的交叉点阵列。 在交叉点矩阵(crossbar switch)中,设置一个输入端口连接到多个输出端口通常涉及以下几种方法: 1. **软件配置**:在一些系统中,可以通过软件来配置交叉点矩阵的连接状态。这种情况下,你可以使用专用的软件工具或命令行接口来指定哪些输入端口应该连接到哪些输出端口。 2. **硬件控制**:在一些硬件设备中,例如网络交换机或路由器,交叉点矩阵的配置可能通过硬件控制信号来实现。这可能涉及到设置特定的寄存器值或使用硬件控制线路来指定连接状态。 3. **编程接口**:在一些支持可编程逻辑的系统中,如FPGA(现场可编程门阵列)或某些类型的专用集成电路(ASIC),你可以使用硬件描述语言(如VHDL或Verilog)来编写代码,以实现特定的连接逻辑。 4. **微控制器或处理器**:在一些小型系统或嵌入式设备中,可以使用微控制器或处理器来控制交叉点矩阵的连接状态,通常通过编写控制代码来实现。 1. **Clos架构**:1952年由Charles Clos提出,描述多级电路交换网络结构,是对Crossbar的改进,提供无阻塞网络,降低成本并提高效率。 Clos架构是一种多级交换网络结构,由法国数学家Charles Clos在1953年提出。它被设计用来提供高度可扩展和非阻塞的交换能力,适用于大型电话交换系统和数据中心网络。Clos架构通过将交换机组织成多个级别来实现这一点,通常分为三级:入口级别、中间级别和出口级别。 ![image-20240323141727517](http://yg9538.kmgy.top/202403231417556.png) **主要特点:** 1. **非阻塞性**:在理想情况下,Clos架构可以实现非阻塞通信,即任何一对入口和出口都可以在不干扰其他通信的情况下建立连接。 2. **可扩展性**:通过增加中间级别交换机的数量,可以轻松扩展系统以支持更多的入口和出口,使其适用于大型网络。 3. **冗余**:Clos架构天然支持冗余,提高了系统的可靠性和容错能力。 **结构组成:** - **入口级别(Ingress stage)**:包含多个入口交换机,负责将外部输入连接到中间级别交换机。 - **中间级别(Middle stage)**:包含多个中间交换机,负责在入口级别和出口级别之间路由数据。 - **出口级别(Egress stage)**:包含多个出口交换机,负责将来自中间级别的数据路由到最终目的地。 1. **胖树(Fat-Tree)架构**:一种CLOS网络架构,类似于真实树结构,从叶子到树根,网络带宽不收敛。使用大量低性能交换机构建大规模无阻塞网络。 ![image-20240323141928468](http://yg9538.kmgy.top/202403231419506.png) **胖树(Fat-Tree)架构是一种常用于大型网络和数据中心的层次化网络拓扑结构。**它是一种特殊类型的树形结构,其中网络的带宽随着接近根节点而增加,因此被称为“胖树”。这种设计使得网络的核心部分拥有更高的带宽,以支持大量的数据传输和避免瓶颈。 胖树架构通常用于构建高性能计算(HPC)集群、数据中心和其他需要高带宽、低延迟的网络环境。它能够提供良好的扩展性和容错能力,因为它允许多条路径从任意源节点到达任意目的节点,从而增加了网络的冗余性和鲁棒性。 **在胖树架构中,叶节点(leaf nodes)通常是网络中的终端设备,如服务器或存储设备。**随着向上移动到树的更高层次,交换机的端口数量和带宽会增加,这就是为什么它们被称为“胖”的原因。这种设计确保了数据在网络中向上或向下流动时,可用的带宽始终足够,从而减少了拥塞和提高了性能。 胖树(Fat-Tree)架构和传统树形架构(也称为细树或标准树形架构)的主要区别在于它们对网络带宽的分配方式不同: 1. **带宽分配**: - 在胖树架构中,随着接近树的根节点,网络的带宽逐渐增加。这意味着位于树顶层的交换机拥有更多的端口和更高的带宽,以支持从多个下层节点汇聚而来的流量。因此,胖树可以有效地减少网络瓶颈,提高数据传输效率。 - 在传统树形架构中,所有层级的交换机通常具有相同数量的端口和相同的带宽。这种设计在流量密集时容易在树的上层出现瓶颈,因为上层交换机需要处理来自多个下层节点的聚合流量,但带宽没有相应增加。 2. **扩展性和容错能力**: - 胖树架构由于其带宽随层级增加的特性,提供了更好的扩展性和容错能力。它允许网络在保持性能的同时增加更多的节点,并且可以通过多条路径在节点间进行通信,从而增强了网络的鲁棒性。 - 传统树形架构在扩展时可能会遇到性能瓶颈,并且在某些路径出现故障时可能无法提供足够的备用路径,导致网络的容错能力较弱。 - **数据中心的传统三层结构** **数据中心的传统三层结构指的是一种常见的网络架构,它将数据中心网络分为三个逻辑层级:接入层(Access Layer)、汇聚层(Aggregation Layer)或称之为分布层(Distribution Layer),以及核心层(Core Layer)**。每一层都有其特定的功能和责任,共同确保数据中心网络的高效运行和可靠性。: ![image-20240323142504305](http://yg9538.kmgy.top/202403231425342.png) 1. **接入层(Access Layer)**: - **这是数据中心网络的最底层,主要负责将服务器和存储设备连接到网络中。**接入层交换机通常提供较低的带宽和端口密度,因为它们直接连接到终端设备。接入层的主要职责包括端口安全、VLAN 分段和负载均衡。 2. **汇聚层(Aggregation Layer)或分布层(Distribution Layer)**: - **汇聚层位于接入层和核心层之间,主要负责汇总来自多个接入层交换机的流量,并提供向核心层的路由。**汇聚层交换机通常具有较高的带宽和处理能力,以支持来自下层的聚合流量。此外,汇聚层还可能负责提供一些高级服务,如防火墙、负载均衡和访问控制列表(ACL)。 3. **核心层(Core Layer)**: - **核心层是数据中心网络的最顶层,负责提供高速的数据传输和连接到外部网络(如互联网或其他数据中心)。**核心层交换机需要具有非常高的带宽和处理能力,以支持整个数据中心的流量。核心层的主要职责包括确保网络的高可用性、可靠性和可扩展性。 1. **叶脊(Spine-Leaf)网络**:叶交换机相当于接入交换机,直接连接物理服务器。带宽利用率高,网络延迟可预测,故障影响小。 叶脊(Spine-Leaf)网络是一种现代数据中心网络架构,它采用两层拓扑结构,以提供更高的带宽、更低的延迟和更好的可扩展性。叶脊架构由两种类型的交换机组成:叶节点(Leaf Nodes)和脊节点(Spine Nodes)。 ![image-20240323142637770](http://yg9538.kmgy.top/202403231426819.png) 1. **叶节点(Leaf Nodes)**: - 叶节点交换机位于网络的边缘,负责将服务器、存储设备和其他终端设备连接到网络中。在叶脊架构中,所有的叶节点都直接连接到所有的脊节点,但叶节点之间通常不直接连接。叶节点主要负责本地数据交换、访问控制和负载均衡。 2. **脊节点(Spine Nodes)**: - 脊节点交换机位于网络的核心,负责连接所有的叶节点,并提供高速数据传输的路径。脊节点之间通常不直接连接,它们的主要作用是在叶节点之间转发流量。脊节点需要具有高带宽和处理能力,以支持大量并发的数据流。 叶脊架构的主要优点包括: - **高可扩展性**:通过简单地添加更多的叶节点或脊节点,可以轻松扩展网络以适应增长的需求。 - **低延迟**:由于叶节点直接连接到脊节点,数据在节点之间的传输路径很短,从而减少了延迟。 - **负载均衡**:多条路径可用于在叶节点和脊节点之间传输数据,有助于实现流量的负载均衡和避免拥塞。 - **容错能力**:故障隔离更容易实现,因为叶节点和脊节点之间存在多条路径,一条路径的故障不会影响整个网络。 - **叶脊网络架构与传统三层网络架构的区别** 叶脊(Spine-Leaf)网络架构与传统三层网络架构(接入层、汇聚层、核心层)在设计理念和目标上有一定的区别,同时也存在一些关联性: ![image-20240323143710636](http://yg9538.kmgy.top/202403231437696.png) 1. **设计理念的差异**: - **传统三层网络架构**:这种架构通过将网络划分为接入层、汇聚层和核心层来管理网络流量和提供服务。它主要适用于传统的分层网络设计,其中每一层都有明确的职责,但可能存在性能瓶颈,特别是在汇聚层和核心层。 - **叶脊网络架构**:这种架构采用两层拓扑结构,包括叶节点(负责连接终端设备)和脊节点(负责高速数据传输)。它旨在提供更高的带宽、更低的延迟和更好的可扩展性,适用于现代数据中心和云环境。 2. **目标的关联性**: - 尽管两种架构在设计上有所不同,但它们的目标都是为了提高网络的性能、可靠性和可扩展性。叶脊架构可以被视为传统三层架构的一种演进,它解决了三层架构在大规模数据中心环境中可能遇到的一些限制和挑战。 3. **适用场景的变化**: - 随着数据中心规模的增长和云计算技术的发展,传统三层网络架构可能难以满足日益增长的带宽需求和对低延迟的要求。叶脊架构因其更好的可扩展性和性能而成为现代数据中心网络设计的首选。 - **为何不一开始就传统三层结构就设计成叶脊网络架构?** 传统三层网络架构(接入层、汇聚层、核心层)和叶脊(Spine-Leaf)二层网络架构的设计差异主要是由于它们所面临的技术挑战、性能需求和应用场景在不同时间点上的变化。以下是一些原因: 1. **技术限制**:当传统三层网络架构最初被设计时,网络设备的性能和带宽有限,处理能力和存储容量也相对较低。三层架构通过分层来简化网络设计,减少了单个设备的负载,使得网络更易于管理和维护。 2. **网络规模和复杂性**:早期的数据中心和企业网络规模相对较小,流量模式主要是北-南流量(即从终端用户到数据中心的流量和反向流量)。传统三层架构能够有效地处理这种流量模式,并提供足够的性能和可靠性。 3. **成本考虑**:在过去,网络设备成本较高,特别是具有高带宽和高处理能力的设备。三层架构允许使用较便宜的设备在接入层和汇聚层,而只在核心层使用高性能的设备,从而降低了整体网络成本。 4. **技术进步和需求变化**:随着时间的推移,网络设备的性能大幅提升,数据中心规模不断扩大,应用对带宽和延迟的要求也越来越高。同时,东-西流量(即数据中心内部服务器之间的流量)的增加使得传统三层架构的性能瓶颈和延迟问题变得更加明显。这些变化促使了叶脊架构的出现,它通过二层扁平化设计,提供了更高的带宽、更低的延迟和更好的可扩展性,以满足现代数据中心的需求。 - **优缺点比较** | 特征 | 传统三层网络架构 | 叶脊网络架构 | 胖树架构 | | ------------ | ------------------------------ | ---------------------------------- | -------------------------------------- | | **架构层级** | 三层(接入层、汇聚层、核心层) | 二层(叶层、脊层) | 多层(叶节点、中间节点、根节点) | | **设计原则** | 分层管理 | 扁平化网络 | 多路径、分层 | | **带宽分配** | 每层固定带宽 | 叶节点和脊节点通常具有固定带宽 | 带宽随着接近根节点而增加 | | **延迟** | 相对较高 | 相对较低 | 低于传统三层,高于叶脊 | | **可扩展性** | 有限 | 高 | 高 | | **故障恢复** | 较慢 | 快 | 快 | | **负载均衡** | 有限 | 支持多路径负载均衡 | 支持多路径负载均衡 | | **适用场景** | 小型至中型网络、传统企业网络 | 大型数据中心、云计算环境 | 大型数据中心、高性能计算环境 | | **优点** | 简单、成熟、易于管理 | 高可扩展性、低延迟、快速故障恢复 | 高可扩展性、多路径负载均衡、容错能力强 | | **缺点** | 可扩展性有限、可能出现性能瓶颈 | 设备成本可能较高、需要高性能交换机 | 结构相对复杂、成本较高 | ## **二、InfiniBand技术** 1. **诞生背景**: InfiniBand 是一种高性能的计算机网络通信标准,主要用于高性能计算(HPC)和企业数据中心。它支持非常高的数据传输速率和低延迟,使其成为连接服务器、存储系统和其他设备的理想选择,特别是在需要大量数据交换的环境中。 InfiniBand 的主要特点包括: 1. **高带宽**:InfiniBand 提供的带宽远高于传统的以太网,可达数百 Gbps,适合大规模数据传输。 2. **低延迟**:InfiniBand 采用了专用的交换芯片和网络协议,大大减少了数据传输的延迟,适合延迟敏感的应用。 3. **可扩展性**:InfiniBand 支持大规模网络的构建,可以连接成千上万的节点,适合大型计算集群和数据中心。 4. **远程直接内存访问(RDMA)**:InfiniBand 支持 RDMA,允许服务器之间直接交换数据而无需通过操作系统,进一步降低延迟并减轻 CPU 负担。 5. **质量服务(QoS)**:InfiniBand 支持多种质量服务等级,确保关键任务的数据传输优先级。 2. **组网架构**:基于通道的结构,包括HCA、TCA、InfiniBand交换机和路由器等组件。 1. **主机通道适配器(HCA)**:HCA 是安装在服务器或计算节点上的网络接口卡(NIC),负责处理与 InfiniBand 网络的连接和通信。每个 HCA 有一个或多个端口,可以连接到 InfiniBand 交换机或其他节点。 2. **交换机(Switch)**:InfiniBand 交换机是网络中的中心设备,负责连接多个 HCA 和其他交换机。它们可以提供高带宽和低延迟的数据交换,并支持大规模网络的构建。 3. **子网管理器(Subnet Manager, SM)**:子网管理器是一个软件或硬件组件,负责配置和管理 InfiniBand 网络中的所有设备,包括地址分配、路由和链路聚合等。子网管理器可以运行在专用的管理设备上,也可以集成在交换机或其他设备中。 4. **链路和路由**:InfiniBand 支持多种链路聚合和路由策略,以提高网络的带宽和可靠性。链路聚合允许多条物理链路合并为一条逻辑链路,而路由策略确定数据在网络中的传输路径。 - **组件之间通信** ![image-20240323144341571](http://yg9538.kmgy.top/202403231443615.png) InfiniBand 网络中的组件(如主机通道适配器(HCA)、交换机、存储设备等)通过以下方式互相通信: 1. **物理连接**:InfiniBand 设备之间通过物理电缆(通常是光纤或铜缆)连接。每个设备上的 HCA 通过端口与 InfiniBand 交换机或其他设备的端口相连。 2. **初始化和配置**:当 InfiniBand 网络启动时,子网管理器(Subnet Manager, SM)会发现网络中的所有设备,分配地址,并配置路径和其他参数。这个过程称为子网初始化,确保了网络中的每个设备都可以被正确地识别和配置。 3. **数据传输**: - InfiniBand 支持远程直接内存访问(RDMA),允许一台主机直接读写另一台主机的内存,而无需操作系统的介入。这种方式可以显著降低延迟和 CPU 负担。 - 数据传输还可以通过传统的消息传递方式进行,其中数据在发送方和接收方的操作系统之间进行复制。 4. **交换机路由**:InfiniBand 交换机根据子网管理器配置的路由表来转发数据包。当一个数据包到达交换机时,交换机根据目的地址查找路由表,确定下一跳的端口,并将数据包转发到相应的端口。 5. **流控制和拥塞管理**:InfiniBand 网络使用流控制机制来确保数据传输的可靠性,防止数据丢失。当网络出现拥塞时,拥塞管理机制会调整数据流量,减少拥塞情况。 ![image-20240323144816065](http://yg9538.kmgy.top/202403231448127.png) 这张图展示了一种典型的InfiniBand网络拓扑结构,包含了两个子网:Subnet A(子网A)和Subnet B(子网B)。下面详细介绍图中的各个部分: - **Endnode(端节点)**:这些通常是服务器或存储设备,它们包含有主机通道适配器(HCA),使得这些设备能够连接到InfiniBand网络。 - **Switch(交换机)**:这些设备负责在网络中转发来自端节点的数据。每个子网中的交换机都会将其下的端节点连接在一起,并可能与其他交换机连接以便于不同子网之间的通信。 - **连接线**:图中的实线表示端节点和交换机之间的物理连接。在InfiniBand中,这些连接能够提供高速的数据传输。 - **无线信号图标**:代表与外部网络的连接,可能是通过路由器或网关实现的。这样的连接允许InfiniBand网络与外部的其他网络通信,如以太网或其他类型的网络。 - **实线框**:表示子网的边界。在InfiniBand网络中,一个子网是由一个子网管理器进行管理的一个逻辑分区。每个子网可以独立地管理其地址、路由和其他配置。 在实际的应用中,两个子网可能连接到同一个物理InfiniBand交换机,也可能通过路由器或网关连接到外部网络。InfiniBand的子网管理器(SM)负责管理这些子网的配置和路由表。高可用性可以通过在每个子网中配置多个路径和冗余的子网管理器来实现。如果一个子网内的路径发生故障,数据可以通过其他路径进行路由,保证通信的连续性和网络的稳定性。 3. 网络层次 ![image-20240323145017616](http://yg9538.kmgy.top/202403231450669.png) 这张图展示的是 InfiniBand 技术的协议栈和它如何与传统网络协议栈进行比较。在我们的讨论中,我们将从下至上概述每一层的功能,并解释 InfiniBand 如何提供高效和高性能的网络解决方案。 **在底层,我们有物理层(PHY),它负责将数据编码成电信号,通过物理媒介进行传输。**在 InfiniBand 技术中,这一层是高度优化的,以支持高带宽和低延迟。 **上一层是链路层,它包括两部分:数据链路层和网络层。**数据链路层负责点对点的数据传输,确保数据的完整性和可靠性。网络层则负责路由和数据分组的交付,这是 InfiniBand 架构中实现高效数据传输的关键。 **数据链路层在 InfiniBand 协议栈中处于物理层之上,它负责在两个直接相连的节点之间实现可靠的数据传输。**具体来说,在 InfiniBand 网络中,数据链路层主要负责以下几个方面: 1. **帧传输**:数据链路层将来自上层的数据包封装成帧,每个帧包含数据以及必要的头部信息,如源和目的地地址。 2. **流控制**:确保数据不会过快地发送到无法及时处理这些数据的节点,从而避免数据溢出和丢失。 3. **差错控制**:数据链路层会检测和可能纠正在物理层传输过程中可能出现的错误。这通常通过校验和或循环冗余检查(CRC)等机制来实现。 4. **帧同步**:数据链路层通过添加起始和终止标识符,确保接收节点能够准确识别帧的边界。 5. **介质访问控制(MAC)**:虽然在 InfiniBand 网络中,交换机负责路径选择,而不需要传统意义上的MAC地址解析协议(如ARP),但是数据链路层仍然涉及处理帧的发送和接收,确保它们能够在物理层正确地被发送和识别。 6. **可靠性传输**:尽管物理层可能非常可靠,数据链路层还是提供了确认和重传机制,确保数据正确无误地到达目的地。 在 InfiniBand 中,数据链路层的实现是高度优化的,以提供极高的数据传输速率和极低的帧丢失率。这一层也负责维护和管理路径,使得数据可以在不同节点之间高效地传输。此外,数据链路层还提供了一定级别的安全性,例如通过帧加密和身份验证来确保数据的安全性。 **网络层在 InfiniBand 架构中起着至关重要的角色,它负责在源和目的地之间路由和传输数据包。**在 InfiniBand 的上下文中,网络层确保数据通过最有效的路径从一个节点传输到另一个节点,同时支持各种服务质量(QoS)和管理功能。 这个层级通常处理以下关键任务: 1. **寻址**:为网络中的每个设备分配唯一的地址,以便于数据包的正确路由。 2. **路由决策**:确定数据包在网络中的路径。在 InfiniBand 网络中,路由决策可以基于静态路由或动态路由算法来实现。 3. **错误检测和恢复**:网络层包含了错误检测机制,以识别并可能纠正在数据传输过程中发生的错误。 4. **拥塞控制**:监控网络中的流量,避免过度拥塞,确保数据流畅传输。 5. **分段和重组**:在源端将大块数据分割成更小的数据包进行传输,并在目的端对其进行重新组装。 6. **服务质量(QoS)**:管理不同类型的流量,并根据预设的策略给予不同的优先级,保证关键应用的性能。 **接下来是传输层,这一层特有于 InfiniBand,提供了端到端的通信服务。**这是通过远程直接内存访问(RDMA)实现的,它允许在不同节点之间直接传输数据,大大减少了传统网络协议栈中所需的中间复制和上下文切换。 **在InfiniBand架构中,传输层位于数据链路层之上,它负责管理端到端的通信连接,确保数据可靠地从一个节点传输到另一个节点。**InfiniBand的传输层特别设计来支持高吞吐量和低延迟的通信,这是高性能计算(HPC)和数据中心环境所需的。 传输层的主要职责包括: 1. **端到端连接**:传输层建立并维护端到端的连接。在InfiniBand中,这通常涉及到队列对,其中包括发送队列和接收队列。 2. **段分割和重组**:大数据块将被分割成小的段进行传输,并在接收端重新组装成原始数据块。 3. **流控制**:控制数据流以防止接收端被发送端的数据淹没。 4. **可靠传输**:通过序列号和确认机制,确保所有分段的数据都能够正确无误地到达,并且丢失的数据能够被重传。 5. **拥塞避免**:监测网络条件并相应地调整数据流,以避免可能导致性能下降的网络拥塞。 6. **远程直接内存访问(RDMA)**:InfiniBand的传输层支持RDMA操作,允许一个节点直接读取或写入另一个节点的内存,无需中间拷贝或CPU介入,极大提高了数据传输的效率。 7. **传输服务**:提供不同类型的传输服务,包括可靠的连接(RC)、可靠的数据报(RD)、无连接的数据报(UD)和其他服务。 8. **消息传递**:支持面向消息的通信模型,允许应用程序发送和接收消息,而无需担心底层的数据传输细节。 **最后,我们有应用层,这是用户与网络交互的层面。**在 InfiniBand 中,这层直接受益于下层提供的高速、低延迟服务,使得高性能计算和数据中心的应用能够高效地运行。 在讨论 InfiniBand 与传统网络协议的比较时,我们可以看到,在每一层,InfiniBand 都是为了性能而设计的。从物理层到应用层,每一步都进行了优化,以确保数据传输尽可能地快速和可靠。这种专注于性能的设计方法使得 InfiniBand 成为高性能计算和企业级数据中心网络的理想选择。 - **子网管理器在网络层么?** **子网管理器(Subnet Manager, SM)不是网络层的一部分,而是 InfiniBand 网络中的一个独立的管理实体,它负责维护整个 InfiniBand 子网的正常运行。**子网管理器位于 InfiniBand 架构的管理层,高于网络层和其他通信层,可以视为位于 OSI 模型的应用层。 子网管理器的作用和功能包括: 1. **初始化网络**:当 InfiniBand 网络设备启动时,子网管理器负责初始化和配置网络,包括激活链接、配置端口等。 2. **寻址和路由**:子网管理器负责为网络内的所有组件分配唯一的地址,并计算最佳的路由表,以便数据包在设备之间有效地传输。 3. **监控和诊断**:子网管理器会监控网络状态,包括链路的健康状况和性能参数,并能够执行诊断以识别问题所在。 4. **拓扑发现**:子网管理器会发现网络中的所有设备及其连接方式,建立整个 InfiniBand 子网的拓扑结构。 5. **管理更改**:当网络中添加或移除设备时,子网管理器会更新网络配置,以反映这些更改。 6. **维持高可用性**:在有多个子网管理器的情况下,一个子网管理器可以作为主要管理器,而其他的可以作为备份。如果主子网管理器宕机,一个备份可以接管,确保网络的持续运行。 - **InfiniBand报文架构** ![image-20240323150559108](http://yg9538.kmgy.top/202403231505185.png) 这张图描绘了InfiniBand架构中的协议栈和一个典型InfiniBand帧的结构。从下到上,协议栈包括物理层、数据链路层、网络层和传输层,每层都有自己的功能和负责的特定任务。 具体到帧结构,从左到右依次描述了一个完整帧的各个部分: 1. **物理层**:是协议栈的最底层,负责传输原始的比特流。 2. **数据链路层**:在图中展示为帧中的“Data Link Layer Header”,它可能包含控制信息,如帧同步和帧定界符。 - **LRH(Local Route Header)**:含有局部连接的路由信息。 - **ICRC(Invariant Cyclic Redundancy Check)**:用于错误检测和纠正,以确保数据在传输过程中的完整性。 - **VCRC(Variant Cyclic Redundancy Check)**:为传输层提供另一层错误检测。 3. **网络层**:这一层的头部在帧中称为“Network Layer Header”,它负责路由和分包的任务。 - **GRH(Global Route Header)**:当跨子网通信时含有全局路由信息。 4. **传输层**:这是协议栈中的“Transport Layer Header”,负责端到端的数据传输,包括流量控制、拥塞控制和数据的分段与重组。 - **BTH(Base Transport Header)**:包含传输层的核心控制信息。 - **ETH (Ethernet Header)**:以太网头部包含源地址和目的地址、以及用于定义帧内数据类型或长度的以太网类型字段(2个字节)。 - **Payload**:这是用户数据的主体部分,可以达到4069字节。 5. **起始和结束定界符**:表示帧的开始和结束。 6. **软件层**:图的最顶部提到了软件传输动作和上层协议,这涉及到应用程序级别的数据封装和处理。 在帧的两端,你会看到“Start Delimiter”和“End Delimiter”,以及在传输帧之间可能出现的“Idles”状态,这些是用来保持物理介质同步的控制字符。 4. **传输机制** - **主机和目标通信过程** 在InfiniBand网络中,主机和目标建立连接的过程主要涉及配置和初始化队列对(Queue Pairs,QPs)以及相关的资源。下面是一个概括的步骤: 1. **资源分配**: - 主机操作系统的网络子系统会为即将建立的连接分配必要的资源,包括创建队列对(QPs)。每个QP由两个工作队列组成:发送队列(SQ)和接收队列(RQ)。 2. **配置QP**: - 每个QP都需要被配置以适应预期的通信模式。这包括设置QP状态、定义QP编号以及配置相关的参数,例如最大传输单元(MTU)和超时值。 3. **交换信息**: - 主机和目标之间需要交换所需的连接信息,如QPs的编号、LID(本地标识符)、GID(全局标识符)和路径信息。这个信息交换可以通过外部的管理软件或应用程序级别的交换来完成。 4. **激活QP**: - 一旦相关的QP配置信息被双方获取并设置,QP可以被转移到激活状态。在此状态下,QP能够开始处理工作请求。 5. **同步和握手**: - 主机和目标将执行一个同步或握手过程,确保双方都准备好接收和发送数据。这通常涉及到使用特殊的控制消息来确认双方的准备状态。 6. **数据传输**: - 完成上述步骤后,主机和目标之间的连接就建立起来了。应用程序可以开始提交工作请求(Work Requests,WRs)到QP的工作队列。这些请求将被网络适配器取出并执行,如将数据包发送到远程节点或从远程节点接收数据包。 7. **完成通知**: - 一旦数据传输完成,完成队列元素(Completion Queue Element,CQE)会被生成,并可选择性地通知应用程序传输已完成。 这个过程涉及到InfiniBand子网管理器(Subnet Manager),它在网络上管理地址分配、路由和其他配置任务。子网管理器通过子网管理员协议(Subnet Administration Protocol,也称为SM)进行操作,该协议处理节点之间的连接和配置信息。 ![image-20240323151535330](http://yg9538.kmgy.top/202403231515395.png) 在这张图中,我们可以看到InfiniBand架构中的两个关键组件:**队列对(Queue Pair, QP)和工作队列元素(Work Queue Element, WQE)。** 在这张图中,我们分别看到了两个不同的操作场景: 左侧的图表显示了“发送操作”:**在这个场景中,应用程序创建一个WQE,指定了发送数据的详细信息,并将它放入到QP的发送队列中。然后,硬件会处理WQE,将数据发送出去。一旦数据发送完成,一个完成队列元素(Completion Queue Element, CQE)将被生成,以通知应用程序该操作已经完成。** 右侧的图表展示了“接收操作”:**在这个过程中,接收队列提前配置了WQE以准备接收数据。当数据到达并被硬件处理后,它被放置到相应的内存位置,并生成一个CQE以通知应用程序数据已经准备好。** 在两种操作中,QP是关键的中介。**QP实际上是一个抽象的概念,它包含了两个工作队列:一个用于发送操作,另一个用于接收操作。每个QP都与一个特定的远程QP直接相连,确保了数据传输的端到端性质。** 此外,图表下方的“Fabric”代表了InfiniBand网络的物理连接基础设施。这可以是由交换机、路由器和线缆组成的网络,它们共同提供了数据传输的物理路径。 图中的主要组件包括: 1. **队列对(Queue Pair, QP)**:它是InfiniBand通信的基本单位,由一个发送队列和一个接收队列组成。每个队列都包含多个工作队列元素(Work Queue Entries, WQEs),用于指定数据传输的操作。 2. **工作队列(Work Queue, WQ)**:分为两种,一种是发送工作队列(Send WQ),用于存放输出数据的操作指令;另一种是接收工作队列(Receive WQ),用于存放输入数据的操作指令。 3. **完成队列(Completion Queue, CQ)**:用于存放已经完成的工作队列元素(WQEs)的状态信息。无论是发送还是接收操作完成,相关的状态信息都会被放入完成队列。 ## **三、RDMA(远程直接数据存取)协议** RDMA(Remote Direct Memory Access)是一种网络技术,它允许计算机直接在另一台计算机的内存上进行读写操作,而无需操作系统的介入,从而显著降低了延迟和CPU的使用率。这种技术特别适用于需要高吞吐量和低延迟的应用,如高性能计算(HPC)、大数据分析和存储网络。 RDMA具有以下特点: 1. **低延迟**:通过绕过操作系统的网络栈,直接在应用程序之间传输数据,RDMA减少了数据传输的延迟。 2. **高吞吐量**:RDMA允许大量数据直接从发送方的内存传输到接收方的内存,减少了传统网络传输中的拷贝次数。 3. **CPU卸载**:数据传输不通过CPU,因此在数据传输过程中CPU几乎不需要参与,这意味着更多的CPU资源可以用于其他计算任务。 4. **零拷贝**:数据直接从源内存传送到目标内存,无需在内存间进行多次拷贝。 RDMA的工作机制如下: 1. **连接建立**:主机和目标设备之间首先需要建立连接。在InfiniBand架构中,这涉及到设置队列对(QPs),它们是RDMA通信的端点。 2. **内存注册**:在可以进行RDMA操作之前,必须在参与通信的每个节点上“注册”内存区域。这意味着对这些内存区域进行标记,允许远程直接访问。 3. **地址交换**:建立连接后,节点交换所需的信息,以便它们知道对方内存的确切位置。 4. **数据传输**:发送方使用RDMA写或RDMA读操作直接在接收方的内存上写数据或读数据。 RDMA通信需要特定的硬件支持,如RDMA capable network cards(例如InfiniBand HCA、RoCE enabled NICs、iWARP compatible NICs),和支持RDMA的交换机。这些硬件组件共同提供必要的功能来实现RDMA操作。 ![image-20240323143853005](http://yg9538.kmgy.top/202403231438051.png) ![image-20240323143920177](http://yg9538.kmgy.top/202403231439235.png) ## **四、总结** 数据中心网络架构和InfiniBand技术是现代数据中心高效、稳定运行的关键。不同的网络架构各有优缺点,需要根据实际需求选择合适的架构。同时,RDMA协议和InfiniBand技术的应用,进一步提升了数据中心的性能和稳定性。
yg9538
2024年4月6日 09:47
364
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码