msm8994 热插拔sim卡导致modem重新启动的流程

作者:lover713814 发布于:2015-5-28 15:23

本文分析了msm8994 热插拔sim卡导致modem重新启动的流程,希望对大家有所帮助。

阅读全文>>

评论(3) 浏览(18007)

Linux内核同步机制之(五):Read/Write spin lock

作者:linuxer 发布于:2015-5-22 18:38 分类:内核同步机制

在有了强大的spin lock之后,为何还会有rw spin lock呢?无他,仅仅是为了增加内核的并发,从而增加性能而已。spin lock严格的限制只有一个thread可以进入临界区,但是实际中,有些对共享资源的访问可以严格区分读和写的,这时候,其实多个读的thread进入 临界区是OK的,使用spin lock则限制一个读thread进入,从而导致性能的下降。

本文主要描述RW spin lock的工作原理及其实现。需要说明的是Linux内核同步机制之(四):spin lock是本文的基础,请先阅读该文档以便保证阅读的畅顺。

阅读全文>>

标签: rw spinlock

评论(7) 浏览(28096)

Linux时间子系统之(十四):tick broadcast framework

作者:linuxer 发布于:2015-5-21 19:26 分类:时间子系统

在内核中,有cpuidle framework可以控制cpu的节电:当没有进程调度到该cpu上执行的时候,swapper进程粉墨登场,将该cpu会被推入到idle状态。当然 CPU的idle状态有深有浅,当CPU睡的比较深入的时候,有可能会关闭本地的timer硬件。这样就会引入一个很有意思的问题:local timer将无法唤醒CPU,该cpu上的所有的software timer将无法唤醒cpu。tick broadcast framework就是用来解决这个问题的。

本文中的代码来自linux kernel 4.0。

阅读全文>>

标签: framework tick broadcast

评论(37) 浏览(30201)

Linux下“用户空间修改设备寄存器或者物理内存”的实现

作者:wowo 发布于:2015-5-15 11:21 分类:软件开发

底层开发过程中,经常需要在终端查看或者修改设备寄存器的值,busybox有一个工具----devmem,可用于读取或者修改物理寄存器的值,非常方便。

但它有一个不足的地方:不能连续操作物理内存(虽然这很危险,但在显示相关的调试中,如果能向指定的物理内存加载一个图片,或者dump指定物理内存的内容,还是很方便的),因此我重新写了一些代码,实现如下功能。

阅读全文>>

标签: devmem

评论(20) 浏览(25830)

关于内核中的乘法和除法。

作者:heziq 发布于:2015-5-6 22:02

前几天一直在看wowo的时间子系统,一直在思索mult和shift变量,为什么mult要尽量大,shift尽量小。这是由c语言的整数算术运算决定的。

cyn* mult > shift  在不考虑溢出的情况下,cyn * mult没有误差,右移shift有误差,损失小数。

但是如果cyn > shift * mult 在不考虑溢出的情况下,误差就会被放大。

10* 12 / 8 = 15

10 / 8 * 12 = 12

10 除以 8 = 1, 舍弃0.25 , 0.25 * 12 = 3. 可以看出乘法部分的误差被夸大12倍。

mult / shift 的比值越大越好,计算的值越精确。shift如果是1,就没有误差,如果shift是10,那么就只能精确到十位。

 

表达不好哈,不善于利用数学公式证明。我说的都是整数运算,不考虑浮点数。

 

总结两点:

内核中做运算

1,尽量做加减法,少做乘除法,尽量用移位做乘除法。这样运算速度快。

2,做乘除法的时候,先算乘法,最后做除法,乘法的时候注意溢出。

3,在特殊的情况下,被除数和除数的比值要尽量大,这样计算误差才会小。

评论(1) 浏览(13656)

Linux CPU core的电源管理(1)_概述

作者:wowo 发布于:2015-4-30 21:20 分类:电源管理子系统

在SMP(Symmetric Multi-Processing)流行起来之前的很长一段时间,Linux kernel的电源管理工作主要集中在外部设备上,和CPU core相关的,顶多就是CPU idle。但随着SMP的普及,一个系统中可用的CPU core越来越多,这些core的频率越来越高,处理能力越来越强,功耗也越来越大。因此,CPU core有关的电源管理,在系统设计中就成为必不可少的一环,与此有关的思考包括:

对消费者(一些专业应用除外)而言,这种暴增的处理能力,是一种极大的浪费,他们很少(或者从不)有如此高的性能需求。但商家对此却永远乐此不疲,原因无外乎:

1)硬件成本越来越低。

2)营销的噱头。

3)软件设计者的不思进取(臃肿的Android就是典型的例子),导致软件效率低下,硬件资源浪费严重。以至于优化几行代码的难度,甚至比增加几个cpu核还困难。

在这种背景下,CPU core的电源管理逻辑,就非常直接了:根据系统的负荷,关闭“多余的CPU性能”,在满足用户需求的前提下,尽可能的降低CPU的功耗。但CPU的控制粒度不可能无限小,目前主要从两个角度实现CPU core的电源管理功能:

1)在SMP系统中,动态的关闭或者打开CPU core(本文重点介绍的功能)。

2)CPU运行过程中,动态的调整CPU core的电压和频率(将在其它文章中单独分析)。

本文将以ARM64为例,介绍linux kernel CPU core相关的电源管理设计。

阅读全文>>

标签: Linux PM core cpu

评论(22) 浏览(42402)

kernel启动优化

作者:printk 发布于:2015-4-30 8:42

本文主要讨论和linux kernel启动优化相关的内容,由于老衲技术水平有限,以下梦话可能会有很多漏洞,希望各位大拿发现bug后,以强大的知识理论碾压老衲,让贫僧能在痛苦中疯狂成长。

阅读全文>>

评论(22) 浏览(20994)

蜗窝流量地域统计

作者:linuxer 发布于:2015-4-23 12:39

针对蜗窝的来自各个省份的访问统计,很有意思,大家可以随意感受一下

阅读全文>>

标签: 流量统计

评论(18) 浏览(10180)

Linux内核同步机制之(四):spin lock

作者:linuxer 发布于:2015-4-22 12:22 分类:内核同步机制


在linux kernel的实现中,经常会遇到这样的场景:共享数据被中断上下文和进程上下文访问,该如何保护呢?如果只有进程上下文的访问,那么可以考虑使用 semaphore或者mutex的锁机制,但是现在中断上下文也参和进来,那些可以导致睡眠的lock就不能使用了,这时候,可以考虑使用spin lock。本文主要介绍了linux kernel中的spin lock的原理以及代码实现。由于spin lock是architecture dependent代码,因此,我们在第四章讨论了ARM32和ARM64上的实现细节。

注:本文需要进程和中断处理的基本知识作为支撑。



阅读全文>>

标签: spin lock 自旋锁

评论(126) 浏览(131068)

spin_lock最简单用法。

作者:heziq 发布于:2015-4-17 10:13

最近在思考一个spin_lock的用法,比如在smp系统中,在一个内核控制路径的函数中有一个局部静态变量,对这个局部静态变量有判断,算术运算。那么我们是否要对这个局部静态变量使用spin_lock锁呢?

 

个人意见:需要使用,因为在smp系统中,多个内核控制路径可能同时访问该变量。所谓的共享资源,并不只是多个函数之间共享,在smp系统有可能是自己和自己共享。

 

欢迎大家拍砖。

标签: spin_lock使用

评论(4) 浏览(12387)

Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog