阅读:1924回复:10
双核下驱动如何正确运行???
最近整了个双核处理器(INTEL酷睿系列的),速度上当然提升了不少,不过郁闷的问题也多了.
首先:原先在单核上可正确运行的驱动,到了双核下运行马上蓝屏、重启。 其次:当我把驱动部分代码加上SpinLock之后,有时可运行,有时则又蓝屏,重启。 (DUNP文件里面显示“在过高的IRQL下访问了分页内存,这个问题还没解决) 问题是:我的驱动为什么是“时好时坏”,而不是“坏到底”? 注:(驱动中涉及到同步操作,创建了一个线程。) 引申的问题:双CPU下,CPU执行的最小单位是?线程还是指令? 做了个小测试:当运行一个死循环单线程程序时,CPU0(几乎)满负载运行,CPU1则(几乎)无负载运行。 当运行两个死循环单线程程序时,CPU0和CPU1则满负载运行。 按测试结果,个人理解是:CPU0是“主”CPU,当运行单线程时CPU0负责线程的大部分工作(CPU1有没有分担线程部分指令的工作呢?)。 当有另外的线程运行时,CPU1开始执行新线程的工作。 不知这里哪位老大对这方面比较熟悉,帮忙讲解一下。 或是给个比较权威说法的链接,谢谢~~~ 相信多处理器的普及,会给编写驱动的人带来不少的麻烦。 |
|
沙发#
发布于:2007-08-08 11:19
检查一下spin lock acquire和release之间有没有访问分页内存~(判断+pagelock)
|
|
|
板凳#
发布于:2007-08-08 14:37
影响不是很大!主要是你的同步之类的没做好!或者在过高的IRQL中,访问了非分页or 分页内存
|
|
|
地板#
发布于:2007-08-08 16:01
引用第1楼WQXNETQIQI于2007-08-08 11:19发表的 : 是不能访问非分页内存??? 还是不能访问分页内存? 如何判断呢?? |
|
地下室#
发布于:2007-08-08 16:06
引用第2楼ProPlayboy于2007-08-08 14:37发表的 : KeAcquireSpinLock,IRQL 提升到Dispath_Lev,在这个级别不能访问分页内存。 连非分页内存也不能访问??? |
|
5楼#
发布于:2007-08-08 16:16
1楼说错了,,是分页内存。。。 -.-
|
|
|
6楼#
发布于:2007-09-04 15:34
啊,我只知道多处理器要注意保持同步的问题,但没有想到问题这么严重啊
|
|
7楼#
发布于:2007-09-04 20:11
引用第6楼oushengfen于2007-09-04 15:34发表的 : 还有这段代码本身不能放在分页内存上 |
|
8楼#
发布于:2007-09-05 04:01
最好运行时用KeSetXXX邪恶函数指定线程cpu |
|
|
9楼#
发布于:2007-09-05 09:28
双核这东东,性能没啥提高,倒是把驱动程序员给忙活了。
|
|
10楼#
发布于:2007-09-05 09:44
以后的编译器会对双核或多核优化的.
双核目前跑服务器软件比较高效 |
|
|