自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 资源 (3)
  • 收藏
  • 关注

原创 TLS 变量在主线程和子线程上的位置区别

Glibc会分配一块内存区域,用于存储主线程的TLS变量,并在主线程的执行开始时进行初始化。栈通常是在线程创建时分配的,并且可以包含线程特定的数据,包括TLS变量。在这种情况下,TLS变量存储在子线程的栈上,而不是在全局的。这是因为主线程的TLS变量通常是在主线程启动时由glibc(GNU C库)创建的,而不是在。创建的子线程,TLS变量通常是存储在子线程的。段中,而子线程的TLS变量通常存储在子线程的。:主线程的TLS变量通常不会存在于主线程的。总之,主线程的TLS变量通常存储在全局的。

2023-10-11 16:33:57 78

原创 关于静态库编译时增加-fPIC选项

这些位置无关代码对于可执行的静态库没有直接的用处,因为它们不会在运行时加载到不同的内存地址。对于静态库链接到动态库的场景,那么编译静态库的时候就必须使用-fPIC选项了。选项应用于静态库编译时,编译器会生成额外的位置无关代码和数据布局,以确保生成的静态库可以在不同的内存地址上加载。

2023-09-28 10:54:13 2230

原创 IDLE进程不可抢占

关于IDLE进程不可抢占的commit。

2023-01-16 09:49:45 82

转载 关于ARM寄存器TTBR0 TTBR1

At the hardware level, ARM supports two page table trees simultaneously, using the hardware registers TTBR0 and TTBR1. A virtual address is mapped to a physical address by the CPU depending on settings in TTBRC. This control register has a field which sets

2022-09-30 14:15:12 580

原创 Linux lockdep信息分析

lockdep是内核提供协助发现死锁问题的feature以如下ABBA类型circular locking为例分析一下打印信息 1[13.007000]WARNING:possiblecircularlockingdependencydetected 2[13.007587]5.0.0-rc3-00018-g2fa53f892422-dirty#477Nottainted 3[13.008124]------------------------...

2020-07-09 23:53:46 627

原创 vsync从中断到用户态的经历

vsync是显示屏的垂直同步信号它指示着前一帧的结束,和新一帧的开始。 在本人的G965手机源码中,可以看到硬件的vsync首先是外部command屏幕的GPIO中断出发的(简称vsync_irq),中断handler里会调用wake_up_interruptible_all函数唤醒内核态vsync线程(简称k_vsync_thread),在k_vsync_thread中会调用sysfs_notify函数唤醒一个kworker,这个kworker的callback函数里会调用wake_up...

2020-05-19 22:56:13 761

原创 linux的0号进程是不可抢占的

从linux的调度策略来讲,当一个CPU没有调度实体可被调度的时候,才会轮到0号进程idle的运行。调度实体就是sched_entity结构,由于每个task_struct都嵌入了sched_entity的一个实例,所以linux进程是可调度实体,但逆命题是不正确的,因为还有线程和进程组。 idle是优先级最低的进程,可以想象在任何情况下都能被别的进程immediately抢占,而实际上,通过ftrace可以看到idle在运行的时候一直是关抢占的(preempt-depth不为零),也就是说只有i...

2020-05-19 22:51:25 248

原创 Linux 的五大调度类

2020-02-10 17:12:07 1140

翻译 Linux内核如何管理内存

翻译一篇老文章,基础原理十年未变 https://manybutfinite.com/post/how-the-kernel-manages-your-memory/进程虚拟地址空间布局出来后,我们回到内核探究其管理用户态内存的机制,这里仍旧是gonzo进程:Linux进程在内核空间是以一个task_struct实现的,这个实例就是进程描述符。task_struct 里的mm指针指...

2019-08-13 00:34:40 218

原创 linux用户态进程地址空间管理

在linux操作系统下,每个进程或者线程都用一个task_struct来描述,这其中有一个mm_struct结构体来管理用户态进程的内存,我们称之为内存描述符,该结构体包含了用户态进程地址空间相关的全部信息。task_struct 中还有一个很重要的元素为 active_mm (上一个被调用的用户态进程的mm指针),主要用于内核线程访问内核页全局目录,事实上,内核线程并没有相关的内存描述符...

2019-05-25 22:06:36 976

原创 DPDK 无锁操作如何保证原子?

rte_atomic32_cmpset()称为CAS(compare and set)操作,是DPDK无锁队列实现的关键函数,代码如下:static inline intrte_atomic32_cmpset(volatile uint32_t *dst, uint32_t exp, uint32_t src){uint8_t res;asm volatile( MPLOCKED...

2019-04-18 14:26:23 1813

原创 Cgroup内核框架分析

Cgroup是linux内核提供的一种可以限制、记录、隔离task(进程或者线程)所使用物理资源的机制,LXC为实现虚拟化使用了Cgroup作为资源管理手段。用户空间使用文件的方式组织和管理Cgroup资源,所有的资源管理都有标准化的subsystem(子系统)实现,在文件 include/linux/cgroup_subsys.h 列出了所有的子系统,subsystem的hook函数通过...

2019-04-11 23:33:41 530

原创 一次linux平台X86架构下DPDK应用启动的OOM

问题背景是X86板子上搭载DPDK的中间件启动后再起应用程序会出现OOM(Out Of Memory)软件环境是linux4.9.154 版本中间件封装了DPDK内存大小为8GBkernel启动阶段会配置两个1G的大页供应用程序使用cmdline参数: hugepagesz=1G hugepages=2不加载application时用户态启动阶段会fork出4个进程在不同...

2019-03-11 19:35:37 318

原创 多线程共享数据时cache不对齐对performance的影响

LMAX是一家英国的外汇交易公司,该公司开发了基于JVM的并发开源框架Disruptor,它能够在一个线程里每秒处理6百万订单,业务逻辑处理器完全运行在内存中,使用事件源驱动方式,其发布的开源架构介绍文章中讲到用内存填充的方式规避cache line对多线程并发的影响。文章中提到了一个叫伪共享的概念: https://lmax-exchange.github.io/disruptor/file...

2019-02-26 20:21:26 286

原创 RCU在功耗和性能场景下的扩展

RCU概念    ReadCopy Update (RCU) 是Linux的一种同步机制,把写数据看成一个update操作,可分为两个阶段removal和reclamation。removal阶段将旧数据的指针替换为新数据的指针,可以与 reader 并发,reclamation阶段在等待旧数据的读操作完成后将其回收或直接释放,两个阶段之间的间隔也被称之为grace period。从代码的实现...

2019-02-08 22:07:07 1633

原创 ARM64架构下Linux进程何时抢占?

    Linux系统下,进程调度有主动和被动之分,最终是调用schedule()函数。主动是指进程需要等待资源而主动让出CPU,被动就是抢占(PREEMPT)。    主动schedule由业务代码自行决定,运行在Linux抢占式内核上要确保进程的运行时间就需要关注抢占。抢占的过程分为两步:设置调度标记       为CPU上正在运行的进程thread_info结构体里的flag...

2019-02-08 21:44:55 376

IOS影印版.zip

该书的PDF版本,mach, bsd, iboot, efi, launchd, dtrace, darwin

2019-07-13

ARM cortex A75 user manual

ARM最新的cortex A75芯片手册 A75能提供最新的计算能力升级并集成了人工智能指令集

2018-06-24

ARM DynamIQ The future of multi-core computing.pdf

详细描述了ARM最新的 DynamIQ 技术 该技术可以做到一个cluster异构SOC

2018-06-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除