阅读:1292回复:6
为什么会占这么多CPU资源?没道理啊?
9052PCI卡,操作系统是WIN2K。100ms一次中断,一次中断输出1M字节。9052局部总线时钟为33M(利用BCLK0),数据宽度为32位,BURST方式,一次BURST四个周期,无延时。
这种配置下,就算一次BURST四个周期导致局部总线速度只有PCI速度的一半,那么传输1M字节,不过是占了256K个PCI写周期,也仅仅需要15.5ms,扣除系统占用的一些时间,就算5MS,那么也不过20MS,只占到总时间的20%,这还是在输出期间独占CPU的情况。 可现在的情况是,输出操作放在驱动的DPC例程中(级别高一点),CPU占用量达到45%,而输出操作放在系统线程中,占用CPU竟然达到66%,剩下的时间,连读几个文件,调整几百K字节的数据都不够了!究竟计算机在干什么?? |
|
|
沙发#
发布于:2002-11-28 09:35
估计是需要仲裁或有其他pci设备的干扰。
|
|
板凳#
发布于:2002-11-28 12:38
问题可能出在9052的配置上。
在地址空间描述寄存器中,定义的值是00800003,也就是说: 位0: 迸发操作许可。值为1,许可。 位1: LRDYi# 输入许可。值为1许可。 位23:22:总线宽度。值10,32位。 其它位全部为0。 但又仔细看了DATABOOK,发现有问题,关于位0(迸发操作许可)的描述是 Burst Enable. Value of 1 indicates bursting is enabled. Value of 0 indicates bursting is disabled. Bursting occurs if the prefetch count is not equal to 00. 后面一句话,是不是指出迸发操作,不论读写,一定要以预取计数器的值不为0为先决条件呢?那么,预取计数器又要以位5(Prefetch Count Enable)为1为条件,那么,要真正实现BURST操作,是不是连位5也要置1? |
|
|
地板#
发布于:2002-11-28 14:10
改过了9052的配置,可似乎并没见有什么不同!!!!!!!!!
|
|
|
地下室#
发布于:2002-11-28 15:05
可能是总线瓶颈的原因.
io 访问时,一次就需要将近 1us 的时间, 你用 burst 方式会好一些,但我想也不会特别好. |
|
|
5楼#
发布于:2002-11-30 16:58
PCI写操作占用CPU过多的原因找到了,主板CMOS设置中,关于CPU&PCI的项目中有设置POST WRITE的选项。不知道什么时候把它设置为\"禁止\"了,导致CPU每一次PCI写周期都必须等到操作完成,CPU是1.6G的主频,而PCI是33M,其效率的损失是显而易见的。现在把该项设置为\"许可\",结果原来达到66%的系统占用量,一下子降到了10%不到。
呵呵,再也不用费神去琢磨SLAVEDMA了! |
|
|
6楼#
发布于:2002-12-02 08:33
谢谢贴主,以后少走弯路了
|
|