Ceph crush运行图

news2024/11/27 16:34:57

Crush map介绍

ceph集群中由monitor负责维护的运行图包括:

  • Monitor map:监视器运行图
  • osd map:osd运行图
  • PG map:PG运行图
  • Crush map:crush运行图
  • Mds map:mds运行图

crush map是ceph集群物理拓扑的抽象,CRUSH算法通过crush map中集群拓扑结构、副本策略以及故障域等信息,来选择存放数据的osd。

以我当前集群为例,crush map描述的集群物理拓扑结构层级如下图,包括3个层级,分别是root、host和osd:

在这里插入图片描述

导出当前集群的crush map

ceph osd getcrushmap -o crushmap.bin	#导出之后是一个二进制文件
crushtool -d crushmap.bin -o crushmap.txt	#使用crushtool将二进制文件解析为文本

当前集群的crush map内容如下:

# begin crush map
tunable choose_local_tries 0
tunable choose_local_fallback_tries 0
tunable choose_total_tries 50
tunable chooseleaf_descend_once 1
tunable chooseleaf_vary_r 1
tunable chooseleaf_stable 1
tunable straw_calc_version 1
tunable allowed_bucket_algs 54

# devices
device 0 osd.0 class hdd
device 1 osd.1 class hdd
device 2 osd.2 class hdd
device 3 osd.3 class hdd
device 4 osd.4 class hdd
device 5 osd.5 class hdd
device 6 osd.6 class hdd
device 7 osd.7 class hdd
device 8 osd.8 class hdd
device 9 osd.9 class hdd
device 10 osd.10 class ssd
device 11 osd.11 class ssd
device 12 osd.12 class ssd
device 13 osd.13 class ssd
device 14 osd.14 class ssd
device 15 osd.15 class hdd
device 16 osd.16 class hdd
device 17 osd.17 class ssd

# types
type 0 osd
type 1 host
type 2 chassis
type 3 rack
type 4 row
type 5 pdu
type 6 pod
type 7 room
type 8 datacenter
type 9 zone
type 10 region
type 11 root

# buckets
host ceph-osd-05 {
        id -3           # do not change unnecessarily
        id -4 class hdd         # do not change unnecessarily
        id -13 class ssd                # do not change unnecessarily
        # weight 0.146
        alg straw2
        hash 0  # rjenkins1
        item osd.2 weight 0.049
        item osd.8 weight 0.049
        item osd.14 weight 0.049
}
host ceph-osd-04 {
        id -5           # do not change unnecessarily
        id -6 class hdd         # do not change unnecessarily
        id -14 class ssd                # do not change unnecessarily
        # weight 0.146
        alg straw2
        hash 0  # rjenkins1
        item osd.3 weight 0.049
        item osd.5 weight 0.049
        item osd.10 weight 0.049
}
host ceph-osd-01 {
        id -7           # do not change unnecessarily
        id -8 class hdd         # do not change unnecessarily
        id -15 class ssd                # do not change unnecessarily
        # weight 0.146
        alg straw2
        hash 0  # rjenkins1
        item osd.1 weight 0.049
        item osd.6 weight 0.049
        item osd.11 weight 0.049
}
host ceph-osd-03 {
        id -9           # do not change unnecessarily
        id -10 class hdd                # do not change unnecessarily
        id -16 class ssd                # do not change unnecessarily
        # weight 0.146
        alg straw2
        hash 0  # rjenkins1
        item osd.0 weight 0.049
        item osd.7 weight 0.049
        item osd.13 weight 0.049
}
host ceph-osd-02 {
        id -11          # do not change unnecessarily
        id -12 class hdd                # do not change unnecessarily
        id -17 class ssd                # do not change unnecessarily
        # weight 0.146
        alg straw2
        hash 0  # rjenkins1
        item osd.4 weight 0.049
        item osd.9 weight 0.049
        item osd.12 weight 0.049
}
host ceph-osd-06 {
        id -19          # do not change unnecessarily
        id -20 class hdd                # do not change unnecessarily
        id -21 class ssd                # do not change unnecessarily
        # weight 0.146
        alg straw2
        hash 0  # rjenkins1
        item osd.16 weight 0.049
        item osd.17 weight 0.049
        item osd.15 weight 0.049
}
root default {
        id -1           # do not change unnecessarily
        id -2 class hdd         # do not change unnecessarily
        id -18 class ssd                # do not change unnecessarily
        # weight 0.878
        alg straw2
        hash 0  # rjenkins1
        item ceph-osd-05 weight 0.146
        item ceph-osd-04 weight 0.146
        item ceph-osd-01 weight 0.146
        item ceph-osd-03 weight 0.146
        item ceph-osd-02 weight 0.146
        item ceph-osd-06 weight 0.146
}

# rules
rule replicated_rule {
        id 0
        type replicated
        min_size 1
        max_size 10
        step take default
        step chooseleaf firstn 0 type host
        step emit
}
rule erasure-code {
        id 1
        type erasure
        min_size 3
        max_size 4
        step set_chooseleaf_tries 5
        step set_choose_tries 100
        step take default
        step chooseleaf indep 0 type host
        step emit
}

# end crush map

crush map主要由5部分组成:

  • tunables:tunables参数主要用来修正一些旧BUG、优化算法以及向后兼容老版本
  • devices:代表各个osd。是CRUSH树状结构的叶子节点
  • types:bucket的类型,可以自定义,编号为正整数
  • buckets:CRUSH树状结构的所有中间节点就叫bucket,bucket可以是一些device的集合,也可以是诸如(host、rack、room等)的集合
  • rules:定义数据在集群中的分布策略,即pg选择osd的策略
tunables参数

各tunable参数含义如下:

#为了向后兼容应保持为0
tunable choose_local_tries 0
#为了向后兼容应保持为0
tunable choose_local_fallback_tries 0
#选择bucket的最大重试次数,如果重试50次crush算法还未选择出合适的bucket就失败,可以调整此参数
tunable choose_total_tries 50
#为了向后兼容应保持为1
tunable chooseleaf_descend_once 1
#修复旧bug,为了向后兼容应该保持为1
tunable chooseleaf_vary_r 1
#避免不必要的pg迁移,为做向后兼容应保持为1
tunable chooseleaf_stable 1
#straw算法版本,为了向后兼容应保持为1
tunable straw_calc_version 1
#允许使用的bucket选择算法,通过位运算计算得出的值
tunable allowed_bucket_algs 54

bucke选择算法包括:uniform、list、straw和straw2

devices

devices定义了集群中的每个osd,每个device都有一个id和name,例如osd.1中的1就是device的id

device也可以设置对应的类别,比如hdd、ssd,这样方便crush规则根据磁盘类型来选择osd

#device定格式
device {num} {osd.name} class {disk-type}

例如:
device 0 osd.0 class hdd
device 1 osd.1 class hdd
device 13 osd.13 class ssd
types

types表示bucket的类型,crush树状结构中除了osd外,其余层级的节点都是bucket,osd一般作为叶子节点。每个bucket对应ceph集群的每个物理拓扑位置,每个bucket可以是低一层级bucket的集合或者是一些叶子节点的集合

可以自定义新的type,但按照惯例,叶子节点必须为osd,其type为0

ceph默认定义的11种type如下:

type 0 osd	#osd
type 1 host	#主机
type 2 chassis	#刀片服务器的机箱
type 3 rack	#机架/机柜
type 4 row	#一排机柜
type 5 pdu	#机柜的接入电源
type 6 pod	#一个机房种的若干个小房间
type 7 room	#机房
type 8 datacenter	#数据中心
type 9 zone	
type 10 region	#区域
type 11 root	#根节点
bucketes

所有的中间节点就叫bucket,bucket可以是一些devices的集合,也可以是低一级的buckets的集合,根节点root是整个集群的入口。

定义一个bucket时需要遵循以下语法:

<bucket-type> <bucket-name> {
	#全局唯一的负整数id
	id <-num>
	#所有item的存储容量,1代表1TB,0.5代表0.5TB,依次类推
	weight <num>
	#选择下一级bucket使用的算法,uniform、list、straw或straw2
	alg <value>
	#bucket使用的hash算法,默认为0
	hash <value>
	#低一层级的bucket名称,以及其对应的weight
	item <item-name> weight <weight-value>
}

例如当前集群中有6个节点,每个节点上有两块50G HDD和一块50G SSD,其定义如下:

host ceph-osd-05 {
        id -3           # do not change unnecessarily
        id -4 class hdd         # do not change unnecessarily
        id -13 class ssd                # do not change unnecessarily
        # weight 0.146
        alg straw2
        hash 0  # rjenkins1
        item osd.2 weight 0.049
        item osd.8 weight 0.049
        item osd.14 weight 0.049
}
host ceph-osd-04 {
        id -5           # do not change unnecessarily
        id -6 class hdd         # do not change unnecessarily
        id -14 class ssd                # do not change unnecessarily
        # weight 0.146
        alg straw2
        hash 0  # rjenkins1
        item osd.3 weight 0.049
        item osd.5 weight 0.049
        item osd.10 weight 0.049
}
rules

rules定义了pool中数据在集群中的存储规则,crush算法的每一步都按照规则来执行

默认情况下,crush map中定义了两个rule:replicated_rule和erasure-code,分别对应副本池和纠删码池。用户可以根据自己的需求添加不同的rule,并为pool指定不同的rule。比如,对于性能要求较高的业务,将其数据存储在ssd pool中,其余业务的数据存放在hdd pool中。

rule的定义规范如下:

rule <rule-name> {
	#全局唯一的id
	id <num>
	#副本类型,副本或纠删码
	type <replicated|erasure>
	#如果副本数小于该值,不会采用此rule
	minsize <num>
	#如果副本数大于该值,不会采用该rule
	maxsize <num>
	#crush规则选择bucket的入口,如果指定了device-class,则必须选择匹配类型的osd
	step take <bucket-name> [class <device-calss>]
	#crush规则选择bucket的方式,分为choose和chooseleaf两种,N代表选择的数量,<bucket-type>是预期的bucket类型,代表故障域
	step <choose|chooseleaf> <firstn|indep> <N> type <bucket-type>
	#代表规则执行结束,返回选择结果给客户端
	step emit
}

关于step <choose|chooseleaf> <firstn|indep> type 的含义如下:

  • choose:表示选择到预期数量和类型的的bucket即可结束

  • chooseleaf:表示选择到预期数量和类型的bucket,并从这些bucket中选出osd。chooseleaf可以看做是choose的封装,如果只使用choose,需要定义多条choose规则最终选择出osd

    例如,下面的chooselaef规则和choose规则的作用是一致的:

step chooseleaf firstn 0 type host

step choose firstn 0 type host
step choose firstn 1 type osd 
  • firstn和indep:当出现osd down的情况时,用于控制CRUSH的副本策略。副本池使用firstn,纠删码池选择indep,纠删码池要求选择结果是有序的

    例如:一个PG分布在osd 1、2、3、4、5上,然后3 down了

    在firstn模式下,crush算法会选择1、2,选择3时发现down掉了,然后接着选择4、5,最后选择一个新的未down掉的6,最终结果会变迁为[1、2、3、4、5] -> [1、2、4、5、6]

    在indep模式下,crush算法会选择1、2,选择3时发现其down掉了,接着会尝试选择一个未down掉的6,然后选择4、5,最终的结果会变迁为[1、2、3、4、5] -> [1、2、6、4、5]

  • N:如果N=0,选择的数量等于副本数;如果0<N<副本数,选择的数量等于N;如果N<0,选择的数量等于副本数-N

crush map默认的副本池规则和纠删码池规则如下:

rule replicated_rule {
        id 0
        type replicated
        min_size 1
        max_size 10
        step take default	#从default根节点开始选择bucket
        step chooseleaf firstn 0 type host	#以host为故障域,选择3个host,并从这3个host上分别选择一个osd
        step emit
}
rule erasure-code {
        id 1
        type erasure
        min_size 3
        max_size 4
        step set_chooseleaf_tries 5
        step set_choose_tries 100
        step take default
        step chooseleaf indep 0 type host #选择
        step emit
}

Crush map调整案例

osd权重调整

在这里插入图片描述
每个osd设备有weight属性和reweight属性:

  • weight表示该osd的容量相对值,1TB对应1.00,500G对应0.5,依此类推。通过weight属性可以实现基于磁盘空间分配PG数量,让crush算法尽可能往磁盘空间大的osd多分配PG,往磁盘空间小的osd少分配PG
  • reweight属性的目的是重新平衡crush算法随机分配的PG,默认的分配是概率上的均衡,即使所有osd都是一样的容量也会产生一些PG分布不均匀的情况,此时可以通过调整reweight参数,让ceph集群立即重新平衡当前磁盘的PG,以达到数据重新平衡的目的。reweight的值只能在0到1之间。

修改osd的weight值

ceph osd  crush reweight osd.1 0.1	#修改osd.1的权重为0.1

在这里插入图片描述

修改osd的reweight值

ceph osd reweight osd.5 0.8	#修改osd.5的reweight的值为0.8

在这里插入图片描述

在osd使用率不均匀的时候,可以通过调低使用率较高的osd的reweight值来触发pg数据迁移,降低osd利用率。

不过要注意,修改osd的weight和reweight值都会立即触发pg数据迁移,在数据量较大时可能会集群性能。

数据分类存放(ssd pool和hdd pool)

集群中ssd和hdd磁盘共存时,可以创建ssd存储池和hdd存储池,将对存储性能要求较高的业务的数据存放在ssd存储池中,以提升业务性能

创建两条针对副本池的crush rule

#语法格式
#ceph osd crush rule create-replicated <rule-name> <root-name> <bucket-type> <device-class>

#创建名为rule-ssd的规则,从根default开始选择host类型bucket,并最终从host中选择ssd类型的osd
ceph osd crush rule create-replicated rule-ssd default host ssd	

#创建名为rule-hdd的规则,从根default开始选择host类型bucket,并最终从host中选择hdd类型的osd
ceph osd crush rule create-replicated rule-ssd default host hdd

ceph osd crush rule list	#查看crush rule规则

在这里插入图片描述

创建两个pool,分别使用上面的rule-ssd和rule-hdd

ceph osd pool create ssd-pool 16 16 replicated rule-ssd
ceph osd pool create hdd-pool 16 16 replicated rule-hdd

在这里插入图片描述

查看两个pool中pg对应的osd组合

ceph osd crush class ls-osd ssd	#列出所有ssd类型的osd
ceph osd crush class ls-osd hdd	#列出所有hdd类型的osd
ceph pg ls-by-pool ssd-pool |awk '{print $1,$2,$15}'
ceph pg ls-by-pool hdd-pool |awk '{print $1,$2,$15}'

在这里插入图片描述
在这里插入图片描述
如上图,所有ssd-pool中的pg都分布在ssd osd上,hdd-pool中的pg都分布在hdd osd上。

以rack为故障域

将集群的物理拓扑修改为以下结构:
在这里插入图片描述

导出集群当前的crush map

ceph osd getcrushmap -o crushmap.bin
crushtool -d crushmap.bin -o crushmap-v1.txt
cp crushmap-v1.txt crushmap-v2.txt

修改crush map,添加rack bucket和crush rule

vim crushmap-v2.txt
###############################################
#添加3个rack类型的bucket,每个rack包含两个host
rack rack-1 {
        id -25
        id -26 class hdd
        id -27 class ssd
        # weight 0.294
        alg straw2
        hash 0
        item ceph-osd-01 weight 0.148
        item ceph-osd-02 weight 0.146
}


rack rack-2 {
        id -28
        id -29 class hdd
        id -30 class ssd
        # weight 0.292
        alg straw2
        hash 0
        item ceph-osd-03 weight 0.146
        item ceph-osd-04 weight 0.146
}

rack rack-3 {
        id -31
        id -32 class hdd
        id -33 class ssd
        # weight 0.292
        alg straw2
        hash 0
        item ceph-osd-05 weight 0.146
        item ceph-osd-06 weight 0.146
}

#添加一个根节点,包含3个rack
root rep-rack {
        id -34
        id -35 class hdd
        id -36 class ssd
        # weight 0.880
        alg straw2
        hash 0
        item rack-1 weight 0.294
        item rack-2 weight 0.292
        item rack-3 weight 0.292
}

#添加一个副本型rule,以rack为故障域
rule rule-cross-rack {
        id 4
        type replicated
        min_size 1
        max_size 10
        step take rep-rack
        step chooseleaf firstn 0 type rack
        step emit
}
###############################################

导入修改后的crush map

crushtool -c crushmap-v2.txt -o crushmap-v2.bin
ceph osd setcrushmap -i crushmap-v2.bin

可以通过ceph osd tree验证新的物理拓扑结构是否生效,如下图
在这里插入图片描述

创建pool验证

ceph osd pool create cross-rack-pool 16 16 replicated rule-cross-rack
ceph pg ls-by-pool cross-rack-pool | awk '{print $1,$2,$15}'	#查看pg对应osd

在这里插入图片描述
如上图,pg对应的osd都分布在不同的rack

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

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

相关文章

HTML、PHP实战:搭建一个网页登录页面。

一、实验环境。 MySQL5.7.26 FTP0.9.60 Apache2.4.39 我这里用的是PHPstudy小皮一键搭建的。 数据库 二、登录页面。 登录页面前端代码 文件名&#xff1a;denglu.html <html> <head> <meta charset"UTF-8"> <title>登录界面</ti…

StarRocks 极速全场景 MPP 数据库介绍及使用

一、简介 StarRocks 是一款高性能分析型数据仓库&#xff0c;使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。既支持从各类实时和离线的数据源高效导入数据&#xff0c;也支持直接分析数据湖上各种格式的数据。兼…

Linux基本指令3

目录 一.基本常用指令 指令1&#xff1a;find命令&#xff1a; 指令2&#xff1a;which命令&#xff1a; 指令3&#xff1a;alias命令&#xff1a; 指令4&#xff1a;whereis which&#xff0c;find&#xff0c;whereis这三个搜索命令的区别&#xff1a; 指令5&#xff…

Vue初始

一、Vue的概述 Vue 发音类似 view Vue 游雨溪 鱿鱼须 鱿鱼须不懂Vue Vue历史 Angular React Vue 2013 Seed 2013 Seed命名为Vue 2014 Vue正式发布 0.8 - 0.10 2015 6.13 0.12 2015下半年 vue-cli vueRouter vueX 版本好1.0 vue正式跨入大众 渐进式框架(JQuery) 2016国…

[CTF/网络安全]攻防世界unserialize3解题详析及php序列化反序列化实例讲解

[CTF/网络安全]攻防世界unserialize3解题详析及php序列化反序列化实例讲解 _wakeup()及php序列化反序列化序列化字符串结构分析_wakeup()的利用 解题思路伪属性数量绕过 解题姿势总结 _wakeup()及php序列化反序列化 序列化是指将数据结构或对象转换为可传输或可存储的格式的过…

14.Kafka系列之K8S部署集群

1. 部署方式选择 基于Kafka3.X后的集群搭建方式主要分为两种&#xff0c;一种是基于Zookeeper管理方式&#xff0c;一种是基于KRaft模式&#xff0c;本文主要介绍Kafka-KRaft集群模式搭建 纠正文章1.Kafka系列之K8S部署单节点中基于Zookeeper方式的部署方式错误&#xff0c;其…

Godot引擎 4.0 文档 - 入门介绍 - Godot设计理念

本文为Google Translate英译中结果&#xff0c;DrGraph在此基础上加了一些校正。英文原版页面&#xff1a; Godots design philosophy — Godot Engine (stable) documentation in English Godot设计理念 既然你已经了解了&#xff0c;让我们来谈谈 Godot 的设计。 每个游戏…

(转载)MATLAB智能算法30个案例分析(1)——遗传算法工具箱

以下内容大部分来源于《MATLAB智能算法30个案例分析》&#xff0c;仅为学习交流所用。 1理论基础 1.1遗传算法概述 遗传算法(genetic algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。遗传算法是把问题参数编码为染色体,再利用迭代…

第11届蓝桥杯Scratch选拔赛真题集锦

目录 一、编程题 第11届蓝桥杯Scratch选拔赛真题集锦 一、编程题 第 1 题 问答题 马克思的手稿 题目说明 背景信息: 马克思手稿中有一道趣味数学问题: 有30个人&#xff0c;其中有男人、女人和小孩。在一家饭馆吃饭共花了50先令;每个男人花了3先令&#xff0c;每个女人花了…

draw.io如何绘制带箭头的弧线

好长时间没有写draw.io相关的技巧了。今天再补充一个小技巧。 如何绘制像下图中蓝色的带箭头的弧线&#xff1f; 本来以为这个问题应该很简单&#xff0c;但是在仔细研究了很久之后我发现这个问题并没有想像得那么容易。 众所周知&#xff0c;draw.io中带箭头的线叫作“connect…

软件工程 | 期末复习习题

一、软件工程概述 1、选择 软件有无可行性和不可控性 软件工程是一门工程性学科 软件生存周期常见模型&#xff1a;螺旋模型、增量模型、瀑布模型、原型模型、融合模型、快速应用开发模型、敏捷模型 软件生存周期中时间最长的阶段是维护阶段 瀑布模型是一种软件生存周期模…

微搭低代码实现aad的sso

微搭低代码平台是一种可帮助您快速构建和部署应用程序的工具&#xff0c;而无需手动编写大量代码。要在微搭低代码平台上实现Azure Active Directory&#xff08;AAD&#xff09;的单点登录&#xff08;SSO&#xff09;&#xff0c;您需要遵循以下步骤&#xff1a; 注册Azure …

SpringBoot整合Mybatis(3000字)

SpringBoot整合Mybatis 文章目录 SpringBoot整合Mybatis依赖导入配置信息(application.yml)代码分层数据库(建库建表语句)各层代码enity:dao:service:controller: 测试 Mybatis分页查询和模糊查询分页查询:测试: 模糊查询:测试: Mybatis的分布查询多对一:测试:一对多: Mybatis的…

邮箱营销不再难:如何提高邮件的到达率和打开率?

在数字时代&#xff0c;电子邮件是企业与客户以及潜在客户沟通的重要渠道&#xff0c;是企业培养客户的有效方式之一。然而&#xff0c;由于每个人每天也要收到大量的垃圾邮件&#xff0c;所以企业必须确保在正确的时间将邮件传递给正确的人。在这篇文章中&#xff0c;小编将探…

BEVDet 论文学习

1. 解决了什么问题&#xff1f; 自动驾驶系统感知周围的环境再进行决策&#xff0c;极具挑战。基于视觉的自动驾驶系统对准确性和效率的要求很严格&#xff0c;人们会采用不同的范式来解决 3D 检测和分割任务。对于多相机 3D 目标检测&#xff0c;image-view-based 方法如 FCO…

缓存更新策略

缓存更新策略 内存淘汰超时剔除主动更新说明利用Redis的内存淘汰机制&#xff0c;不用自己维护&#xff0c;当内存不足时会自动淘汰部分数据。下次查询时更新缓存。给缓存数据添加TTL(过期时间)&#xff0c;到期后自动删除缓存。下次查询时更新缓存。编写业务逻辑&#xff0c;…

CSAPP Lab4- PerfLab

代码优化 typedef struct { unsigned short red; /* R value */ unsigned short green; /* G value */ unsigned short blue; /* B value */ } pixel图像用一维数组表示&#xff0c;第&#xff08;i,j&#xff09;个像素表示为I[RIDX(i,j,n)]&#xff0c;n为图像的维数 #def…

Datacom-HCIE 02(10月26日更新)--含解析

单选题 1.[试题编号&#xff1a;189785] &#xff08;单选题&#xff09;如图所示&#xff0c;VTEP1上在BD20域内开启了ARP广播抑制功能&#xff0c;并且VTEP1通过 BGP EVPN路由学习到了PC2的ARP信息&#xff0c;则PC1发送的针对PC2的ARP请求&#xff0c;VIEP1在转发给VIEP2时…

sqli-labs Less-11,12

less-11(基于错误的POST型单引号字符型注入) sqlmap 1.使用bp抓包 2.保存为1.txt在本地&#xff0c;使用sqlmap查询数据库 sqlmap.py -r "C:\Users\wy199\Desktop\1.txt" --dbs 3.查询当前数据库的所有表 sqlmap.py -r "C:\Users\wy199\Desktop\1.txt"…

正点原子ALPHA开发板核心资源分析

目录 正点原子ALPHA开发板核心资源分析I.MX6ULL实物图对比SOC 主控芯片&#xff08;MCIMX6Y2CVM08AB&#xff09;NAND FLASHEMMCDDR3L 正点原子ALPHA开发板核心资源分析 I.MX6ULL实物图对比 I.MX6ULL NAND BTB 接口核心板资源图与 I.MX6ULL EMMC BTB 接口核心板资源图如上图&a…