您好,登錄后才能下訂單哦!
本篇內容主要講解“怎么讓linux變為實時操作系統”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么讓linux變為實時操作系統”吧!
實時性是指調度的時候,任務響應時間。windows一般是15ms,最大的問題是不能保證。比如平均值是1ms,但是隨著系統負載的變化,有時甚至達到100ms,在這工業上是無法使用的。工業上一些應用要求必須有更高的時間精度,比如,一個電力監測系統必須在10ms內運行一次任務對電力運行狀況進行監測,一旦時間不準,調度不到該程序運行,則無法保證對電力故障的及時響應。
PREEMPT_RT是Linux內核的一個實時補丁。得到Linus的高度評價:
Controlling a laser with Linux is crazy, but everyone in this room is crazy in his own way. So if you want to use Linux to control an industrial welding laser, I have no problem with your using PREEMPT_RT." -- Linus Torvalds
這兩個國內的可以看一下,速度比較快。
patch在https://rt.wiki.kernel.org/index.php/Main_Page 下載,與linux內核的版本號一定要一樣。
1.解壓內核源碼
2.打patch
3.編譯linux內核并安裝
tar xzvf linux-4.4.138.tar.gz
cd linux-4.4.138
patch -p1 < ../patch-4.4.138-rt65.patch
make menuconfig需要安裝這個libncurses-dev模塊
編譯內核需要libssl-dev模塊
sudo apt-get install libncurses-dev
sudo apt-get install libssl-dev
配置linux內核
make menuconfig
選擇Processor type and feature —> Fully Preemptible Kernel (RT)這個選項,具體路徑如下圖。保存。
編譯內核,再安裝,更新grub.
編譯時加上 INSTALL_MOD_STRIP=1 可以生成沒有調試信息的模塊,大大減小內核的大小。
make -j2
<span class="hljs-comment">#sudo make modules_install -j2</span>
<span class="hljs-comment">#這一條命令生成的內核含有調試信息非常大,因此要使用INSTALL_MOD_STRIP選項</span>
sudo make INSTALL_MOD_STRIP=1 modules_install
sudo make install -j2
sudo update-grub2
重啟后會多一個 linux-4.4.138-rt 的啟動選項。
sudo apt-get install rt-tests
安裝這個工具,運行cyclictest程序進行實時性測試:
sudo cyclictest -t 5 -p 80 -n
注釋: 運行五個線程,線程優先級為80,無限循環
cyclictest運行結果詳解:
T: 0 序號為0的線程
P: 0 線程優先級為0
C: 9397 計數器。線程的時間間隔每達到一次,計數器加1
I: 1000 時間間隔為1000微秒(us)
Min: 最小延時(us)
Act: 最近一次的延時(us)
Avg:平均延時(us)
Max: 最大延時(us)
測試結果示例:
1.實體機測試結果
# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 0.13 0.06 0.02 1/244 19255
T: 0 (18989) P:80 I:1000 C: 155947 Min: 1 Act: 1 Avg: 1 Max: 17
T: 1 (18990) P:80 I:1500 C: 103964 Min: 1 Act: 1 Avg: 1 Max: 15
T: 2 (18991) P:80 I:2000 C: 77973 Min: 1 Act: 1 Avg: 1 Max: 7
T: 3 (18992) P:80 I:2500 C: 62378 Min: 1 Act: 1 Avg: 1 Max: 10
T: 4 (18993) P:80 I:3000 C: 51982 Min: 1 Act: 1 Avg: 1 Max: 7
2.虛擬機測試結果
在虛擬機中效果一般,受主機的限制太大。
my@ubuntu:~/rt/linux-4.4.138$ sudo cyclictest -p 80 -t5 -n
# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 0.69 0.19 0.07 1/726 5825
T: 0 ( 5821) P:80 I:1000 C: 8168 Min: 7 Act: 445 Avg: 327 Max: 7005
T: 1 ( 5822) P:80 I:1500 C: 5455 Min: 7 Act: 411 Avg: 319 Max: 7516
T: 2 ( 5823) P:80 I:2000 C: 4098 Min: 14 Act: 174 Avg: 320 Max: 2362
T: 3 ( 5824) P:80 I:2500 C: 3275 Min: 5 Act: 52 Avg: 319 Max: 6940
T: 4 ( 5825) P:80 I:3000 C: 2732 Min: 8 Act: 214 Avg: 299 Max: 5198
3.也可以進行多次運行并統計結果
sudo cyclictest -l10000000 -m -n -t1 -p99 -i2 -h200
-l10000000 :指定1千萬循環,
-m :鎖定當前和將來的內存分配,
-n :指定使用 clock_nanosleep,
-t1 :指定開一個線程進行測試,
-p99 :指定最高優先級,
-i2 :指定基本線程間隔,單位是us,此處是2us,
-h200 :指定統計結果的分布情況。
程序20秒執行結束,輸出顯示平均延時1 us,最大延時15 us,通過直方分布圖察看,大多集中在1-7 us以內。
# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 0.36 0.33 0.28 1/246 32690
T: 0 (32688) P:99 I:2 C:10000000 Min: 0 Act: 2 Avg: 1 Max: 15
# Histogram
000000 000051
000001 6635143
000002 3352561
000003 008966
000004 002414
000005 000648
000006 000180
000007 000025
000008 000002
000009 000001
000010 000000
000011 000000
000012 000001
000013 000001
000014 000006
000015 000001
…………(中間都是0,省略)
000097 000000
000098 000000
000099 000000
# Total: 010000000
# Min Latencies: 00000
# Avg Latencies: 00001
# Max Latencies: 00009
# Histogram Overflows: 00000
# Histogram Overflow at cycle number:
# Thread 0:
6.總結
實時性補丁能夠較好地滿足我們的需求(1ms),實現較強的實時性。
到此,相信大家對“怎么讓linux變為實時操作系統”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。