国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

談一談Linux讓實時/高性能任務獨占CPU的事

系統(tǒng) Linux
本文主要討論在高實時要求、高效能計算、DPDK等領域,Linux如何讓某一個線程排他性獨占CPU;獨占CPU涉及的線程、中斷隔離原理;以及如何在排他性獨占的情況下,甚至讓系統(tǒng)的timer tick也不打斷獨占任務,從而實現(xiàn)最低的延遲抖動。

[[380984]]

本文主要討論在高實時要求、高效能計算、DPDK等領域,Linux如何讓某一個線程排他性獨占CPU;獨占CPU涉及的線程、中斷隔離原理;以及如何在排他性獨占的情況下,甚至讓系統(tǒng)的timer tick也不打斷獨占任務,從而實現(xiàn)最低的延遲抖動。

本文目錄:

1. 工程需求

2. 用戶態(tài)隔離

3. 內(nèi)核態(tài)隔離

3.1 中斷

3.2 內(nèi)核線程

4. 最佳實踐指南

Part 1工程需求

在一個SMP或者NUMA系統(tǒng)中,CPU的數(shù)量大于1。在工程中,我們有時候有一種需求,就是讓某個能夠獨占CPU,這個CPU什么都不做,就只做指定的任務,從而獲得低延遲、高實時的好處。

比如在DPDK中,通過設置

  1. GRUB_CMDLINE_LINUX_DEFAULT=“isolcpus=0-3,5,7” 

隔離CPU0,3,5,7,讓DPDK的任務在運行的時候,其他任務不會和DPDK的任務進行上下文切換,從而保證網(wǎng)絡性能最佳[1]。在Realtime應用場景中,通過isolcpus=2隔離CPU2,然后把實時應用通過taskset綁定到隔離的核:

  1. taskset-c 2 pn_dev 

從而保證低延遲要求[2]。

Part 2用戶態(tài)隔離

這個地方,我們可以看出,它們統(tǒng)一都使用了isolcpus這樣一個啟動參數(shù)。

實踐是檢驗真理的唯一標準,下面我們來啟動一個8核的ARM64系統(tǒng),運行Ubuntu,并指定isolcpus=2這個啟動參數(shù):

系統(tǒng)啟動后,我們運行下面簡單的程序(啟動8個進程運行while死循環(huán)):

我們是8核的,現(xiàn)在又是運行8個進程,所以理論上來講,負載均衡后,8個進程應該均分地運行在8個核上面,但是我們來看看實際的htop結果:

我們發(fā)現(xiàn)3(也就是CPU2)上面的CPU占用率是0.0%。這實證了CPU2已經(jīng)被隔離,用戶空間的進程不能在它上面跑。

當然,這個時候,我們可以通過taskset,強行把其中的一個a.out,綁定到CPU2上面去:

從上面命令的結果看出,663原本的affinity list只有0,1,3-7是沒有2的,而我們強行把它設置為了2,之后再看htop,CPU2上面占用100%:

通過上面的實驗,我們明顯可以看出isolcpus=2使得CPU2上無法再運行用戶空間的進程了(除非手動設置affinity)。

Part 3內(nèi)核態(tài)隔離

中斷

但是,能在CPU2上面運行的,不是只有用戶態(tài)的任務,還可以有內(nèi)核線程、中斷等,那么isolcpus=能否隔離內(nèi)核線程和中斷呢?

對于中斷,我們特別容易查看,就是實際去驗證每個IRQ的smp_affinity就好了:

從上圖明顯可以看出,對于44、47號這種外設的中斷,Linux內(nèi)核把smp_affinity設置為了FB(11111011),明顯避開了CPU2,所以,實際外設中斷也不會在CPU2發(fā)生,除非我們強行給中斷綁核,比如讓44號中斷綁定到CPU2:

  1. echo 2 >/proc/irq/44/smp_affinity_list 

之后,我們發(fā)現(xiàn)44號中斷在CPU2可以發(fā)生:

但是,系統(tǒng)的timer中斷、IPI,由于是Linux系統(tǒng)的運行基石,實際還是要在CPU2上面運行的。這里面最可能給任務帶來延遲抖動的,自然是timer tick。

下面我們重點探討下tick的問題,由于Linux一般情況下,已經(jīng)配置IDLE狀態(tài)的NO_HZ tickless,所以CPU2上面什么都不跑的時候,實際timer中斷幾乎不發(fā)生。

下面,我們還是在isolcpus=2的情況下,運行前面那個8個進程的a.out,默認情況下沒有任務會占用CPU2。通過先后運行幾次cat /proc/interrupts | head 2,我們會看到其他core的timer中斷頻繁發(fā)生,而CPU2幾乎不變,這顯然是IDLE時候的NO_HZ在發(fā)揮省電的作用:

但是,一旦我們放任務到CPU2,哪怕只是放1個,就會發(fā)現(xiàn)CPU2上面的timer中斷開始增加:

這說明一點,哪怕隔離的CPU上面只有一個線程去跑,timer tick就會開始跑,當然,這個timer tick也會頻繁打斷這一個線程,從而造成大量的上下文切換。你肯定會覺得Linux怎么這么傻,既然只有一個人,那也沒有時間片分片的必要,不需要在2個或者多個任務進行時間片劃分地調(diào)度,為啥還要跑tick?其實原因是我們的內(nèi)核默認只是使能了IDLE的NO_HZ:

我們來重新編譯一個內(nèi)核,使能NO_HZ_FULL:

當我們使能了NO_HZ_FULL后,Linux支持在CPU上僅有1個任務的時候,是可以NO_HZ的。但是有2個就傻眼了,所以這個“FULL”也不是真地FULL[3]。這當然也可以理解,因為有2個就涉及到時間片調(diào)度的問題。什么時候應該使能NO_HZ_FULL,內(nèi)核文檔Documentation/timers/no_hz.rst有明確地“指示”,只有在實時和HPC等的場景,才需要,否則默認的NO_HZ_IDLE是你最好的選擇:

我們重新編譯了內(nèi)核,選中了NO_HZ_FULL,下面啟動Linux,注意啟動的時候參數(shù)添加nohz_full=2,讓CPU2支持NO_HZ_FULL:

重新運行CPU2只有一個任務的場景,看看它的timer中斷發(fā)生情況:

發(fā)現(xiàn)CPU2上面的tick穩(wěn)定在188上面,這樣相信你會更加開心,因為你獨占地更加徹底了!

下面,我們再放一個task進去CPU2,有2個任務的情況下,CPU2上面的timer tick開始增加:

不過,這或許不是個問題,因為我們說好了“獨占”,1個任務獨占的時候,timer tick不來打擾,應該已經(jīng)是非常理想的情況了!

內(nèi)核態(tài)線程

內(nèi)核態(tài)的線程其實和用戶態(tài)差不多,當它們沒有綁定到隔離的CPU的時候,是不會跑到隔離CPU運行的。下面用筆者在內(nèi)核里面添加的dma_map_benchmark來做實驗[4],開啟16個內(nèi)核線程來進行DMA map和unmap(注意我們只有8個核):

  1. ./dma_map_benchmark -s 120 -t 16 

我們看到CPU2上面的CPU占用也是0:

內(nèi)核里面的dma_map_benchmark線程在狂占CPU0-1, 3-7,但是就是不去占CPU2:

但是,內(nèi)核線程如果用kthread_bind_mask()類似API把線程綁定到了隔離的CPU,則情況就不一樣了,這就類似用taskset把用戶態(tài)的任務綁定到CPU一樣。

Part 4最佳實踐指南

對于實時性要求高、高性能計算等場景,如果要讓某個任務獨占CPU,最理想的選擇是:

1. 采用isolcpus隔離CPU

2. 將指定任務綁定到隔離CPU

3. 小心意外地把中斷、內(nèi)核線程綁定到了隔離CPU,排查到這些“意外”分子

4. 使能NO_HZ_FULL,則效果更佳,因為連timer tick中斷也不打擾你了。

參考文獻

[1]http://doc.dpdk.org/spp-18.02/setup/performance_opt.html

[2]https://rt-labs.com/docs/p-net/linuxtiming.html

[3]https://lwn.net/Articles/549580/

[4]https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=65789daa80

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7679325702

本文轉(zhuǎn)載自微信公眾號「Linux閱碼場」,可以通過以下二維碼關注。轉(zhuǎn)載本文請聯(lián)系Linux閱碼場公眾號。

 

 

責任編輯:武曉燕 來源: Linux閱碼場
相關推薦

2015-03-27 15:07:55

云計算IaaS平臺Docker

2023-11-01 11:51:08

Linux性能優(yōu)化

2021-11-23 09:45:26

架構系統(tǒng)技術

2024-03-18 13:43:20

Linux架構

2021-02-19 09:19:11

消息隊列場景

2018-08-21 14:42:29

閃存存在問題

2021-07-28 20:12:17

WindowsHeap內(nèi)存

2023-11-01 11:59:13

2022-02-14 22:22:30

單元測試Junit5

2023-11-01 10:38:46

Linux高性能網(wǎng)絡編程

2023-11-01 10:58:31

系統(tǒng)調(diào)用高性能網(wǎng)絡編程Linux

2023-11-01 11:40:46

Linux高性能網(wǎng)絡編程工具

2023-11-01 11:27:10

Linux協(xié)程

2014-07-17 10:11:53

Android LAPI谷歌

2022-07-04 10:51:27

數(shù)據(jù)中臺數(shù)據(jù)倉庫

2022-11-10 08:16:19

java性能服務性能

2021-05-11 08:48:23

React Hooks前端

2017-11-21 14:32:05

容器持久存儲

2016-07-08 13:33:12

云計算

2020-12-04 11:40:53

Linux
點贊
收藏

51CTO技術棧公眾號

欧美久久一二三四区| 最近2019免费中文字幕视频三| 欧美午夜性视频| 99麻豆久久久国产精品免费优播| 国产欧美日韩网站| 国产亚洲一区字幕| av免费在线播放网站| 中文字幕色av一区二区三区| 丝袜美女写真福利视频| 亚洲国产乱码最新视频| chinese偷拍一区二区三区| 日韩一区二区三区免费观看| 中文字幕在线看片| 色哟哟入口国产精品| www.亚洲一二| 久久久综合网| 成人影院免费观看| 亚洲精品久久久久久下一站 | 日本在线丨区| 欧美大黄免费观看| 伊人久久大香| 国产欧美日韩91| 午夜亚洲激情| 男女激情无遮挡| 亚洲人成伊人成综合网小说| 69久久久久| 日韩中文字幕第一页| 国产精品久久久久9999赢消| 在线观看成人av电影| 国产精品短视频| 黄色网在线看| 欧美国产极速在线| 一二三区精品| 天天天干夜夜夜操| 91精品国产一区二区三区蜜臀 | 国际av在线| 中文欧美日本在线资源| 日韩精品欧美| 日韩一级性生活片| 色噜噜狠狠成人中文综合| 黄色在线网站噜噜噜| 国产精品久久久久久久久男 | 一级欧洲+日本+国产| 欧美美女黄色网| 精品欧美aⅴ在线网站| 日本一区二区电影| 动漫美女被爆操久久久| 久久亚洲一区二区三区明星换脸 | free亚洲| 精品亚洲国产成av人片传媒| 精品国产成人| 国产精品50p| 在线不卡免费欧美| 啪啪亚洲精品| 69堂免费视频| 69久久99精品久久久久婷婷| 欧美理伦片在线播放| 精品日韩在线播放| 欧美视频一区二| 日本福利一区| 国产欧美日韩小视频| 欧美日韩另类一区| 欧美亚洲精品在线| 日本成人中文字幕在线| 亚洲欧美三级在线| 日韩天堂av| 最美情侣韩剧在线播放| 久久久久一本一区二区青青蜜月| 国产麻豆精品一区二区| yiren22综合网成人| 欧美一级大片在线观看| 99riav一区二区三区| 黄污视频在线观看| 国产精品swag| 欧美视频免费在线| 美女精品一区最新中文字幕一区二区三区| 毛片在线视频观看| 亚洲国产精品嫩草影院久久| 在线成人国产| 黄色污网站在线免费观看| 欧美激情免费在线| 久久99最新地址| 精油按摩中文字幕久久| 亚洲伦理久久| 在线一区电影| 91日韩视频在线观看| 中文字幕亚洲综合久久筱田步美| 亚洲欧美日韩国产综合精品二区| 色视频在线观看免费| 日韩毛片在线免费观看| 91在线小视频| 国产乱妇无码大片在线观看| 99热在线观看| 欧美黑人国产人伦爽爽爽| av亚洲产国偷v产偷v自拍| 国产精品成熟老女人| 国产成人亚洲精品狼色在线| 岛国av在线网站| 三区精品视频| 欧美一区二区三区日韩| 99成人在线| 超碰公开在线| 精品无码久久久久国产| 欧美一区二区三区婷婷月色| 先锋影音国产一区| 1区2区在线| 亚洲色成人www永久在线观看| 在线看片第一页欧美| 99精品黄色片免费大全| 中文字幕一区日韩精品| gogo人体高清视频| 国产精品一区二区三区免费视频 | 午夜一区二区三区视频| 日韩精品欧美| 国内在线免费高清视频| 国产亚洲精品美女久久久m| 欧美日韩一级片网站| 爽好多水快深点欧美视频| 欧美四级在线| 亚洲日本精品| 最新国产精品拍自在线播放| 99久久精品一区| 综合成人在线| 特黄aaaaaaaaa毛片免费视频| 91在线高清免费观看| 欧美亚洲一区二区在线观看| 日韩激情视频在线观看| 亚洲日本免费电影| 人人超碰在线| 色之综合天天综合色天天棕色| 日韩在线观看你懂的| 亚洲免费av高清| 国产欧美一级| 99久久久成人国产精品| 青娱在线视频| 艳色歌舞团一区二区三区| 欧美日韩福利视频| 疯狂做受xxxx欧美肥白少妇 | 午夜欧洲一区| 午夜激情在线观看| 中文字幕日韩精品无码内射| 7m第一福利500精品视频| 在线精品观看国产| 国产精品1区2区| 九九综合久久| 91高清在线观看视频| 黄色一级二级三级| 国产精品区二区三区日本| 亚洲欧美在线一区| 亚洲精品大片www| 欧美中文字幕| 日韩在线亚洲| 视频三区在线| 一女二男3p波多野结衣| 欧美第一黄网| 18一19gay欧美视频网站| 欧美日韩成人综合| 久久婷婷一区二区三区| 国内精品久久久久国产盗摄免费观看完整版| 黄色在线观看www| 国产美女视频黄a视频免费| 日韩精品资源| 91爱视频在线| 日韩精品福利网站| 懂色av影视一区二区三区| 99国产精品99久久久久久| 在线日韩中文| 欧美日韩黄网站| 中文字幕在线播放网址| 国产精品黄页网站在线播放免费| 亚洲欧洲一区二区福利| 国产一区欧美二区三区| 中国人与牲禽动交精品| 欧美日韩精品一区二区三区四区| 国产精品污污网站在线观看| 日韩av一级片| 日本电影一区二区| 四虎在线精品| 日本片在线看| 日韩a在线观看| 拍拍拍999自拍偷| 国产精品自拍合集| 精品久久久久久一区| 日韩av电影免费观看高清| 在线看日韩av| 亚洲成人av片在线观看| 色94色欧美sute亚洲13| 国产亚洲短视频| 美女视频一区二区三区| 欧美91大片| 欧美亚洲国产精品久久| 视频二区欧美| 国产经典一区| 国产夫妻在线播放| 国产精品剧情一区二区在线观看 | 韩国黄色一级大片| 欧美理论一区二区| 91精品入口蜜桃| 国产精品久久久久久久久| 欧美日韩ab片|