[发明专利]高争用环境下的细粒度锁设计方法在审
申请号: | 201910532372.1 | 申请日: | 2019-06-19 |
公开(公告)号: | CN110413260A | 公开(公告)日: | 2019-11-05 |
发明(设计)人: | 张举武 | 申请(专利权)人: | 四川长虹电器股份有限公司 |
主分类号: | G06F8/20 | 分类号: | G06F8/20 |
代理公司: | 成都虹桥专利事务所(普通合伙) 51124 | 代理人: | 郝迎宾 |
地址: | 621000 四*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 争用 细粒度 集合 存储 引用 原语 技术方案要点 独立线程 环境提供 死锁检测 提升性能 同步操作 定位锁 最大化 创建 分段 唤醒 保存 淘汰 优化 维护 | ||
1.高争用环境下的细粒度锁设计方法,其特征在于,包括如下步骤:
步骤1、采用Java原语实现基础锁机制;
步骤2、进行Key存储;
步骤3、对Key进行hash分段;
步骤4、维护两个集合分别来存储强引用锁和弱引用锁;
步骤5、对集合大小进行限制,并采用LRU算法进行淘汰;
步骤6、计算hash值,未在segment中找到时,创建锁,保存hash值到segment,集合中存入该锁,然后执行同步操作;
步骤7、先定位锁,然后执行唤醒操作;
步骤8、创建独立线程进行死锁检测。
2.根据权利要求1所述的高争用环境下的细粒度锁设计方法,其特征在于,步骤2中,使用Memory或Cache或DataBase或FileSystem进行Key存储。
3.根据权利要求1所述的高争用环境下的细粒度锁设计方法,其特征在于,步骤3具体包括如下步骤:
步骤301、实现Lock类增加入参调整锁分段粒度以及锁引用类型;
步骤302、维护一个segment容器来存放存储对象的hash值,和锁对象的存储下标;
步骤303、根据传入的粒度来调整hash mask,进而调整分段的大小实现hash分段。
4.根据权利要求3所述的高争用环境下的细粒度锁设计方法,其特征在于,步骤303中,所述传入的粒度范围为1~100。
5.根据权利要求1所述的高争用环境下的细粒度锁设计方法,其特征在于,步骤5具体包括如下步骤:
步骤501、Key第一次被访问,加入到访问历史列表;
步骤502、如果数据在访问历史列表里后没有达到K次,则按照一定规则淘汰;
步骤503、当访问历史队列中的数据访问次数达到K次,将数据索引从历史队列删除,将数据移到缓存队列中,并缓存此数据,缓存队列重新按照时间排序;
步骤504、缓存数据队列中被再次访问后,重新排序;
步骤505、需要淘汰数据时,淘汰缓存队列中排在末尾的数据,即:淘汰倒数第K次访问离现在最久的数据。
6.根据权利要求5所述的高争用环境下的细粒度锁设计方法,其特征在于,步骤502、503及步骤505中,所述K为规定次数,并且为正整数。
7.根据权利要求1所述的高争用环境下的细粒度锁设计方法,其特征在于,步骤6中,通过lock和/或tryLock计算hash值。
8.根据权利要求1所述的高争用环境下的细粒度锁设计方法,其特征在于,步骤7中,通过notify实现定位锁。
9.根据权利要求1所述的高争用环境下的细粒度锁设计方法,其特征在于,步骤8具体包括如下步骤:
步骤801、创建Normal级别的khungtaskd内核线程,在死循环中每隔sysctl_hung_task_timeout_secs时间后check一下,用schedule_timeout定时;
步骤802、调用do_each_thread,while_each_thread宏遍历所有的进程信息,并检查最近切换次数和task计算是否一致,并根据sysctl_hung_task_panic开关决定是否重启;
步骤803、通过cpu_callback函数调用watchdog_enable,在每个CPU core上创建SCHED_FIFO级别的实时线程watchdog,其中使用了hrtimer定时器,控制检查周期;
步骤804、hrtimer定时器调用watchdog_timer_fn进行检查,如果watchdog_timer_fn发现出危险值,则根据开关进行panic处理。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于四川长虹电器股份有限公司,未经四川长虹电器股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910532372.1/1.html,转载请声明来源钻瓜专利网。