work
文章平均质量分 84
HeroKern
精通高速存储方案 V:yolov8
展开
-
ftp/nfs卸载自定义文件系统数据
在存储领域对于数据卸载有很多种方式,比如通过高速GTX接口流模式卸载,或者通过网络卸载数据,通过网络卸载数据可以开发上位机定制化卸载数据,但是开发上位机软件比较麻烦,已经需要安装软件,软件容易出现BUG等诸多问题,这篇文章分享通过自定义文件系统管理数据,并且通过windos自带的nfs客户端卸载存储办卡中的数据,windos端通过nfs映射磁盘到共享文件夹,用户看到的储存办卡存储空间就像看电脑本地磁盘一样方便,这种方式安全可靠,不需要专门定制客户端,并且具有通用性,并且客户是最喜欢这种方式卸...原创 2022-03-05 21:33:03 · 1659 阅读 · 0 评论 -
zynq多host高速存储方案设计
前面文章讲解了《zynq高速存储方案》,那种方案是针对单个pcie host设计的方案,当项目需求记录速度很高,并且没有国产化要求时,可以考虑使用Zynq UltraScale+ 系列的ZU11EG芯片,该芯片成本低,且支持4个PCIe硬核,可以将该4个pcie都配置成host模式,在每个host下挂载pcie 3.0 x4的SSD固态硬盘,这样每个pcie host能够跑的速率就是ssd盘能够支持的最大速率,如果选择三星的SSD盘,那么PCIe3.0 x4读写速率能够到3GB/s,那么4个...原创 2024-04-28 18:42:59 · 1485 阅读 · 0 评论 -
PCIe+Switch高速存储方案设计
上篇文章分享了《zynq高速存储方案》,zynq存储方案实现了1.2GB/s的存储速率,这篇文章分享pcie+switch常规方案,这种方案在存储领域很常见,目前作者实现switch方案存储速度有5GB/s和6.5GB/s,以及没有国产化要求并且不使用switch方案储存速率5GB/s。具体速度多少根实际的SSD盘数和switch选择都有很大关系,高速存储在设计存储方案时会有很多考虑,比如是否全国产化,速度指标,SSD盘容量,数据是否需要备份,硬件成本,开发难度系数等诸多因素,只有结合实际项...原创 2022-02-19 17:07:52 · 10571 阅读 · 16 评论 -
linux系统raid0测试实验
本篇文章介绍嵌入式平台linux系统中raid0如何使用,并了解raid0磁盘阵列的工作原理,在后面文章中介绍pcie+switch存储方案raid0阵列的实现。在linux系统中raid0配置使用的mdadm命令,在嵌入式平台中,mdadm命令一般默认是没有的,需要手动安装mdadm命令。本次编写块设备驱动用两片内存模拟磁盘做raid0,在块设备中提供读写内存接口,打印内存接口,方便跟踪mdadm命令工作原理。安装mdadm命令下载mdadm.tar.gz tar –xzvf m...原创 2022-01-13 15:30:06 · 1429 阅读 · 1 评论 -
全网最全PCIe枚举算法分析(以ZYNQ平台实例讲解)
本篇文章分析PCIe上电是如何枚举的,BAR空间访问在以前文章已经讲解,可以参考《从cpu角度理解PCIe》和《从cpu角度理解PCIe续集》。本文篇幅较长,读者需要耐心阅读。PCIe上电枚举算法主要是分配总线号和分配BAR空间,分配的总线号用于访问配置空间,BAR空间用于与PCIe设备进行数据交互。PCIe协议包括物理层,链路层和事务层,本次分析从事务层开始着手,事务层数据交互的单元是TLP包,TLP有公共的头部和载荷数据,载荷数据最大为4KB,根据公共头部TLP可以分...原创 2021-12-31 17:34:43 · 4010 阅读 · 4 评论 -
zynq srio枚举id方案设计
常见的SRIO枚举分配ID操作在Powerc平台比较常见,本文使用zynq7045实现SRIO枚举功能,PL端有SRIO IP,只需要将AXI维护端口挂到AXI-GP接口上,PS软件就可以通过AXI总线访问SRIO IP实现枚举自动分配ID功能。本次测试硬件拓扑图如下图所示。srio交换芯片采用的时1848交换芯片,SRIO1和SRIO2本次实验室环回到ZYNQ的SRIOIP上,也可以直接将端口引到外部让用户使用,本次方便实验分析和抓信号,SRIO三个x4的IP都是...原创 2021-12-30 16:32:43 · 2046 阅读 · 5 评论 -
zynq实现二层网络加密转发
二层网络加密转发是加密端将所有二层网络数据实现加密,然后发送出去,接收端接收到数据后解密,然后以二层报文发送出去。常规的网络加密仅仅局限于网络应用数据加密,对底层的ARP(IP地址到MAC地址的解析,可通过ARP广播包寻找MAC地址),ICMP(ping命令),IP(TCP和UDP的下一层)包通通实现加密传输。原创 2021-11-23 16:50:32 · 3032 阅读 · 0 评论 -
高效无锁环形队列
在linux零拷贝技术中提到高效无锁环形队列,这篇文章分享这个知识点,这个知识点不是很复杂。环形队列多用于多线程之间数据异步传输,提高数据处理性能。下面介绍常规环形队列和高效无锁队列两种处理方式。常规环形队列如下图所示,队列头代表写指针,队列尾代表读指针,通过判断读写的位置判断队列是否为空,是否满,通过线程锁来保证读写指针在使用时只被一个线程使用,从而保证数据不会出错。(出错原因,当一个线程在对读写指针修改时,调度器将该线程切换出去访问另外一个线程,如果该线程正好也会对读写指针进行修改,那么就会导致读写指原创 2021-11-22 17:42:41 · 2252 阅读 · 0 评论 -
linux内核零拷贝技术
1. 设计思想零拷贝技术主要用于磁盘数据通过网络进行交互,常见用法卸载磁盘文件从网络发送出去。常规的卸载文件方法流程如下所示。从上图可以看出软件流程一共复制了4次数据,内核态到用户态切换4次。读操作(复制两次,上下文切换两次):1.用户进程通过 read() 函数向内核(kernel)发起系统调用,上下文从用户态(user space)切换为内核态(kernel space)2.CPU利用DMA控制器将数据从主存或硬盘拷贝到内核空间(kernel space)的读缓冲区(read buffer)原创 2021-11-19 17:48:49 · 3878 阅读 · 0 评论 -
zynq/nvme/ext4/fpga高速存储设计
1.概述很久没有写文章了,有空余时间还是分享一点技术干货。今天写一下zynq+nvme高速存储设计思想,zynq处理器是将ARM和FPGA集成在一起的处理器,区别于以前ARM+FPGA的板间架构,采用AXI内部总线实现ARM和FPGA内部的通讯,支持低速AXI-GP接口(类型Local Bus),高速AXI-HP接口,ARM端简称PS,FPGA端简称PL。如果数据过PS端,那么数据会经过HP接口,软件上的数据解析和拷贝,这样存储速率大约为130MB/s,速率比较慢,所以就引入了本文方案,控制走PS,数据P原创 2021-11-15 11:48:08 · 11980 阅读 · 11 评论 -
以太网PHY寄存器分析
以太网PHY寄存器分析 11、以太网PHY标准寄存器分析 21.1 Control Register 21.2 Status register 51.3 PHY Identifier Register &...转载 2020-07-17 10:04:39 · 7929 阅读 · 6 评论 -
SerDes知识详解
一、SERDES的作用1.1并行总线接口 在SerDes流行之前,芯片之间的互联通过系统同步或者源同步的并行接口传输数据,图1.1演示了系统和源同步并行接口。 随着接口频率的提高,在系统同步接口方式中,有几个因素限制了有效数据窗口宽度的继续增加。a)、时钟到达两个芯片的传播延时不相等(clock skew)b)、并行数据各个bit的传播延时不相等(data skew)c)...转载 2020-07-16 17:58:40 · 9073 阅读 · 0 评论 -
PRBS介绍
转自:http://blog.sina.com.cn/s/blog_9fa828d10102y3dp.html之前一直在讲高速串行的协议,MAC,PHY,PMD层,PMA层吗,PCS层。。。看大家回答的数量也不是很多,弱弱的问一句大家都消化了吗?的确,讲到各个层的功能,数据在芯片内部如何去运作协调这方面的确有点高深。其实坦白说哈,作为...转载 2020-07-16 17:56:07 · 10632 阅读 · 1 评论 -
PCIe Switch高级功能及应用
PCI-E Switch芯片,估计不少人已经听说过这个东西了。但是估计多数人对其基本功能知之甚少。PCI-E Switch作为最先进的生产力,已经被广泛应用在了传统存储系统,以及少量品牌/型号的服务器平台。 笔者作为拥有全球最领先PCI-E Switch产品的PMC-Sierra公司的系统架构师,想在这里为大家普及一下PCI-E Swi...转载 2020-07-16 17:53:39 · 10180 阅读 · 0 评论 -
MAC/PHY与MII(GMII/SGMII/RGMII)
MAC(Media Access Control)即媒体访问控制子层协议。该部分有两个概念:MAC可以是一个硬件控制器 及 MAC通信以协议。该协议位于OSI七层协议中数据链路层的下半部分,主要负责控制与连接物理层的物理介质。MAC硬件大约就是下面的样子:在发送数据的时候,MAC协议可以事先判断是否可以发送数据,如果可以发送将给数据加上一些控制信息,最终将数据以及控制信息以规定的格式发送到物理层;在接收数据的时候,MAC协议首先判断输入的信息并是否发生传输错误,如果没有错误,...转载 2020-06-28 19:22:23 · 3707 阅读 · 1 评论 -
SMI(MDC/MDIO)总线接口介绍
1. MDIO接口SMI:串行管理接口(Serial Management Interface),也被称作MII管理接口(MII Management Interface),包括MDC和MDIO两条信号线。MDIO是一个PHY的管理接口,用来读/写PHY的寄存器,以控制PHY的行为或获取PHY的状态,MDC为MDIO提供时钟。MDIO原本是为MII总线接口定义的,MII用于连接MAC和PHY,包含两种信号接口:1. ...转载 2020-06-28 19:17:53 · 8760 阅读 · 0 评论 -
交换机的工作原理
原文链接:链接一、交换机的工作原理 当交换机收到数据时,它会检查它的目的MAC地址,然后把数据从目的主机所在的接口转发出去。交换机之所以能实现这一功能,是因为交换机内部有一个MAC地址表,MAC地址表记录了网络中所有MAC地址与该交换机各端口的对应信息。某一数据...转载 2020-06-01 16:43:06 · 3469 阅读 · 0 评论 -
路由器和交换机的区别?
(1)外形上交换机通常端口比较多,路由器端口少体积小,(路由器一般都集成了交换机的功能,LAN口就是作为交换机的端口来使,WAN用于连接外网的端口。(2)工作层次不同交换机在数据链路层(实现数据帧的转发),而路由器在网络层(肩负着网络互连的作用)。(3)数据的转发对象不同交换机是根据MAC地址转发数据帧,而路由器是根据IP地址来转发数据报。IP地址决定最终数据要到达某一台主机,而MAC地址是决定下一跳将要交给哪一台设备(一般是交换机或者路由器),IP地址是软件实现的,可以描述转载 2020-06-01 16:16:14 · 857 阅读 · 0 评论 -
浅谈CPU寻址内存机制
本文讲解的内容是Processor如何访问内存,TLB Cache和MMU的在Processor中扮演的角色。涉及的硬件平台是Xilinx Zynq-7000,dual-core ARM® Cortex-A9 MPCore,架构是armv7,下面分别对TLB、MMU、Processor如何访问cache和主存深入分析。在早期计算机系统中,程序员都是直接访问物理地址进行编程,当程序出现错误时,整...原创 2018-10-07 10:49:57 · 6506 阅读 · 0 评论 -
linux环境代码不能发送UDP广播包
执行该命令:route add -net 255.255.255.255 netmask 255.255.255.255 dev eth0 metric 1eth0是网络设备名称原创 2019-05-24 13:57:53 · 2226 阅读 · 4 评论 -
linux内核max函数实现
Linux内核函数中的max函数编写得非常优秀,让我忍不住要拿出来分析一番。传统定义max函数是#define max(X,Y) ((X) > (Y) ? (X) : (Y))。是不是觉得这样定义已经perfect了,那先看下面这个例子。int x = 1, y = 2;printf("max=%d/n", max(x++, y++));printf("x = %d, y = %...原创 2019-04-14 20:19:28 · 2605 阅读 · 0 评论 -
container_of实现原理详解
container_of在内核函数中经常使用,该函数的功能是根据一个结构体成员的指针,返回这个成员指针所在的结构体的首指针。举例说明如下:struct std{int a;short b;char c;int d;};Stuctstd test;Int *p = &test.d;container_of(p, Stuctst...原创 2019-04-14 20:14:06 · 2080 阅读 · 0 评论 -
i2c总线驱动详解
I2c总线应用也是很广泛的,i2c总线经常挂载eeprom、温度传感器、湿度传感器等设备。I2c总线下可以挂载多个设备,识别设备采用一个地址,这个地址在一条i2c总线是独一无二的。I2c总线驱动与spi总线驱动框架是一致的,都是采用控制器、core、设备三层驱动。下面开始讲解i2c总线驱动流程。强烈建议读者看完本篇文章。首先看一下设备树文件,本次示例程序是一个i2c控制器下挂在eeprom设备...原创 2019-04-14 20:08:23 · 3089 阅读 · 0 评论 -
spi总线之flash设备驱动
这篇文章分析挂在spi总线下的flash设备驱动程序,设备树信息如下所示。Spi设备驱动程序如下:看到没有,spi_driver驱动结构与platform_driver结构基本一致。我们来看看spi总线的匹配方式如何。Spi核心层定义与注册如下所示。注册方式与platform总线完全一致,看到初始化驱动的入口函数了吗,这也是在前文提到过的,是module_init的一种...原创 2019-04-14 19:37:58 · 1994 阅读 · 0 评论 -
spi ioctl无效参数解决
方法一:struct spi_ioc_transfer tr; /* 这种写法一定要赋初值 */ memset(&tr,0,sizeof(struct spi_ioc_transfer)); tr.tx_buf = (unsigned long)tx; tr.rx_buf = (unsigned long)rx; tr.len = sizeo...原创 2019-05-24 15:14:26 · 6223 阅读 · 2 评论 -
qmake 添加额外参数 分开编译
qmake添加传参,生成不同的Makefile,可用于不同场景。使用方法如下:传一个参数:arm-qmake "TARGET = ax03" ax03.pro传两个参数:arm-qmake "TARGET=xinetd" "DEFINES +=GUARD" ax03.pro这样很方便时候嵌入式开发,arm-qmake是自定义嵌入式qmake的软链接,为了区分x86的qma...原创 2019-07-11 11:30:46 · 1877 阅读 · 0 评论 -
spi总线驱动详解
Spi总线在实际应用得比较多,所以这篇为文章讲解以实际应用为主,bus总线类型细节不做讲解,感兴趣的读者可以分析源码,研究内核源码我觉得是一件非常有趣的事情,同时也是一门艺术。Spi总线上可以挂flash、wifi网卡等常见设备。本文讲解以挂在flash作为实例。 Spi总线硬件电路如下图所示。一般有四根线– MOSI, MISO, SCK, SS;spi下可以挂在多个设备,S...原创 2019-04-13 11:47:06 · 7545 阅读 · 0 评论 -
platform总线驱动程序
从这篇文章开始讲解驱动程序,Linux内核中有很多总线驱动,但都是由bus_type总线内管理,在/sys/bus目录下能够看到该内核定义了那些系统总线,常见的有platform、iic、spi、input等。内核中的总线与实际物理总线不一样,这里的总线是虚拟的,仅仅是一系列链表管理的对象,我们称这个管理链表为驱动总线。本文分析platform总线,这个总线在驱动结构中比较常用。平台定义与注册...原创 2019-04-11 17:48:43 · 692 阅读 · 0 评论 -
CentOS7配置本地Yum源
这里需要注意,当电脑不能连接外界网络时候,需要用U盘拷贝镜像包,但是一个镜像包有8G左右,fat32格式只支持4GB,儿centos默认是不支持NTFS格式文件系统,这里可以将镜像包用软碟通提取里面iso文件,这里不能直接解压,软碟通的提取类似linux下的mount操作,提取完成后将该文件拷贝到centos某个目录,然后指定路径。 从CentOS7官网下载DVD中存在需要的大部分软件,所...原创 2018-11-11 13:53:48 · 14538 阅读 · 0 评论 -
从cpu角度理解PCIe续集
概述上篇文章剩下两个问题,上电扫描PCIe树和存储地址到PCIe地址的映射,本篇文章将对这两个问题做出解答。本文可能会针对某一款芯片做出详细流程解答,读者可以只关注整个流程,具体映射机制和寄存器参考芯片datasheet。上篇文章已经了解到如何访问配置空间,前256Bytes可以通过寄存器方式访问,后面的256B~4k必须通过映射才能访问,映射无非就是把配置空间映射到存储地址空间,或者把PCIe...原创 2018-11-07 13:06:41 · 5459 阅读 · 3 评论 -
从cpu角度理解PCIe
概述为什么需要写这篇文章,当我阅读《深入浅出SSD》这篇书籍中PCIe章节时发现,本书籍的侧重点是放在PCIe控制器和PCIe协议上,从CPU角度理解PCIe知识偏少,本文对下面几个知识点做出一些补充。CPU访问外设寄存器与内存编址方式; CPU如何访问PCIe配置空间; CPU能够通过寄存器访问配置空间,为什么还需要映射PCIe配置空间; 如何扫描PCIe树并且为PCIe分配ID;...原创 2018-10-24 10:34:53 · 13227 阅读 · 2 评论 -
Cache地址映射
理解Cache地址映射之前补充一些基础知识,Cache的地址映射和MMU(内存管理单元)和TLB Cache(转译查找缓存)中的映射是有区别的。Cache、TLB Cache、MMU在CPU中结构如图1所示,图1展现的是Cortex A9 Processor内部结构,采用的指令和数据总线分开的哈佛结构。CPU访问内部存储和外部存储,以及各种外设空间在硬件层面上看都是物理地址(硬件总线),然后为...原创 2018-09-01 15:17:35 · 22282 阅读 · 1 评论 -
几行C代码剖析Cache参数
Cache的容量一般都很小,即使是最大的三级 Cache(L3)也只有20MB ~30MB。cache加快了CPU对内存的读写速率,CPU第一次执行需要将数据时候需要从主存-->L3 Cache--->L2 Cache -->L1 Cache传递到CPU的计算单元。cache分成多个组,每个组分成多个行,linesize是cache的基本单位,从主存向cache迁移数据都是按照l...原创 2018-08-20 16:31:34 · 2326 阅读 · 0 评论 -
深入浅出cache写策略
随着计算机行业的飞速发展,CPU的速度和内存的大小都发生了翻天覆地的变化,在处理器速度不断增加的形势下,处理器处理数据的能力也得到大大提升。数据是存储在内存中的,内存吞吐率虽然得到很大的提升,但是相对于处理器来讲,仍然非常慢。处理器要从内存中直接读取数据都要花大概几百个时钟周期,在这几百个时钟周期内,处理器除了等待什么也不能做。在这种环境下,才提出了Cache的概念。计算机中常见的存储介质如图1所...原创 2018-08-20 16:25:47 · 13514 阅读 · 0 评论 -
万兆网络UDP速率传输性能测试(接受端)
接受端是在VS2010下开发的控制台程序,接受采取的是多线程去接收,VS2010不自带pthread库,这个库是Linux下线程操作库,习惯了在Linux下开发,就把这个库文件安装到VS的安装目录。线程库下载地址:pthreads-w32-2-8-0-release.zip 控制台程序exe文件(采用的是静态编译,只有一个exe文件,方便操作),下载地址:udpserver.exeexe界面效果如原创 2017-08-20 19:53:34 · 10297 阅读 · 1 评论 -
如何在CentOS 7中安装内核头文件
在本文中,我们将解释如何使用默认包管理器从基本存储库中安装CentOS / RHEL 7和Fedora发行版中的内核头文件。当您在CentOS系统上编译自定义内核模块(如设备驱动程序)时,您需要在系统上安装内核头文件,其中包括Linux内核的C头文件。 内核头文件在安装或编译任何与内核接口的代码时提供了不同类型的函数和结构定义。安装内核头文件时 ,确保它与系统上当前安装的内核版本相匹配。 ...原创 2018-11-12 16:39:43 · 8520 阅读 · 0 评论 -
华容道算法之性能优化
上篇文章讲解了华容道算法基本算法知识,也是最简单的,效率也是最低的。这篇文章讲解高效率算法。从下篇文章开始主要分析linux 驱动代码以及嵌入式相关设计知识。本次编码采用棋子在棋盘中的位置编码,顺序是从左往右/从上到下。以横刀立马举例说明。正方形的应该是1(记得从0开始计算),横方块值是0x80 、竖方块是0x909、单个方格值是0x96000、空格是0x60000编程思路与上一篇文章一致,...原创 2019-04-11 17:43:45 · 2734 阅读 · 0 评论 -
华容道算法基础版
今天来聊聊华容道算法具体实现方法,华容道算法我会通过链表和红黑树两种方法实现查找算法,程序体现出来的效率差别很大。本篇文章拿华容道横刀立马做分析,华容道游戏下图所示。游戏原理是每个方块每次只可以移动一个方格,如何将正方形移除到方块外部。拿到这个需求我们首先需要构建数学模型,该游戏设计到的方块数量较少,走法也比较少,那么可以采取穷举思想计算出最佳走法。图 1当方块每移动一步时,...原创 2019-03-21 10:43:09 · 11805 阅读 · 0 评论 -
Linux平台PCIe驱动编写
以前文章分析了PCIe整个系统知识,包括如何扫描PCIE树,这篇文章讲解一下当拿到一个PCIe设备时如何编写驱动程序。编写驱动程序在应用程序中编写,同样可以在内核层编写驱动。从应用层编写驱动主要是使用pcilib库和/dev/mem接口,下面开始分析代码。根据pcie设备的厂家ID和设备ID初始化设备,并且返回访问设备指针描述符,pci_dev指针指向我们需要访问的设备。 ...原创 2019-03-21 10:27:58 · 17676 阅读 · 11 评论 -
CPU性能发展所遇到的瓶颈
通常一个处理器通常包含多个核心(Core),集成 Cache 子系统,内存子系统通过内部或外部总线与其通信。在经典CPU中一般有两个常用的组件:北桥(North Bridge)和南桥(SouthBridge)。它们是处理器和内存以及其他外设沟通的渠道。图1给出了处理器、内存、南北桥以及其他总线之间的关系。 从图一可以看到:1)处理器访问内存需要通过北桥。2)处理器访问所有的外设...原创 2018-08-13 14:15:17 · 9151 阅读 · 0 评论