
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
hung task,soft lockup,hard lockup,workqueue stall 是 linux 内核中的异常检测机制,这 4 个检测均是通过时间维度上的检测来判断异常。在时间维度上的检测机制,有两个核心的点:(1)一个表示被检测对象最新状态的变量这个变量可以用时间戳表示,也可以是一个计数器。(2)一个定时器这个定时器内部做检测工作,检测的依据就是状态变量。如果状态变量是时间戳,

jetson agx orin 是 nvidia 推出的计算平台,在自动驾驶领域得到广泛应用。确定性执行是自动驾驶系统的基本要求,而任务调度的确定性是影响确定性执行的重要因素。本文测试了 jetson agx orin 的调度延时,对比测试了两种情况:打实时内核补丁和不打实时内核补丁。从测试结果来看,对于 rt 调度策略来说,打了实时内核补丁之后,最大调度延时在 70μs 以内;而不打实时内核补丁

状态机有3个要素:状态,事件,动作。假如一个对象有3个状态:S1、S2、S3。影响状态的事件有3个:E1、E2、E3。每个状态下收到对应事件的时候,对象的动作为AXY。那么该对象的状态机就可以用如下表格来表示。S1收到事件E1的时候动作为A11,收到事件E2的时候动作为A12,收到事件E3的时候动作为A13,以此类推。其中,动作可以是状态发生切换,也可以是其它与业务有关的动作。

如下代码,在 MakeObj() 中创建了一个局部对象 obj,并将 obj 返回。Test() 函数调用了 MakeObj(),并将 MakeObj() 的返回值赋值给了 obj。按我们的预期,MakeObj() 是值返回,在 main() 调用 Test() 的过程中,应该发生了两次构造和两次析构。:默认构造,在 MakeObj() 声明局部变量的时候。拷贝构造,在 MakeObj() 返回的

假如A发布的多播消息,那么B和C都会收到,如果B和A之间有相同topic的writer和reader,也就是说B和A是可以通信的,那么B就会向A发送单播消息,进行后续的协商,后边的协商过程均通过单播来实现。participantId的分配如下代码所示,同一个进程的同一个domain内,participantId都是从0开始的,也就是说participantId并不是domain内唯一的,而是dom

xdp 全称 eXpress Data Path,是 linux ebpf 中的一个功能。ebpf 在内核中预留了一些插入点,用户可以在这些插入点插入自己的处理逻辑,当数据路过插入点时可以做一些预期的处理,具体实现方式如下:① 用户编写数据处理代码,也就是对于路过这个插入点的数据想做什么处理② 将代码编译③ 将编译好的目标文件安装到插入点安装之后,数据路过插入点时便会被安装的代码处理。插入点的处理

僵尸态是 linux 进程的一种状态,用 Z (zombie) 表示。处于 Z 状态的进程已经不在工作,进程的资源(内存,打开的文件) 都已经释放,只保留 struct task_struct 一个空壳子,用僵尸来表示这个状态非常形象。僵尸进程不能被信号杀死(因为僵尸进程已经死了,当然也不能响应信号),只能被父进程回收。进程处于僵尸态时保存的信息非常少,其中包括进程号,退出码,退出码是比较重要的,

cyberrt 是百度开源的智驾中间件,主要功能是通信和调度。timer 是cyberrt 中的一个基础模块,提供了定时器功能。cyberrt 中的定时器完全是自己造轮子,没有基于 posix timer 或者其它第三方库提供的 timer。本人在工作中移植了 cyberrt 中的 timer,在使用过程中也遇到并修复了两个 bug。本文首先记录 cyberrt 中 timer 的实现原理,然后再
