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]Uniform Grid Panel
Uniform Grid Panel:统一大小网格 一.如果不设置子控件的Row和Column值,就跟Overlay容器一样的重叠. 二.选中Uniform Grid Panel,可以设置其内的子控件 ...
- Go语言 函数,工程管理
Go语言 函数,工程管理 1.无参无返回值函数的使用 package main import "fmt" func main() { // 无参无返回值函数的调用:函数名() fu ...
- Linux下安装与卸载anaconda
安装:到安装文件夹的目录下输入 bash Anaconda3-4.1.1-Linux-x86_64.sh 卸载:输入
- SSL&HTTPS简单介绍
这篇是最近看SSL和HTTPS的一个简单性总结,其中内容大部分都是参考网络上的内容,自己归纳整理了下. SSL介绍 HTTPS介绍 HTTP请求数据工作流程: l 用户在浏览器中输入网址,并告诉浏览 ...
- nonlocal和global
获取变量时遵循LEGB原则,修改变量时需要global/nonlocal进行修改 global # global的使用 函数外定义了全局变量: global关键字在函数内会修改全局变量 函数外没定义全 ...
- mono_image_open_from_data_with_name原型
mono4.5 https://github.com/Unity-Technologies/mono 查看mono源码: //PATH: /mono/metadata/image.c MonoImag ...
- CSS中可以继承和不能继承的属性
一.无继承性的属性 1.display:规定元素应该生成的框的类型 2.文本属性: vertical-align:垂直文本对齐 text-decoration:规定添加到文本的装饰 text-shad ...
- Can't create handler inside thread that has not called Looper.prepare()
Looper.prepare(); // Can't create handler inside thread that has not called Looper.prepare(). Toast. ...
- solr7.1.0学习笔记(10)---Solr发布到Tomcat
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/weixin_39082031/article/details/79069554 将solr作为一个单 ...
- three.js学习:三维空间下的直线
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...