1. 程式人生 > >linux核心日誌及printk結構淺析

linux核心日誌及printk結構淺析

   在除錯的時候,有時某些部分可能printk會產生大量輸出, 導致系統無法正常工作,並可能使系統日誌ring buffer溢位(舊的資訊被快速覆蓋)。特別地,當使用一個慢速控制檯裝置(如串列埠), 過量輸出也能拖慢系統。這樣反而難於發現系統出問題的地方。所以你應當非常注意:正常操作時不應當列印任何東西,列印的輸出應當是指示需要注意的異常,並小心不要做過頭。

   在某些情況下, 最好的做法是設定一個標誌變量表示:已經列印過這個了,以後不再列印任何這個資訊。而對於列印速率的控制核心已經提供了一個現成的巨集:
  1. #define printk_ratelimit() __printk_ratelimit(
    __func__)

     這個函式應當在你認為列印一個可能會出現大量重複的訊息之前呼叫,如果這個函式返回非零值, 繼續列印你的訊息, 否則跳過它。典型的呼叫如這樣:

  1. if (printk_ratelimit())
  2.     printk(KERN_NOTICE "The printer is still on fire\n");
printk_ratelimit通過跟蹤發向控制檯的訊息的數量和時間來工作。當輸出超過一個限度, printk_ratelimit 開始返回 0 使訊息被丟棄。我們可以通過修改 :
  1. /proc/sys/kern/printk_ratelimit( 可以看作一個監測週期,在這個週期內只能發出下面的控制量的資訊) 
  2. /proc/sys/kernel/printk_ratelimit_burst(以上週期內的最大訊息數,如果超過了printk_ratelimit()返回0)
來控制訊息的輸出.

相關推薦

linux核心日誌printk結構淺析

   在除錯的時候,有時某些部分可能printk會產生大量輸出, 導致系統無法正常工作,並可能使系統日誌ring buffer溢位(舊的資訊被快速覆蓋)。特別地,當使用一個慢速控制檯裝置(如串列埠), 過量輸出也能拖慢系統。這樣反而難於發現系統出問題的地方。所以你應當非常注意:正常操作時不應當列印任何東西

[kernel]內核日誌printk結構分析

守護 col 預處理 編譯 errno inf war 環形緩沖 -i 一直都知道內核printk分級機制,但是沒有去了解過,前段時間和一個同事聊到開機啟動打印太多,只需要設置一下等級即可;另外今天看驅動源碼,也看到類似於Printk(KERN_ERR "....")的打印

Linux系統日誌日誌分析

決定 director 註意 負責 ins 傳輸 模塊 進程id 例如 Linux系統擁有非常靈活和強大的日誌功能,可以保存幾乎所有的操作記錄,並可以從中檢索出我們需要的信息。大部分Linux發行版默認的日誌守護進程為 syslog,位於 /etc/syslog 或 /et

Linux 核心分析應用

編輯推薦 本書分模組介紹了 Linux 作業系統的核心設計和實現,針對關鍵概念、演算法和資料結構做了重點的講解。同時,對諸多經典應用程式進行了剖析,如 Nginx、Memcached、Redis、LVS 等,講解如何利用作業系統提供的底層支援進行合理的應用設計和實現。 內容簡介 本書由架構師親

[原始碼和文件分享]Linux核心編譯新增系統呼叫

1 總體設計思路 系統呼叫的本質是呼叫核心函式,以核心態執行程式。為了在核心態下執行,本實驗針對Linux的核心進行修改,增加自定義系統呼叫函式實現使用者態程式對任意程序的nice值進行修改或者讀取來進行測試。 2 主要函式的介面設計 核心態程式 SYSCALL_DEFINE3

作業系統實驗一:linux核心編譯新增系統呼叫

編譯環境 VMWare Ubuntu Desktop Ubuntu 18.04.1映象下載地址:點我下載 裝ubuntu很簡單,網上教程一大堆,記憶體分配多點。 新增系統呼叫步驟 解壓linux核心 想辦法,把上面的linux核心弄到ubuntu裡面,可

作業系統課程設計(一):linux核心編譯新增系統呼叫

1.實驗目的 通過實驗,熟悉Linux作業系統的使用,掌握構建與啟動Linux核心的方法;掌握使用者程式如何利用系統呼叫與作業系統核心實現通訊的方法,加深對系統呼叫機制的理解;進一步掌握如何向作業系統核心增加新的系統呼叫的方法,以擴充套件作業系統的功能。 2.實

4.Linux核心設計與實現 P31---淺析程序終結關鍵do_exit(轉)

程序在退出時,必須釋放它所擁有的資源,並通過某種方式告訴父程序。程序的退出一般是顯示或隱式地呼叫了eixt(),或者接受了某種訊號。不過什麼原因退出,最終都呼叫了do_exit。用於程序退出的系統呼叫有兩個exit和exit_group,exit只是終止某個程序,而exit_group整個執行緒中的程序。它們

Linux服務日誌訪問控制

1、rsyslog 事件:系統引導啟動、應用程式啟動、應用程式尤其是服務類應用程式執行過程中的一些事件; 系統日誌服務: syslog(syslogd: system,klogd:kernel) 事件格式較為簡單時,可統一由syslog進行記錄: 事件產生的日期時間,主機,程序[pi

Linux核心編譯CentOS系統安裝

1、程式包的編譯安裝 命令:./configure, make, make install (1)./configure:檢查編譯環境的依賴關係,並設定編譯引數; (2)make:編譯過程,make不是編譯工具,而是專案構建工具,其呼叫各所需的編譯工具執行編譯操作; (3)make

Linux核心架構核心裁剪

Linux系統分為核心空間和使用者空間;使用者空間主要包括:使用者應用程式和基本的庫檔案核心空間主要包括:                        系統呼叫介面SCI:系統封裝給使用者空間的應用函式呼叫介面                        程序管理PM:管

編譯適配小米2S的CM Linux核心原始碼問題解決

1. 下載核心原始碼 首先進入CM官網與小米2S相關的頁面: http://wiki.cyanogenmod.org/w/Aries_Info 在頁面中可以找到Kernel後面的連結: http://www.github.com/cyanogenmod/android_kerne

工作流--JBPM核心服務結構

一、使用JBPM開發工作流的一般流程 1.jBPM的執行需要資料庫的支援,因此係統設計時要選定所用資料庫。只要是Hibernate支援的資料庫,jBPM就支援。資料庫的初始化可以由jBPM自動完成,也可以通過ant generate.ddl任務生成SQL語句,在jBPM外部自己建立所需的表。 2.使

Linux核心——遍歷 net_device 結構

linux核心版本 : 2.6.32<=(這個更早的也許就已經這樣了,具體是從哪個版本開始的,我沒有考證,需要在今後,發現後及時補充。) extern struct net *init_net; /* 存放net_device的全域性變數 */ extern rwl

Linux 核心除錯之 printk

問題描述:最近這兩天再除錯 platform 驅動,程式老是有點小問題,得不到自己想要的結果,突然意識到核心除錯重要性,重新整理一下 printk 基本用法。核心通過 printk() 輸出相關資訊

Linux核心工程導論——資料結構:樹

樹 樹作為一種很常用的資料結構,主要包括二叉搜尋數(BST)、多路搜尋樹(B-樹)、B樹根據葉子節點樹分為二叉樹和多叉樹。根據左右節點是否高度上對稱,分為平衡樹和非平衡樹,平衡樹的一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡樹。簡單的說

Linux核心工程導論——資料結構:連結串列與雜湊

         scatterlist table由於可以被拼接(chain),不同的scatterlist如果所指向的記憶體是相鄰的還可以被合併,所以其遍歷格外複雜。1.4 llistllist全稱是Lock-less NULL terminated single linked list,意思是不需要加鎖

Linux核心列印函式printk的使用說明

printk函式        We used the printk function in earlier chapters with the simplifying assumption that it works like printf. Now it's time to introduce some 

linux核心搶佔配置

1.使用者空間的應用程式,通過系統呼叫,進入核心空間。這個時候使用者空間的程序要傳遞很多變數、引數的值給核心,核心態執行的時候也要儲存使用者程序的一些暫存器值、變數等。所謂的“程序上下文”,可以看作是使用者程序傳遞給核心的這些引數以及核心要儲存的那一整套的變數和暫存器值和當時的環境等。 2.硬體通過觸發

Linux核心日誌開關

Linux核心日誌開關 1、讓pr_debug能輸出 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -59,7 +59,7 @@ /* We show everything that is