性能之巔 - 優化你的程序

  1. 什麼是 SMMU?

outline:關注 & 指標 & 度量,基礎理論知識,工具 & 方法,最佳實踐,參考資料

性能優化關注:CPU、內存、磁盤 IO、網絡 IO 等四個方面。

性能指標:吞吐率、響應時間、QPS/IOPS、TP99、資源使用率是我們經常關注的指標。

時間度量:從 cpu cycle 到網絡 IO,自上到下,時間量級越大。

監控、分析、優化,三部曲,以終爲始,循環往復。

優化性能,需要一些系統編程知識。

提升處理能力、減少計算量是優化的 2 個根本方向。

優化大師格雷格畫的圖,吊炸天,你應該很熟悉,gregg 親手實現了一些工具。

藉助工具定位性能瓶頸。gprof2dot.py 可以處理多種採樣輸出數據

建議使用 perf 等非侵入式的 profiling 工具。

perf 不僅僅可以定位 cpu 瓶頸,還可以查看很多方面,比如缺頁,分支預測失敗,上下文切換等。

IO 瓶頸,你應該知道的知識。

有關鎖的知識,你應該知道的。

多線程的學問很大

內存管理的方方面面

最佳實踐,沒有足夠理由,你不應該違背。

你應該懂得的。

關於排序,你應該知道的。

這些資料不錯,你值得擁有。

如果對你有幫助,請幫忙轉發,讓更多朋友收益。

依據數據而不是憑空猜測

這是性能優化的第一原則,當我們懷疑性能有問題的時候,應該通過測試、日誌、profillig 來分析出哪裏有問題,有的放矢,而不是憑感覺、撞運氣。一個系統有了性能問題,瓶頸有可能是 CPU,有可能是內存,有可能是 IO(磁盤 IO,網絡 IO),大方向的定位可以使用 top 以及 stat 系列來定位(vmstat,iostat,netstat...),針對單個進程,可以使用 pidstat 來分析。

在本文中,主要討論的是 CPU 相關的性能問題。按照 80/20 定律,絕大多數的時間都耗費在少量的代碼片段裏面,找出這些代碼唯一可靠的辦法就是 profile,我所知的編程語言,都有相關的 profile 工具,熟練使用這些 profile 工具是性能優化的第一步。

忌過早優化

The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature optimization is the root of all evil (or at least most of it) in programming.

我並不十分清楚 Donald Knuth 說出這句名言的上下文環境,但我自己是十分認同這個觀念的。在我的工作環境(以及典型的互聯網應用開發)與編程模式下,追求的是快速的迭代與試錯,過早的優化往往是無用功。而且,過早的優化很容易拍腦袋,優化的點往往不是真正的性能瓶頸。

忌過度優化

As performance is part of the specification of a program – a program that is unusably slow is not fit for purpose

性能優化的目標是追求合適的性價比。

在不同的階段,我們對系統的性能會有一定的要求,比如吞吐量要達到多少多少。如果達不到這個指標,就需要去優化。如果能滿足預期,那麼就無需花費時間精力去優化,比如只有幾十個人使用的內部系統,就不用按照十萬在線的目標去優化。

而且,後面也會提到,一些優化方法是 “有損” 的,可能會對代碼的可讀性、可維護性有副作用。這個時候,就更不能過度優化。

深入理解業務

代碼是服務於業務的,也許是服務於最終用戶,也許是服務於其他程序員。不瞭解業務,很難理解系統的流程,很難找出系統設計的不足之處。後面還會提及對業務理解的重要性。

性能優化是持久戰

當核心業務方向明確之後,就應該開始關注性能問題,當項目上線之後,更應該持續的進行性能檢測與優化。

現在的互聯網產品,不再是一錘子買賣,在上線之後還需要持續的開發,用戶的湧入也會帶來性能問題。因此需要自動化的檢測性能問題,保持穩定的測試環境,持續的發現並解決性能問題,而不是被動地等到用戶的投訴。

選擇合適的衡量指標、測試用例、測試環境

正因爲性能優化是一個長期的行爲,所以需要固定衡量指標、測試用例、測試環境,這樣才能客觀反映性能的實際情況,也能展現出優化的效果。

衡量性能有很多指標,比如系統響應時間、系統吞吐量、系統併發量。不同的系統核心指標是不一樣的,首先要明確本系統的核心性能訴求,固定測試用例;其次也要兼顧其他指標,不能顧此失彼。

測試環境也很重要,有一次突然發現我們的 QPS 高了許多,但是程序壓根兒沒優化,查了半天,才發現是換了一個更牛逼的物理機做測試服務器。

作者:頭條 碼磚雜役 侵權刪

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/c5M5VvmnzDCnKMS4eDplYg