xenomai使用的一些问题

halowell 2023-05-15 11:15:58

大家好。不容易找到这样一个中文社区啊,看上去人有点少。很希望有人能交流一些问题。

我有10多年linux编程经验,有QNX,Vx实时系统使用经验。2023年2月开始接触xenomai。为了跑ethercat,目前的环境是ubuntu18.04,linux-4.9.38,xenomai-3.1。

在这几个月的使用中,积累了一些经验,比如通过watch -d -n 1 cat /proc/xenomai/sched/stat 查看实时线程的CPU占用情况。

产生了挺多疑问,请指点:

1:线程的实时性和非实时性问题。

经过一些对比测试,测到在通常情况下,std::thread和posix的pthread是一样的。但在开启xenomai环境时(指使用xeno-config --posix --skin=alchemy --ldflags 生成的链接参数),此时std::thread开启的线程是非实时的。而pthread开启的线程是在实时核的。并且该环境下的std::this_thread::sleep_for会失效(不明白)。

这里引申出来其他问题:

1)在进行编译环境配置时,skin参数有: --[skin=]posix|vxworks|psos|alchemy|rtdm|smokey|cobalt  ,如果我用到了rtdm或cobalt中的API,是否需要指定--skin=rtdm --skin=cobalt开启?

2)因为我的应用需要进行TCP/UDP通信,开启了pthread线程进行数据收发,观察到该线程随时都在进行实时核和非实时核的切换(MSW计数变化),此处的问题是,线程开在实时核,但每次业务都需要切换到非实时核处理, 这种情况和把线程开到非实时核相比,哪种性能上更优?  如果要追求实时性,我还得去研究下,使用rtdm把网卡交由实时核接管。

3)基于上述问题,我想将pthread只开在非实时核,似乎通过pthread_attr_setschedpolicy(&thAttributes, SCHED_OTHER);将调度策略设为SCHED_OTHER,就不是实时的了,但实测效果该线程仍然在实时核。那么是否有方法指定线程开在哪个内核吗?还有类似的main线程的实时性指定。(我的系统中存在着实时线程控制另一块网卡进行ethercat通信)

 

2:实时线程的抖动和延时问题。

我测到自己的实时应用中的函数调用的耗时抖动 与 xenomai下的latency工具测到的效果类似。

但我不明白的是,当我同时开启自己的应用 和 latency 时,我的程序的耗时抖动就会降低很多。就像是latency的开启,使整个系统变得更灵敏了的感觉。

 

3:实时线程的debug调试

 发现实时线程无法使用gdb调试,只能打印调试。如果有合适的方法请指点。

 

最后,如果有人熟悉ethercat的IGH主站,也希望能交流一些问题。

感谢你的阅读。

...全文
728 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

你好,请问您有没有遇到watch -d -n 1 cat /proc/xenomai/sched/stat 的时候 msw模式切换一直增加大问题

  • 打赏
  • 举报
回复

你好,能否请问一下您的igh版本是什么,能告知或者发送一下网址吗

legonext 2023-06-05
  • 打赏
  • 举报
回复

1 .使用cobalt应该就可以了
2.你如果是用的xenomai的rtnet协议栈,它可以保证实时性。如果你用linux自己的tcp/ip协议栈就不能保证实时性了。
运行在实时域时,Xenomai有自己的ABI进行系统调用,使其可以运行在实时域,不需要切换到非实时域,保证系统的实时性。
3.如果系统运行在实时域了,不建议再调用非实时域的Linux的系统调用,否则运行Xenomai就没有太多意义。
4.实时域可以用GDB,请参看testsuite/smokey/gdb/gdb.c 测试用例。

131

社区成员

发帖
与我相关
我的任务
社区描述
Xenomai中文社区。 Upstream - xenomai.org Mirror - gitee.com/Xenomai CSDN - bbs.csdn.net/forums/Xenomai
社区管理员
  • Xenomai
  • legonext
  • Cajb
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧