在编写内核模块的过程中,我们经常会创建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循环:

   INIT_HLIST_HEAD( C+ i);

在初始化C之后,

下面,怎么确定一个hash桶的元素已经被使用呢?常见的做法是:

1.在A的结构中维护一个标志,确定是否使用,通过遍历数组A,来找这个标志。

2.维护一个A的使用情况的链表,如freelist,里面有所有free的数组下标,这个一般和hash_head的数组放一块。

这些标准做法,在内核中都很常见,但是如果数组结构体比较大,遍历的时候,缓存被污染的概率就大了(数组结构体越大,则步长越大,访问的地址很可能就变成稀疏模型了),而此时如果数组元素个数不太多,比如只有几百上千的话,可以使用一个小技巧,

就是 find_first_zero_bit,有兴趣的同学可以 对比下,效率比前面描述的两种方法要高一些。

linux很多设计都非常精巧,多看大师的代码,取其精华,既要明白代码的原理,又要明白这些写的场景,受益匪浅。

linux 一种小的性能优化手段的更多相关文章

  1. 微信小程序性能优化技巧

    摘要: 如果小程序不够快,还要它干嘛? 原文:微信小程序性能优化方案--让你的小程序如此丝滑 作者:杜俊成要好好学习 Fundebug经授权转载,版权归原作者所有. 微信小程序如果想要优化性能,有关键 ...

  2. Windows五种IO模型性能分析和Linux五种IO模型性能分析

    Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...

  3. 微信小程序性能优化之一

    性能优化 界面和业务逻辑之间事件交互小程序调用nativeNative回调小程序 图片源文件优化 渲染优化 ---------------------------------------------- ...

  4. Linux五种IO模型性能分析

    1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步:       所谓同步,就是在发出一个功能调用时, ...

  5. 前端性能优化的另一种方式——HTTP2.0

    最近在读一本书叫<web性能权威指南>谷歌公司高性能团队核心成员的权威之作. 一直听说HTTP2.0,对此也仅仅是耳闻,没有具体研读过,这次正好有两个篇章,分别讲HTTP1.1和HTTP2 ...

  6. JAVA性能优化的五种方式

    一,JAVA性能优化之设计优化 设计优化处于性能优化手段的上层.它往往须要在软件开发之前进行.在软件开发之前,系统架构师应该就评估系统可能存在的各种潜在问题和技术难点,并给出合理的设计方案,因为软件设 ...

  7. ubifs性能优化分析

    本文通过分析ubifs的mount.read.write和commit流程,挖掘ubifs背后的设计决策和性能优化手段,并结合自身产品的特点,给出一些读写性能改进方案.   1.     ubifs  ...

  8. MySql学习(七) —— 查询性能优化 深入理解MySql如何执行查询

    本篇深入了解查询优化和服务器的内部机制,了解MySql如何执行特定查询,从中也可以知道如何更改查询执行计划,当我们深入理解MySql如何真正地执行查询,明白高效和低效的真正含义,在实际应用中就能扬长避 ...

  9. [转] 钉钉的H5性能优化方案

    对于一个H5的产品,功能无疑很重要,但是性能同样是用户体验中不可或缺的一环.原本H5的渲染性能就不及native的app,如果不把性能优化做起来,将极大地影响用户使用产品的积极性. 用户感受 当用户能 ...

随机推荐

  1. sqlserver 模糊查询,连表,聚合函数,分组

    use StudentManageDB go select StudentName,StudentAddress from Students where StudentAddress like '天津 ...

  2. 矩阵半正定: positive semidefinite

    具体定义:https://en.wikipedia.org/wiki/Positive-definite_matrix

  3. Install Greenplum OSS on Ubuntu

    About Greenplum Database Greenplum Database is an MPP SQL Database based on PostgreSQL.  Its used in ...

  4. 阿里云发送短信验证码php_SDK

    1.登录阿里云账号下载——aliyun-dysms-php-sdk(我使用的php版本) 下载地址:https://help.aliyun.com/document_detail/55359.html ...

  5. Heartbeat+DRBD+MFS高可用

    Heartbeat+DRBD+MFS高可用. 前言:MFS系统简介 组件名称及作用 管理服务器(Managing Server)   简称Master Server 这个组件的角色是管理整个mfs文件 ...

  6. 二、Html5元素、属性、格式化

  7. JIRA敏捷sprint需求统计设置

    1.JIRA->My Dashboard ->添加它的过滤条件 2.过滤条件产生,将sql拷贝至步骤1编辑的JQL中

  8. 6、申请发布(Distribution)证书和描述文件

    发布(Production)证书用于正式发布环境下使用,用于提交到Appstore审核发布. 申请发布(Production)证书 在“Certificates, Identifiers & ...

  9. 浏览器预览office文件(word,Excel,等)

    提示:预览是通过后台转pdf到前台展示的过程,当然网上也有购买的api 举个栗子:(http://www.officeweb365.com/) <!DOCTYPE html> <ht ...

  10. raw格式和qcow2格式

    Raw: "raw" 镜像格式是最最简单的,并且是被 KVM 和 Xen 原生支持的格式,你 可以想象裸格式镜像和块设备文件是二进制位相当的,就好像从块设备拷 贝过来的,比方说,使 ...