當前位置:
首頁 > 知識 > 榨乾 Python 代碼的性能——第一部分之環境設置

榨乾 Python 代碼的性能——第一部分之環境設置

榨乾 Python 代碼的性能——第一部分之環境設置

Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉發

這是「榨乾 Python 代碼性能」系列的第一篇文章,接下來我會通過一篇篇文章分別來介紹一些 Python 代碼的工具和解釋器,以及它們是如何更好地幫助開發者在前端(Python 腳本)或者後端(Python 解釋器)中找到性能瓶頸。

設置環境

在進行基準測試和分析之前,我們首先需要準備好環境。這意味著計算機和操作系統都要事先配置好。

以普遍情況來說,我的計算機配置如下:

處理器:Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz

內存:32GB

操作系統:Ubuntu 16.04 LTS

系統內核:4.4.0-75-Generic

為了實現代碼可重用的目標,從而確保數據不會被其它後台進程所干擾,我們就必須優化好操作系統配置或增強其硬體性能。

那就從配置計算機開始吧。

硬體功能

首先,禁用所有硬體功能特性,這意味著也要在BIOS或UEFI中關閉Intel Turbo Boost和超線程功能。

正如官網所述,Turbo Boost是當處理器在小於功率、電流和溫度規格限制的情況下,自動提升其運行速度的一種技術。而超線程是允許在每個核心上運行多個線程以達到高效使用處理器資源的另一種技術。

對於好技術,我們真的希望把它們運用在生產中,既然如此,那為什麼不在基準測試和分析的時候啟用它們呢?因為這樣做我們就無法從代碼運行的變數中得出其可靠性和可重用性的結果。說了這麼多,讓我們看看下面這個小例子吧,我把它命名為primes.py,並且代碼被故意寫得很垃圾。。。。

代碼也可以在GitHub上找到。代碼需要以下依賴項,請先安裝:

榨乾 Python 代碼的性能——第一部分之環境設置

接下來就能在啟用了Turbo Boost和超線程的系統中運行它:

榨乾 Python 代碼的性能——第一部分之環境設置

現在,讓我們試試關閉Turbo Boost和超線程,並再次運行它:

榨乾 Python 代碼的性能——第一部分之環境設置

通過觀察可以發現,第一種情況的標準差是15%,這個誤差太大了,假設代碼優化後提速了6%,那麼我們要分辨出是偶然變化的誤差還是我們的優化效果就很難了。

第二種情況下的標準差就降低到了約0.6%,那麼我們的優化效果就很容易被觀察到了。

CPU功耗的降低

禁用所有的CPU節能選項並且使用一個固定的CPU頻率,這樣做可以通過改變Linux的電源管理來達到把intel_pstate修改成acpi_cpufreq的目的。

intel_pstate驅動程序可以藉助Intel Core內部的調節驅動程序達到縮放的效果,而acpi_cpufreq驅動程序則利用了ACPI處理器的性能狀態。

讓我們先來看看一個例子:

榨乾 Python 代碼的性能——第一部分之環境設置

可以看到,啟用powersave,並且設置CPU頻率在1.20 GHz和3.60 GHz之間是有利於我們日常使用計算機的,但是在做基準測試的時候結果會變得比較糟糕。

既然如此,那調節器有什麼用處呢?查閱文檔,我們發現:

  • performance - CPU以最高頻率運行。

  • powersave - CPU以最低頻率運行。

  • userspace - CPU以用戶指定的頻率運行。

  • ondemand - 根據當前負載動態縮放頻率。首先跳轉到最高頻率,然後隨著時間的推移逐漸降低頻率。

  • conservative - 根據當前負載動態縮放頻率。頻率切換比ondemand更加頻繁。

我們想要做的是把性能調節器設置到CPU所支持的最高頻率,就像這樣:

榨乾 Python 代碼的性能——第一部分之環境設置

現在我們需要把調節器設置成performance,並且把CPU的工作頻率固定至2.3 GHz,這個值是Xeon E5-2699 v3在禁用Turbo Boost的情況下所能使用的最大值了。

如果要設置所有的內容,以管理員許可權運行下面的代碼:

榨乾 Python 代碼的性能——第一部分之環境設置

如果沒有安裝cpupower,請安裝它:

榨乾 Python 代碼的性能——第一部分之環境設置

電源管理對CPU的影響很大。在默認情況下,電源管理器會自動調節頻率以降低功耗,但是我們並不希望它這樣做,因此我們可以在GRUB中禁用它,只要修改/boot/grub/grub.cfg或者在/etc/grub.d/40_custom中新建一個新的內核條目就可以了。我們的引導行必須包含intel_pstate=disable這樣的標誌,就像這樣:

榨乾 Python 代碼的性能——第一部分之環境設置

ASLR(地址空間規劃隨機器)

這個設置備受爭議,你可以在Victor Stinner的帖子中得到證實。當我們在基準測試時第一次建議禁用ASLR的時候,我們是在CPython中的按配置進行優化的支持下實施的。

在以上提到的特定的硬體中,禁用ASLR確實可以略為提升0.4%的性能,這也就是我們建議這樣做的原因。

另一方面,在我的個人計算機上測試(Intel Core i7 4710MQ),禁用ASLR確實會出現帖子中所出現的情況。在更小的CPU上上測試(Intel Atom)的結果表明,我們也應該啟用ASLR,而不是取消它。

由於它涉及具體的軟硬體配置,所以它並不總是可用,所以需要我們分別對開啟和關閉測試,比較之後再決定是否開啟。

在我的機器上,我通過修改全局配置文件/etc/sysctl.conf來禁用它,需要使用sudo sysctl -p。

榨乾 Python 代碼的性能——第一部分之環境設置

如果你要在運行的時候禁用它:

榨乾 Python 代碼的性能——第一部分之環境設置

如果你要再次啟用它:

榨乾 Python 代碼的性能——第一部分之環境設置


英文原文:https://pythonfiles.wordpress.com/2017/05/15/hunting-python-performance-setup/
譯者:飛馳的麒麟

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python部落 的精彩文章:

在Python中自定義類的創建方式
在Python中使用其他語言的列印語句
讓Python腳本成為守護進程
像寫散文一樣寫代碼
CPython和MicroPython中的內存使用

TAG:Python部落 |

您可能感興趣

又要糾結了?一部分 iPhone X Plus 會採用 LG的OLED 屏幕
Creo/Preo軟體自學第二篇:部分配置文件在config中路徑的設置
分析一個用於傳播Hancitor惡意軟體的Word文檔(第一部分)
Python數據科學速查表:Python基礎部分
Champion Clarkson聯名加入!Supreme第十四周部分發售單品已確認
這周時尚圈發生了什麼?LV收回Rimowa中國部分代理權;Prada兩位高管離職
比iPhone X貴的手機 RED Hydrogen One部分參數公布
Google從遠端更改了部分Android手機的電力設定
三星Galaxy S9測評:部分新增功能不敵iPhone X
部分用戶發現 iPhone XS和iPhone XS Max 無法在息屏時充電
部分一代Apple Watch不修了 直接換成二代
大屏iPhone也是蘋果推動服務增長的一部分
The Black Friday! 部分戰備包買一送一
Apple 確認部分 MacBook Pro 電池存在問題
聯名Look book 公開!Palace x Ralph Lauren部分單品更新
Pokémon GO最難的部分是什麼?
ofo和PPmoney發布關於合作情況的聯合聲明:不存在「ofo部分用戶押金轉成P2P類投資」的說法
教程:使用iPhone相機和openCV來完成3D重建(第一部分)
部分地區Windows Update出故障
蘋果為部分MacBook Pro免費更換電池