zoukankan      html  css  js  c++  java
  • printk函数

    如果你不小心, 你会发现自己用 printk 产生了上千条消息, 压倒了控制台并且, 可能地, 使系统日志文件溢出. 当使用一个慢速控制台设备(例如, 一个串口), 过量的消息速率也 能拖慢系统或者只是使它不反应了. 非常难于着手于系统出错的地方, 当控制台不停地输 出数据. 因此, 你应当非常注意你打印什么, 特别在驱动的产品版本以及特别在初始化完 成后. 通常, 产品代码在正常操作时不应当打印任何东西; 打印的输出应当是指示需要注 意的异常情况.

    另一方面, 你可能想发出一个日志消息, 如果你驱动的设备停止工作. 但是你应当小心不 要做过了头. 一个面对失败永远继续的傻瓜进程能产生每秒上千次的尝试; 如果你的驱动 每次都打印"my device is broken", 它可能产生大量的输出, 如果控制台设备慢就有可 能霸占 CPU -- 没有中断用来驱动控制台, 就算是一个串口或者一个行打印机.

    在很多情况下, 最好的做法是设置一个标志说, "我已经抱怨过这个了", 并不打印任何后 来的消息只要这个标志设置着. 然而, 有几个理由偶尔发出一个"设备还是坏的"的提示. 内核已经提供了一个函数帮助这个情况:

    int printk_ratelimit(void);

    这个函数应当在你认为打印一个可能会常常重复的消息之前调用. 如果这个函数返回非零 值, 继续打印你的消息, 否则跳过它. 这样, 典型的调用如这样:

    if (printk_ratelimit())

    printk(KERN_NOTICE "The printer is still on fire ");

    printk_ratelimit 通过跟踪多少消息发向控制台而工作. 当输出级别超过一个限度, printk_ratelimit 开始返回 0 并使消息被扔掉.

    printk_ratelimit 的行为可以通过修改 /proc/sys/kern/printk_ratelimit( 在重新使 能消息前等待的秒数 ) 和 /proc/sys/kernel/printk_ratelimit_burst(限速前可接收的 消息数)来定制.

  • 相关阅读:
    4、现有的命名方式有多少种?请举例说明。
    第二次作业
    第一次作业
    RateLimiter源码
    使用ASM字节码框架实现动态代理
    Java流机制学习
    Java8 Stream 学习总结
    XML实体解析器的作用
    DefaultResouceLoader的设计
    RSA 非对称加密 数字签名 数字证书
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11141513.html
Copyright © 2011-2022 走看看