小鹏社招面经——Linux内核稳定性工程师

1.自我介绍

2.内存泄露问题了解多少?如何定位?

像长时间老化发生卡顿、内存不足触发大量的lowmemorykiller或者oom、内存分配失败,这些都可以去怀疑内存泄露。

内核的内存泄露,主要就是slab内存泄露、ion内存泄露、私有页内存泄露。

定位的话,我一般是,先监控进程ps内存变化,确定内存泄漏存在。第二,泄漏存在,对代码进行静态扫描,解决所有扫出来的问题。第三,上内存检测工具,memchecker,valgrind都行,解决工具扫出来的问题。第四,带上自定义的分配器或mtrace之类的上压测,解决测出的问题。

3.什么是Cache一致性?

简单来说,就是读到的数据是旧数据,Cache数据还没同步过来

4.说下你做过的一些优化?

说一个内存相关的吧,riscv的linux内核,对启动地址有个2M对齐的要求,原因是为了与OpenSBI对齐。因为OpenSBI默认跳转偏移是2M,但OpenSBI并不需要这么空间,这就导致中间有1M+内存浪费,所以任务就是把这内存映射起来。

怎么做呢?跟内核代码发现,2M对齐要求,一方面是内核对启动地址做了检查,不符合直接触发BUG_ON;另一方面,它的临时页表只建到了二级页表,而二级页表是2M的,没有继续建到三级页表,所以寻址不能寻到更小地址。

因此最终就是,修改内核,给这个启动用的临时页表,建立三级页表,三级页表是4K,只需要地址4K对齐就行。

5.CMA分配的内存是哪种属性,在cpu和dma之间共享的处理怎么保证一致性?

通过dma_alloc_coherent, dma_alloc_writecombine分配到的CMA内存,都是non-cached,没有cache一致性问题。

通过ION分配到的CMA内存,可以映射成cached和non-cached。映射成cached的场合,可以使用流式DMA接口处理cache一致性。

6.对异常重启类问题,有多少了解?

异常重启,看是硬件还是软件。硬件的话,通常更多是外部电源掉电,像通常的板子都会有外部电源过流保护,触发过流保护就会导致整板掉电和重启。软件的话,内核panic是会重启系统的,这个可以配置,panic了就要具体分析原因了。

7. 简单说下什么是死锁?

你要的锁在我这,我要的锁在你这,我俩都在等彼此释放,但是释放又要拿到锁,陷入僵局死循环

8、说一下你遇到过的死锁案例?

说一个关于原子上下文的死锁吧,背景是做压测时,系统卡死,串口不可用,内核报错INFO: rcu_preempt detected stalls on CPUs/tasks。

从报错log上看,cpu0检测到cpu1 stalls了上千个jiffies,cpu1 stalls表示cpu1关闭了中断和抢占,是无法调度出去了,所以cpu1一直是在running swapper/1线程,log也是一直在报running swapper/1的信息。

根据现象,认为是死锁问题,然后打开内核的lockdep调试开关,lockdep出现了死锁log,提示在一个atomic的上下文中有去调用sleeping的接口,这是不允许的。因为原子上下文是一个关中断、关抢占的环境,所以一旦在会睡眠的接口中schedule出去了,cpu就再也无法调度了。

然后跟踪代码发现,在使用spin_lock_irqsave加锁后,继续使用了mutex_lock。spin_lock_irqsave接口是会关中断、关抢占的,不允许调度;而互锁锁会睡眠,一旦取不到锁就会schedule出去,那cpu就无法调度了,出现cpu stalls。

最终解决就是直接去掉这段互斥锁操作,因为已经有自旋锁做同步操作了。

9.有什么想问的

实际上,这些问题都是需要探讨的,光是死锁,我认为都可以聊半小时,时间有限简单聊聊。稳定性这块涉及面比较广,偏系统。

#校招##小鹏##嵌入式面经#
Linux驱动社招面经 文章被收录于专栏

记录Linux驱动社招面经,希望看到的人有所收获

全部评论
点赞 回复 分享
发布于 04-21 22:39 广东

相关推荐

🌟 个人背景:985硕,无大厂实习,但有两个车载嵌入式项目,刚通过文远知行4轮技术面,分享一手经验!📌 面试流程速览笔试:3道编程题(C/C++为主,涉及链表和内存管理)。技术一面:手撕代码 + 硬件基础(50分钟)。技术二面:系统设计 + 多线程实战(40分钟)。技术三面(交叉面):项目深挖 + 行业场景(30分钟)。HR面:离职原因/职业稳定性。时间线:2周速通(面试官效率高,但手撕题难度陡增)。💻 技术面真题回忆1. 手撕代码题题目1:反转链表的指定区间(如反转第m到第n个节点),要求空间复杂度O(1)。坑点:头节点可能被反转,需用dummy节点占位。楼主评价:“写过N遍的题,但现场卡在指针判空边界,被面试官连环追问” 😅题目2:设计一个线程安全的环形缓冲区(Circular Buffer),支持多线程读写。考点:互斥锁、条件变量、内存对齐优化。2. 系统设计 & 硬件基础问题1:如何设计车载CAN总线通信模块?帧ID分配策略、错误处理机制怎么实现?延伸:CAN vs CAN FD的区别、DBC文件解析工具的原理。问题2:在资源受限的嵌入式系统中,如何优化AI模型的推理速度?(如文远知行用的L4级计算平台)参考思路:量化、层融合、利用硬件加速指令(如ARM NEON)。3. 操作系统 & 实战场景灵魂拷问:“Linux内核的实时性差,如何为自动驾驶传感器数据采集设计实时线程?”“SPI通信中遇到时钟信号抖动,如何用示波器定位问题?”楼主答案(仅供参考):实时性方案:Preempt-RT补丁 + 线程优先级绑定 + 内存锁页。SPI调试:查时钟频率是否超设备上限,检查地线环路干扰。🔍 项目深挖高频问题车载项目1:基于STM32的ADAS预警系统“如何解决毫米波雷达数据与视觉时间戳不同步?” → 答硬件中断+PTP协议同步。“滤波算法选型?为什么不用卡尔曼滤波改用滑动窗口均值?” → 答资源消耗与实时性权衡。行业场景:“自动驾驶嵌入式系统为什么倾向用ROS 2替代ROS 1?”(答:DDS协议支持分布式实时通信)💥 避坑指南手撕代码:嵌入式必刷**《程序员面试宝典》**指针题,尤其链表/位操作。多写裸机代码(不依赖IDE调试),面试官可能要求白纸手写。项目复盘:准备数据对比图(如优化前后内存占用),展示量化结果。解释清楚为什么用某款MCU/传感器(成本?性能?供应链?)。八股文重点:熟读《ARM Cortex-M权威指南》、Cache一致性协议(MESI)。掌握RTOS调度机制(如FreeRTOS的优先级反转解决方案)。🚀 内推内推链接:https://app.mokahr.com/m/campus_apply/jingchi/2137?recommendCode=DS17ugTB#/jobs🎯内推码:DS17ugTB(填码简历优先审!)欢迎提问/补充!祝大家offer拿到手软!           
点赞 评论 收藏
分享
评论
2
5
分享

创作者周榜

更多
牛客网
牛客企业服务