rngd随机数性能问题的解决办法

标签: | 发表时间:2023-06-05 17:13 | 作者:
出处:https://bbs.huaweicloud.com

【问题描述】

某产品应用模块在ARM平台上测试时,应用处理业务性能处理表现变差了一些,后台环境上也发现rngd服务进程占用较高,高峰时甚至达到单CPU 100%。

01.jpg

【原因分析】

该模块业务代码运行中大量使用了随机数(调用/dev/random获取),会消耗系统随机数熵池。

01.jpg

/dev/random产生随机数的原理是利用当前系统的熵池(random pool)来计算出固定一定数量的随机比特,然后将这些比特作为字节流返回。如果随机池数据太少,则调用/dev/random会阻塞,等待随机池数据被填充。

而rngd系统服务的作用是负责动态补充该熵池资源,从测试环境问题情况来看,很有可能由于业务对随机数大量获取,导致rngd服务过载,性能成为瓶颈,从而反过来拖慢了业务的运行。

  01.jpg
【rngd对比测试】

(1)X86下测试rngd随机数性能,1000个随机数,耗时15秒:

01.jpg

 (2)ARM下测试rngd随机数性能,1000个随机数,耗时36秒:

  01.jpg

可以看到,在使用rngd服务补充熵池情况下,随机数产生的速度并不快,同时在ARM平台上比X86表现更差一些。因此rngd自身性能不足(高占用CPU),是此问题的主要原因。

 

【解决方法】

改用haveged服务来替代rngd,haveged有更好的性能(并低占用CPU)。

1、停用rngd

     systemctl stop rngd

     systemctl disable rngd

2、下载安装haveged

     wget https://download-ib01.fedoraproject.org/pub/epel/7/aarch64/Packages/h/haveged-1.9.1-1.el7.aarch64.rpm

     rpm -ivh haveged-1.9.1-1.el7.aarch64.rpm

3、启用haveged

     systemctl enable haveged

     systemctl start haveged

 

再次测试随机数的产生,耗时大大的缩短:

01.jpg

 随机数的获取加快,业务处理的性能也达到了预期,问题解决。

 

附-【关于随机数性能-滴池检查】

1、查看系统熵池的容量:cat /proc/sys/kernel/random/poolsize      // 默认4096

2、查看从熵池中读取熵的阀值:cat /proc/sys/kernel/random/read_wakeup_threshold

3、查看当前系统熵池中拥有的熵数: cat /proc/sys/kernel/random/entropy_avail (当entropy_avail中的值少于read_wakeup_threshold阀值,这时读取/dev/random会被阻塞)

相关 [rngd 随机数 性能] 推荐:

rngd随机数性能问题的解决办法

- -
某产品应用模块在ARM平台上测试时,应用处理业务性能处理表现变差了一些,后台环境上也发现rngd服务进程占用较高,高峰时甚至达到单CPU 100%. 该模块业务代码运行中大量使用了随机数(调用/dev/random获取),会消耗系统随机数熵池. /dev/random产生随机数的原理是利用当前系统的熵池(random pool)来计算出固定一定数量的随机比特,然后将这些比特作为字节流返回.

随机数原理

- - 崔永键的博客
.Net 创建随机数常用的方法:. C/C++中创建随机数的方法:. 以上随机数的生成原理,基本上是下面这种思路:. 比如,我使用线性同余法来自己生成随机数.      int next = (seed * 29 + 37) % 1000;  //线性同余法. 线性同余法:第n+1个数=(第n个数*29+37) % 1000.

Java随机数使用实例总结

- - ITeye博客
Java中提供了好几个类,可以让我们方便的实现随机数等功能,这些类有 java.util.Random, java.util.UUID 以及JDK 7 新引入的 java.util.concurrent.ThreadLocalRandom等. 本文将通过这些类对平时使用的实例进行简单的总结,这些实例的功能大致可以分成四个方面:.

物理学家用激光和钻石创造真随机数

- ArmadilloCommander - Solidot
加拿大渥太华的物理学家Ben Sussman利用激光脉冲和钻石创造了真随机数. 用真随机数编码的信息将难以被黑客破解. Sussman的实验室使用持续几万亿分之一秒的激光脉冲照射钻石,激光进入和出来的方向发生了变化. Sussman称改变与量子真空涨落的相互作用有关,量子力学与大多数物理学法则不同,不可能知道真正发生了什么.

MySQL 性能

- - 谁主沉浮
这里罗列了一些基本的 MySQL 性能提示,但不是放之四海而皆准,需要根据实际的应用情况而决定. 使用标准化设计(数据库三范式),记住表的联合查询(join)性能不会差. 选择合适的字符集,虽然UTF16无所不能,但需要两倍的存储;UTF8适合各种字符,但比latin1慢,尽可能选用latin1(此条不适合中文).

性能监控

- - 互联网 - ITeye博客
一旦你的服务器是在控制台模式下运行,你就可以开始我们接下来的内容. iostat  iostat 命令用来显示存储子系统的详细信息,通常用它来监控磁盘 I/O 的情况. 要特别注意 iostat 统计结果中的 %iowait 值,太大了表明你的系统存储子系统性能低下. meminfo 和 free  Meminfo 可让你获取内存的详细信息,你可以使用 cat 和 grep 命令来显示 meminfo 信息: 1 cat /proc/meminfo  另外你可以使用 free 命令来显示动态的内存使用信息,free 只是给你大概的内存信息,而 meminfo 提供的信息更加详细.

高性能mysql 之 性能剖析

- - 数据库 - ITeye博客
1 定义性能优化 mysql服务器性能,此处定义为 响应时间. 在解释性能优化之前,先来消除一个误解,很多人认为,性能优化就是降低cpu的利用率或者减少对资源的使用. 资源时用来消耗并用来工作的,所以有时候消耗更多的资源能够加快查询速度,保持cpu忙绿,这是必要的. 很多时候发现 编译进了新版本的InnoDB之后,cpu利用率上升的很厉害,这并不代表性能出现了问题.

MySQL性能优化

- sun - IT程序员面试网
在笔试面试中,尤其是像百度,淘宝这些数据量非常大,而且用LAMP架构的公司,数据库优化方面就显得特别重要了. 此外,除了数据库索引之外,在LAMP结果如此流行的今天,数据库(尤其是MySQL)性能优化也是海量数据处理的一个热点. 下面就结合自己的经验,聊一聊MySQL数据库优化的几个方面. 首先,在数据库设计的时候,要能够充分的利用索引带来的性能提升,至于如何建立索引,建立什么样的索引,在哪些字段上建立索引,上面已经讲的很清楚了,这里不在赘述.

HBase性能调优

- - 学着站在巨人的肩膀上
我们经常看到一些文章吹嘘某产品如何如何快,如何如何强,而自己测试时却不如描述的一些数据. 其实原因可能在于你还不是真正理解其内部结构,对于其性能调优方法不够了解. 本文转自TaoBao的Ken Wu同学的博客,是目前看到比较完整的HBase调优文章. 原文链接:HBase性能调优. 因官方Book Performance Tuning部分章节没有按配置项进行索引,不能达到快速查阅的效果.

mongodb性能测试

- - 数据库 - ITeye博客
1) Mongodb的非安全插入方式,在一开始插入性能是非常高的,但是在达到了两千万条数据之后性能骤减,这个时候恰巧是服务器24G内存基本占满的时候(随着测试的进行mongodb不断占据内存,一直到操作系统的内存全部占满),也就是说Mongodb的内存映射方式,使得数据全部在内存中的时候速度飞快,当部分数据需要换出到磁盘上之后,性能下降很厉害.