微軟探索 LTO+PGO 以優化 Linux 內核,使編譯器性能提升了 5~20%

2020-12-21 開源中國

當越來越多的軟體廠商採用連結時優化(LTO, link-time optimizations)和配置文件引導優化(PGO, profile-guided optimizations)來利用編譯器榨取性能的時候,微軟工程師正在為自用的 Linux 內核探索 LTO+PGO,以實現更好的 Linux 性能。

在 Linux 內核上使用連結時優化並不是新概念,過去已有多家廠商發布了針對 Linux 內核的 LTO 補丁,但通常不會帶來很大的變化。此前 Linus Torvalds 和其他人一直對支持 LTO 的 Linux 內核不看好,部分原因是過去 GCC 的 LTO 狀況不佳。

但如今隨著現代 GCC 編譯器(和 Clang)的發展,LTO 也逐漸變得更好,像 Fedora 在打包他們的發行版安裝包時都會默認使用 LTO,也有像 Clear Linux 這樣的公司通過使用 AutoFDO(基於程序性能分析工具的反饋式編譯優化)來進一步提升其發行版的性能。

相對而言,在 Linux 內核上使用配置文件引導優化的案例則比較鮮見。由於配置文件引導優化完全依賴於配置文件,反饋給編譯器以幫助其進行優化啟發式處理。因此,對於實際使用情況而言,配置文件的準確性至關重要。

考慮到在 Linux 上看到的工作負載非常多樣化,以及各種不同的硬體和驅動程序,要生成對 PGO 有用的、能被廣泛使用的、能幫助絕大多數用戶的配置文件是一項艱巨的任務。

因此,對於 Linux 內核中的 PGO,更多的是針對個人用戶/組織,他們可以採用 PGO,並根據自身的實際情況進行調整。

微軟軟體工程經理 Ian Bearman 在本周舉辦的 Linux Plumbers 大會上介紹了他們對 Linux 內核的配置文件引導優化的探索。

他們對 PGO 的興趣源於對 Linux 性能的「內部客戶要求」。不過話又說回來,微軟致力於優化 Linux 性能現在看來並不是什麼奇怪的事情,另一位微軟工程師曾是推動 FSGSBASE 補丁開發的貢獻者,最後還被合併進 Linux Kernel 5.9。

Redis 是他們一直展示的在內核探索使用 PGO 並獲益的公開案例之一。

微軟會繼續探索用於 Linux 內核的 PGO,有趣的是,人們發現 Windows 確實廣泛使用了 LTO + PGO。據說在 Windows 實例中,他們看到這些編譯器優化的性能提升了 5~20%,想必是使用了他們自己的 MSVC 編譯器。

相關焦點

  • [Linux 底層]bootstrap移植裁剪及編譯
    從nandflash啟動直接跳轉到uimage類型內核階段sama5d3_xplainednf_linux_zimage_dt_defconfig 從nandflash啟動直接跳轉到zimage類型內核階段sama5d3_xplainednf_uboot_defconfig 從nandflash啟動直接跳轉到uboot階段sama5d3_xplainedsd_linux_uimage_dt_defconfig
  • 嵌入式Linux啟動時間優化的秘密之一工具鏈/應用程式優化
    您可以在工具鏈中進行以下更改,這可能會影響啟動時間,性能和大小:   編譯器版本:gcc和binutils的版本,最新版本往往可以具有更好的優化功能。   C庫:glibc,uClibc,musl。使用uClibc和musl庫編譯的根文件系統更小   指令集變量:ARM或Thumb2,是否支持硬浮點。
  • 為Linux 內核主要貢獻者
    嵌入式linux QQ交流群:175159209,歡迎愛好者加入交流技術問題!
  • C語言之父和Linux之父誰更偉大?
    總的來說,這次被一些人升級為「戰火」的爭論是關於Linux和內核架構的。Tanenbaum爭辯說微內核比宏內核更加高級,所以Linux是過時的。 4月5號 : 第一個Linux新聞組,comp.os.linux由Ari Lemmke提議和開通。 5月21號 : Peter MacDonald 發布第一個獨立的Linux安裝包SLS。
  • 你知道第一個編譯器發明者是一位女大牛嗎?
    方舟編譯器應用流暢度最高提升60%。當日,華為終端CEO餘承東也表示,目前已有幾十款主流應用,都通過了方舟編譯器編譯了,也就是說鴻蒙作業系統隨時都有可能用在手機上。編譯器這麼重要,那麼你知道第一個編譯器的發明者是為女性嗎?早期的計算機軟體都是用彙編語言直接編寫的,這種狀況持續了數年。
  • 在計算機軟體領域 C語言之父和Linux之父誰更偉大
    總的來說,這次被一些人升級為「戰火」的爭論是關於Linux和內核架構的。Tanenbaum爭辯說微內核比宏內核更加高級,所以Linux是過時的。 4月5號 : 第一個Linux新聞組,comp.os.linux由Ari Lemmke提議和開通。 5月21號 : Peter MacDonald 發布第一個獨立的Linux安裝包SLS。
  • 當運行 Linux 內核的機器死機時……
    Linux 內核在發生 soft lockup 的時候,是可以 ping 通的,只要沒有關中斷,ping 通一般沒有問題。既然可以 ping 通,何必不帶回一些真正重要的信息而不僅僅是 echo 的 reply?且慢,你可能會覺得這一切沒有意義,懂 kdump 的人都會這麼抬槓,畢竟如果這個時候讓內核 panic 掉,保留一個 vmcore,事後便可以隨便分析了。
  • 「正點原子Linux連載」第三十七章Linux內核移植
    >-linux-gnueabihf-menuconfig5 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-all BogoMIPS只是粗略的計算CPU性能,並不十分準確。但是我們可以通過BogoMIPS值來大致的判斷當前處理器的性能。在圖37.4.1.2中並沒有看到當前CPU的工作頻率,那我們就轉變另一種方法查看當前CPU的工作頻率。
  • Linux Mint 20.1 beta發布:基於Ubuntu 20.04設計 內核升級到Linux...
    Linux Mint 20.1 beta發布:基於Ubuntu 20.04設計 內核升級到Linux 5.4 來源:IT之家 • 2020-12-21 10:32:55
  • Windows/Linux 代碼共享,Linux 內核開發者:差評
    英特爾近期披露了 Linux 圖形驅動程序相關的一些細節並指出,英特爾的圖形驅動程序現在已在 Windows/Linux 之間共享約 60% 的代碼庫,90~100% 的性能。
  • Linux內核學習:簡單的字符設備驅動
    學習Linux內核最好的入門方式之一是從字符設備驅動開始模仿(來自於《奔跑吧 Linux內核——入門篇》)。對於我們日常生活中存在的大量設備,如攝像頭,USB充電器,藍牙,Wi-Fi等,這些設備在電氣特性和實現原理均不相同,對Linux系統來說如何抽象和描述他們呢?Linux很早就根據設備共同特徵將其劃分為三大類型:1,字符設備;塊設備;網絡設備。
  • c編譯器so easy,gcc c編譯器生成、使用動靜態庫
    第一章程序開發人員大多接觸過c編譯器,請注意,不要將c編譯器和編輯器弄混淆哦。本文對c編譯器的講解,同樣基於gcc c編譯器,本文主要目的在於對linux環境下gcc c編譯器生成和使用靜態庫和動態庫予以介紹。此外,本文為系列教程第一篇——基本概念篇,之後將帶來另外兩篇。
  • x86架構&linux內核系列(五)番外篇------聊聊Linux crash和寄存器
    首先更正一下,上一篇的標題應該是 x86架構&linux內核系列(四)。結果我給寫成了「三」。 呃,上一篇結尾時,本來說春節前不更了,只因那時我看日曆看錯了。 假設有一天,你有幸進行linux crash分析,那麼使用crash工具對嫌疑進程進行反編譯,你所看到的冰山一角就是這個樣子滴:(裡面有edx,rxx,rbp…)然後對linux crash分析的大體過程就是:1、你需要根據上圖反編譯出來的彙編語言中的寄存器的命令邏輯 對照 內核C語言程序的指令邏輯,然後將二者邏輯完全印證理解;——邏輯流分析
  • 性能大幅提升!Arm發布全新CPU、GPU及AI內核!華為或將無緣?
    2019年5月27日,Arm於COMPUTEX開展前宣布推出新一代旗艦IP解決方案,包含Arm Cortex-A77 CPU內核、Mali-G77 GPU與Arm ML處理器。Arm表示新的旗艦級IP將定義2020年高端智慧型手機性能,提供新一代的人工智慧體驗。
  • windows,mac os,linux三大pc作業系統,到底有啥區別!
    windows:微軟旗下的收費作業系統求(雖然說是收費的,但是很多個人用戶都是破解的,或者某寶買的激活碼),當前市場佔有率最高的作業系統。它的兼容性較好,你日常用到的軟體基本都能運行;生態龐大,軟體很多,但是存在良莠不齊的情況;遊戲支持好,玩遊戲的首選作業系統,沒得說,也沒得選;穩定性相比來說較弱,崩潰神馬的相對會多一點;專注度較差,彈窗會多一點,流氓全家桶需要格外警惕,容易讓你的電腦白白喪失性能。
  • Linux內核討論引入Rust,Rust語言替代C/C++會讓我們轉變學習方向
    它的定位,似乎就是對標老牌王者程式語言C/C++的,和C/C++比,性能雖不相上下,Rust卻更好用(當然一人客需要說明的是,和其他新式的程式語言相比,Rust的學習曲線依然陡峭),能保證內存安全,優雅解決高並發和高安全性系統問題,更重要的是,Rust的出現,正是為了解決軟體的演進速度遠遠低於硬體的發展。
  • gcc&arm-linux-gcc編譯過程詳解
    •   (2)編譯 編譯就是把C/C++代碼(比如上述的.i文件)翻譯成彙編代碼。 •   (3)彙編 彙編就是將第二步輸出的彙編代碼翻譯成符合一定格式的機器代碼,在Linux系統上一般表現為ELF目標文件(OBJ文件)。反彙編是指將機器代碼轉換為彙編代碼,這在調試程序時常常用到。
  • 11 個優秀的 Python 編譯器和解釋器
    它還支持比較新的 Html5/CSS3 規範,可以使用流行的 CSS 框架,如 BootStrap3 和 LESS。網址:https://brython.info2.網站:https://skulpt.org5.Shed Skin該編譯器將 Python 標準庫模塊編譯為
  • Linux系統的Linux應該怎麼讀?正確讀法在這裡,很多人都讀錯了!
    1、linux發音五花八門版本頗多,見到和聽到的不下10種。根據linux的創始人Linus Torvalds的說法,Linux的發音和「Minix」是押韻的。3、有人綜合網上和linux自己的讀音,概括出幾個自認為最合適也最通用的讀法:/li'n^ks/(「裡那克斯」)或/'li:nэks/(「裡訥克斯」)或/li'nju:ks/(「裡紐克斯」)。4、這幾個應該是誰都聽得懂的。至於哪個比較正宗,當然是linux的原因。但事實上使用linux哪種讀法的人似乎都不在少數。
  • Canonical針對Raspberry Pi 2發布Ubuntu 17.10主要Linux內核更新
    該安全公告提到了Linux-raspi2修復的21個安全漏洞,Linux-raspi2是Ubuntu 17.10(Artful Aardvark)作業系統上的Raspberry Pi 2的Linux內核,包括可能導致Linux中使用後釋放漏洞的競態條件內核的ALSA PCM子系統以及網絡名稱空間實現中的釋放後使用漏洞。