contributed by < ian910297
>
在優化的過程發現,當測試版本越來越多時,程式碼裡會充斥大量的 ifdef ,尤其是 main.c
的檔案在程式結構上最為複雜,…
最開始時,使用 python 的 faker 產生產生亂數名字資料
發現導入亂數資料對於分析並沒有什麼幫助,決定先依據英文名字長度為指標來產生資料
觀察程式執行可發現只有使用到部分資料結構, lastName 的部分,那麼其他部分是可以被刪減的,以減少記憶體使用量,及加速執行速度
原先結構
優化結構
實驗結果
文字訊息不要用圖片表示!
"jserv"
從上圖觀察到,簡化資料結構之後, cache-misses cache-references instructions cycles 都有了大幅的減少,但目前我還不知道如何觀察 perf report 所產生的 perf.data 讓兩者去做更深入的比較,只能附上 cache-test 之結果示意
猜測優化是因為 malloc 大小改變造成,既然大小改變會影響效能,那減少 malloc 的次數是否也會造成影響?
一次性 malloc 大量記憶體,也就是 memory pool 的概念
最初的實作
mmap 分析
剛開始時,發現建樹時間使用了非常長的時間,才想起這是一個非常不平衡的BST
但觀察資料可以發現,檔案裡面的人名是已經排序過的