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. AD(Active Directory )域的搭建与操作

    AD 域的搭建与操作 一.准备工作 准备好 VM 虚拟机和 Server 的安装包. 二.安装 Server 2022 选择标准且有图形界面的进行安装. 选择自定义安装方式. 为虚拟机 server2 ...

  2. Kubernetes 初学部署遇到的问题

    ### Kubernetes 部署文档(CentOS 7.9) 本文采用centos9 截至2024年8月21日官网已经不再提供其他下载 直接用最新版即可 1. CentOS 7.9 内核版本问题 截 ...

  3. Go 必知必会:探索 Go 语言中的数组和切片深入理解顺序集合

    文末有面经共享群 在 Go 语言的丰富数据类型中,数组和切片是处理有序数据集合的强大工具,它们允许开发者以连续的内存块来存储和管理相同类型的多个元素.无论是在处理大量数据时的性能优化,还是在实现算法时 ...

  4. Excel中制作目录的3种方法,你了解几种?

    点赞再看,养成习惯:言之无文,行而不远. 微信搜索[亦心Excel]关注这个不一样的自媒体人. 本文 GitHub https://github.com/hugogoos/Excel 已收录,包含Ex ...

  5. Ubuntu18.04未发现WiFi适配器情况解决方案之一

    问题: 第一次你可能会遇见这种情况,ubuntu未发现Wifi适配器解决方案  无法打开WIfi 并告诉你没有WiFi适配器 解决方案: 解决方案如下: sudo modprobe -r ideapa ...

  6. sql 查询表数据

    SELECT s.Name AS SchemaName, t.Name AS TableName, p.rows AS RowCounts--, --CAST(ROUND((SUM(a.used_pa ...

  7. DOM & BOM – Input File, Drag & Drop File, File Reader, Blob, ArrayBuffer, File, UTF-8 Encode/Decode, Download File

    前言 之前写过 2 篇关于读写文件和二进制相关的文章 Bit, Byte, ASCII, Unicode, UTF, Base64 和 ASP.NET Core – Byte, Stream, Dir ...

  8. CSS – Logical Properties

    前言 续上一篇介绍了各种语言的阅读方向. 这一篇来讲一下 Logical Properties. 它与 left to right, right to left, horizontal, vertic ...

  9. Qt连连看(三)非核心功能实现

    主要的界面设计好后,我们来看下非核心功能的实现.由于这块不需要用到稍微复杂的算法,解决起来相对来说容易许多,于是我们选择先实现这部分非核心功能,这块几乎不涉及游戏的核心逻辑. 游戏界面如下: 这时我们 ...

  10. foobar2000 v1.6.10 汉化版(2022.05.01)

    foobar2000 v1.6.10 汉化版 -----------------------[软件截图]---------------------- -----------------------[软 ...