1、介绍

反射内存集成在反射内存卡上,我们使用的是PCI总线的反射内存卡PCI5565,还有PCIE和其它总线类型的反射内存卡,原理差不多。在两台计算机的PCI插槽插两块反射内存卡,然后通过光纤连接。常见的反射内存卡大小有128M和256M的,当在A卡的地址0x10000写入数据,就会触发数据通过光纤写入到B卡相同的地址,从而实现数据的共享。 反射内存的组网主要有环状和星状,所谓环状就是A卡的出口光纤连接B卡的入口,B卡的出口光纤连接C卡的入口,以此类推,最后一张卡的出口光纤再连接A卡的入口。当环网中任何一张卡的数据发生变更都会传输到下一张卡,最后回到它自身结束传递。所谓星状是指使用反射内存Hub设备做数据的转发,类似一台交换机,从而达到星状网络里所有卡上相同内存地址空间的数据一致。

2、安装

安装包括硬件安装和软件的安装。 硬件安装就是把反射内存卡插入到计算机的PCI插槽,然后通过光纤连接两张卡。 (1) 首先需要确认你的计算机是否有PCI插槽,可以打开机箱查看主板上有没有预留PCI插槽。 (2) 设置反射内存卡上的S1和S2值,S1和S2都是8位的开关,例如S1的第一位开关控制反射内存是否打开冗余模式,第二位控制是否打 开高性能开关,第三位和第四位一起控制需要使用的反射内存空间的大小,等等。默认S1的设置全部是OFF,建议开始就使用默认 设置就好了。 S2用来设置当前反射内存卡的NodeID, 全网的反射内存卡需要NodeID唯一,不能重复。所以同一个反射内存网 络最多支持256块反射内存卡。

反射内存卡,连接光纤。这里需要注意四点: 1)如上图反射内存卡最左边的卡板可能和机箱PCI插卡处不匹配,无法插入,可以用螺丝刀把卡板拆除直接插卡。 2)反射内存卡的插针可能会比机箱的PCI插槽宽,只要能插入就可以,多余插针没插入没关系。 3)插卡前计算机要关机断电,防止静电。 4)光纤连接的时候要保证出口线接入口线,入口线接出口线。

软件安装就是安装反射内存卡的驱动程序。可以到官网下载驱动程序,解压后结果如下图:

api:反射内存api接口文件 diags: 官方提供的反射内存命令行程序,也是通过调用API接口实现的,可以通过这个程序以命令的方式查询,执行反射内存数据。 driver: 驱动程序代码 include: 驱动程序头文件 samples: 官方提供的测试样例,包含发数据,收数据和map反射内存数据到本地内存空间三个文件。可以直接make -f Makefile* 后执行。 rfm2g_load:安装驱动后会调用这个脚本创建设备文件,加载驱动ko文件等。 具体安装直接参考上面的install文件,只需执行 # make install 即可。

这里有两点需要注意: 1)当前从官网下载到的驱动程序最高版本是R09, 其支持的最高linux内核版本是 3.x ,所以当你的linux内核版本高于3.x,那在安装的时候大 概率会报错。可以直接在网上搜索错误信息,解决问题。报错的原因一般是不同linux内核头文件和宏定义有变更,导致驱动程序代码编 译失败。例如我使用的debian系统的内核是4.9.0-9,编译报struct access f->f_dentry->d_inode was replaced by accessor function, 需要用使用file_inode(f)替换掉f->f_dentry->d_inode。 2)可以联系反射内存的技术支持获取最新的驱动程序,前不久技术支持反馈给我一个最新的驱动程序,版本是R10, 其支持的最高linux 内核版本是4.12. 我的debian环境安装这个驱动直接成功了,但另一个RedHat服务器内核是4.18的,安装还是遇到了问题,只能自己 解决。

3、使用 可以把反射内存当作一个文件,使用时需要先打开反射内存,然后往某个规划好的地址写固定大小的数据,这时数据会从本地内存IO到 反射内存,此处的IO有两张模式:DMA和PIO,DMA模式是不需要计算机CPU的参与直接通过PCI总线把数据IO到反射内存,PIO需要 CPU参与。故一般推荐使用DMA模式传输。然后这些数据会在几十微秒内通过光纤传输到下一个反射内存结点,很快整个反射内存网络 节点都会收到数据,但可能并不是所有节点都需要这份数据,这里你可以通过发送事件来通知需要这份数据的节点去读取数据。接收数 据的节点读取对应地址固定大小的数据,这样就完成了两个节点数据的快速交换。 具体到项目中的使用,可以把之前需要使用socket通信的地方改换成反射内存通信。在代码中include驱动程序中的头文件和实现代码即 可使用对应的API函数。
-----------------------------------

PCI-5565-反射内存RFM2G的学习与使用的更多相关文章

  1. Java Filter型内存马的学习与实践

    完全参考:https://www.cnblogs.com/nice0e3/p/14622879.html 这篇笔记,来源逗神的指点,让我去了解了内存马,这篇笔记记录的是filter类型的内存马 内存马 ...

  2. c#浅谈反射内存的处理

    这段时间由于公司的项目的要求,我利用c#的反射的机制做了一个客户端框架.客户端里的所有的模块都是以一定形式进行提供,例如:FORM,UserControl. 在做的过程中很简单与愉快.具体的过程如下: ...

  3. java反射的认知和学习

    1.学习了Class对象,Filed对象(对应数据),Method对像(对应函数),Constructor对象(对应构造函数). 2.Declared可用于获取私有的数据和方法,但是打印得使用setA ...

  4. JavaScript 中变量、作用域和内存问题的学习

    这是我学习JavaScript的第二篇文章,之前做过几年的Java开发,发现JavaScript虽然也是面向对象的语言但是确实有很多不同之处.就本篇博客,主要学习总结一下最近学习到的JavaScrip ...

  5. 【转】Android之内存泄漏调试学习与总结

    大家有或经常碰到OOM的问题,对吧?很多这样的问题只要一出现相信大家的想法跟小马的一样,就是自己的应用:优化.优化.再优化!而且如果出现类似于OOM这样级别的问题,根本就不好处理,LogCat日志中显 ...

  6. <<深入Java虚拟机>>-第三章-垃圾收集器与内存分配策略-学习笔记

    垃圾收集 垃圾收集(Garbage Collection,GC),垃圾收集需要完成的三件事情. 哪些对象需要回收 什么时候回收 如何回收 如何确定对象已死(即不可能在被任何途径引用的对象) 引用计数算 ...

  7. Java自动内存管理机制学习(二):垃圾回收器与内存分配策略

    备注:本文引自<深入理解Java虚拟机第二版>仅供参考 图片来自:http://csdn.net/WSYW126 垃圾收集器与内存分配策略 概述 GC要完成3件事: 哪些内存需要回收? 什 ...

  8. Java自动内存管理机制学习(一):Java内存区域与内存溢出异常

    备注:本文引用自<深入理解Java虚拟机第二版> 2.1 运行时数据区域 Java虚拟机在执行Java程序的过程中把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创 ...

  9. 内存映射函数remap_pfn_range学习——示例分析(1)

    span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }.CodeMirror ...

  10. Java反射机制的简单学习

    今天看了一下Java的反射机制,就此记录一下. 首先,我们要先了解一下什么是反射? 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力. JAV ...

随机推荐

  1. Android 存储概览

    存储区​ Android 一开始就将存储区分为内部存储和外部存储,对应手机自带的存储和可插拔的 sd 卡(可类比于 PC 的硬盘和 U盘). 内部存储容量有限,Google 建议 App 数据尽量存储 ...

  2. 基于rabbitmq的事件总线

    在这个微服务火热的时代,如果不懂一点微服务相关的技术,想吹下牛都没有法子.于是有必要了解学习一下.所以我最近看了下微服务相关的知识.微服务所涉及的知识是很广的,我这里只是讲一下事件总线,当然,有现成很 ...

  3. LaTeX 生成黑底白字的 PDF

    最近需要深夜看论文,然而白底的 PDF 看久了眼睛很难受,想转换成黑底的.正好我有论文的 LaTeX 源码,因此可以直接编译黑底的 PDF 出来. 使用 darkmode 宏包 CTAN 上有一个 L ...

  4. 本地部署 Overleaf 服务

    ️ 注意:本教程只适用于 macOS / Linux 操作系统.如果需要在 Windows 上部署 Overleaf,请先安装 WSL,之后在 WSL 中部署 Overleaf . 本地部署 Over ...

  5. 使用win-acme在windows+iis服务器下配置自动续期SSL证书【转】

    发现阿里云免费证书只有3个月有效期了,手动操作太麻烦,咨询阿里云客服,阿里云说这是大势所趋,遂转向其他云,后来发现百度云还有1年的免费证书,继续问阿里云客服,其他友商都还在免费1年的,为啥阿里云免费的 ...

  6. 【转】AddMvcCore,AddControllers,AddControllersWithViews,AddRazorPages的区别

    1.services.AddMvcCore()只註冊運行 Controller/Razor Pages 必要的核心服務,確保 Pipeline 程序可動作,其餘如像 Data Annotation M ...

  7. 全面掌握 Jest:从零开始的测试指南(上篇)

    随着JavaScript在前后端开发中的广泛应用,测试已成为保证代码质量的关键环节. 为什么需要单元测试 在我们的开发过程中,经常需要定义一些算法函数,例如将接口返回的数据转换成UI组件所需的格式.为 ...

  8. 数据库MySQL-安装、卸载、配置、登录、退出

    一.下载 下载链接:MySQL :: Download MySQL Community Server (Archived Versions) 二.安装(解压)  三.配置 1.添加环境变量 我的电脑- ...

  9. 向量法求 T3 这个若智 r^2

    int sqr_vector_dis(node a){ return a.x*a.x+a.y*a.y; } frac vector_multi(node a,node b){ return frac( ...

  10. 支持Docker的底层技术(Namespaces?CGroups?UnionFS?Docker 架构?)(二)

    上一篇介绍了Docker基本概念,这一篇介绍下支持Docker的底层技术 Docker 本质就是宿主机的一个特殊进程,Docker 是通过 namespace 实现资源隔离,通过cgroup 实现资源 ...