高分求教:linux性能问题
以前的程序都是裸奔的,性能方面要求比较高。现在需要使用linux,性能方面需要达到裸奔的90%吧,有如下想法,还望各位兄弟指教,提出些许建议。(1)第一个难点是中断,中断处理程序倒是好说,关键是读写数据时需要避开Linux内核态与用户态的交互,我初步的想法是利用内存映射,mmap,但是性能方面,估计也悬。大家有什么好主意没?
(2)有些硬件模块驱动,实现功能问题倒是不大,只是这个性能啊,我想到的也只有mmap。
(3)如何利用linux里面的SMP,能够动态分配,负载均衡
简单点说,就是想利用Linux丰富的资源以及可维可测性,避开linux里面用户态与内核态的交互,以及内存拷贝等。
不考虑DMA的方法,因为使用了cache,各位兄弟提提建议? 以前的程序都是裸奔的,性能方面要求比较高。现在需要使用linux,性能方面需要达到裸奔的90%吧,
---------------那建议不用. 用linux无非是借力于其上丰富的现有软件. 不过. 你这个性能要求啊. 这个优势就没有了.
运营单个程序确实能达到裸奔的90%, 但是, 这用linux有什么意义呢? 可以考虑用双内核,否则单单一个时间片长度就够受的了。 裸奔肯定不会用了,上Linux是箭在弦上,不得不发啊。
现在使用的ARM的核够多,只是找不到一个合适的动态调度的方法。
考虑双内核怎么弄啊?
另外还有2个问题,希望大家提供下建议和想法,感激不尽。
(1)对定时器的使用要求非常高,要到1us级别,裸奔的时候还能满足,但是上linux之后,如果1us中断1次,不知道这个中断是否会影响到Linux?感觉linux会挂掉。
(2)裸奔提供定时器处理函数时,都是采用注册函数的形式。如果到了Linux里面,这个注册的处理函数从用户态怎么传到内核态? 双内核是指的软件双内核,对于实时性要求高的任务由实时内核处理,而显示等非实时任务交给linux内核去做,只是通常这类双内核系统不是免费的并且很贵。 双内核是指的软件双内核,对于实时性要求高的任务由实时内核处理,而显示等非实时任务交给linux内核去做,只是通常这类双内核系统不是免费的并且很贵。 ...
xinzha 发表于 2011-4-7 09:47 https://bbs.21ic.com/images/common/back.gif
目前我们基本上就是这个思路,但是还没有找到合适的方法。 思路大概就是接管cpu的异常和中断处理,做分配的时候该给谁就给谁,基本上对于稍复杂的系统,出问题的概率剧增,所以还是买现成的吧。 本帖最后由 sinanjj 于 2011-4-8 10:01 编辑
思路大概就是接管cpu的异常和中断处理,做分配的时候该给谁就给谁,基本上对于稍复杂的系统,出问题的概率剧增,所以还是买现成的吧。
xinzha 发表于 2011-4-8 09:54 https://bbs.21ic.com/images/common/back.gif
现成的就是那么好买的?
买买试试吧
1us是基本不可能轻松达到的.
想快速的完成设计, 用外置的裸奔cpu. 设计好接口.
解决不了问题, 但是能绕开问题.
确切的说,是有免费的, 找人给你用起来花费的费用很贵.
除此以外, x86的linux实时性都优化不到1us, 别提嵌入式的了.
x86的高端服务器多内核负载平衡都是专门优化的.... ...
sinanjj 发表于 2011-4-8 09:43 https://bbs.21ic.com/images/common/back.gif
司南,哪里有免费的啊?方便提供链接吗?参考下 思路大概就是接管cpu的异常和中断处理,做分配的时候该给谁就给谁,基本上对于稍复杂的系统,出问题的概率剧增,所以还是买现成的吧。
xinzha 发表于 2011-4-8 09:54 https://bbs.21ic.com/images/common/back.gif
“思路大概就是接管cpu的异常和中断处理,做分配的时候该给谁就给谁”,没有太理解这个意思,大侠能详细的说下吗?
哎,买现成的,基本不可能啊 1us。。。。。。。你这个让硬件实现吧~~
“思路大概就是接管cpu的异常和中断处理,做分配的时候该给谁就给谁”,没有太理解这个意思,大侠能详细的说下吗?
哎,买现成的,基本不可能啊 ...
tiger84 发表于 2011-4-8 22:47 https://bbs.21ic.com/images/common/back.gif
举个例子说,就是当检测设备侦测到核电站快要爆炸了,此时激起一个异常,而在异常处理代码中就把这个事件直接抛给类似于vxworks之类的实时内核,由此内核进行进行一系列实时要求高的避险操作,然后通过某种手段通知非实时内核,非实时内核就可以做一些并不是很紧急的通知和显示等任务。一些日常任务都可以交给非实时内核去做。
只是个很简单的说法,真正实现起来肯定要非常复杂。 多谢xinzha和sinajj的回答,我大概心里有数了,再次感谢2位。 为什么楼主指明不考虑DMA呢?呵。mmap能提高速度,前提是memory操作已经占了大部分系统的运行时间上。如果bottle neck不在这里,mmap也不见得多有用。 为什么楼主指明不考虑DMA呢?呵。mmap能提高速度,前提是memory操作已经占了大部分系统的运行时间上。如果bottle neck不在这里,mmap也不见得多有用。
yan2005 发表于 2011-4-11 12:47 https://bbs.21ic.com/images/common/back.gif不用DMA是因为使用了2级cache,而且由于一些原因,有些核之间的cache一致不能通过硬件保证。使用DMA的话,那cache一致性更无法保证了----因此DMA基本上费了,不过后续也会考虑是否能用起来---
页:
[1]