本篇內(nèi)容主要講解“怎么讓linux變?yōu)閷?shí)時(shí)操作系統(tǒng)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“怎么讓linux變?yōu)閷?shí)時(shí)操作系統(tǒng)”吧!
成都創(chuàng)新互聯(lián)公司主營(yíng)紹興網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,App定制開發(fā),紹興h5重慶小程序開發(fā)搭建,紹興網(wǎng)站營(yíng)銷推廣歡迎紹興等地區(qū)企業(yè)咨詢
實(shí)時(shí)性是指調(diào)度的時(shí)候,任務(wù)響應(yīng)時(shí)間。windows一般是15ms,最大的問(wèn)題是不能保證。比如平均值是1ms,但是隨著系統(tǒng)負(fù)載的變化,有時(shí)甚至達(dá)到100ms,在這工業(yè)上是無(wú)法使用的。工業(yè)上一些應(yīng)用要求必須有更高的時(shí)間精度,比如,一個(gè)電力監(jiān)測(cè)系統(tǒng)必須在10ms內(nèi)運(yùn)行一次任務(wù)對(duì)電力運(yùn)行狀況進(jìn)行監(jiān)測(cè),一旦時(shí)間不準(zhǔn),調(diào)度不到該程序運(yùn)行,則無(wú)法保證對(duì)電力故障的及時(shí)響應(yīng)。
PREEMPT_RT是Linux內(nèi)核的一個(gè)實(shí)時(shí)補(bǔ)丁。得到Linus的高度評(píng)價(jià):
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
這兩個(gè)國(guó)內(nèi)的可以看一下,速度比較快。
patch在https://rt.wiki.kernel.org/index.php/Main_Page 下載,與linux內(nèi)核的版本號(hào)一定要一樣。
1.解壓內(nèi)核源碼
2.打patch
3.編譯linux內(nèi)核并安裝
tar xzvf linux-4.4.138.tar.gz
cd linux-4.4.138
patch -p1 < ../patch-4.4.138-rt65.patch
make menuconfig需要安裝這個(gè)libncurses-dev模塊
編譯內(nèi)核需要libssl-dev模塊
sudo apt-get install libncurses-dev
sudo apt-get install libssl-dev
配置linux內(nèi)核
make menuconfig
選擇Processor type and feature —> Fully Preemptible Kernel (RT)這個(gè)選項(xiàng),具體路徑如下圖。保存。
編譯內(nèi)核,再安裝,更新grub.
編譯時(shí)加上 INSTALL_MOD_STRIP=1 可以生成沒(méi)有調(diào)試信息的模塊,大大減小內(nèi)核的大小。
make -j2
#sudo make modules_install -j2
#這一條命令生成的內(nèi)核含有調(diào)試信息非常大,因此要使用INSTALL_MOD_STRIP選項(xiàng)
sudo make INSTALL_MOD_STRIP=1 modules_install
sudo make install -j2
sudo update-grub2
重啟后會(huì)多一個(gè) linux-4.4.138-rt 的啟動(dòng)選項(xiàng)。
sudo apt-get install rt-tests
安裝這個(gè)工具,運(yùn)行cyclictest程序進(jìn)行實(shí)時(shí)性測(cè)試:
sudo cyclictest -t 5 -p 80 -n
注釋: 運(yùn)行五個(gè)線程,線程優(yōu)先級(jí)為80,無(wú)限循環(huán)
cyclictest運(yùn)行結(jié)果詳解:
T: 0 序號(hào)為0的線程
P: 0 線程優(yōu)先級(jí)為0
C: 9397 計(jì)數(shù)器。線程的時(shí)間間隔每達(dá)到一次,計(jì)數(shù)器加1
I: 1000 時(shí)間間隔為1000微秒(us)
Min: 最小延時(shí)(us)
Act: 最近一次的延時(shí)(us)
Avg:平均延時(shí)(us)
Max: 最大延時(shí)(us)
測(cè)試結(jié)果示例:
1.實(shí)體機(jī)測(cè)試結(jié)果
# /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.虛擬機(jī)測(cè)試結(jié)果
在虛擬機(jī)中效果一般,受主機(jī)的限制太大。
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.也可以進(jìn)行多次運(yùn)行并統(tǒng)計(jì)結(jié)果
sudo cyclictest -l10000000 -m -n -t1 -p99 -i2 -h200
-l10000000 :指定1千萬(wàn)循環(huán),
-m :鎖定當(dāng)前和將來(lái)的內(nèi)存分配,
-n :指定使用 clock_nanosleep,
-t1 :指定開一個(gè)線程進(jìn)行測(cè)試,
-p99 :指定最高優(yōu)先級(jí),
-i2 :指定基本線程間隔,單位是us,此處是2us,
-h200 :指定統(tǒng)計(jì)結(jié)果的分布情況。
程序20秒執(zhí)行結(jié)束,輸出顯示平均延時(shí)1 us,最大延時(shí)15 us,通過(guò)直方分布圖察看,大多集中在1-7 us以內(nèi)。
# /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.總結(jié)
實(shí)時(shí)性補(bǔ)丁能夠較好地滿足我們的需求(1ms),實(shí)現(xiàn)較強(qiáng)的實(shí)時(shí)性。
到此,相信大家對(duì)“怎么讓linux變?yōu)閷?shí)時(shí)操作系統(tǒng)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!