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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...