Linux性能之CPU優化

来源:https://www.cnblogs.com/galvin007/archive/2020/04/08/12661615.html
-Advertisement-
Play Games

CPU優化 我們接下來從應用程式和系統的角度,分別來看看如何才能降低 CPU 使用率,提高 CPU 的並行處理能力。 應用程式優化 首先,從應用程式的角度來說,降低 CPU 使用率的最好方法當然是,排除所有不必要的工作,只保留最核心的邏輯。比如減少迴圈的層次、減少遞歸、減少動態記憶體分配等等。除此之外 ...


CPU優化

我們接下來從應用程式和系統的角度,分別來看看如何才能降低 CPU 使用率,提高 CPU 的並行處理能力。

應用程式優化

首先,從應用程式的角度來說,降低 CPU 使用率的最好方法當然是,排除所有不必要的工作,只保留最核心的邏輯。比如減少迴圈的層次、減少遞歸、減少動態記憶體分配等等。除此之外,應用程式的性能優化也包括很多種方法,我在這裡列出了最常見的幾種,你可以記下來。

  • 編譯器優化:很多編譯器都會提供優化選項,適當開啟它們,在編譯階段你就可以獲得編譯器的幫助,來提升性能。比如, gcc 就提供了優化選項 -O2,開啟後會自動對應用程式的代碼進行優化。
  • 演算法優化:使用複雜度更低的演算法,可以顯著加快處理速度。比如,在數據比較大的情況下,可以用 O(nlogn) 的排序演算法(如快排、歸併排序等),代替 O(n^2) 的排序演算法(如冒泡、插入排序等)。
  • 非同步處理:使用非同步處理,可以避免程式因為等待某個資源而一直阻塞,從而提升程式的併發處理能力。比如,把輪詢替換為事件通知,就可以避免輪詢耗費 CPU 的問題。
  • 多線程代替多進程:前面講過,相對於進程的上下文切換,線程的上下文切換並不切換進程地址空間,因此可以降低上下文切換的成本。
  • 善用緩存:經常訪問的數據或者計算過程中的步驟,可以放到記憶體中緩存起來,這樣在下次用時就能直接從記憶體中獲取,加快程式的處理速度。

系統優化

從系統的角度來說,優化 CPU 的運行,一方面要充分利用 CPU 緩存的本地性,加速緩存訪問;另一方面,就是要控制進程的 CPU 使用情況,減少進程間的相互影響。具體來說,系統層面的 CPU 優化方法也有不少,這裡我同樣列舉了最常見的一些方法,方便你記憶和使用。

  • CPU 綁定:把進程綁定到一個或者多個 CPU 上,可以提高 CPU 緩存的命中率,減少跨 CPU 調度帶來的上下文切換問題。- - CPU 獨占:跟 CPU 綁定類似,進一步將 CPU 分組,並通過 CPU 親和性機製為其分配進程。這樣,這些 CPU 就由指定的進程獨占,換句話說,不允許其他進程再來使用這些 CPU。
  • 優先順序調整:使用 nice 調整進程的優先順序,正值調低優先順序,負值調高優先順序。優先順序的數值含義前面我們提到過,忘了的話及時複習一下。在這裡,適當降低非核心應用的優先順序,增高核心應用的優先順序,可以確保核心應用得到優先處理。
  • 為進程設置資源限制:使用 Linux cgroups 來設置進程的 CPU 使用上限,可以防止由於某個應用自身的問題,而耗盡系統資源。
  • NUMA(Non-Uniform Memory Access)優化:支持 NUMA 的處理器會被劃分為多個 node,每個 node 都有自己的本地記憶體空間。NUMA 優化,其實就是讓 CPU 儘可能只訪問本地記憶體。
  • 中斷負載均衡:無論是軟中斷還是硬中斷,它們的中斷處理程式都可能會耗費大量的 CPU。開啟 irqbalance 服務或者配置 smp_affinity,就可以把中斷處理過程自動負載均衡到多個 CPU 上。

Brendan Gregg
性能優化大師

學習筆記
整理自極客時間:《Linux性能優化實戰》


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 本文介紹另一種學習ABP框架的方法,該方法為正面硬鋼學習法。。。 我們不去官網下載模板,直接引用DLL,直接使用。 WebApi項目創建 首先創建一個WebApi項目,結構如下。 然後Nuget搜索ABP,安裝ABP框架。(我這裡安裝的是5.1.0,因為最高版本安裝不上) 在安裝ABP前先檢查 ...
  • 1. 問題 好像很少人會遇到這種需求。假設有一個文件夾,用戶有幾乎所有許可權,但沒有刪除的許可權,如下圖所示: 這時候使用SaveFileDialog在這個文件夾里創建文件居然會報如下錯誤: 這哪裡是網路位置了,我又哪裡去找個管理員?更奇怪的是,雖然報錯了,但文件還是會創建出來,不過這是個空文件。不僅W ...
  • 在這篇文章中,我將介紹如何使用 "ASP.NET Core托管服務" 運行Quartz.NET作業。這樣的好處是我們可以在應用程式啟動和停止時很方便的來控制我們的Job的運行狀態。接下來我將演示如何創建一個簡單的 ,一個自定義的 和一個在應用程式運行時就開始運行的 。我還將介紹一些需要註意的問題,即 ...
  • LinuxNFS網路文件系統 首先需要準備四台機器,分別為以下伺服器 NAS-Server-0 IP:192.168.254.10 Web-Server-1 IP:192.168.254.11 Web-Server-2 IP:192.168.254.12 Web-Server-3 IP:192.16 ...
  • 一般建議從msdn我告訴你上面下載系統,下麵是 Windows 微軟官網系統下載地址 首先,我們先查看一下Windows10系統狀態。 點擊桌面左下角的 Windows + X + N 快捷方式打開設置,再打開的Windows 設置面板中找到,系統和安全 點擊,在此就可以查看到當前系統的狀態。 Wi ...
  • [TOC] 1.MySQL安裝前準備 1.1.安裝依賴包 1.2.安裝cmake 1.3.創建用戶 2.MySQL下載安裝 2.1.創建軟體下載目錄 2.2.下載並上傳到/server/tools 2.3.解壓 2.4.安裝 3.配置並啟動 3.1.創建軟鏈接 3.2.拷貝配置文件到/etc 3.3 ...
  • 安裝 設置密碼 啟動之後,輸入一行 5.7.x對密碼有了更嚴格的要求,分為LOW,MEDIUM,STRONG三個等級,對應要求如下: LOW Length = 8 MEDIUM Length = 8, numeric, mixed case, and special characters STRON ...
  • 一、安裝中文版man 官方下載地址:https://code.google.com/archive/p/manpages-zh/ GITHUB項目地址:https://github.com/man-pages-zh/manpages-zh 安裝方法一 1、Debian / Ubuntu安裝 sudo ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...