自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

性能優(yōu)化技巧之必備知識

運維 系統運維
性能優(yōu)化這個話題可大可小。從大的方面來說,在系統設計之初,需要考慮硬件的選擇,操作系統的選擇,基礎軟件平臺的選擇;從小到方面來說,每個子系統的設計,算法選擇,代碼怎么寫,如何使用編譯器的選項,如何發(fā)揮硬件的最大性能等等。本系列關注的是在給定硬件平臺,給定操作系統和基礎軟件平臺的情況下,如何優(yōu)化代碼,簡而言之,就是關注小的方面。

 性能優(yōu)化這個話題可大可小。從大的方面來說,在系統設計之初,需要考慮硬件的選擇,操作系統的選擇,基礎軟件平臺的選擇;從小到方面來說,每個子系統的設計,算法選擇,代碼怎么寫,如何使用編譯器的選項,如何發(fā)揮硬件的***性能等等。本系列關注的是在給定硬件平臺,給定操作系統和基礎軟件平臺的情況下,如何優(yōu)化代碼,簡而言之,就是關注小的方面。

在給定硬件平臺的情況下,如何發(fā)揮硬件的***效能?前提是需要對硬件平臺很熟悉。如何分離硬件相關代碼和硬件無關的代碼是一個很重要的技能。針對某一硬件平臺優(yōu)化固然是好,但是如果代碼都是硬件相關的,就失去了可移植性,軟件的性價比不一定高。

性能優(yōu)化只是系統的一個方面,它會和系統的其他要求有沖突,比如

  • 可讀性:性能優(yōu)化不能影響可讀性,看起來不怎么漂亮的代碼,沒有人愿意維護
  • 模塊化:性能優(yōu)化往往需要打破模塊的邊界,想想這是否值得
  • 可移植:隔離硬件相關的代碼,盡量使用統一的API
  • 可維護:許多性能優(yōu)化的技巧,會導致后來維護代碼的人崩潰

需要在性能優(yōu)化和上述的幾個要求之間做出tradeoff,不能一意孤行。

性能優(yōu)化的目標是什么?不外乎兩個

  • 時間性能:減小系統執(zhí)行的時間
  • 空間性能:減小系統占用的空間

那么我們優(yōu)化的策略,首先就是對系統進行分解,測量:

  • 分解:系統包含的子系統,執(zhí)行路徑,函數,指令等等
  • 測量:每個子系統,執(zhí)行路徑,函數,指令所花費的時間和空間

然后,選取執(zhí)行次數最多,消耗時間最長的函數進行優(yōu)化(這里需要指出的是,消耗時間最長的函數并不一定就是優(yōu)化的對象,這個需要放到某個執(zhí)行路徑上去考察,優(yōu)化最常使用的執(zhí)行路徑)。

對于單核和多核的優(yōu)化,有什么不同?以cache miss為例,在單核上

  • I-cache miss的原因是什么?一是代碼路徑太長,以至于超出了cache的容量,cache需要替換;二是 多個執(zhí)行路徑之間相互交替,cache需要替換;三是I-cache, D-cache互相踩。(對于i-cache的優(yōu)化,基本上沒有什么可遵循的規(guī)則。最有效的還是:一,減少無用的代碼;二,減少冗余的代碼;三,減少函數調用的開銷;4,快速路徑短小精干,相關代碼相鄰;5,相關代碼放到一個段里面等等)
  • D-cache miss的原因是什么?一是數據結構太大,超出了cache的容量(大數組,長鏈表都會有這個問題,比較之下,還是數組更讓人放心一點);二是多個數據結構之間相互踩(問題是一個執(zhí)行路徑,需要訪問那么多數據嗎?如果是,這個路徑是不是太復雜了一點);三是D-cache和I-cache的沖突(這個不好說,系統里面會出現這種模式的cache miss嗎?)

在多核上,cache miss會有什么新的特點?

  • I-cache miss:多核有獨立的L1 cache,共享的L2/L3 cache。如果多條執(zhí)行路徑同時進行,cache的沖突幾率就會增大。但是這是沒辦法的事情,總不能什么事都不做吧。所以,對i-cache的優(yōu)化,關注快速路徑就可以了,不要把精力都花費在這個上面
  • D-cache miss:鎖,原子操作,偽共享等都會引起多核上的D-cache miss。這是多核優(yōu)化時需要關注的重點。優(yōu)化的策略也很直接,就是盡量減少鎖,原子操作,偽共享等。多核的所有沖突都是由共享引起的,所以要區(qū)分出哪些是必須共享的,哪些是可以per thread的。并行優(yōu)化與應用有關,需要注意的是,優(yōu)化是否對所有用例都有效?做不好,可能顧此失彼。

性能優(yōu)化必備技能

  • 熟悉系統執(zhí)行路徑:可以通過讀代碼或者使用profiling工具學習代碼,要思考執(zhí)行路徑上不合理的地方,看看哪里可以減少,哪里可以合并。熟悉系統執(zhí)行路徑是性能優(yōu)化的基礎。
  • 熟悉測量工具:順手的工具必不可少
  • 常用的代碼優(yōu)化技巧和策略:針對不同的語言,不同的平臺,使用與之相應的技巧和策略

學習性能優(yōu)化是一個不斷積累的過程,在這個過程中,總結和學習自己用的順手的工具和技巧,不斷嘗試,不斷思考,就會有收獲。

原文:性能優(yōu)化的方法和技巧:總結

【編輯推薦】

  1. 性能優(yōu)化技巧之工具選擇
  2. 性能優(yōu)化技巧之系統層次優(yōu)化
  3. 新的技術產業(yè):Web性能優(yōu)化
  4. Linux網絡性能優(yōu)化方法簡析
  5. 網站性能優(yōu)化***實踐

 

責任編輯:黃丹 來源: 彎曲評論
相關推薦

2011-07-11 15:26:49

性能優(yōu)化算法

2011-06-14 13:48:07

性能優(yōu)化工具

2011-06-14 11:14:10

性能優(yōu)化代碼

2011-06-14 14:17:23

性能優(yōu)化系統層次

2017-12-23 14:38:41

Android編程開發(fā)優(yōu)化

2013-04-07 09:53:24

Windows系統優(yōu)化

2011-09-29 09:50:44

JavaScript

2011-03-11 15:53:02

LAMP優(yōu)化

2009-06-16 16:39:49

Hibernate性能

2011-03-11 15:52:57

LAMP優(yōu)化

2021-07-27 20:51:02

AndroidDNS網絡

2018-11-20 10:50:00

Java性能優(yōu)化編程技巧

2019-07-18 12:40:49

Java編程語言性能優(yōu)化

2011-03-11 15:53:00

LAMP優(yōu)化

2009-12-09 17:33:22

PHP性能優(yōu)化

2012-07-23 10:22:15

Python性能優(yōu)化優(yōu)化技巧

2019-02-25 07:07:38

技巧React 優(yōu)化

2019-08-21 10:53:29

.NET性能優(yōu)化

2013-06-08 14:19:05

性能優(yōu)化KVM

2011-03-11 15:52:59

LAMP優(yōu)化
點贊
收藏

51CTO技術棧公眾號