2018年7月19日 星期四

一個 Go 1.9 的修正如何對 Gitaly 服務加速了 30x

Gitlab 在運作過程中發現其 RPC 處理程序 Gitaly 的 latency 日漸增加, CPU 的使用率也顯著提高, 原以為是 resource leaking 問題 (這也是許多工程師第一時間也都會這樣認為, 這也是想分享這篇的一個點), 然而透過 pprof 與 cAdivisor(cgroup 分析工具) 分析發現並沒有 leak 的現象, 最後追蹤到了 SIGABRT thread dump 中發現問題在於 syscall.ForkLock 而該 問題指向了 clone() 的方式, 而這問題在於 Go 1.8 中使用的 fork 方式會複製 parent process memory space, 因此當系統逐漸增大後 fork cost 就會變高, 而在 Go 1.9 後便改採用 posix_spawn 來避免此問題
問題的排除, 除了過程引人入勝外, 其面對問題的思考與處理過程也是能作為借鏡

沒有留言:

Chisel 學習筆記 - Scala 與 Chisel 基礎語法

標題為筆記, 但這篇比較屬於心得 延續 上一篇 的環境建立, 這次計劃藉由 Jserv 最新的 課程安排 來學習 Chisel, 當然個人目標是能夠按照 Jserv 的課程規劃在 期限之內 完成 Lab 3, 由於個人並非 digital designer (現在這年紀也算老貓學...