阅读:4047回复:5
PCI设备太多,无法分配足够的地址空间给所有的设备,怎么办呢?
我现在做的一个东西,需要在一个服务器上连接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设备呢? |
|
沙发#
发布于:2008-01-12 14:49
顺便再问一下,有哪些工具可以看64位的地址空间分配情况?(包括Memory DIMM)
|
|
板凳#
发布于:2008-01-17 02:31
这个问题是你主板的bios的问题..
联系你主板的提供商吧.... 因为ia32下面pci的内存空间跟物理内存空间是重叠的. 所以bios需要划一个界限..从多少到多少是用于物理内存的.从多少到多少是用于pci的memory mapped io的 似乎不管是bios还是efi这个划分都是写死到程序里面的. 似乎都不是先统计一共需要多少mapped io内存然后再做划分.. bridge的分配方式是先要统计bridge后面的设备需要的地址空间以后才能给bridge 分配的.... 另外你插了多少内存... 试着拔掉一根看看? |
|
地板#
发布于:2008-01-17 12:57
引用第2楼tiamo于2008-01-17 02:31发表的 : 谢谢楼上。 我试过插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? |
|
地下室#
发布于: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地址空间的情况. |
|
5楼#
发布于:2008-01-18 02:38
引用第4楼tiamo于2008-01-17 15:07发表的 : 谢谢!看来只有换主板了。 刚好找到一台xw9400的服务器,它的SBIOS居然懂得从70000000H上分配PCI空间,插6块显卡都没问题。看来只有用它了。 |
|