自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 资源 (9)
  • 收藏
  • 关注

原创 fuchsia 编译 报git log unknown date format unix的解决

fuchsia 编译 报git log unknown date format的解决方式: 升级git到最新版本,使用gIt log --help 查看date参数支持unix即可

2019-08-05 01:05:51 955

原创 zircon基本调测功能

zircon目前支持的基本调测功能zircon shell下执行log_listener2 .在zircon shell中执行alt+tab 切换控制台(仅支持x64)zircon shell 执行 dlog命令。支持dlog -p 进程号 查看指定进程打印如果以pave方式启动,可以在服务器端使用./out/build-zircon/tools/loglistener工具查看单板打印...

2019-04-29 10:03:51 1863

原创 Zircon中新增系统调用

zircon系统调用是有一个生成框架,类似于linux的SYSCALL_DEFINE宏。系统调用号由系统调用在syscalls.abigen文件中的定义顺序决定,实际上是依次递增的。在相关文件定义后,会自动申明zx_name的函数,用户之间使用的是这个zx_name的函数。添加自定义系统调用修改syscalls.abigen文件,增加自定义系统调用格式,包括系统调用名字,参数,返回值,格式...

2019-04-28 18:13:30 1147

原创 Printk实现流程

一、初步结论1.如何把字符串放到缓存,如何从缓存写到串口。首先是在关中断,关调度,保持logbuf_lock自旋锁的情况下,将数据格式化后,放到printk_buf缓冲区,其大小为1K,也就是说,每次printk只能打印1K的内容。格式化完毕后,将数据再复制到log_buf缓冲区。由于在向串口输出的过程中,会暂时打开自旋锁,所以在SMP下,其他CPU可能继续向log_buf中存放数据,并由驱动...

2019-03-15 16:24:01 1137

原创 The Performance of µ-Kernel-Based Systems

Hermann Härtig - Michael Hohmuth - Jochen Liedtke* - Sebastian Schönberg - Jean WolterDresden University of TechnologyDepartment of Computer ScienceD-01062 Dresden, Germanyemail: [email protected]...

2019-03-13 20:32:16 2377

转载 l4 微内核

近几年来,L4微内核越来越受到大家的关注,研究和使用L4的人越来越多,但是对于L4介绍的中文资料仍然很少,本文试图收集各种基于L4的操作系统项目,以帮助大家研究学习只用。基本上,各种L4系统可以分为两种,一种是dead system,另外一种就是live system。对于dead system,如果已经丧失了研究的意义,那么也不会收入本列表当中。 关于L4系统,一般来讲,目前公认的L4系统有2...

2019-03-13 20:11:59 2366

转载 linux kernel内核slab内存泄露debug经验

打开内核的SLUB DEBUG选项+CONFIG_SLUB_DEBUG=y+CONFIG_SLUB_DEBUG_ON=y观察slabinfocat /proc/slabinfo启动后记录下slabinfo。运行一段时间,再观察slabinfo。找到增长比较大的slab。打开slab traceecho 1 > /sys/kernel/slab/<leakin...

2019-03-13 19:33:51 3855 1

原创 linux smp原子操作

原子操作:就是在执行某一操作时不被打断。linux原子操作问题来源于中断、进程的抢占以及多核smp系统中程序的并发执行。对于临界区的操作可以加锁来保证原子性,对于全局变量或静态变量操作则需要依赖于硬件平台的原子变量操作。因此原子操作有两类:一类是各种临界区的锁,一类是操作原子变量的函数。对于arm来说,单条汇编指令都是原子的,多核smp也是,因为有总线仲裁所以cpu可以单独占用总线直到指令...

2019-03-13 19:28:32 533

转载 Linux内核页表

一. Linux地址空间ARM的32位系统共支持4G的内存空间,其中0-3G为用户空间,3G-4G是内核空间,ARM采用2级页表,32位地址空间ADDRESS分别为 PGD|PTE|12Bits, 在内核代码中分别为PGD 11位,PTE 9 位,页内地址12位;但是在MMU系统中对于ARM的二级分页设置分别为PGD 12位,PTE 8位,页内地址为12位。在内核代码层次虽然是11位,但...

2019-02-26 20:13:00 1227 1

原创 ARMV8 用户态DMA cache一致性问题和解决

原因:dma和cpu都有操作内存的能力,dma操作内存不通过cpu和cache,即cpu cache感知不到dma对内存的操作因此cpu和dma合作时,就会存在cpu cache和内存的一致性问题,原因是dma对内存操作无法被cache感知。当然如果给dma的内存是no cache的,cpu不会使用cache,也就不存在相关问题。如果给dma的是带cache内存,那么cpu访问的时候就需要...

2019-02-19 15:46:57 4534 1

转载 ld 和参数说明

本文档介绍GNU连接器ld的2.14版本.本文档在GNU自由文档许可证下发行.在"GNU自由文档许可证"一章中有关于本许可证的一份拷贝.概述‘ld’把一定量的目标文件跟档案文件连接起来,并重定位它们的数据,连接符号引用.一般,在编译一个程序时,最后一步就是运行’ld’.'ld’能接受连接命令语言文件,这是一种用AT&T的连接编辑命令语言的超集写成的文件,用来在连接的整个过程中提...

2019-01-18 10:53:15 16954

转载 c++符号表解析

约在20世纪70年代以前,编译器编译源代码产生目标文件时,符号名与相应的变量和函数的名字是一样的。比如一个汇编源代码里面包含了一个函数foo,那么汇编器将它编译成目标文件以后,foo在目标文件中的相对应的符号名也是foo。当后来UNIX平台和C语言发明时,已经存在了相当多的使用汇编编写的库和目标文件。这样就产生了一个问题,那就是如果一个C程序要使用这些库的话,C语言中不可以使用这些库中定义的函数和...

2019-01-10 14:59:43 27206 1

转载 枚举变量 enum

不能将非枚举量赋给枚举变量,那么能不能将枚举量赋给非枚举变量呢?如:int a=Monday;这是允许的,因为枚举量是符号常量,这里的赋值编译器会自动把枚举量转换为int类型。另外枚举还有一种少见的用法是 enum { one ,two ,three}; 就是不指定一个名字,这样我们自然也没法去定义一些枚举类型了。此时就相当于static const int one = 0;这样定义三个常量一...

2019-01-09 15:16:20 546

转载 od 修改windows窗口

https://www.xuebuyuan.com/964461.html?mobile=0

2018-08-28 10:56:23 1201

原创 vmlinux 和普通elf文件的差别 linux kernel加载简述

vmlinux其实也是一个elf格式文件,它和普通elf是有些区别的。linux下可执行程序格式是elf的。elf格式的文件中有一个Program Headers,这个数据结构告诉 程序加载器,应该如何把 这个elf文件加载到虚拟地址空间中去执行。elf格式还有一个数据结构是Section Headers,这个不是用于程序加载,是用于编译、链接的。 因此gcc -c也可以生成目标代...

2018-07-21 15:32:12 2320

转载 ELF文件格式简介

https://blog.csdn.net/gx19862005/article/details/53350032

2018-07-21 14:58:56 176

转载 开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别

首先借用有心人士的一张相当直观清晰的图来划分各种协议:开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别以下是上述协议的简单介绍: BSD开源协议 BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以B...

2018-07-19 11:14:20 245

原创 Linux NO_HZ_FULL NO_HZ 框架实现分析

解决一个问题重要的是了解问题的领域知识和相关背景,本文的目的是介绍linux内核的NO_HZ_FULL相关领域知识,以便涉及相关问题时候能更容易上手。 简单的说linux NO_HZ_FULL的作用是消除Linux内核不必要的周期时钟,提高系统的性能或者节省能耗。NO_HZ需要内核高精度时钟框架的支持。NO_HZ有几种选择,NO_HZ_IDLE是在CPU IDLE的时候关掉该CPU的周期tick...

2018-07-12 16:35:29 4879

原创 linux 后台clocksource_watchdog 线程的启动条件

如果启动参数没有设置tsc=reliable,系统认为tsc时钟源需要检查后能被使用 2.检查的方法是启动clocksource_watchdog加入时钟源的时候,如果tsc时钟源不是reliable,则会在执行list_add(&cs->wd_list, &watchdog_list);,即将时钟源加入watchdog_list链表。 而启动watchdog的条...

2018-07-04 14:13:47 1108

原创 计算机优化的一些随想

Wolpert and Macready 在 1997 年在优化领域中提出的 No Free Lunch Theorems(NFL),可以简单理解为:针对某一具体域内的所有优化问题 Q,经过 m 步迭代之后达到目标函数给定值的所有可能性的累加和是相等。 周志华老师在其《机器学习》一书中引申到机器学习领域:“针对某一域的所有问题,所有算法的期望性能是相同的”其实在计算机优化中上面的道理非常普遍...

2018-07-03 16:58:21 172

原创 yocto 默认x86根文件系统 开启 serial 登陆支持

使用yocto编译的x86 根文件系统默认是图形界面。通过修改etc/inittab的启动级别后,修改默认从字符界面启动,连接串口,默认没有shell。解决方法: 1. 修改启动参数,添加console=ttyS0,115200 2. 修改/etc/inittab 添加 2:12345:respawn:/sbin/getty -L 115200 ttyS0...

2018-07-03 10:45:59 821

原创 定位linux 内核oops具体代码的简便方法

通常是使用objdump对文件反汇编,然后去查找对应错误,下面介绍两种更简单的方法:方法一:假如我们要查看0xffffffff8124d1f9地址对应的是内核中哪个文件哪一条代码,可以按照如下方法来做:~/crosstools/x86_64_gcc6.2.0_glibc2.24.0/bin/x86_64-pc-linux-gnu-addr2line -e vmlinux -a ffff...

2018-07-02 09:38:38 701

原创 linux prctl系统调用触发IPI

prctl系统调用提供了一系列操作进程的方法。这里主要说明一下PR_SET_SECCOMP参数是如何触发IPI的。seccomp 是 secure computing 的缩写,是 Linux kernel 从2.6.23版本引入的一种简洁的沙盒 sandboxing 机制。 在 Linux 系统里,大量的系统调用(system call)直接暴露给用户态程序。但是,通常的程序并不需要所有...

2018-06-29 11:02:15 1409

原创 linux DO_ONCE、Static Keys、jump label和IPI

本文基于linux4.4问题的来源: 研究的起始来源与发现linux4.4内核在x86机器上text_poke_bp函数会向每个在线cpu发送IPI,执行do_sync_core动作。 虽然do_sync_core只是在每个cpu上执行一下简单的CPUID指令,但毕竟会触发中断,打断当前进程,对系统确定性造成影响。 下面主要分析下这个IPI的来龙去脉。一种分支判断优化方法: 要说明...

2018-06-28 16:46:30 962 1

转载 linux jump lable

越来越多的工作现如今都交给了编译器,甚至连动态代码修改的数据组织这种事都交给了编译器。gcc提供了一个特性用于嵌入式汇编,那就是asm goto,其实这个特性没有什么神秘之处,就是在嵌入式汇编中go to到c代码的label,其最简单的用法如下(来自gcc的文档): int frob(int x) { int y; asm goto (“frob %%r5, %1; jc ...

2018-06-27 15:38:38 1464

原创 linux 透明巨页khugepaged 后台进程分析

简介: 透明巨页Transparent Hugepage 可以代替以前的hugetlbfs方式。 相关说明可以参考内核Documentation\vm\transhuge.txt文档。khugepaged : khugepaged 是透明巨页的守护进程,它的主要功能是定时唤醒,根据配置尝试将4k 的普通page转成2M等巨页,减少TLB压力,提高内存使用效率。 khugepaged的处...

2018-06-26 14:14:28 11076

转载 x86 tlb

x86_64上的TLB普通模式Global Pages当CR3寄存器被修改时,TLB就被flush掉;然而有些经常使用的或则比较关键的pages不想被flush,则可以通过标识为global pages来实现;更改CR3寄存器只flush非global的pages;TLB管理INVLPG用来无效掉某个TLB项,包括标识为gobal的项;修改CR3可以flush除gl...

2018-06-26 10:52:13 907

转载 x86 cr0 cr1 cr3

状态和控制寄存器组除了EFLAGS、EIP ,还有四个32位的控制寄存器,它们是CR0,CR1,CR2和CR3。这几个寄存器中保存全局性和任务无关的机器状态。CR0中包含了6个预定义标志,0位是保护允许位PE(Protedted Enable),用于启动保护模式,如果PE位置1,则保护模式启动,如果PE=0,则在实模式下运行。1位是监控协处理位MP(Moniter coprocessor)...

2018-06-26 10:48:23 326

转载 阿里内核月报集合

https://yq.aliyun.com/articles/96423?spm=a2c4e.11153940.blogcont96534.14.1e7d218bP0SCaB

2018-06-25 16:40:28 1173

转载 kernel如何保证cache数据一致性

在嵌入式系统中,cache位于CPU与DDR之间,是一段SRAM,读写性能远高于DDR,利用cache line提供了预取功能,平衡CPU与DDR之间的性能差异,提高系统的性能。据我了解,ARM/PPC/MIPS三款主流嵌入式处理器都是软件管理cache,即有专门的指令来进行cache操作,如PPC的iccci icbi,ARM的CP15协处理器也提供对cache的操作。cache的操作有...

2018-05-28 10:17:55 1030

转载 阿里linux内核月报201405-06

The initial kGraft submission 长久以来,重启操作系统来安装一个内核补丁一直是一个烦人的事情。很多时候,重启系统的时机会受到其他条件的限制。此外,用户则更希望能够在不重启系统的情况下完成内核补丁的安装工作。2008年为了迎合这一需求Ksplice诞生了。但它并没有被合并进主线内核,甚至在Oracle收购其后便消失在Linux开源社区的视线内了。最近其他一些解决方案陆续...

2018-05-22 10:24:45 440

转载 阿里linux内核月报201412

Live kernel patching on track for 3.20 运行时间敏感的用户一直以来都很希望有一种方法可以在不重启系统的情况下对运行的操作系统内核打补丁。目前有几个还没有进入主线内核的实现(比如:kpatch, Kgraft)。很明显,这些实现不可能全部进入upstream内核。从最近Jiri Kosina发出的一组补丁来看, 内核热升级补丁的开发似乎又向前迈进了一步,kpa...

2018-05-22 10:23:27 519

转载 阿里linux内核月报201503

Virtual filesystem layer changes, past and future LSF/MM 2015峰会上,虚拟文件系统也吸引了足够的目光。LSF/MM 2015峰会上,虚拟文件系统也吸引了足够的目光。 首先是一些需要继续期待的变化。一个是替代mount()系统调用的工作,Al做了一些但是还没能发出来review。另一个是revoke()系统调用,也只有框架。进展比较...

2018-05-22 10:22:29 514

转载 阿里linux内核月报2014-07-08

Capsicum for Linux Capsicum: 一种基于文件句柄的新安全模型 Capsicum是一种源自FreeBSD的安全模型,与Linux下众多LSM的相同之处在于它们都是基于权限管理的,而不同之处在于LSM针对的操作对象非常丰富,有进程、VMA、端口、带有标签的文件等等,而Capsicum操作的对象非常单一:文件句柄。例如,一个fd必须带有CAP_READ才能被读取,必须带有C...

2018-05-22 10:21:16 1021

转载 阿里linux内核月报201703

目前Linux内核急需的一项功能是在线打补丁的特性。此前被Oracle收购的ksplice一度是Linux上唯一的解决方案。但是在被Oracle收购后,ksplice就闭源了,并且成为了Oracle Linux的一项商业特性。而目前可以拿到的最新版本的ksplice仍然仅仅停留在0.19上,而可以直接使用的内核版本则是2.6.26。对于更新的内核版本则还无法使用。在目前的实际生产环境中,不论是...

2018-05-22 10:18:03 819

转载 阿里linux内核月报201701

Controlling access to the memory cache 控制对Cache的访问 cpu对内存的访问一直以来都会通过L1/L2/L3缓存来加速,我们都知道当你打算严肃地去考察性能问题时,各级缓存的命中率一直是一个重要的指标。而一个进程的缓存命中率在很大程度上又和它在各级缓存中所占的空间大小正相关。由于缓存本身是socket范围上的共享资源,一个进程的缓存命中率不仅取决于它自...

2018-05-22 10:15:53 329

转载 阿里linux内核月报201705

A report from Netconf: Day 1 本文是2017年4月3日Netconf会议报告。主要的议题是:移除ndo_select_queue()函数,对于refcount_t类型引入开关,TC重定向导致内核陷入循环等。移除ndo_select_queue() ndo_select_queue()函数是大家首先讨论的,它被用来决定往网络接口发送数据包的时间和方式。主要的争...

2018-05-22 10:11:43 740

转载 阿里linux内核月报201704

Gregg: perf sched for Linux CPU scheduler analysis 随着 Linux 4.10 perf sched timehist 新特性的推出,Linux 的 perf 工具又增加了一个新的 CPU 调度器性能分析的子命令。perf sched timehist 可以按照调度事件表示调度延迟,其中包括了重要的调度相关的时间信息:任务等待被唤醒的...

2018-05-22 10:10:36 743

转载 阿里linux内核月报201702

The future of the page cache 持久化内存用得越来越多, 促使了内核的一系列变更, 内核是否还真的需要页面缓存呢? 在2017 linux.conf.au会上, Matthew Wilcox先是纠正了数年前的一个错误,然后表示, 我们不仅需要页面缓存,还要将他的作用将进一步得到提升。他从他作为微软员工的时候开始讲起,以前他以为不会提及这个。 然后进入主题,内容如下,...

2018-05-22 10:09:44 783

原创 linux x86 性能调试记录

频率 urbostat是intel针对自己的x86 CPU,做的一个CPU频率、能耗监控的用户态程序,位于linux代码的tools/power/x86/turbostat目录下,编译也很简单,可以直接在这个目录下make,就生成二进制文件了。这个工具在监控cpu运行频率方面有很大用途。cache伪共享 当应用在 NUMA 环境中运行,或者应用是多线程的,又或者是多进程间有共享内存,满...

2018-05-17 16:05:48 747

面向汽车电子OS的模型驱动开发方法的研究与实现.kdh

面向汽车电子OS的模型驱动开发方法的研究与实现,介绍了模型驱动开发的方式。。。。。。。。。。。。。。。。

2020-09-01

SmPL语法文档说明

SmPL语法详细文档 形式化验证 可用于Coccinelle 规则编写

2019-03-04

gnuplot5.2 官方文档

gnuplot5.2 的官方文档,详细描述了gnuplot的使用方法,各种参数说明。 画图必备

2018-05-17

yocto 2018 年最新官方完整pdf文档

yocto 2018 年最新官方完整pdf文档 624页 内容非常详细

2018-01-27

系统虚拟化 原理与实现

intel开源中心 系统虚拟化 原理与实现 x86虚拟化工程师必备

2017-12-23

Linux insides

半官方的,干货满满的linux教程,作者的视角比较高,非常清晰简明的介绍了Linux各种设计,强烈推荐和Linux有关的开发人员阅读。

2017-12-22

intel-100-series-chipset-datasheet

intel-100-series-chipset 芯片手册。包含了了skylake系列。

2017-12-22

tensorflow官方中文手册

google推出的第二代机器学习框架,非常好用。官方中文手册。

2016-12-10

深入理解MySQL核心技术

深入理解MySQL核心技术 Understanding.Mysql.Internals.Apr.2007

2011-06-04

空空如也

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

TA关注的人

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