tiger84 发表于 2011-4-5 23:24

高分求教:linux性能问题

以前的程序都是裸奔的,性能方面要求比较高。现在需要使用linux,性能方面需要达到裸奔的90%吧,有如下想法,还望各位兄弟指教,提出些许建议。

(1)第一个难点是中断,中断处理程序倒是好说,关键是读写数据时需要避开Linux内核态与用户态的交互,我初步的想法是利用内存映射,mmap,但是性能方面,估计也悬。大家有什么好主意没?
(2)有些硬件模块驱动,实现功能问题倒是不大,只是这个性能啊,我想到的也只有mmap。
(3)如何利用linux里面的SMP,能够动态分配,负载均衡

简单点说,就是想利用Linux丰富的资源以及可维可测性,避开linux里面用户态与内核态的交互,以及内存拷贝等。
不考虑DMA的方法,因为使用了cache,各位兄弟提提建议?

sinanjj 发表于 2011-4-6 12:21

以前的程序都是裸奔的,性能方面要求比较高。现在需要使用linux,性能方面需要达到裸奔的90%吧,
---------------那建议不用. 用linux无非是借力于其上丰富的现有软件. 不过. 你这个性能要求啊. 这个优势就没有了.

运营单个程序确实能达到裸奔的90%, 但是, 这用linux有什么意义呢?

xinzha 发表于 2011-4-6 14:02

可以考虑用双内核,否则单单一个时间片长度就够受的了。

tiger84 发表于 2011-4-6 22:31

裸奔肯定不会用了,上Linux是箭在弦上,不得不发啊。
现在使用的ARM的核够多,只是找不到一个合适的动态调度的方法。
考虑双内核怎么弄啊?

另外还有2个问题,希望大家提供下建议和想法,感激不尽。
(1)对定时器的使用要求非常高,要到1us级别,裸奔的时候还能满足,但是上linux之后,如果1us中断1次,不知道这个中断是否会影响到Linux?感觉linux会挂掉。

(2)裸奔提供定时器处理函数时,都是采用注册函数的形式。如果到了Linux里面,这个注册的处理函数从用户态怎么传到内核态?

xinzha 发表于 2011-4-7 09:47

双内核是指的软件双内核,对于实时性要求高的任务由实时内核处理,而显示等非实时任务交给linux内核去做,只是通常这类双内核系统不是免费的并且很贵。

tiger84 发表于 2011-4-7 21:36

双内核是指的软件双内核,对于实时性要求高的任务由实时内核处理,而显示等非实时任务交给linux内核去做,只是通常这类双内核系统不是免费的并且很贵。 ...
xinzha 发表于 2011-4-7 09:47 https://bbs.21ic.com/images/common/back.gif
目前我们基本上就是这个思路,但是还没有找到合适的方法。

xinzha 发表于 2011-4-8 09:54

思路大概就是接管cpu的异常和中断处理,做分配的时候该给谁就给谁,基本上对于稍复杂的系统,出问题的概率剧增,所以还是买现成的吧。

sinanjj 发表于 2011-4-8 09:56

本帖最后由 sinanjj 于 2011-4-8 10:01 编辑

思路大概就是接管cpu的异常和中断处理,做分配的时候该给谁就给谁,基本上对于稍复杂的系统,出问题的概率剧增,所以还是买现成的吧。
xinzha 发表于 2011-4-8 09:54 https://bbs.21ic.com/images/common/back.gif

现成的就是那么好买的?

买买试试吧


1us是基本不可能轻松达到的.

想快速的完成设计, 用外置的裸奔cpu. 设计好接口.


解决不了问题, 但是能绕开问题.

tiger84 发表于 2011-4-8 22:42



确切的说,是有免费的, 找人给你用起来花费的费用很贵.


除此以外, x86的linux实时性都优化不到1us, 别提嵌入式的了.


x86的高端服务器多内核负载平衡都是专门优化的.... ...
sinanjj 发表于 2011-4-8 09:43 https://bbs.21ic.com/images/common/back.gif

司南,哪里有免费的啊?方便提供链接吗?参考下

tiger84 发表于 2011-4-8 22:47

思路大概就是接管cpu的异常和中断处理,做分配的时候该给谁就给谁,基本上对于稍复杂的系统,出问题的概率剧增,所以还是买现成的吧。
xinzha 发表于 2011-4-8 09:54 https://bbs.21ic.com/images/common/back.gif
“思路大概就是接管cpu的异常和中断处理,做分配的时候该给谁就给谁”,没有太理解这个意思,大侠能详细的说下吗?

哎,买现成的,基本不可能啊

一朝成名 发表于 2011-4-9 10:33

1us。。。。。。。你这个让硬件实现吧~~

xinzha 发表于 2011-4-9 20:28


“思路大概就是接管cpu的异常和中断处理,做分配的时候该给谁就给谁”,没有太理解这个意思,大侠能详细的说下吗?

哎,买现成的,基本不可能啊 ...
tiger84 发表于 2011-4-8 22:47 https://bbs.21ic.com/images/common/back.gif
举个例子说,就是当检测设备侦测到核电站快要爆炸了,此时激起一个异常,而在异常处理代码中就把这个事件直接抛给类似于vxworks之类的实时内核,由此内核进行进行一系列实时要求高的避险操作,然后通过某种手段通知非实时内核,非实时内核就可以做一些并不是很紧急的通知和显示等任务。一些日常任务都可以交给非实时内核去做。
只是个很简单的说法,真正实现起来肯定要非常复杂。

tiger84 发表于 2011-4-10 22:35

多谢xinzha和sinajj的回答,我大概心里有数了,再次感谢2位。

yan2005 发表于 2011-4-11 12:47

为什么楼主指明不考虑DMA呢?呵。mmap能提高速度,前提是memory操作已经占了大部分系统的运行时间上。如果bottle neck不在这里,mmap也不见得多有用。

tiger84 发表于 2011-4-11 22:10

为什么楼主指明不考虑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]
查看完整版本: 高分求教:linux性能问题