Articles of 实时

速率单调分析

我正在开发一个项目,使用速率单调分析来validation一个相当大的程序的multithreading执行。 为了执行分析,我需要每次运行的执行时间以及运行的次数。 最后,将分析数据以找出每个运行线程的平均时间。 有没有解决我收集这些数据的问题? 我已经看过LTTng和英特尔vTune,但有一些问题: 1.)LTTV / eclipse插件计算我需要的平均执行时间吗? 2.)英特尔VTune是否在kvm虚拟机中工作? 开发计算机是一个服务器,当前正在硬件(但与AMD处理器),直接运行RHEL,但最终将迁移到运行在intel Xeon处理器上的虚拟机。该软件还具有运行的c + +和java可执行文件。

如何启动与新贵实时优先(杰克)的过程?

我试图用启动脚本启动实时优先级,但迄今为止没有成功。 我正在使用Ubuntu的服务器14.04。 我的新贵版本是1.12.1。 如果我没有实时启动jackstd脚本,按预期工作。 我用来在脚本中启动jackd的用户和组被允许使用实时优先级,但是当启动运行它似乎并不重要。 每当我试图通过暴发户运行,我得到这个暴发户日志: jackdmp 1.9.10 Copyright 2001-2005 Paul Davis and others. Copyright 2004-2013 Grame. jackdmp comes with ABSOLUTELY NO WARRANTY This is free software, and you are welcome to redistribute it under certain conditions; see the file COPYING for details Cannot create thread 1 Operation not permitted Cannot create thread 1 Operation […]

如何在实时Linux应用程序中logging数据?

我正在使用4.4.12-rt19 RTLinux内核补丁。 我有一个用C编写的实时应用程序,它有单独的进程运行在独立的核心上,从networking获取数据,计算这些数据,然后logging结果。 我试图login的数据文件的每个时钟滴答的10KB的顺序。 日志logging过程可以访问共享内存中的所有传入数据。 现在,我正在使用sqlite3和sqlite3async将数据库caching到logging过程的一个线程中的内存,然后通过调用sqlite3async_run()将内存中的实例提交到文件中。 问题是,在sqlite3async_run()执行的一部分期间,写入内存数据库缓冲区的sqlite3_step()命令挂起并违反了我的1ms时间保证。 我不确定是否因为线程进程在实时环境中工作或者sqlite3async如何工作而发生错误。 据我所知,sqlite3async应该能够使用sqlite3虚拟文件系统在内存中缓冲数据库,然后用后台线程处理实际的文件写入(详见此处 )。 我试图改变每个线程的调度优先级和好处无济于事。 任何帮助或build议将不胜感激!

控制程序执行

我正在为multithreading应用程序编写小型debugging程序。 我的想法是运行目标,例如100毫微秒,然后暂停和检查其记忆。 然而这(只是伪代码) nanosleep(100); //sleep debuger for 100 nanosec and let a program run kill(target_app_pid, SIGSTOP); //stop target app 将无法正常工作,因为stream程切换可能在纳秒级之后立即发生,并且目标会根据需要运行更长时间。 有没有办法给一个进程“定义”时间片,然后暂停? 只有我可以想象的解决scheme是添加系统调用,并修复调度程序来实现我所需要的,但是这需要很大的努力和许多错误。 也许设置debuger进程的“实时”优先级可以帮助? 它会是干净的解决scheme吗? 假设我也可以对目标应用程序的源代码进行审查。 是否可以设置某种计时器,并在一段时间(非常小而精确)之后睡眠整个过程?

如何在GNUPLOT中绘制实时数据? 数据来自一个不断向其logging新数据的文件

我希望能够使用gnuplot绘制数据“实时”。具体来说,例如,我有一个文件“foo.st”,它是一个数据文件,按列分隔。 “foo.st”中的数据是从实时variables中实时收集的,我希望将gnuplot打开,并将“foo.st”中的数据作为其连续logging数据。 理想情况下,我希望情节显示一个“1秒”的情节,然后刷新显示下一个“1秒”的数据,然后再次刷新显示下一个“1秒”的数据…现在,我有一个gnuplot脚本“ foo.p“中写道: set autoscale set xtic auto set ytic auto set title "Leg Position" set xlabel "Time (sec)" set ylabel "Position" plot "foo.st" u 1:2,'' u 1:3,'' u 1:4,'' u 1:5,'' u 1:6,'' u 1:7 pause 1 replot set xrange [1:2] replot pause 1 set xrange [2:3] replot pause 1 set xrange [3:4] […]

Linux中POSIX可靠信号和POSIX实时信号有什么区别?

我使用man 7信号阅读信号的手册页,在那里我看到两种types的信号。 所以,我有问题, Linux中POSIX可靠信号和POSIX实时 信号有什么区别?

C / C ++中的实时间隔

在C / C ++中的实时Linux应用程序中可以实时间隔吗? 我正在写一个ADC模拟器。 这是一个生成具有一定频率的软件包的应用程序。 封装产生的频率尽可能接近ADC的采样率是很重要的。 为什么我不想使用sleep()和usleep()来设置包生成时间间隔。 谢谢。

在Java中有什么办法共享内存位置来交换一些实时的小包?

有没有更好/更聪明的方式来从memory system get布尔值,但不使用任何TCP/UDP或local file system方法? For example: #both running as 1 application separately $ java -cp /var/tmp/J.jar System.Backend $ java -cp /var/tmp/J.jar System.Frontend 在Backend内存分配的地方,Frontend即时读取它们,它们都不能使用TCP / UDP和文件系统。

systemd能否自动重启/停止依赖服务?

出于性能原因,我需要运行一个应用程序的多个实例,固定到CPU,在不同的端口上侦听。 一个HAProxy TCP负载均衡器位于它们前面,用于分配stream量。 这样做是为了防止任何线程上下文切换,并强制执行无共享devise(因此不需要应用程序中的任何types的锁,假设它是单线程的)。 所以这意味着在一个有64个CPU的服务器上,我可能会将HAProxy固定到CPU 0,然后将我的应用程序的63个实例分别固定到独立的CPU(1-63)。 显然,在启动,重启,关机等方面的pipe理相当复杂。 我想知道是否有任何方法可以使用systemd来处理这个复杂的问题。 我知道,如果我将HAProxy定义为一个单元,然后声明它需要与其他应用程序交谈,它可以解决启动问题,例如 Require=app1,app2,…..,app63 我可以 systemctl start myhaproxy 它会首先启动它需要的63个实例(假设在应用程序安装过程中,每个实例都被定义为一个单独的systemd单元)。 但是,我想知道是否有反正我也可以得到这个也适用于重新启动和关机。 所以如果我这样做: systemctl stop myhaproxy 我希望它会自动closures应用程序的63个实例。 如果我这样做 systemctl restart myhaproxy 那么我希望它在重新启动自己之前首先重新启动Require中列出的所有服务。 那可能吗? 还是超出了系统提供的范围?

低延迟中断处理(预计从内核返回到用户空间的平均时间是?)

我有一个光纤链接,一个专有的设备驱动程序。 链接进入PCIe卡。 在RHEL 5.2(2.6.18-128〜)上运行 我已经将卡上的接口mmap到设置和FIFO访问等,这些读/写需要几个μs来完成,所以一切都好。 但是当然不能使用这个中断,所以我不得不使用提供的内核模块,用它的用户空间lib接口。 WaitForInterrupt(); // API lib interface to kernel module // Interrupt occurs and am returned to my code in user space time = CurrentTime() – LatchedTime(); // time to get to here 从WaitForInterrupt()返回大约需要70μs。 (中断发生的时间被锁存在固件中,我读了这个,正如我上面所说的那样需要〜2μs,并将它与固件中的当前时间进行比较) 发生中断和用户空间API中断呼叫等待方法返回之间的期望访问时间是多less? networking/其他高速接口采取?