PCI-5565-反射内存RFM2G的学习与使用
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的学习与使用的更多相关文章
- Java Filter型内存马的学习与实践
完全参考:https://www.cnblogs.com/nice0e3/p/14622879.html 这篇笔记,来源逗神的指点,让我去了解了内存马,这篇笔记记录的是filter类型的内存马 内存马 ...
- c#浅谈反射内存的处理
这段时间由于公司的项目的要求,我利用c#的反射的机制做了一个客户端框架.客户端里的所有的模块都是以一定形式进行提供,例如:FORM,UserControl. 在做的过程中很简单与愉快.具体的过程如下: ...
- java反射的认知和学习
1.学习了Class对象,Filed对象(对应数据),Method对像(对应函数),Constructor对象(对应构造函数). 2.Declared可用于获取私有的数据和方法,但是打印得使用setA ...
- JavaScript 中变量、作用域和内存问题的学习
这是我学习JavaScript的第二篇文章,之前做过几年的Java开发,发现JavaScript虽然也是面向对象的语言但是确实有很多不同之处.就本篇博客,主要学习总结一下最近学习到的JavaScrip ...
- 【转】Android之内存泄漏调试学习与总结
大家有或经常碰到OOM的问题,对吧?很多这样的问题只要一出现相信大家的想法跟小马的一样,就是自己的应用:优化.优化.再优化!而且如果出现类似于OOM这样级别的问题,根本就不好处理,LogCat日志中显 ...
- <<深入Java虚拟机>>-第三章-垃圾收集器与内存分配策略-学习笔记
垃圾收集 垃圾收集(Garbage Collection,GC),垃圾收集需要完成的三件事情. 哪些对象需要回收 什么时候回收 如何回收 如何确定对象已死(即不可能在被任何途径引用的对象) 引用计数算 ...
- Java自动内存管理机制学习(二):垃圾回收器与内存分配策略
备注:本文引自<深入理解Java虚拟机第二版>仅供参考 图片来自:http://csdn.net/WSYW126 垃圾收集器与内存分配策略 概述 GC要完成3件事: 哪些内存需要回收? 什 ...
- Java自动内存管理机制学习(一):Java内存区域与内存溢出异常
备注:本文引用自<深入理解Java虚拟机第二版> 2.1 运行时数据区域 Java虚拟机在执行Java程序的过程中把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创 ...
- 内存映射函数remap_pfn_range学习——示例分析(1)
span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }.CodeMirror ...
- Java反射机制的简单学习
今天看了一下Java的反射机制,就此记录一下. 首先,我们要先了解一下什么是反射? 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力. JAV ...
随机推荐
- redhat8 rhel8 启动grub损坏修复
环境:redhat8.4 RHEL8.4 服务器:华为G560 问题描述:调整了/etc/default/grub文件,重新生成/boot/grub2/grub.cfg导致机器启动失败,直接进入了re ...
- Density-invariant Features for Distant Point Cloud Registration论文阅读
Density-invariant Features for Distant Point Cloud Registration 2023 ICCV *Quan Liu, Hongzi Zhu, Yun ...
- portainer安装&升级
2024年4月15日 关于升级: 如果需要升级 Portainer,请按以下步骤操作: 使用以下命令列出所有镜像: docker ps -a 根据需要删除指定镜像: docker rm <镜像名 ...
- LaTeX 编译 acmart 文档报错:An attempt to redefine \baselinestretch detected. Please do not do this for ACM submissions!
在编译一篇从 arXiv 下载的文档时遇到如下错误: Class acmart Error: An attempt to redefine \baselinestretch detected. Ple ...
- Docker 抓取 buildx 缓存
有时候由于配置的失误,导致构建了好久的镜像没能推送到云或者保存到本地.而如果重新构建,则可能又要全部重来.其实这时候我们可以导出 buildx 中的缓存到本地文件,再将本地文件导入为镜像.这样可以节省 ...
- python 接口传递字符串,特殊字符url编码
from urllib.parse import quote aaa = "+xxxx" quote(aaa)
- Coursera, Big Data 5, Graph Analytics for Big Data, Week 1/2
Graph表示 1. adjacency matrix最简单的一种表示:行是From 列是To, 这种表示是稀疏矩阵 2. 另一种表示,如下图,很多graph数据库用这种,是的数据库操作更有效率 us ...
- 上架难、买量贵?即构 Web 端 1v1 方案全力加速泛娱乐出海
1v1 视频社交以其功能简洁.互动性强.匹配效率高等特点,在陌生人社交玩法中饱受用户欢迎,平台仅需让两个用户通过匹配.选择等形式连通后,用户即可在房内进行 1v1 视频社交,且在社交的同时又极具私密性 ...
- Hash表实践 —— 两数之和
目录 题目背景 解题思路 题目背景 这个题目用常规的双循环就可以完成. 但不是最优解.为什么? 看看他的步骤数: N =[3,2,4] 求结果为6的两个元素坐标如下, 1). 3+2 = 5 不等于 ...
- JavaScript – Web Worker
前言 在上一篇 << 单线程 与 执行机制 >> 中, 我们提到了 Web Worker. 它的诞生是为了解决 JS 主线程执行耗时计算时, 导致 UI 无法及时更新的卡死现象 ...