cyclictest 簡介

来源:http://www.cnblogs.com/linhaostudy/archive/2017/11/02/7772265.html
-Advertisement-
Play Games

1. cyclictest 簡介以及安裝 1.1 cyclictest 簡介 cyclictest 是什麼? 看名字應該就能大致猜出來它是一種 test 程式,Cyclictest的維基主頁這麼介紹它“Cyclictest is a high resolution test program, wri ...


1. cyclictest 簡介以及安裝

 

1.1 cyclictest 簡介

      cyclictest 是什麼? 看名字應該就能大致猜出來它是一種 test 程式,Cyclictest的維基主頁這麼介紹它“Cyclictest is a high resolution test program, written by User:Tglx, maintained by User:Clark Williams ”,也就是它是一個高精度的測試程式,Cyclictest 是 rt-tests 下的一個測試工具,也是rt-tests 下使用最廣泛的測試工具,一般主要用來測試使用內核的延遲,從而判斷內核的實時性。

1.2 cyclictest 安裝

1.2.1 基於包管理軟體安裝

Debian / Ubuntu 系統下可以直接使用apt-get install rt-tests 來安裝cyclictest。

1.2.2 git 倉庫源碼安裝

      使用Linux最大的好處就是我們可以下載軟體的源碼,學習、編譯以及使用,所以如果使用上述方法直接安裝使用,如果你覺得有的問題不懂或者出現問題你也沒辦法解決,所以從開發者的角度而言,下載安裝軟體還是下載源碼包編譯後使用比較好。

(1) 首先拷貝cyclictest的Git 倉庫

#  git clone git://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rt-tests.git

(2) 進入git倉庫

#  cd rt-tests 

(3)創建一個分支,比如我們起名叫testing

#  git branch testing    

(4)轉到testing分支,之後我們做的步驟都不會對主分支有影響,這是我們在電腦上使用 git 倉庫的常用方法

#  git checkout testing  

(5)查看我們當前在哪個分支

#  git branch     

  master
* testing

(6)在次我們使用make編譯

#  make         

編譯時我們會遇到缺失numa.h 的錯誤提示,在此我建議童鞋們安裝使用apt-file 來解決此類錯誤(有了apt-file,遇到這類錯誤我們就知道如何解決而不是一味的上網找別人的解決方法),主要步驟如下:
    #  sudo apt-get install apt-file                   // 安裝apt-file
    #  apt-file update                                      // 類似於apt-get ,apt-file也需要根據系統配的源來更新一個庫
    #  apt-file search numa.h                         // 使用apt-file search 搜索我們缺失的文件

libhwloc-dev: /usr/include/hwloc/linux-libnuma.h         
libnuma-dev: /usr/include/numa.h                                // 在搜索到的結果中,我們發現這個包叫做 libnuma-dev 應該就是我們需要安裝的包
linux-headers-3.2.0-4-amd64: /usr/src/linux-headers-3.2.0-4-amd64/include/config/acpi/numa.h
linux-headers-3.2.0-4-amd64: /usr/src/linux-headers-3.2.0-4-amd64/include/config/amd/numa.h

.... 
    #  apt-get install libnuma-dev                   // 使用apt-get 安裝libnuma-dev 包

 

 

 

2. cyclictest 的使用及參數簡介

對於Cyclictest的使用我們得先瞭解它的各個參數的含義,所以在你開始使用之前,請你看一下 cyclictest --help 中提到的各個參數!這將對你使用有很大的幫助。

2.1 cyclictest的簡單使用及結果分析

如果你只是想玩玩這個工具,那麼對於維基主頁上提到的tglx 使用的測試命令來測測你的電腦性能:

#  sudo ./cyclictest -t1 -p 80 -n -i 10000 -l 10000

註:在rt-tests的路徑下,我們可以使用 ./cyclictest 來運行cyclictest, 而在別的目錄下,我們就需要指定 cyclictest的路徑來使用,比如說 /home/long/rt-tests/cyclictest ,或者你也可以直接將 rt-tests的路徑下的 cyclictest 拷貝到 /bin/ 下,以後就可以直接使用 cyclictest 而不需要指定路徑了!!

比如在我的電腦上,我使用這個命令測試的結果如下:

# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 0.38 0.29 0.26 1/381 5595    

T: 0 ( 5592) P:80 I:10000 C:  10000 Min:      2 Act:   15 Avg:   15 Max:     195

輸出結果含義:
T: 0 序號為0的線程
P: 0 線程優先順序為0
C: 9397 計數器。線程的時間間隔每達到一次,計數器加1
I: 1000 時間間隔為1000微秒(us)
Min: 最小延時(us)
Act: 最近一次的延時(us)
Avg:平均延時(us)
Max: 最大延時(us)

所以我們當前的機器上最小延時為2,平均為15,最大的為 195。

$uname -a               // 我們可以使用 “ uname -a ” 看到我們系統目前使用的內核版本
Linux wheezy 3.2.51-trace #8 SMP Thu Nov 21 12:34:04 CST 2013 x86_64 GNU/Linux

$ cat /boot/config-3.2.51-trace |grep CONFIG_PREEMPT_RT    // 我們再打開 /boot 下麵的當前內核的config信息查看目前這個內核是否打上實時補丁,結果顯示並沒有。所以在一個普通的內核下測的 Min:      2 Act:   15 Avg:   15 Max:     195 這樣的數據算是不錯的了!

$ cat /boot/config-3.10.17-trace-rt12 |grep CONFIG_PREEMPT_RT    // 而在我 /boot 目錄下的另外一個打好實時補丁的內核中
CONFIG_PREEMPT_RT_BASE=y
# CONFIG_PREEMPT_RTB is not set
CONFIG_PREEMPT_RT_FULL=y             // 判斷一個內核是否是實時內核,請看config 下有沒有此項

我得到的cyclictest 運行結果是這樣的:  

T: 0 ( 5592) P:80 I:10000 C:  10000 Min:      1 Act:  1 Avg:   2 Max:     9

:-),運行的結果有目共睹,在以後的博客中我會介紹關於Linux 內核的實時補丁。

 

2.2 cyclictest 的參數介紹 

      關於cyclictest 的各個參數具體含義建議大家還是用時間具體看看 cyclictest --help 的信息(參考資料【2】為我的師兄對--help下的每個參數的解釋,大家也可以看看!)我這隻介紹幾個常用的。 -p PRIO --prio=PRIO       最高優先順序線程的優先順序  使用時方法為: -p 90 /  --prio=90
-m       --mlockall        鎖定當前和將來的記憶體分配
-c CLOCK --clock=CLOCK     選擇時鐘  cyclictest -c 1
                           0 = CLOCK_MONOTONIC (預設)
                           1 = CLOCK_REALTIME
-i INTV  --interval=INTV  基本線程間隔,預設為1000(單位為us),下麵介紹原理的時候會提到
-l LOOPS --loops=LOOPS     迴圈的個數,預設為0(無窮個),與 -i 間隔數結合可大致算出整個測試的時間,比如 -i 1000  -l 1000000 ,總的迴圈時間為1000*1000000=1000000000 us =1000s ,所以大致為16分鐘多。
-n       --nanosleep       使用 clock_nanosleep
-h  HISTNUM    --histogram=US    在執行完後在標準輸出設備上畫出延遲的直方圖(很多線程有相同的許可權)US為最大的跟蹤時間限制,這個在下麵介紹實例時可以用到,結合gnuplot 可以畫出我們測試的結果圖。
                       
-q       --quiet         使用-q 參數運行時不列印信息,只在退出時列印概要內容,結合-h HISTNUM參數會在退出時列印HISTNUM 行統計信息以及一個總的概要信息。
-f       --ftrace          ftrace函數跟蹤(通常與-b 配套使用,其實通常使用 -b 即可,不使用 -f )
-b USEC  --breaktrace=USEC 當延時大於USEC指定的值時,發送停止跟蹤。USEC,單位為謬秒(us)。      

2.3 推薦參數以及結果實例

dslab@wheezy:~$ sudo cyclictest -p 90 - m -c 0 -i 200 -n -h 100 -q -l 1000000 我們使用 -p 90給cyclictest 賦優先順序90,使用-m參數鎖定記憶體分配,使用  -c 0指定使用預設的MONOTONIC 時鐘, -i 200 指定一個迴圈為200us,結合 -l 1000000為總共1000000個迴圈,此外-n 為使用nanosleep 而不是簡單的sleep,-q為在運行時不列印即時信息,-h 100 為總共統計100個信息在最後的結果中。 
# /dev/cpu_dma_latency set to 0us ---------------------------------------------------(下麵都是結束測試/終端測試後列印的信息,這就是 -q 的功效!)
# Histogram
000000 000000
000001 111448              -- 延時為1us的在1000000次迴圈中占111448次(下麵每行都是這個意思)
000002 060272
000003 000714
000004 000344
000005 000231
000006 013170
000007 155289
000008 601393
000009 044880
000010 005348
000011 001821
000012 001444
000013 000945
000014 000538
000015 000376
000016 000344
..... 000096 000002
000097 000002
000098 000002
000099 000002              -- 我們使用 -h 100 ,所以在結果中記錄了延時為 0us ~ 99us 的次數
# Total: 000999888
# Min Latencies: 00001       -- 最小延時 1 us
# Avg Latencies: 00006       -- 平均延時 6us
# Max Latencies: 00463      -- 最大延時463 us,那麼我們指定histogram = 100也就是只記錄了0us~99us的值而最大延時為463 也就是說肯定有很多此延時超過99 us,那麼記錄到哪了?答案是,沒有記錄具體的超過99us的延時值,只在下麵記錄了超過99us 的延時次數(記錄在Overflows),以及第幾次超過了(記錄在Thread 0)。
# Histogram Overflows: 00112     -- 超過99 us的次數
# Histogram Overflow at cycle number:
# Thread 0: 02985 06044 06107 08644 08683 12048 18136 30164 33172 33757 36214 48208 54138 58822 61284 83843 83876 86382 92351 92352 96306 108937 108941 111443 117367 129130 129131 146426 155069 155070 159058 161563 171486 184200 186614 209260 211606 221606 223526 223527 234275 234321 236827 241705 241706 246766 266826 296886 321946 334644 336979 337006 359705 367066 384765 392126 412186 437221 442246 462306 472306 484921 487366 497366 507426 509981 512448 512488 522426 542486 567546 587606 610305 617666 635365 637704 637726 660425 672686 692846 710379 710463 717806 735443 737919 742886 760582 763088 767946 785515 785642 788149 793086 806776 808146 810703 813146 835661 835847 838172 # 00012 others  //這裡記錄的是第幾次迴圈的延時超過了99us。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Centos6.5 pxe無人值守安裝 環境: DHCP/TFTP ip:100.10.10.10 FTP/HTTP/NFS ip:100.10.10.10 #yum install dhcp xinetd tftp* syslinux vsftpd httpd nfs-utils ※關閉防火牆,關 ...
  • 參考文檔: 本文簡單介紹smokeping的安裝配置操作。 一.環境 1. OS Server:10.11.4.250/CentOS-7-x86_64-1511 2. Smokeping版本 smokeping-2.6.11:http://oss.oetiker.ch/smokeping/pub/s ...
  • 同步首發:http://www.yuanrengu.com/index.php/20171112.html 一.GitLab簡介 GitLab是利用Ruby On Rails開發的一個開源版本管理系統,實現了一個自托管的Git項目倉庫,是集代碼托管,測試,部署於一體的開源git倉庫管理軟體,可通過w ...
  • IP地址分類: IP地址根據首首位元組開始位可以分為5大類: 分類 首位元組開始位 首位元組數字範圍 網路地址格式 最大網路個數 每個網路最多主機個數 A 0 0~127 網路 主機 主機 主機 127 16777214 B 10 128~191 網路 網路 主機 主機 16384 65534 C 110 ...
  • 近期使用ASP.NET Core2.0對博客進行了重寫,在部署到伺服器時遇到了一些問題,來記錄一下留用。 配置環境 安裝 .Net Framework3.5 在IIS管理器上直接開啟,這裡總是失敗,上網上找了找,發現了可以使用命令行安裝,打開PowerShell,依次執行: ​ ​ ​ 執行完就安裝 ...
  • 先停止docker服務 設置阿裡加速器 看到“Daemon has completed initialization”執行結果就表示配置完成。 重啟docker服務 然後再去打鏡像,速度無比快。。。 End ...
  • 一、準備 環境:centos6.8 nginx:1.13.6 二、開始 首先安裝依賴包: yum install -y gcc gcc-c++ autoconf automake make zlib zlib-devel openssl openssl-devel pcre pcre-devel 開 ...
  • 為何創建此腳本是因為方便項目的佈署,不需要手動地去同步不同的項目,而只需要簡單的執行shell腳本,輸入項目名就能發佈到服器上。 1、shell文件代碼 2、關鍵字解釋: name表示要同步的文件名 --exculde="node_modules"表示過濾的文件夾 --progress 顯示文件同 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...