【硬件相关】Mellanox网络配置及参数优化

文章目录

    • 一、前言
      • 1、硬件配置
      • 2、网卡信息
    • 二、驱动安装
      • 1、驱动介绍
      • 2、软件架构
        • 2.1、mlx4 VPI Driver
        • 2.2、mlx5 Driver
      • 3、驱动安装
        • 3.1、常规安装
        • 3.2、驱动编译
          • 方法一
          • 方法二
      • 4、RDMA配置
    • 三、交换机配置
    • 四、mlnx-tools管理工具
      • 1、软件安装
      • 2、软件使用
        • ibdev2netdev
          • a、说明
          • b、用法

一、前言

本文主要介绍Mellanox网络配置、部署管理及相关调优手段,用于后续部署实践参考使用

1、硬件配置

序号配件名称配件型号
1100GE 双口网卡Mellanox MCX456A-ECAT
2100GE 以太网DAC线缆Mellanox MCP1600-C003
3100GE 以太网交换机Asterfusion CX532P-NT-AC

2、网卡信息

NVIDIA ConnectX InfiniBand网卡介绍
NVIDIA ConnectX-4 InfiniBand/Ethernet Adapter Cards User Manual

  • 网卡端口:双口(Dual-port QSFP28)
  • 网卡速率:InfiniBand: SDR/DDR/QDR/FDR/EDREthernet: 10/25/40/50/100 Gb/s
  • PCIe版本:8.0GT/s(PCIe 3.0)
  • 插槽宽度:x16 lanes
  • 网卡驱动:mlx5_core
[root@node154 ~]# lspci | grep Eth | grep Mellanox
3b:00.0 Ethernet controller: Mellanox Technologies MT27700 Family [ConnectX-4]
3b:00.1 Ethernet controller: Mellanox Technologies MT27700 Family [ConnectX-4]

[root@node154 ~]# lspci -vvv -s 3b:00.0 | grep -E '(LnkCap:|LnkSta:)'
                LnkCap: Port #0, Speed 8GT/s, Width x16, ASPM not supported, Exit Latency L0s unlimited, L1 <4us
                LnkSta: Speed 8GT/s, Width x16, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-

二、驱动安装

1、驱动介绍

MLNX_OFED Introduction

Mellanox OFED是一个单一的虚拟协议互连(Virtual Protocol Interconnect,VPI)软件栈,可以在所有Mellanox网络适配器解决方案中运行,支持以下到服务器的上行链路:

网卡类别网卡驱动上行速率
ConnectX®-3/ ConnectX®-3 Promlx4InfiniBand: SDR, QDR, FDR10, FDR
Ethernet: 10GigE, 40GigE and 56GigE
ConnectX®-4mlx5InfiniBand: SDR, QDR, FDR, FDR10, EDR
Ethernet: 1GigE, 10GigE, 25GigE, 40GigE, 50GigE, 56GigE1, and 100GigE
ConnectX®-4 Lxmlx5Ethernet: 1GigE, 10GigE, 25GigE, 40GigE, and 50GigE
ConnectX®-5mlx5InfiniBand: SDR, QDR, FDR, FDR10, EDR
Ethernet: 1GigE, 10GigE, 25GigE, 40GigE, 50GigE, and 100GigE
ConnectX®-5 Exmlx5InfiniBand: SDR, QDR, FDR, FDR10, EDR
Ethernet: 1GigE, 10GigE, 25GigE, 40GigE, 50GigE, and 100GigE
ConnectX®-6mlx5InfiniBand: SDR, EDR, HDR
Ethernet: 1GigE, 10GigE, 25GigE, 40GigE, 50GigE, and 100GigE
Innova™ IPsec ENmlx5Ethernet: 10GigE, 40GigE
Connect-IB®mlx5InfiniBand: SDR, QDR, FDR10, FDR

2、软件架构

Mellanox OFED协议栈的示意参考如下,展示了上层协议如何与硬件、内核和用户空间通信

在这里插入图片描述

2.1、mlx4 VPI Driver

mlx4是Mellanox设计的ConnectX®系列适配器的低级驱动程序实现。ConnectX®-3适配器可以作为ib适配器或以太网网卡使用。OFED驱动支持Infiniband和Ethernet网卡配置。为了适应支持的配置,驱动程序被分成以下模块:

  • mlx4_core

处理低级功能,如设备初始化和固件命令处理,控制资源分配,使ib和以太网功能可以共享设备而不相互干扰

  • mlx4_ib

处理InfiniBand的专用功能

  • mlx4_en

处理Ethernet的专用功能

2.2、mlx5 Driver

mlx5是Mellanox设计的Connect-IB®和ConnectX®-4适配器的低级驱动程序实现。Connect-IB®作为InfiniBand适配器运行,而ConnectX®-4作为VPI适配器(InfiniBand和Ethernet)运行。mlx5驱动程序由以下内核模块组成:

  • mlx5_core

作为Connect-IB®和ConnectX®-4适配器卡所需的常用函数库(例如,复位后初始化设备),mlx5_core驱动程序还实现了ConnectX®-4的以太网接口。与mlx4_en/core不同,mlx5驱动程序不需要mlx5_en模块,因为以太网功能内置在mlx5_core模块中。

  • mlx5_ib

处理InfiniBand的专用功能

  • libmlx5

Libmlx5是实现特定于硬件的用户空间功能的提供程序库。如果固件和驱动程序之间不兼容,驱动程序将无法加载,并且将在dmesg中打印一条消息

3、驱动安装

驱动下载地址:NVIDIA MLNX_OFED
驱动安装说明:Installing MLNX_OFED

3.1、常规安装

用于Ethernet和Infiniband网络的Linux驱动程序在所有主流操作系统发行版本都可以使用,如kylin、openEuler、UOS、CentOS、Ubuntu等,可以根据操作系统、硬件架构选择不同驱动版本包下载

  • 根据当前操作系统版本及硬件架构,选择下载对应驱动软件包(MLNX_OFED_LINUX-5.8-4.1.5.0-rhel8.2-aarch64.tgz)

在这里插入图片描述

  • 对于主流发行系统版本,在不升级默认内核版本情况下,mlnx_ofed提供了预构建RPM包,直接执行驱动软件安装即可
    注:
    执行mlnxofedinstall安装脚本,程序会自动检测当前安装的内核版本,卸载不匹配的软件包,安装MLNX-OFED二进制驱动程序包,标识当前Infiniband和Ethernet网络适配器,并自动升级固件(如需安装自定义固件版本,则使用./mlnxofedinstall --fw-image-dir /tmp/my_fw_bin_files
    安装完成后,会在tmp目录生成对应安装日志文件(如/tmp/MLNX_OFED_LINUX.1713584.logs/general.log
tar -zxvf MLNX_OFED_LINUX-5.8-4.1.5.0-rhel8.2-aarch64.tgz
cd MLNX_OFED_LINUX-5.8-4.1.5.0-rhel8.2-aarch64/
./mlnxofedinstall --all --force
3.2、驱动编译
#当前环境信息如下
[root@node88 ~]# cat /etc/.productinfo
Kylin Linux Advanced Server
release V10 (8.2) /(Sun)-aarch64-Build03/20210903

[root@node88 ~]# cat /etc/.kyinfo
[dist]
name=Kylin
milestone=Server-V10-SP3-2309a-Release-S5000C-20231025
arch=arm64
beta=False
time=2023-10-25 17:40:45
dist_id=Kylin-Server-V10-SP3-2309a-Release-S5000C-20231025-arm64-2023-10-25 17:40:45

[servicekey]
key=0320031

[os]
to=
term=2025-01-23

[root@node88 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 8.2 (Ootpa)

[root@node88 ~]# uname -a
Linux node88 5.15.0-1.10.6.v2307.ky10h.aarch64 #1 SMP Sun Oct 15 14:14:45 CST 2023 aarch64 aarch64 aarch64 GNU/Linux

在执行上一步安装如出现Current operation system is not supported!,则表明Mellanox预先编译的程序包无法在当前内核版本下运行,需要基于当前环境重新编译tgz软件包,再次执行软件安装即可

方法一
./mlnxofedinstall --all --force  --add-kernel-support
dracut -f
方法二

How to install MLNX_OFED for customized OS

通常情况下,如果针对操作系统做了一些自定义修改,有可能导致安装脚本无法识别操作系统发行版本号,导致安装失败,提示Current operation system is not supported!
对于这类情况,需要手动编译MLNX-OFED驱动包,使用重新编译的驱动包进行安装

  • 参照当前系统的基础操作系统版本,下载对应发行版本原始驱动包压缩包,解压缩进入对应目录

在这里插入图片描述

wget https://www.mellanox.com/page/mlnx_ofed_eula?mtag=linux_sw_drivers&mrequest=downloads&mtype=ofed&mver=MLNX_OFED-5.8-4.1.5.0&mname=MLNX_OFED_LINUX-5.8-4.1.5.0-kylin10-aarch64.tgz
tar -zxvf MLNX_OFED_LINUX-5.8-4.1.5.0-kylin10-aarch64.tgz
cd MLNX_OFED_LINUX-5.8-4.1.5.0-kylin10-aarch64/
  • 基于当前系统重新编译驱动包
    注:编译过程如出现Error: One or more required packages for installing OFED-internal are missing.依赖错误,则按照提示信息安装对应依赖软件包即可
  • -m 用于指定原始驱动包的目录
  • –make-tgz 表示以tgz压缩包方式打包
  • -t 用于指定存放重新编译驱动包的目录
  • –distro 用于指定当前系统发行版本,示例为kylin10
./mlnx_add_kernel_support.sh -m /home/mlx5/MLNX_OFED_LINUX-5.8-4.1.5.0-kylin10-aarch64/ --make-tgz -t /tmp  --distro kylin10 
  • 执行编译操作后,会在/tmp目录下生成当前内核的驱动包压缩包,解压缩进入目录,执行以下安装命令即可
  • –skip-distro-check 表示不进行当前OS的发布版本号检查
./mlnxofedinstall --skip-distro-check --force

4、RDMA配置

所有节点执行RDMA相关配置优化,参考如下

[root@node154 ~]# cat RDMA.sh
#!/bin/bash
for mlx_dev in $(ibdev2netdev | awk '{print $1}')
do
   if_dev=$(ibdev2netdev | grep $mlx_dev | awk '{print $5}')
   ifconfig "${if_dev}" mtu 9000.
   cma_roce_tos -d "${mlx_dev}" -t 120
   mlnx_qos -i "${if_dev}" --trust dscp
   mlnx_qos -i "${if_dev}" --pfc 0,0,0,1,0,0,0,0
   mlnx_qos -i ${if_dev} --dscp2prio set,30,3
   echo 48 >/sys/class/net/${if_dev}/ecn/roce_np/cnp_dscp
   echo 1 >/sys/class/net/${if_dev}/ecn/roce_np/enable/3
   echo 1 >/sys/class/net/${if_dev}/ecn/roce_rp/enable/3
   cma_roce_mode -d ${mlx_dev} -p 1 -m 2
   sysctl -w net.ipv4.tcp_ecn=1
   echo 120 > /sys/class/infiniband/"${mlx_dev}"/tc/1/traffic_class
done
[root@node154 ~]# sh RDMA.sh

三、交换机配置

与10Gb交换机有所不同,服务器直接连接到交换机网络是没法通信的,100Gb交换机需要针对网络端口划分vlan,同一个网络环境不同网络端口划分到同一个vlan之后,服务器之间网络方可正常通信。
交换机出厂内置队列、拥塞等参数配置,故交换机端针对RDMA无需做任何特殊配置。

现有交换机vlan配置如下:

物理端口逻辑网口vlan标签
0~90/0~0/32vlan100
10~200/36~0/76vlan200

注:交换机逻辑网口以4的倍数递增,如物理端口0对应0/0,物理端口1对应0/4,以此类推

笔记本通过USB转RJ45串口线连接至交换机COM口,协议选择SERIAL,波特率选择115200,参考配置命令如下:
注:默认账号密码为admin/asteros

sonic@sonic:~$ sudo config cli-mode cli
sonic@sonic:~$ sudo sonic-cli
sonic# configure terminal
sonic(config)# vlan 100
sonic(config-vlan-100)# vlan 200
sonic(config-vlan-200)# interface ethernet 0/0
sonic(config-if-0/0)# switchport access vlan 100
sonic(config-if-0/0)# interface ethernet 0/4
sonic(config-if-0/4)# switchport access vlan 100
sonic(config-if-0/4)# interface ethernet 0/80
sonic(config-if-0/112)# switchport access vlan 200
sonic(config-if-0/112)# interface ethernet 0/84
sonic(config-if-0/116)# switchport access vlan 200
sonic(config-if-0/120)# end
sonic#write 
save running-config...
Existing files will be overwritten, continue? [y/N]:y

四、mlnx-tools管理工具

1、软件安装

mlnx-tools

若当前操作系统未安装MLNX_OFED驱动,则需要安装mlnx-tools工具,否则无法使用cma_roce_tos、ibdev2netdev等命令行工具
mlnx-tools是Mellanox提供的一个用户界面工具和脚本,用于管理Mellanox网络配置

  • 安装mlnx-tools的utils工具
wget https://github.com/Mellanox/mlnx-tools/archive/refs/tags/v5.1.3.tar.gz
tar -zxvf mlnx-tools-5.1.3.tar.gz
cd mlnx-tools-5.1.3/ofed_scripts/utils/
python3 setup.py install
  • 安装mlnx-tools的script脚本
[root@node88 mlx5]# cd mlnx-tools-5.1.3/ofed_scripts/
[root@node88 ofed_scripts]# ll
total 92
-rwxrwxr-x 1 root root  2566 Oct  3  2020 cma_roce_mode
-rwxrwxr-x 1 root root  2483 Oct  3  2020 cma_roce_tos
-rwxrwxr-x 1 root root  3696 Oct  3  2020 common_irq_affinity.sh
-rwxrwxr-x 1 root root  7726 Oct  3  2020 ibdev2netdev
-rwxrwxr-x 1 root root  8321 Oct  3  2020 mlnx_affinity
-rwxrwxr-x 1 root root   453 Oct  3  2020 mlnx-post-hlk
-rwxrwxr-x 1 root root  1023 Oct  3  2020 mlnx-pre-hlk
-rwxrwxr-x 1 root root  2411 Oct  3  2020 odp_stat.sh
-rwxrwxr-x 1 root root 11065 Oct  3  2020 roce_config.sh
-rwxrwxr-x 1 root root  3015 Oct  3  2020 set_irq_affinity_bynode.sh
-rwxrwxr-x 1 root root  2493 Oct  3  2020 set_irq_affinity_cpulist.sh
-rwxrwxr-x 1 root root  2997 Oct  3  2020 set_irq_affinity.sh
-rw-rw-r-- 1 root root  2216 Oct  3  2020 setup_mr_cache.sh
-rw-rw-r-- 1 root root  1367 Oct  3  2020 show_counters
-rwxrwxr-x 1 root root  2939 Oct  3  2020 show_gids
-rwxrwxr-x 1 root root  1349 Oct  3  2020 show_irq_affinity_hints.sh
-rwxrwxr-x 1 root root  1369 Oct  3  2020 show_irq_affinity.sh
-rwxrwxr-x 1 root root  2489 Oct  3  2020 sysctl_perf_tuning
drwxrwxr-x 3 root root   276 Jan 10 09:48 utils
[root@node88 ofed_scripts]# cp * /usr/sbin/

2、软件使用

linux-driver-solutions

ibdev2netdev
a、说明

ibdev2netdev是MLNX-OFED提供的脚本,用于展示适配器端口和网卡的映射关系及当前状态信息

b、用法
  • 查看适配器端口和网卡映射关系及连接状态:ibdev2netdev -v
[root@node88 ~]# ibdev2netdev -v
0000:01:00.0 rocep1s0f0 (MT4115 -            )                 fw 12.28.2006 port 1 (ACTIVE) ==> enp1s0f0np0 (Up)
0000:01:00.1 rocep1s0f1 (MT4115 -            )                 fw 12.28.2006 port 1 (DOWN  ) ==> enp1s0f1np1 (Down)
  • 检查Infiniband链路状态:hca_self_test.ofed
[root@node154 ~]# hca_self_test.ofed
---- Performing Adapter Device Self Test ----
Number of CAs Detected ................. 2
PCI Device Check ....................... PASS
Kernel Arch ............................ x86_64
Host Driver Version .................... MLNX_OFED_LINUX-5.7-1.0.2.0 (OFED-5.7-1.0.2): 4.14.113-1.el7.x86_64
Host Driver RPM Check .................. PASS
Firmware on CA #0 NIC .................. v12.28.2006
Firmware on CA #1 NIC .................. v12.28.2006
Host Driver Initialization ............. PASS
Number of CA Ports Active .............. 1
Port State of Port #1 on CA #0 (NIC)..... UP 4X EDR (Ethernet)
Port State of Port #1 on CA #1 (NIC)..... DOWN (Ethernet)
Error Counter Check on CA #0 (NIC)...... PASS
Error Counter Check on CA #1 (NIC)...... PASS
Kernel Syslog Check .................... PASS
Node GUID on CA #0 (NIC) ............... 24:8a:07:03:00:27:d2:40
Node GUID on CA #1 (NIC) ............... 24:8a:07:03:00:27:d2:41
------------------ DONE ---------------------

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL系列】在 MacOS 上安装 MySQL

在 MacOS 上有两种方式安装 MySQL 服务器&#xff1a;通过 brew 安装和通过安装包安装。 文章目录 1、通过 brew 安装 MySQL1.1、安装 MySQL1.2、启动 MySQL 服务器1.3、配置 MySQL 服务器1.4、MySQL 服务器管理命令 2、通过安装包安装 MySQL2.1、下载安装包2.2、安装 MySQL2.3…

Vue3:使用 Composition API 不需要 Pinia

在 Vue.js 开发的动态环境中&#xff0c;在单个组件中处理复杂的业务逻辑可能会导致笨重的文件和维护噩梦。虽然 Pinia 提供集中式状态管理&#xff0c;但仅依赖它来处理复杂的业务逻辑可能会导致代码混乱。本文探讨了使用 Composition API 的替代方法&#xff0c;说明开发人员…

mysql学习笔记5——对表的修改操作

对表的列进行操作 对表可以进行创建create与删除drop&#xff0c;同时可以对表进行修改alter 修改字段 添加字段 删除具体的某一列 添加列时可以指定添加位置 对表的数据进行操作 select查询操作可以指定查询条件 删除具体数据&#xff08;而非删除表中某一列某一行&#xf…

【重要公告】对BSV警报系统AS的释义

​​发表时间&#xff1a;2024年2月15日 由BSV区块链协会开发并管理的BSV警报系统&#xff08;Alert System&#xff0c;以下简称“AS”&#xff09;是BSV网络的重要组件。它是一个复杂的系统&#xff0c;主要职能是在BSV区块链网络内发布信息。这些信息通常与网络访问规则NAR相…

ChatGPT论文指南|ChatGPT如何助力论文中的数据分析!【建议收藏】

点击下方▼▼▼▼链接直达AIPaperPass &#xff01; AIPaperPass - AI论文写作指导平台 公众号原文▼▼▼▼&#xff1a; ChatGPT论文指南|ChatGPT如何助力论文中的数据分析&#xff01;【建议收藏】 小编在之前的论文写作流程中&#xff0c;介绍了大量论文文字工作&#xff…

VUE引入高德地图区域划分district结果为空(Cannot read properties of undefined (reading ‘0‘))

1.错误 Uncaught TypeError: Cannot read properties of undefined (reading 0) 通过debugger去看status、result结果status为no_data,而result为空 2.原因 大概率就是key过期了或者配置错了 3.正确配置 </script> <!-- 注意&#xff1a;导入密钥要在接口上面&…

2024.3.4 作业

1、流式域套接字 1>tcp服务端实现 #include<myhead.h> int main(int argc, const char *argv[]) {//1、创建套接字int sfd socket(AF_UNIX, SOCK_STREAM, 0);if(sfd -1){perror("socket error");return -1;}//2、判断套接字文件是否存在&#xff0c;如果…

史上最细,企业性能测试步骤详细,测试老鸟带你一篇打通!

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、性能测试流程 …

总线要点笔记

1. AXI/AHB/APB差异 AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构 AHB (Advanced High-performance Bus) 高级高性能总线 ASB (Advanced System Bus) 高级系统总线 APB (Advanced Peripheral Bus) 高级外围总线 AXI (Advanced eXtensible Interface) …

【洛谷 P8682】[蓝桥杯 2019 省 B] 等差数列 题解(数学+排序+差分)

[蓝桥杯 2019 省 B] 等差数列 题目描述 数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列&#xff0c;只记得其中 N N N 个整数。 现在给出这 N N N 个整数&#xff0c;小明想知道包含这 N N N 个整数的最短的等差数列有几项&#xff1f; 输…

探究大语言模型如何使用长上下文

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 论文链接&#xff1a;https://doi.org/10.1162/tacl_a_00638 论文标题&#xff1a;Lost in the Middle: How Language Models Use Long Contexts 论文发表期刊&#xff1a;Transactions of the Assoc…

【Apple Vision Pro应用】Cinephile——Cinema Mode for Local Video(苹果眼睛视频播放器)

Cinephile 为您提供了一个完全无干扰、无限制的无限空间&#xff0c;让您尽享视频的精彩。它创造了一种身临其境的环境&#xff0c;您可以在能够想象到的最大屏幕上&#xff0c;从任何角度或位置观看内容。 您可以根据个人喜好自由调整视频的大小和位置。添加视频中的环境光&am…

MoonBit 新增 += 运算符,引入 super trait 和 List 字面量机制

MoonBit更新 1. 添加了 系列语句 包括、-、*、/&#xff0c;支持运算符重载&#xff1a; fn init {let array [1,2,3,4]array[2] * 10println(array) // [1, 2, 30, 4] }fn init {let mut a 1a 20println(a) // 21 } struct Foo {data : Array[Int] } derive(Debug)fn o…

转载-七种Java常用序列化框架的选型与对比

七种Java常用序列化框架的选型与对比 本文章转自&#xff1a;乐字节 文章主要讲解&#xff1a;Java常用序列化框架 获取更多前端相关资料可以点击链接加入群聊【Java技术交流群】&#xff1a;正在跳转暗号&#xff1a;166 转载地址&#xff1a;七种Java常用序列化框架的选型…

Linux设备模型(九) - bus/device/device_driver/class

一&#xff0c;设备驱动模型 1&#xff0c;概述 在前面写的驱动中&#xff0c;我们发现编写驱动有个固定的模式只有往里面套代码就可以了&#xff0c;它们之间的大致流程可以总结如下&#xff1a; 实现入口函数xxx_init()和卸载函数xxx_exit() 申请设备号 register_chrdev_r…

软件测试的基本流程是什么?软件测试流程详细介绍

软件测试和软件开发一样&#xff0c;是一个比较复杂的工作过程&#xff0c;如果无章法可循&#xff0c;随意进行测试势必会造成测试工作的混乱。为了使测试工作标准化、规范化&#xff0c;并且快速、高效、高质量地完成测试工作&#xff0c;需要制订完整且具体的测试流程。 01…

中国各省绿色金融试点DID数据集(2010-2023)

一、数据简介 最新的2010-2023年中国31省绿色金融试点DID数据&#xff0c;供大家研究使用。 数据说明&#xff1a;内含绿色金融改革创新试验区名单&#xff0c;将试验区获批当年及以后的政策虚拟变量项是否试点赋值为1&#xff0c;获批之前赋值为0。其中赣江新区、贵安新区为国…

Spring:FactoryBean预加载逻辑以及自定义实现Mybatis的接口扫描

Spring&#xff1a;FactoryBean预加载逻辑以及自定义实现Mybatis的接口扫描 1 前言 参考Mybatis框架的Mapper注解扫描Mapper接口的业务逻辑&#xff0c;其中集成Spring的逻辑里使用到了Spring框架的FactoryBean拓展点&#xff0c;本文针对Spring FactoryBean的加载流程进行分…

Unity 摄像机的深度切换与摄像机画面投影

摄像机可选&#xff1a;透视、正交 正交类似投影&#xff0c;1比1 透视类似人眼&#xff0c;近大远小 摄像机投影 在项目中新建&#xff1a;渲染器纹理 将新建纹理拖动到相机的目标纹理中 新建一个平面&#xff0c;将新建材质组件放到平面中即可。 相机深度切换 使用代…

Git实战(2)

git work flow ------------------------------------------------------- ---------------------------------------------------------------- 场景问题及处理 问题1&#xff1a;最近提交了 a,b,c,d记录&#xff0c;想把b记录删掉其他提交记录保留&#xff1a; git reset …