qwernet
驱动牛犊
驱动牛犊
  • 注册日期2004-05-11
  • 最后登录2009-04-19
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望9点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:4048回复:5

PCI设备太多,无法分配足够的地址空间给所有的设备,怎么办呢?

楼主#
更多 发布于:2008-01-12 14:46
我现在做的一个东西,需要在一个服务器上连接4块PCI Express接口的Quadro显卡(G80)。连接方法是这样的:服务器主板上只有2个PCI Express插槽,每个PCI Express插槽引出后分别接一个用来把PCI Express一分二的Host Card,这样就有4条PCI Express了,就可以接在4块显卡上。其中每个Host Card其实就相当于PCI-PCI Bridge这样。

但是显卡都是耗资源大户啊,每块显卡需要给它3块地址空间,大小分别是256MB、32MB和16MB。但是这个服务器主板好像只留了很少可以保留给PCI使用的地址空间,结果只能给其中3块显卡分配地址空间,其中256MB部分的地址分别是A0000000-AFFFFFFF、B0000000-BFFFFFFF、C0000000-CFFFFFFF,第4块显卡就没办法分配了,因为8、9、D、E开头的被占用了一部分,没办法找出一段连续的256MB空间分配给第4块显卡。难道SBIOS就只能在这2G的空间分配PCI地址空间吗?这个服务器是64位的,有没有可能让它给PCI设备分配64位地址到BAR呢?

另外我想问一下,像这样通过PCI-PCI Bridge连出去的PCI设备,分配地址空间时,是否先给PCI-PCI Bridge分配地址空间然后再在这个空间段内分配地址空间给所连接的PCI设备呢?
qwernet
驱动牛犊
驱动牛犊
  • 注册日期2004-05-11
  • 最后登录2009-04-19
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望9点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-01-12 14:49
顺便再问一下,有哪些工具可以看64位的地址空间分配情况?(包括Memory DIMM)
tiamo
VIP专家组
VIP专家组
  • 注册日期2002-02-26
  • 最后登录2018-01-09
  • 粉丝17
  • 关注4
  • 积分50分
  • 威望142点
  • 贡献值1点
  • 好评度40点
  • 原创分2分
  • 专家分15分
  • 原创先锋奖
  • 社区居民
板凳#
发布于:2008-01-17 02:31
这个问题是你主板的bios的问题..

联系你主板的提供商吧....

因为ia32下面pci的内存空间跟物理内存空间是重叠的.
所以bios需要划一个界限..从多少到多少是用于物理内存的.从多少到多少是用于pci的memory mapped io的
似乎不管是bios还是efi这个划分都是写死到程序里面的.
似乎都不是先统计一共需要多少mapped io内存然后再做划分..

bridge的分配方式是先要统计bridge后面的设备需要的地址空间以后才能给bridge 分配的....

另外你插了多少内存...
试着拔掉一根看看?
qwernet
驱动牛犊
驱动牛犊
  • 注册日期2004-05-11
  • 最后登录2009-04-19
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望9点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-01-17 12:57
引用第2楼tiamo于2008-01-17 02:31发表的  :
这个问题是你主板的bios的问题..

联系你主板的提供商吧....

因为ia32下面pci的内存空间跟物理内存空间是重叠的.
.......


谢谢楼上。

我试过插1根内存,共1G。

似乎SBIOS只会在100000000以下分配PCI空间,而不会用到64位地址,尽管我的显卡的BAR值的1-2位为10(64位地址)。

至于物理内存地址的分配,我看了一下E820图,即使我插32G内存,SBIOS也只分配80000000以下的给内存,多余的全分到100000000以上去了。所以我想内存多少对32位PCI地址分配是没影响的。

我想能否这样,在开机后进系统前,自己手动把BAR设为64位地址,然后再进Windows?

例如我现在PCI配置空间是[0x18]=0xD000000C,[0x1C]=0x00000000,我手动改为[0x18]=0xD000000C,[0x1C]=0x00000008?
tiamo
VIP专家组
VIP专家组
  • 注册日期2002-02-26
  • 最后登录2018-01-09
  • 粉丝17
  • 关注4
  • 积分50分
  • 威望142点
  • 贡献值1点
  • 好评度40点
  • 原创分2分
  • 专家分15分
  • 原创先锋奖
  • 社区居民
地下室#
发布于:2008-01-17 15:07
恩....这一路需要改得东西太多
从你的设备开始回溯到root bridg都需要修改...而且一路回溯的bridg都必须要支持64位才行
.........基本上不大可能把这个地址放到4G以上去...

倒是可以在2G一下找个地方放他...然后把内存移到4G以上去
具体的方法你可以参考你主板北桥的memory controller部分的datasheet尝试修改

不过这很危险
因为memory controller部分的编程必须在物理内存被使用之前
如果已经在使用物理内存了再去调整memory controller的话.肯定会有问题的
比如以前2G一下都是分配给物理内存的
现在你把[2G-256M,2G)重新分配给了你的卡
那么如果原来有人用到了这[2G-256M,2G)之间的内存的话
那这里就会出现错误...
即使没有人使用他...也可能会有问题的
因为如果在你修改之前.有人保存过E820的结果...
然后在你修改以后.他并没有重新调用E820而是直接使用保存过的E820的结果来访问内存的话
也会出现他认为是物理内存而其实是你的卡的memory mapped io地址空间的情况.
qwernet
驱动牛犊
驱动牛犊
  • 注册日期2004-05-11
  • 最后登录2009-04-19
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望9点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-01-18 02:38
引用第4楼tiamo于2008-01-17 15:07发表的  :
恩....这一路需要改得东西太多
从你的设备开始回溯到root bridg都需要修改...而且一路回溯的bridg都必须要支持64位才行
.........基本上不大可能把这个地址放到4G以上去...

倒是可以在2G一下找个地方放他...然后把内存移到4G以上去
.......


谢谢!看来只有换主板了。

刚好找到一台xw9400的服务器,它的SBIOS居然懂得从70000000H上分配PCI空间,插6块显卡都没问题。看来只有用它了。
游客

返回顶部