多功能PCIE交换机之八:窗口扩展和驱动加载的常见问题

结合本人在PCIE
NTB/DMA最近的实际工作,总结了地址转换窗口扩展和驱动加载过程中碰到的主要问题和解决办法。

0、系统启动后看不到NTB设备

需要检查BIOS,在PCIE设置里面NTB芯片是否使能。这是因为针对不同的应用场景和客户需要,BIOS里面通常添加了Enable/Disable
NTB的选项。

1、如何扩展地址转换窗口

a.确定系统要求的地址转换窗口的范围和大小;

b.确保系统要求的地址转换窗口的范围和大能够被BIOS支持

c.从可用的BAR2/3和BAR4/5中选择未使用的或者可扩展的BAR;

d.更新NTB芯片中该决定该BAR大小的寄存器;

2、如何正确处理新的地址转换窗口大小

一般NTB的SDK包括驱动和应用程序,由于驱动设计的通用性,为了支持新的地址转换窗口和大小,通常只需要更新应用程序,主要需要改动的有以下几点:

a.根据新选用的BAR,更新应用程序中的NTB/DMA初始化工作。这是因为不同的BAR,通常对应一组不同的NTB设置、管理寄存器;

b.如果新的地址转换窗口大小超过2G(0x80000000),需要检查表示大小的数据类型,它一定不能是有符号的32位整型数据,否则会表示成一个负数;如果新的地址转换窗口超过4G,务必确保表示大小的数据不能是32位整数。

3、如何正确计算地址偏移

在实际基于NTB的应用程序当中,需要透过转换后映射到本地用户态的地址,加上一个偏移去访问目的地址。此时,需要特别注意的是:如果址转换窗口大小超过2G(0x80000000),需要检查表示偏移的数据类型,它一定不能是有符号的32位整型数据,否则会表示成一个负数;如果新的地址转换窗口超过4G,务必确保表示大小的数据不能是32位整数,而应该是64位整型数据类型。

4、加载驱动时发现Chip
ID/vendor ID不匹配,导致无法加载

在加载相同NTB芯片
相应的驱动的时候,在不同批次或者型号的板卡上有时会发现驱动加载失败,而在其他批次或者型号上可以加载,甚至在相同批次、型号的其他板卡上也能成功加载,碰到这种情况,如果驱动有debug模式的话可以先按照debug模式加载驱动,然后根据dmesg信息查看驱动失败的具体位置,结合驱动源代码查找根源。根据笔者的经验,在像NTB这种设置和EEPROM关系非常紧密的驱动,需要排除的一点就是出厂EEPROM设置的差异导致的驱动加载出错的情况。笔者就碰到两次在不同批次的机器上,分别由于NTB
EEPROM里对vendor
ID /device ID的错误设置导致驱动无法加载的情况。后来通过修改驱动,把要使用的板卡上的NTB的vendor
ID/device ID添加到驱动探测代码里,然后更新EEPROM到标准的设置才彻底解决。

5、驱动加载之后,应用程序仍然无法使用NTB设备

Linux内核驱动加载后,并不表示应用程序就一定可以立即使用硬件设备了,因为无论是字符设备、块设备还是流式设备,操作系统都需要向用户程序提供一个在应用态可以访问的设备节点
。在早期的Linux驱动的实现过程中,设备节点并不会由驱动程序自动建立启动,而是需要通过脚本或者输入mknod等命令建立起来。因此对于NTB驱动,同样要搞清楚它的设备节点是否需要手工建立。如果是,需要保证在应用程序使用之前,设备节点都已经存在,否则无法使用NTB设备。

时间: 2024-12-21 07:03:00

多功能PCIE交换机之八:窗口扩展和驱动加载的常见问题的相关文章

多功能PCIE交换机之九:单NT系统中需要注意的问题

多功能PCIE交换机之九:单NT系统中需要注意的问题 1.单NT与双NT系统差异 NTB通常用在双控或者多控的系统上,用来实现跨节点的数据传输.在由多个节点构成的系统上,通常每个节点上都有一个NTB芯片,以实现全系统地址空间划分和路由.顾名思义,单NT是指用一个PCIE非透明桥来实现节点间数据传输的方案,通常用在两个节点之间.和多NT的系统相比,这种方法实现相对比较简单,成本较低,开发周期较短,能够缩短整个系统的关键功能和性能的验证周期. 2.单NT系统的实现 单NT的实现需要结合整个系统的设计

多功能PCIE交换机之一:概述

多功能PCIE交换机之一:概述 作为服务器或者系统升级的重要方法,横向扩展越来越时髦,越来越多的厂家利用这种方法来实现产品的升级.传统网络.InfinBand.PCIE都可以用来帮助实现横向扩展,这里着重介绍基于PCIE技术实现的横向扩展和容错设计.基于PCIE实现横向扩展和容错设计离不开PCIE多功能交换机.所谓多功能PCIE交换机,指的是一种拥有多个PCIE桥.支持多种配置.自带非透明桥甚至DMA功能的配置灵活.管理方便的芯片. 为了便于读者有更直观的认识,后面都以PLX某款多功能PCIE

多功能PCIE交换机之六:基于NTB夸节点的读写

多功能PCIE交换机之六:基于NTB夸节点的读写优化 1.基于NTB跨节点读写的应用的特点 NTB常常用在要求高性能和高可靠性的场合,用来实现跨节点数据的传输.比如用作虚拟网卡.跨节点数据同步通道等,这些场合都期望充分发挥NTB基于PCIE的高速传输特性,最大限度地提高系统性能. 2.基于NTB跨节点读写的两种实现方式 实现地址转换.建立NTB通道之后,有两种实现NTB跨节点传输数据的方式: 基于CPU实现数据传输 基于NTB DMA实现数据传输 前者依赖CPU去搬运数据,会占用CPU周期,但非

PHP 检查一个扩展是否已经加载

使用 extension_loaded() 来检测一个扩展是否已经加载 详细请查看: extension_loaded

Dubbo源码解析之SPI(一):扩展类的加载过程

Dubbo是一款开源的.高性能且轻量级的Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用.智能容错和负载均衡,以及服务自动注册和发现. Dubbo最早是阿里公司内部的RPC框架,于 2011 年开源,之后迅速成为国内该类开源项目的佼佼者,2018年2月,通过投票正式成为 Apache基金会孵化项目.目前宜信公司内部也有不少项目在使用Dubbo. 本系列文章通过拆解Dubbo源码,帮助大家了解Dubbo,做到知其然,并且知其所以然. 一.JDK SPI 1.1 什么是SPI? S

多功能PCIE交换机之五: 基于NTB的DMA

如果说PCIE多功能桥中的NTB为跨节点的数据传输铺好路.架好桥的话,那么PCIE多功能桥中的DMA就是多个节点之间的高铁和航班.没有NTB打通数据通道,DMA也不可能跨越节点.但没有DMA的话,NTB还是可以依赖CPU来在多个节点之间搬运数据.因此DMA对NTB而言是如虎添翼.锦上添花. 和NTB的单NT和双NTB配置相比,DMA可配置的选项比较多,但不管是中断模式.查询模式,也无论描述符是在DMA控制器片上还是片外,亦或配置成单个还是多个DMA channel,都有现成的代码可供参考或寄存器

多功能PCIE交换机之二:EEPROM恢复与故障排除

作为实现failover的重要器件,8717PCIE switch既支持virtual switch mode, 也支持basic mode,此外它的DMA.地址窗口也有不同的配置方式.而多块8717卡既可组合成单NT的Active-Passive模式,也可以组合成双NT的Active-Active模式,而这些都依赖于 8717 switch上的EEPROM的正确设置.因此,在调试阶段,工程师常常需要修改它的设置,一有不慎,就可能烧入错误的EEPROM设置,导致PCIE switch无法正常工作

Java Selenium (十二) 操作弹出窗口 & 智能等待页面加载完成 & 处理 Iframe 中的元素

一.操作弹出窗口   原理 在代码里, 通过 Set<String> allWindowsId = driver.getWindowHandles(); 来获取到所有弹出浏览器的句柄, 然后遍历, 使用swithcto.window(newwindow_handle)方法. 就可以定位到新的窗口. 测试页面的HTML <html> <head> <title>常见web ui元素操作, 及API使用</title> <script type

7-5 高级功能列表下拉刷新与上拉加载更多功能实现

数组还是那个数组,只不过这里由静态类型改成了非静态类型. 改成了有状态的widget 用RefreshIndicator包裹ListView.这样ListView就有了下拉刷新的能力. 下拉,松开的的手的时候会执行刷新,也就是onRefresh这个方法.这个方法要求我们传递一个必须带有Future返回值的方法 所以这里我们定义了带有Future返回值的方法.这个方法里面如果我们不想返回值的内容,就在Future的泛型设置为Null.也就是Future<Null> 下拉刷新的方法,延迟2秒钟,修