嵌入式Linux中文站

Fedora 33开始测试切换到Btrfs

阅读(172)

尽管距离 Fedora 的下一个稳定版本(Fedora 33)还有几个月的距离,但仍有一些值得关注的变化。在所有其他 Fedora 33 接受的系统范围的更改中,最有趣的提议是将 Btrfs 作为桌面的默认文件系统,这个提议现在已经被批准了。 尽管距离 Fedora 的下一个稳定版本(Fedora 33)还有几个月的距离,但仍有一些值得关注的变化。 在所有其他Fedora 33 接受的系统范围的更改中,最有趣的提议是将 Btrfs 作为桌面的默认文件系统,这个提议现在已经被批准了。 这是 Fedora 对

Cache一致性协议之MESI

阅读(362)

Cache一致性协议之MESI 处理器上有一套完整的协议,来保证Cache一致性。比较经典的Cache一致性协议当属MESI协议,奔腾处理器有使用它,很多其他的处理器都是使用它的变种。 单核Cache中每个Cache line有2个标志:dirty和valid标志,它们很好的描述了Cache和Memory(内存)之间的数据关系(数据是否有效,数据是否被修改),而在多核处理器中,多个核会共享一些数据,MESI协议就包含了描述共享的状态。 在MESI协议中,每个Cache line有4个状态,可用2个bit表

cpu 乱序执行与问题

阅读(262)

CPU执行乱序是一个常见的话题,鉴于自己一直对这个概念存在些许理解的差池,故今日写一篇文章留作备忘。注,这里仅仅讨论CPU执行乱序,不涉及编译器的乱序。 1.CPU 为什么会乱序? 本质原因是CPU为了效率,将长费时的操作异步执行,排在后面的指令不等前面的指令执行完毕就开始执行后面的指令。而且允许排在前面的长费时指令后于排在后面的指令执行完。 如在 CPU0 上执行下面两句话: a = 1; b = 2; 在以下情况下 b=2 会先于 a=1 执行完:a 没有缓存于 CPU0 的 cache 上,而 b

系统调用之时间开销

阅读(271)

一个程序使用系统调用的次数会很大程度上影响系统的性能,因为在执行系统时,会从用户代码切换执行内核代码,然后返回用户代码。优化手段就是尽量减少系统调用。一下实验用来验证系统会付出巨大d呃开支,所用时间与电脑配置、所用的系统的内核有关,故在不同的电脑或同一电脑的不同系统上会有一些差异,但是结果一定是相同的。 本人使用的系统是Mac OS X 10.8.3。 1.首先我们建立一个约1Mb的文件(file.in)用于测试。建立代码如下,当然方法有很多这只是其中的一种。 #include stdio.h #incl

Pinctrl子系统之一了解基础概念

阅读(290)

1.Linux Pinctrl子系统简介 在许多soc内部都包含有pin控制器,通过pin控制器的寄存器,我们可以配置一个或者一组引脚的功能和特性。在软件方面,Linux内核提供了pinctrl子系统,目的是为了统一各soc厂商的pin脚管理。 2.Linux Pinctrl子系统提供的功能 (1)管理系统中所有的可以控制的pin,在系统初始化的时候,枚举所有可以控制的pin,并标识这些pin。 (2)管理这些pin的复用(Multiplexing)。对于SOC而言,其引脚除了配置成普通的GPIO之外,若

Linux下用火焰图进行性能分析

阅读(323)

软件的性能分析, 往往需要查看 CPU 耗时, 了解瓶颈在哪里. 火焰图(flame graph) 是性能分析的利器 1 火焰图简介 很多人感冒发烧的时候, 往往会模仿神农氏尝百草的路子: 先尝尝抗病毒的药, 再试试抗细菌的药, 甭管家里有什么药挨个试, 什么中药西药, 瞎猫总会碰上死耗子, 如此做法自然是不可取的, 正确的做法应该是去医院验个血, 确诊后再对症下药. 让我们回想一下我们一般是如何调试程序的 : 通常是在没有数据的情况下依靠主观臆断来瞎蒙, 而不是考虑问题到底是什么引起的! 毫无疑问, 调

valgrind简介以及在ARM上交叉编译运行

阅读(342)

Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。 Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-OReilly开源代码奖。 Valgrind遵守GNU通用公共许可证条款,是一款自由软件。 关于valgrind的具体使用网上有很多。这里记录一下在ARM上的交叉编译及使用过程中的一些问题。 1、下载及编译准备 wget http://valgrind.org/downloads/valgrind-3

Linux下内存泄漏工具

阅读(545)

概述 内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,在大型的、复杂的应用程序中,内存泄漏是常见的问题。当以前分配的一片内存不再需要使用或无法访问时,但是却并没有释放它,这时就出现了内存泄漏。尽管优秀的编程实践可以确保最少的泄漏,但是根据经验,当使用大量的函数对相同的内存块进行处理时,很可能会出现内存泄漏。 内存泄露可以分为以下几类: 1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。 2. 偶发性内存泄漏。发生内存泄