linux 一种小的性能优化手段
在编写内核模块的过程中,我们经常会创建percpu的hash表,比如定义结构如下:
struct A {
int a;
int b;
struct hlist_node hlist_node;-----------------hash node,用来挂载在hash冲突链上的成员
。。。
}
然后定义一个 A[hash桶的大小],在定义一个hlish_head的数组C,用来做数组A的hlist_node的管理头,这个hash之后取相应的hash冲突链的头。一般使用如下方式初始化:
for循环:
在初始化C之后,
下面,怎么确定一个hash桶的元素已经被使用呢?常见的做法是:
1.在A的结构中维护一个标志,确定是否使用,通过遍历数组A,来找这个标志。
2.维护一个A的使用情况的链表,如freelist,里面有所有free的数组下标,这个一般和hash_head的数组放一块。
这些标准做法,在内核中都很常见,但是如果数组结构体比较大,遍历的时候,缓存被污染的概率就大了(数组结构体越大,则步长越大,访问的地址很可能就变成稀疏模型了),而此时如果数组元素个数不太多,比如只有几百上千的话,可以使用一个小技巧,
就是 find_first_zero_bit,有兴趣的同学可以 对比下,效率比前面描述的两种方法要高一些。
linux很多设计都非常精巧,多看大师的代码,取其精华,既要明白代码的原理,又要明白这些写的场景,受益匪浅。
linux 一种小的性能优化手段的更多相关文章
- 微信小程序性能优化技巧
摘要: 如果小程序不够快,还要它干嘛? 原文:微信小程序性能优化方案--让你的小程序如此丝滑 作者:杜俊成要好好学习 Fundebug经授权转载,版权归原作者所有. 微信小程序如果想要优化性能,有关键 ...
- Windows五种IO模型性能分析和Linux五种IO模型性能分析
Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...
- 微信小程序性能优化之一
性能优化 界面和业务逻辑之间事件交互小程序调用nativeNative回调小程序 图片源文件优化 渲染优化 ---------------------------------------------- ...
- Linux五种IO模型性能分析
1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步: 所谓同步,就是在发出一个功能调用时, ...
- 前端性能优化的另一种方式——HTTP2.0
最近在读一本书叫<web性能权威指南>谷歌公司高性能团队核心成员的权威之作. 一直听说HTTP2.0,对此也仅仅是耳闻,没有具体研读过,这次正好有两个篇章,分别讲HTTP1.1和HTTP2 ...
- JAVA性能优化的五种方式
一,JAVA性能优化之设计优化 设计优化处于性能优化手段的上层.它往往须要在软件开发之前进行.在软件开发之前,系统架构师应该就评估系统可能存在的各种潜在问题和技术难点,并给出合理的设计方案,因为软件设 ...
- ubifs性能优化分析
本文通过分析ubifs的mount.read.write和commit流程,挖掘ubifs背后的设计决策和性能优化手段,并结合自身产品的特点,给出一些读写性能改进方案. 1. ubifs ...
- MySql学习(七) —— 查询性能优化 深入理解MySql如何执行查询
本篇深入了解查询优化和服务器的内部机制,了解MySql如何执行特定查询,从中也可以知道如何更改查询执行计划,当我们深入理解MySql如何真正地执行查询,明白高效和低效的真正含义,在实际应用中就能扬长避 ...
- [转] 钉钉的H5性能优化方案
对于一个H5的产品,功能无疑很重要,但是性能同样是用户体验中不可或缺的一环.原本H5的渲染性能就不及native的app,如果不把性能优化做起来,将极大地影响用户使用产品的积极性. 用户感受 当用户能 ...
随机推荐
- [UE4]RPC,远程调用
RPC 一.Remote Procedure Call:远程程序调用 二.一个进程调用另外一个进程上的函数 由于“Server-shoot”方法被标记为“在服务器上运行”,所以尽管是在第二个窗口(客户 ...
- [UE4]结构体
只有数据变量属性,没有函数和事件
- Version 版本定义规则
Version 定义规则:2.3.1012 主版本号: 表示项目的重大架构变更此版本号: 表示较大范围的功能添加和变化增量版本号: 一般表示重大bug修复2.3.1012snapshot 快照al ...
- 用vlan实现同一网段的的各部门之间有的可以通信有的不可以通信
日前老师上课演示一个项目:实现公司同一网段的各个部门之间有的可以通信有的无法通信.我们用的是思科测试软件模拟操作,个人觉得很好用. 在刚开始做这个项目的时候我以为端口是对应的,如图,交换机 ...
- js获取前几天的时间及时间区间
/** * 以startDate为开始日期,计算时隔days天之后 的日期区间 * @param startDate 开始日期 * @param days 时间间隔天数 */ function get ...
- MySQL 中的三中循环 while loop repeat 的基本用法
-- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循 ...
- python学习之----Lambda表达式
Lambda 表达式本质上就是一个函数,可以作为其他函数的变量使用:也就是说,一个函 数不是定义成f(x, y),而是定义成f(g(x), y),或f(g(x), h(x)) 的形式. Beautif ...
- 【Selenium-WebDriver自学】Selenium网格化(十六)
参考链接: http://www.yiibai.com/selenium/selenium_grids.html 命令: cd E:\Yingpu\000.SVNYP\01.个人文件夹\Renqian ...
- tornado项目注意点
大体框架思想 如果你做的项目是偏向中小型的话,MTV或者MVC已经足够支撑起整个项目,而如果你做的项目比较大大话,或者说可能以后的业务量很大的话,那你就需要用到四层架构的思想了,那么我们就各自分析下俩 ...
- C#找出第n到m个素数之间所有之和
static void Main(string[] args) { int n = int.Parse(Console.ReadLine()); //开始的数 int m = int.Parse(Co ...