鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 网站安全 > 加密解密 > >

Printk 是否会影响系统效率?

来源:互联网 作者:佚名 时间:2015-09-08 11:06
在CSDN上找到了一个帖子,贴出来, 顺着他的思路往下走走; #################################################### 机子环境:虚拟机LINUX下,CPU赛扬R2.6GHZ,单核,虚拟机内存256MB。 一个加密程序,最终版,加密或解密速度只能达到1MB/S,于是……K掉AES


在CSDN上找到了一个帖子,贴出来,

顺着他的思路往下走走;

####################################################

机子环境:虚拟机LINUX下,CPU赛扬R2.6GHZ,单核,虚拟机内存256MB。

一个加密程序,最终版,加密或解密速度只能达到1MB/S,于是……K掉AES加密模块,速度飙到6.8MB/S,可谓神速,可是好像还不够,怀疑是分块大小过小,分块块数过多,于是,从16字节每块加大到256字节每块,测试。。6.8MB/S,看来与分块大小无关,是自加密模块(自己设计的加密模块)影响的?K掉之,测试速度8.0MB/S,速度提升不明显,再怎么测也是这个速度了,于是,看着两个printf语句(用来显示进度的)不顺眼,K掉之,测试,测速飙到16.8MB/S,可谓神速了。从来没考虑过的printf调试语句竟然对程序的效率影响如此之大,震撼,于是写下来。如果哪个顺便做优化了,可以参考下。

#####################################################################

上面### 这段是我引用的帖子里面的文字,

下面的code是我找到的另外一个同学些的可以用来做linux驱动时间差的一个调用小函数,精简,实用,贴出来,方便自己今后使用;


# int tmp;  
# struct timeval stime,etime;  
# if(BTime == 0)  
# {  
#     do_gettimeofday(&stime);  
#     BTime = 1;  
# }  
#               
# XXXXXXXXXXX                       
#   
# if(wc->BTime == 1)  
# {  
#     do_gettimeofday(&etime);  
#     tmp = (etime.tv_sec - stime.tv_sec)*1000000 + (etime.tv_usec - stime.tv_usec);  //tmp即为时间差  
#     BTime = 0;  
# }  
# printk(" Timer is %d us\n",tmp);  


在MTK的平台上,我添加了一些log;需要包含头文件;

#include <linux/time.h>否则编译不过;




编译完,之后放到手机上,开机,用adb 抓取了一下log;


可以看到,我们的这一条printk 用了795 us,也就是0.795 ms;


一条log的占用系统时间还是挺长的,不知道N条之后会对系统的CPU有什么影响呢?



用printk,内核会根据日志级别,可能把消息打印到当前控制台上,这个控制台通常是一个字符模式的终端、一个串口打印机或是一个并口打印机。

这些消息正常输出的前提是──日志输出级别小于console_loglevel(在内核中数字越小优先级越高)。


没有指定日志级别的printk语句默认采用的级别是 DEFAULT_ MESSAGE_LOGLEVEL(这个默认级别一般为<4>,即与KERN_WARNING在一个级别上),

其定义在linux26/kernel/printk.c中可以找到


日志级别一共有8个级别,printk的日志级别定义如下(在include/linux/kernel.h中):
#define KERN_EMERG 0/*紧急事件消息,系统崩溃之前提示,表示系统不可用*/


#define KERN_ALERT 1/*报告消息,表示必须立即采取措施*/


#define KERN_CRIT 2/*临界条件,通常涉及严重的硬件或软件操作失败*/


#define KERN_ERR 3/*错误条件,驱动程序常用KERN_ERR来报告硬件的错误*/


#define KERN_WARNING 4/*警告条件,对可能出现问题的情况进行警告*/


#define KERN_NOTICE 5/*正常但又重要的条件,用于提醒*/


#define KERN_INFO 6/*提示信息,如驱动程序启动时,打印硬件信息*/


#define KERN_DEBUG 7/*调试级别的消息*/


通过读写/proc/sys/kernel/printk文件可读取和修改控制台的日志级别。查看这个文件的方法如下:

#cat /proc/sys/kernel/printk

6   4  1 7

上面显示的4个数据分别对应控制台日志级别、默认的消息日志级别、最低的控制台日志级别和默认的控制台日志级别。


可用下面的命令设置当前日志级别:


# echo 8 > /proc/sys/kernel/printk





需要高人来指点了;

先研究到这里。今后有发现在深入补充;


 


网友评论
<