Cách nhìn flamegraph
System
17
Sysadmin
16
Go
39
White

huydx viết ngày 26/12/2016

Flamegraph là gì

Flame graph là một công cụ visualize được nghĩ ra bởi brendan gregg, engineer của netflix. Thông thường nếu không có flame graph thì sẽ rất khó khăn để bạn phát hiện ra bottle neck ở CPU, bởi call stack của một chương trình thường rất dài và chứa nhiều thông tin không có giá trị (noise).
Cách làm phổ biến để benchmark là sample CPU usage trong một khoảng thời gian (vài chục seconds) bằng cách interrupt CPU theo interval, mỗi lần interrupt thì chương trình profile sẽ collect toàn bộ thông tin của binary đang chạy bao gồm: function address, backtrace... sau đó report về một dạng text hay gì đó mà con người có thể đọc được.
Thông thường thì report đó ngay cả ở dạng text cũng sẽ rất khó đọc, thế nên flamegraph được sinh ra để giải quyết bài toán "khó đọc" đó.

Dưới đây là một ví dụ về flamegraph mà tôi capture

Cách đọc flamegraph

Tất nhiên khi một thông tin phức tạp (hierarchy text) được mô hình hoá về một mô hình đơn giản hơn (graph) thì chúng ta sẽ phải trade off bằng việc học cách đọc graph đó.
Với flamegraph thì chúng ta sẽ bắt đầu đi từ các khái niệm

  • Mỗi một "box" (ô chữ nhật) sẽ biểu diễn một function trên stack (hay "stack frame")
  • Trục y sẽ biểu diễn chiều sâu của stack (stack depth), số frame trên stack đó. Box ở trên cùng sẽ biểu diễn function mà đang được CPU execute. Tất cả những gì ở dưới sẽ là cha của frame đó.
  • Trục X biểu diễn số lần sample (sample population). Thứ tự trên trục X từ trái sang phải không có ý nghĩa gì cả.
  • Chiều rộng của 1 box biểu diễn tổng thời gian mà function được CPU execute, hay nói cách khác, box càng rộng thì nghĩa là function nằm trên đó càng cost time.
  • Màu ở đây không có ý nghĩa gì cả, chỉ là để dễ nhìn.

Flame graph cho golang process

Để vẽ flame graph cho một golang process thì chúng ta có thể dùng tool của uber gọi là go-torch
https://github.com/uber/go-torch

Cách dùng khá đơn giản các bạn có thể đọc README để biết thêm chi tiết.

Tham khảo

http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html
http://www.brendangregg.com/flamegraphs.html
http://techblog.netflix.com/2015/07/java-in-flames.html

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

huydx

118 bài viết.
1047 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
164 15
Introduction (Link) là một cuộc thi ở Nhật, và cũng chỉ có riêng ở Nhật. Đây là một cuộc thi khá đặc trưng bởi sự thú vị của cách thi của nó, những...
huydx viết 2 năm trước
164 15
White
147 14
Một ngày đẹp trời, bạn quyết định viết một dịch vụ web dự định sẽ làm thay đổi cả thế giới. Dịch vụ của bạn sẽ kết nối tất cả các thiết bị di động ...
huydx viết 2 tháng trước
147 14
White
133 15
Happy programmer là gì nhỉ, chắc ai đọc xong title của bài post này cũng không hiểu ý mình định nói đến là gì :D. Đầu tiên với cá nhân mình thì hap...
huydx viết hơn 3 năm trước
133 15
Bài viết liên quan
White
48 1
Chương 1. Tổng quan một hệ thống Linux Thiên chúa thấy mọi sự người đã làm, và thấy rằng nó đuợc làm rất tốt. Bible King James Version. Genesis 1:3...
Trần Đạt viết 2 năm trước
48 1
White
7 3
Đã có rất nhiều bài viết về process trên linux trên kipalog https://kipalog.com/posts/HedieuhanhProcess https://kipalog.com/posts/GioithieuveUN...
LinhPT viết hơn 1 năm trước
7 3
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
118 bài viết.
1047 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!