導航:首頁 > 源碼編譯 > ebpf編譯性能

ebpf編譯性能

發布時間:2023-05-19 15:59:45

Ⅰ Istio是什麼

Istio是由Google、IBM和Lyft開源的微服務管理、保護和監控框架。Istio為希臘語,意思是」起航「使用istio可以很簡單的創建具有負載均衡、服務間認證、監控等功能的服務網路,而不需要對服務的代碼進行任何修改。你只需要在部署環境中,例如Kubernetes的pod里注入一個特別的sidecar proxy來增加對istio的支持,用來截獲微服務之間的網路流量。

特性:
使用istio的進行微服務管理有如下特性:
流量管理:控制服務間的流量和API調用流,使調用更可靠,增強不同環境下的網路魯棒性。可觀測性:了解服務之間的依賴關系和它們之間的性質和流量,提供快速識別定位問題的能力。

策略實施:通過配置mesh而不是以改變代碼的方式來控制服務之間的訪問策略。
服務識別和安全:提供在mesh里的服務可識別性和安全性保護。
未來將支持多種平台,不論是kubernetes、Mesos、還是雲。同時可以集成已有的ACL、日誌、監控、配額、審計等。

正是 Istio 的出現使 「Service Mesh」( 服務網格 ) 這一概念開始流行起來。在深入介紹 Istio 的細節之前,讓我們首先簡單地了解一下 Service Mesh 是什麼,以及它的重要性體現在哪裡。我們都已經了解單體應用所面對的挑戰,一種顯而易見的方案是將其分解為多個微服務。雖然這滾州種方式簡化了單個服務的開發,但對於成百上千的微服務的通信、監控以及安全性的管理並不是一件簡單的事。
直至目前,對於這些問題的解決方案也只是通過自定義腳本世殲、類庫等方式將服務串聯在一起,並且投入專門的人力以處理分布式系統的管理任務。但這種方式降低了各個團隊的大返蔽效率,並且提高了維護的成本。這正是 Service Mesh 大顯身手的時機

Istio以及Service Mesh的未來

Ⅱ 內核4.14.117什麼意思

就是字面意思,4是主版本號碼,14是副版本號,117就是修改號碼了,
沒大的改動4是不會變成5,
有價值的修改14才會增加,一般的修改啥的117會增加了。
記得要有說雙數是穩定版,單數是改進加功能的那版。

Ⅲ 我的嗅探器程序無法分析數據包的類型


0. 前言

來源:《Computer Security》A Hands-on Approach — Wenliang Du

所有的代碼/文檔見github:https://github.com/da1234cao/computer_security

chapter 12 Packet sniffing and spoffing.

這一章有點硬核。知識點不難,但對socket編程有點要求。

我看過《unix網路編程》第一卷 前五章 ,背景知識還是相當欠缺。這章內容雖然看完,基本明白,但距離實際動手完成一個簡單的有線/無線嗅探工具還挺遠。本文,暫時僅僅看看書上的嗅探實現。

1. 摘要與總結

首先介紹了網卡的工作原理,嗅探需要網卡的工作模式(雜亂模式/監控模式)。

為了提數凱游早過濾過濾不需要的數據包,介紹了BPF。

接著用三種方式:普通套接字,原生套接字,pcap API,遞進的講述了包的嗅探過程。

2. 包(Packet)的接收

2.1 網卡

參考文章:網卡工作原理詳解 、關於網路的混雜模式 、實戰無線網路分析(篇一)無線監聽

簡單了解下:

網卡(Network Interface Card,NIC)是一塊被設計用來允許計算機在計算機網路上進行通訊的計算機硬體。每塊網卡有一個硬體地址,被稱為MAC地址;網卡孫衫接入網路,使得用戶可以通過電纜或無線相互連接;用戶A要發送信息給B,通過電纜或者無線進行廣播;每一塊網卡都將廣播的內容拷貝到自己的網卡內存中,檢查頭部信息中的MAC地址,判斷是否是發送給自己的。如果是則將其拷貝進入內存,否則丟棄;因為MAC唯一,所以最後只有B接受了用戶A的信息。

維基網路:混雜模式(promiscuous mode)。一般計算機網卡都工作在非混雜模式下,此時網卡只接受來自網路埠的目的地址指向自己的數據。當網卡工作在混雜模式下時,網卡將來自介面的所有數據都捕獲並交給相應的驅動程序。網卡的混雜模式一般在網路管理員分析網路數據作為網路故障診斷手段時用到,同時這個模式也被網路黑客利用來作為網路數據竊聽的入口。在linux操作系統中設置網卡混雜模式時需要管理員許可權。在Windows操作系統和Linux操作系統中都有使用混雜模式的抓包工具,比如著名的開源軟體Wireshark。

監控模式(monitor mode)。 類似於有線網路的混雜模式。 無線網卡在監視模式下運行時支持嗅探。 與乙太網不同,無線設備面臨附近其他設備的干擾。 這將嚴重阻礙網路連接的性能。 為解決此問題,WIFI設備在不同的信道上傳輸數據。接入點將附近的設備連接到不同的信道,以減少它們之間的干擾影響。 Wifi網卡還設計為在整個可用帶寬和通道的片上進行通信。 將這些卡置於監視模式時,它們將捕獲802. 1I幀,這些幀在它們正在偵聽的通道上傳輸。 這意味著,與乙太網不同,無線網卡可能會丟失同一網路上的信息,因為它位於不同的信道上。 大多數無線網卡不支持監視器模式或製造商禁用了該模式。

2.2 (BSD Packet Filter)BPF

參考文章:BPF與eBPF

這個參考文章我沒懂。目前大概知道怎麼回事就好。後面使用pcap API會用到這里的概念。

嗅探網路流量時,嗅探器只對薯銷某些類型的數據包感興趣,例如TCP數據包或DNS查詢數據包,這是很常見的。系統可以將所有捕獲的數據包提供給嗅探器程序,後者可以丟棄不需要的數據包。這是非常低效的,因為處理這些不需要的數據包並將其從內核傳送到嗅探器應用程序需要花費時間。當有很多不需要的數據包時,浪費的時間相當可觀。最好盡早過濾這些不需要的數據包。

隨著對數據包捕獲的需求的增加,Unix操作系統定義了BSD數據包過濾器(BSD Packet Filter,BPF)以支持較低級別的過濾。 BPF允許用戶空間程序將過濾器附加到套接字,這實際上是告訴內核盡早丟棄不需要的數據包。過濾器通常使用布爾運算符以人類可讀的格式編寫,並被編譯為偽代碼並傳遞給BPF驅動程序。然後由BPF偽機(一個專門為數據包過濾設計的內核級狀態機)解釋該低級代碼。

3. 包的嗅探

3.1 通常套接字編程接收包

/**
* 作用:將進入伺服器所有IP的9090埠的UDP內容,輸出。
*
* 准備:
* 一個套接字描述符:scoket函數,指定期望的通信協議類型
* 一個監聽套接字:指定協議族,ip,埠
* bind:將一個本地協議地址賦予一個套接字(描述符)
* recvfrom:接受經指定的socket 傳來的數據,放入buf --》准備個buffer,一個客戶端套接字,套接字長度
*
* 頭文件:
* netinet/in.h 定義了ip地址結構 struct sockaddr_in (struct in_addr作為sockaddr_in 的成員)
* 還有函數 htons等,以及一些宏。
* sys/socket.h 定義了一些列的socket API函數 如
* socket(),bind() listen() , send() ,sendmsg(),setsockopt(),等等。
* unistd.h close函數
*
* 驗證:echo "Hello World\!" | nc -4u 127.0.0.1 9090
*/

#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <errno.h>
#include <unistd.h>

int main(void){
int sock;
struct sockaddr_in server;
int client_len;
struct sockaddr_in client;
char buf[1000];

// IPV4,數據包套接字,UDP傳輸協議
sock = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if(sock <= 0){
perror("error in socket");
return -1;
}

// 用這個初始化為零,比memset函數少一個參數
// sockaddr_in結構體中sin_zero,還沒用;整個結構體用之前,我們全部初始化為零
// IPv4協議族,監聽該伺服器上所有IP的9090埠
// 按照網路標准轉化位元組序
bzero(&server,sizeof(server));
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
server.sin_port = htons(9090);

// 將一個本地協議地址賦予一個套接字(描述符)
if( bind(sock,(struct sockaddr *)&server,sizeof(server)) < 0){
perror("error in bind");
return -1;
}

while (1){
bzero(buf,sizeof(buf));
// 進入一個慢系統調用;
recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr *)&client,&client_len);
printf("%s",buf);
}

close(sock);

return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

3.2 使用原生套接字接收包

Ⅳ 和中間件有關的測試怎麼做

性能測試的一些(我們用的)方法 * 2


1.觀測, 觀測, 觀測

-eBPF/Systemtap

-中間件自身提供觀測

-USE


2.測試工具校準

關於觀測:

第一,推薦兩種觀測工具,eBPF或Systemtap;

第二,我們自己也做中間件,我們中間件自身是提供了一些觀測指標的,向大家介紹一下這種方法;

第三,有一種線程是對於資源消耗的觀察手段,即USE;


leBPF 操作系統級的觀測

eBPF此處引用我的同事洪斌在今年的PHPCON的演講,他的演講主題是《MySQL性能診斷與實踐》,其中詳細的介紹了一下這個工具能給大家帶來什麼好處,列舉其中幾個,如:

1. 延遲分布,比如MySQL請求的延遲,VFS延遲,Ext4的延遲,塊設備的延遲等;

2. MySQL的文件IO壓力分析;

3. 臨時表的生命周;

4. 短連接的分析;


舉一個例子,下圖是eBPF的一個腳本,可觀察MySQL的延遲,它會給大家列出延遲的分布曲線:

左邊這一類是延遲,從零到一,二到三,四到七,它是指數級增長,單位是微秒,可以看到的是 壓力打在資料庫上的平均延遲,大量的數據壓力在128微妙到255微妙之間,這個資料庫的整體延遲還是不錯的。

這張材料引用自Breddan Gregg的項目BCC,是eBPF的實用腳本集,它能觀測操作系統的方方面面,來幫助大家做壓力觀測。

l中間件自身提供觀測

操作系統的觀測已經很全了,為什麼中間件本身也要提胡寬扮供一些觀測點,我們自己的中間件DBLE,是一個開源項目,GitHub上可以搜到,在DBLE中我們提供了這樣的一種觀測方法,如下:

DBLE把一個壓力下來分成了六個階段:

- 開始梳理

- 完成解析

- 完成路由分配

- 從資料庫回收結果

- 後置處理

- 反饋處理

每個階段提供了時間分布,這樣我們可知道壓力到底在中間件的哪一個階段變慢。

比如在這個數據下,中間件的性能其實不錯,是因為從第三個點到第四個點之間是後端資料庫的處理,它佔了整個處理時間的70%以上,所以在這種情況下可以判斷後端資料庫已經慢了,而不是中間件產生了什麼太大的問題,所以中間件本身應該提供觀測。

在這個項目的文檔中, 我們把畫了中間件的壓力處理流程,其實對於大部分的中間件都是這樣的,這張圖在DBLE開源的文檔上都可以找到。安利一下我們自己的中間件DBLE,大家有興趣的話可以去看一下,文檔齊全,分析方法也很齊全。

中間件本身的觀測與操作系統的區別在於:中間件提供的視角是站在壓力處理的視角來提供的,操作系統視角是站在資源的視角來提供,這兩個視角缺一不可。如果只知道操作系統說IO壓力大,但是並不知道是哪個環節造成的壓力大,那診斷瓶頸的成本會比較高. 這就是為什麼中間件要補充一個視角。

lUSE

對於資源來說,強烈推薦《性能之巔》這本書,它介紹的分析方法叫USE,就是使用率、飽和度、錯誤率這三個指標就足以評估一個資巧舉源,IO資源也好,網路資源也好,足以評估一個資源現在的使用狀況。

舉一個例子,為什麼使用率和飽和度得分開,如果現在操作系統告訴我們內存佔用率是100%,內存能不能再申請出來一塊?是可以的,因為內存的使用率100%,其中比如說有50%是分給buffer和cache, 操作系統會自動回收,這種情況下內存的使用率是100%,但飽和度並沒有達到飽和,我們可以繼續使用內存,直到它的飽和度上升到100%為止,這個內存就再也申請不出來了。

所以這就是為什麼這本書將使用率和飽和度一定要拆開的原因。強烈推薦!


這個死循環是這樣的:

第一句話它把auto commit設成0;

第二句select就會開啟一個事務;

第三句話在這個壓力下跑過一段邏輯之後再select看看這行數據還在不在,如果在就去刪掉它。如果隔離級別是RR的,在第二三句之間把這行數據刪掉,那麼此時還能看到這行數據對吧. 但之後的delete回應沒有影響數據行,所以BenchmarkSQL就會陷入上面的這條死循環,看到數據, 刪除, 沒刪掉, 然後就一直會去刪,但是一直能看到這行數據,所以就會陷入這個死循環。

換句話說BenchmarkSQL,在RR的隔離級別下就會造成這樣一個死循環。 很難想像這個工具是在銀行客戶中被大量使用. 有一天項目經理告訴我,友商的中間件好著啊,然後我們就必須要去研究這款中間件,為什麼它沒有問題,原因是設置了RR的隔離級別, 它實際下到資料庫的壓力是RC隔離級別,RC隔離級別錯在第三步看不到這條數據,它就不會跑下面這個循環,所以人家的中間件的錯誤將測試工具的錯誤抵消了。我們呼籲在測試時保持科學的態度.

在開始演講之前姜老師的筆記本在這個環境下工作是好的,我說能不能換我的筆記本做這個演講,我就把線插入我的筆記本然後兩邊都顯示不出來了. 這個時候姜老師最應該說的一句話是什麼呢?在我的環境下它是好的啊,但他並沒有說,這是一個很科學的態度。

關於性能測試,我們推薦兩個方法:

第一個方法,性能測試一定要去觀測,觀測的目的是什麼,看到瓶頸,看到瓶頸的目的是什麼?解決掉它以獲得一個完全可以重復的正確的性能測試值來獲得正確的結論。

第二個方法,測試工具一定要校準,業界常用的測試工具有很多,不要相信一些小眾的測試工具,每一種測試工具都一定要校準。校準的話可以用多種測試工具同時去跑,去校準,或者是去分析測試工具的壓力類型,剛才的觀測過程就足以分析一個測試工具實際下發到後端的壓力到底是什麼,足以看到它的壓力類型是什麼,分析它的壓力模式是不是正確的,以做測試工具校準。

所以在我們的公司ISO流程里邊有一個規定是半年用這個測試工具做一次校準,因為測試工具也在面臨著升級,我們面臨的測試工具很多,這是我想討論的第二個部分。

Ⅳ 幾個常用的MySQL性能測試工具

1、mysqlslap
安裝:簡單,裝了mysql就有了

作用:模擬並發測試數據做賀梁庫性能。

優點:簡單,容易使用。

不足:不能指定生成的數據規模,測試過程不清楚針對十萬級還是百萬級數據做的測試,感覺不太適合做綜合測試,比較適合針對既有資料庫,對單個sql進行優化的測試。

使用方法:
可以使用mysqlslap --help來顯示使用方法:

Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf

--concurrency代表並發數量,多個可以用逗號隔開,concurrency=10,50,100, 並發連接線程數分別是10、50、100個並發。

--engines代表要測試的引擎,可以有多個,用分隔符隔開。
--iterations代表要運行這些測試多少次。
--auto-generate-sql 代表用系統自己生成的SQL腳本來測試。
--auto-generate-sql-load-type 代表要測試的是讀還是寫還是兩者混合的(read,write,update,mixed)
--number-of-queries 代表總共要運行多少次查詢拍伍。每個客戶運行的查詢數量可以用查詢總數/並發數來計算。
--debug-info 代表要額外輸出CPU以及內存的相關信息。
--number-int-cols :創建測試表的 int 型欄位數量
--auto-generate-sql-add-autoincrement : 代表對生成的表自動添加auto_increment列,從5.1.18版本開始
--number-char-cols 創建測試表的 char 型欄位數量。
--create-schema 測試的schema,MySQL中schema也就是database。
--query 使用自定義腳本執行測試,例如可以調用自定義的一個存儲過程或者sql語句來執行測試。
--only-print 如果純運只想列印看看SQL語句是什麼,可以用這個選項。

mysqlslap -umysql -p123 --concurrency=100 --iterations=1 --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --engine=myisam --number-of-queries=10 --debug-info

或:

指定資料庫和sql語句:

mysqlslap -h192.168.3.18 -P4040 --concurrency=100 --iterations=1 --create-schema='test' --query='select * from test;' --number-of-queries=10 --debug-info -umysql -p123

要是看到底做了什麼可以加上:--only-print

Benchmark
Average number of seconds to run all queries: 25.225 seconds
Minimum number of seconds to run all queries: 25.225 seconds
Maximum number of seconds to run all queries: 25.225 seconds
Number of clients running queries: 100
Average number of queries per client: 0

以上表明100個客戶端同時運行要25秒

2、sysbench
安裝:
可以從http://sourceforge.net/projects/sysbench/ 下載
tar zxf sysbench-0.4.12.tar.gz
cd sysbench-0.4.12
./autogen.sh
./configure && make && make install
strip /usr/local/bin/sysbench

安裝時候可能會報錯,後來發現個好文 http://blog.csdn.net/icelemon1314/article/details/7004955 怕以後找不到,也貼過來吧

1.如果mysql不是默認路徑安裝,那麼需要通過指定--with-mysql-includes和--with-mysql-libs參數來載入mysql安裝路徑
2.如果報錯:
../libtool: line 838: X--tag=CC: command not found
../libtool: line 871: libtool: ignoring unknown tag : command not found
../libtool: line 838: X--mode=link: command not found
../libtool: line 1004: *** Warning: inferring the mode of operation is deprecated.: command not found
../libtool: line 1005: *** Future versions of Libtool will require --mode=MODE be specified.: command not found
../libtool: line 2231: X-g: command not found
../libtool: line 2231: X-O2: command not found
那麼執行下根目錄的:autogen.sh文件,然後重新configure && make && make install
3.如果報錯:
sysbench: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
那麼執行下:
n -s /usr/local/mysql5.5/mysql/lib/libmysqlclient.so.18 /usr/lib64/
4.如果執行autogen.sh時,報如下錯誤:
./autogen.sh: line 3: aclocal: command not found
那麼需要安裝一個軟體:
yum install automake
然後需要增加一個參數:查找: AC_PROG_LIBTOOL 將其注釋,然後增加AC_PROG_RANLIB

作用:模擬並發,可以執行CPU/內存/線程/IO/資料庫等方面的性能測試。資料庫目前支持MySQL/Oracle/PostgreSQL

優點:可以指定測試數據的規模,可以單獨測試讀、寫的性能,也可以測試讀寫混合的性能。

不足:測試的時候,由於網路原因,測試的非常慢,但是最終給的結果卻很好,並發支持很高,所以給我的感覺是並不太准確。當然也可能我沒搞明白原理

使用方法:

准備數據
sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=400000 --mysql-db=dbtest2 --mysql-user=root --mysql-host=192.168.1.101 --mysql-password=pwd prepare
執行測試
sysbench --num-threads=100 --max-requests=4000 --test=oltp --mysql-table-engine=innodb --oltp-table-size=400000 --mysql-db=dbtest1 --mysql-user=root --mysql-host=192.168.1.101 --mysql-password=pwd run

sysbench 0.4.12: multi-threaded system evaluation benchmark

No DB drivers specified, using mysql
Running the test with following options:
Number of threads: 100

Doing OLTP test.
Running mixed OLTP test
Using Special distribution (12 iterations, 1 pct of values are returned in 75 pct cases)
Using "BEGIN" for starting transactions
Using auto_inc on the id column
Maximum number of requests for OLTP test is limited to 4000
Threads started!
Done.

OLTP test statistics:
queries performed:
read: 56014
write: 20005
other: 8002
total: 84021
transactions: 4001 (259.14 per sec.)
deadlocks: 0 (0.00 per sec.)
read/write requests: 76019 (4923.75 per sec.)
other operations: 8002 (518.29 per sec.)

Test execution summary:
total time: 15.4393s
total number of events: 4001
total time taken by event execution: 1504.7744
per-request statistics:
min: 33.45ms
avg: 376.10ms
max: 861.53ms
approx. 95 percentile: 505.65ms

Threads fairness:
events (avg/stddev): 40.0100/0.67
execution time (avg/stddev): 15.0477/0.22

3、tpcc-mysql
安裝:
如果從原網站上下載源碼比較麻煩,需要工具、注冊、生成證書等。這里提供一個下載包http://blog.chinaunix.net/blog/downLoad/fileid/8532.html
export C_INCLUDE_PATH=/usr/include/mysql
export PATH=/usr/bin:$PATH
export LD_LIBRARY_PATH=/usr/lib/mysql
cd /tmp/tpcc/src
make
然後就會在 /tmp/tpcc-mysql 下生成 tpcc 命令行工具 tpcc_load 、 tpcc_start

作用:測試mysql資料庫的整體性能

優點:符合tpcc標准,有標準的方法,模擬真實的交易活動,結果比較可靠。

不足:不能單獨測試讀或者寫的性能,對於一些以查詢為主或者只寫的應用,就沒有這么大的意義了。

使用方法:

載入數據
創建庫
mysql>create database tpcc10;
創建表:
shell>mysql tpcc10 < create_table.sql
添加外鍵:
shell>mysql tpcc10 < add_fkey_idx.sql

載入數據:
1、單進程載入:
shell>./tpcc_load 192.168.11.172 tpcc10 root pwd 300
|主機||資料庫||用戶||密碼||warehouse|
2、並發載入:(推薦,但需要修改一下)
shell>./load.sh tpcc300 300
|資料庫||warehouse|
3、測試
./tpcc_start -h192.168.11.172 -d tpcc -u root -p 'pwd' -w 10 -c 10 -r 10 -l 60 -i 10 -f /mnt/hgfs/mysql/tpcc100_2013522.txt
***************************************
*** ###easy### TPC-C Load Generator ***
***************************************
option h with value '192.168.11.172'
option d with value 'tpcc'
option u with value 'root'
option p with value 'pwd'
option w with value '1'
option c with value '100'
option r with value '120'
option l with value '60'
option i with value '10'
option f with value '/mnt/hgfs/mysql/tpcc100_2013522.txt'
<Parameters>
[server]: 192.168.11.172
[port]: 3306
[DBname]: tpcc
[user]: root
[pass]: pwd
[warehouse]: 1
[connection]: 100
[rampup]: 120 (sec.)
[measure]: 60 (sec.)

RAMP-UP TIME.(120 sec.)

MEASURING START.

Ⅵ 如何選擇一個 Linux Tracer

tracer 是一個高級的性能分析和診斷工具,但是不要讓這名詞唬住你,如果你使用過 strace 和tcpmp,其實你就已經使用過 tracer 了。系統 tracer 可以獲取更多的系統調用和數據包。它們通常能跟蹤任意的內核和應用程序。
有太多的 linux tracer 可以選擇。每一種都有其官方的(或非官方的)的卡通的獨角獸吉祥物,足夠撐起一台"兒童劇"了。

那麼我們應該使用哪個 tracer 呢?
我會為兩類讀者回答這個問題,大部分人和性能/內核工程師。過一段時間這些可能會發生變化,我會持續跟進並補充,大概會一年更新一次。
多數人
多數人 (開發者,系統管理員,開發管理者,運維人員,評測人員,等等) 不關心系統追蹤器的細節。下面是對於追蹤器你應該知道和做的:
1. 使用perf_events分析CPU性能

使用 perf_events 做 CPU 性能分析。性能指標可以使用flame graph 等工具做可視化。
git clone --depth 1 https://github.com/brendangregg/FlameGraph
perf record -F 99 -a -g -- sleep 30
perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > perf.svg

Linux perf_events (又稱 "perf",同命令名) 是 Linux 用戶的官方追蹤器和性能分析器。內置於內核代碼,有很好維護(近來獲得快速增強),通常通過 linux 命令行工具包添加。
perf 有很多功能,如果只能推薦一個,我選擇 CPU 性能分析。盡管這只是采樣,而不是從技術上追蹤事件。最難的部分是獲取完整的棧和信息,我為 java 和 node.js 做的一個演講 Linux Profiling at Netflix中已經說過這個問題
2.了解其他的Tracer
正如我一個朋友說的:「你不需要知道如何操作 X 射線機器,但是一旦你吞了一枚硬幣,你得知道這得去做 X 射線」,你應該了解各種 tracer 都能做什麼,這樣就能在你工作中真正需要 tracer 的時候,你既可以選擇稍後學習使用,也可以雇相應的人來完成。
簡短來說:幾乎所有的東西都可以使用 tracer 來進行分析和跟蹤。如,文件系統,網路處理器,硬體驅動器,全部的應用程序。可以看一下我的個人網站上關於 ftrace的文章,還有我寫的關於perf_events 文檔介紹,可以做為一個追蹤(或者性能分析)的例子。
3. 尋求前端支持工具

如果你正想買一個能支持跟蹤 Linux 的性能分析工具(有許多賣這類工具的公司)。想像一下,只需要直接點擊一下界面就能「洞察」整個系統內核,包括隱藏的不同堆棧位置的熱圖,我在Monitorama talk 中介紹了一個這樣帶圖形界面的工具。
我開源了一些我自己開發的前端工具,盡管只是 CLI (命令行界面)而不是(圖形界面)。這些工具也會讓人們更加快速容易的使用 tracer。比如下面的例子,用我的 perf_tool,跟蹤一個新進程:
# ./execsnoopTracing exec()s. Ctrl-C to end.
PID PPID ARGS
22898 22004 man ls
22905 22898 preconv -e UTF-8
22908 22898 pager -s
22907 22898 nroff -mandoc -rLL=164n -rLT=164n -Tutf8
[...]

在 Netflix 上,我們創建了一個 Vector,一個分析工具的實例同時也是 Linux 上的 tracer 的最終前端。
致性能或內核工程師

我們的工作變的越來越困難,很多的人會問我們怎麼樣去追蹤,哪種路徑可以用!為了正確理解一個路徑,你經常需要花上至少100個小時才能做到。理解所有的 linux 路徑去做出理性的決定是一個浩大的工程。(我可能是唯一一個接近做到這件事情的人)
這里是我的建議,可以二選其一:
A) 選中一個全能的路徑,並且使它標准化,這將涉及花費大量的時間去弄清楚它在測試環境中的細微差別和安全性。我現在推薦 SystemTap 的最新版本(ie,從源代碼構建)。我知道有些公司已經選用 LTTng,而且他們用的很好,盡管它不是非常的強大(雖然它更安全)。Sysdig 可以成為另一個候選如果它可以增加追蹤點或者 kprobes。
B) 遵循我上面提供的流程圖,它將意味著盡可能更多的使用 ftrace 或者 perf_event, eBPF 會得到整合,之後其他的路徑像 SystemTap/LTTng 會去填補這個空白。這就是我目前在 Netflix 做的工作。
tracer 的評論:
1. ftrace
我喜歡用 ftrace,它是內核 hacker 的首選,內置於系統內核,可以使用跟蹤點(靜態檢查點),能調用內核 kprobes 和 uprobes 調試工具。並且提供幾個這樣的功能:帶可選過濾器和參數的事件追蹤功能;在內核中進行統計的事件計數和定時功能;還有函數流程遍歷的功能。可以看一下內核代碼中 ftrace.txt 例子了解一下。ftrace 由 /sys 控制,僅支持單一的 root 用戶使用(但是你可以通過緩沖區實例破解以支持多用戶)。某些時候 Ftrace 的操作界面非常繁瑣,但是的確非常「hack」,而且它有前端界面。Steven Rostedt,ftace 的主要作者,創建了 trace-cmd 命令工具,而我創建了 perf 的工具集。我對這個工具最大的不滿就是它不可編程。舉例來說,你不能保存和獲取時間戳,不能計算延遲,不能把這些計算結果保存成直方圖的形式。你需要轉儲事件至用戶級別,並且花一些時間去處理結果。ftrace 可以通過 eBPF 變成可編程的。
2.perf_events

perf_events 是 Linux 用戶的主要跟蹤工具,它內置在內核源碼中,通常通過 linux-tools-commom 加入。也稱「perf」,同前端工具名稱,通常用來跟蹤和轉儲信息到一個叫做 perf.data 的文件中,perf.data 文件相當於一個動態的緩沖區,用來保存之後需要處理的結果。ftrace 能做到的,perf_events 大都也可以做到,perf-events 不能做函數流程遍歷,少了一點兒「hack」勁兒(但是對於安全/錯誤檢查有更好的支持)。它可以進行 CPU 分析和性能統計,用戶級堆棧解析,也可以使用對於跟蹤每行局部變數產生的調試信息。它也支持多用戶並發操作。和 ftrace 一樣也不支持可編程。如果要我只推薦一款 tracer,那一定是 perf 了。它能解決眾多問題,並且它相對較安全。
3. eBPF

extended Berkeley Packet Filter(eBPF)是一個可以在事件上運行程序的高效內核虛擬機(JIT)。它可能最終會提供 ftrace 和 perf_events 的內核編程,並強化其他的 tracer。這是 Alexei Starovoitov 目前正在開發的,還沒有完全集成,但是從4.1開始已經對一些優秀的工具有足夠的內核支持了,如塊設備I/O的延遲熱圖。可參考其主要作者 Alexei Starovoitov 的BPF slides和eBPF samples。
4. SystemTap

SystemTap 是最強大的tracer。它能做所有事情,如概要分析,跟蹤點,探針,uprobes(來自SystemTap),USDT和內核編程等。它將程序編譯為內核模塊,然後載入,這是一種獲取安全的巧妙做法。它也是從tree發展而來,在過去有很多問題(多的可怕)。很多不是 SystemTap 本身的錯——它常常是第一個使用內核追蹤功能,也是第一個碰到 bug 的。SystemTap 的最新版本好多了(必須由源代碼編譯),但是很多人仍然會被早期版本嚇到。如果你想用它,可先在測試環境中使用,並與irc.freenode.net上 的 #systemtap 開發人員交流。(Netflix 有容錯機制,我們已經使用了 SystemTap,但是可能我們考慮的安全方面的問題比你們少。)我最大的不滿是,它似乎認為你有常常沒有的內核 debug 信息。實際上沒有它也能做很多事情,但是缺少文檔和例子(我必須自己全靠自己開始學習)。
5. LTTng
LTTng 優化了事件採集,這比其他 tracers 做得好。它從 tree 發展而來,它的核心很簡單:通過一組小規模的固定指令集將事件寫入追蹤緩沖區,這種方式使它安全、快速,缺點是它沒有內核編碼的簡單途徑。我一直聽說這不是一個大問題,因為盡管需要後期處理,它也已經優化到可以充分的度量。此外,它還首創了一個不同的分析技術,更多對所有關注事件的黑盒記錄將稍後以 GUI 的方式進行研究。我關心的是前期沒有考慮到要錄制的事件缺失問題如何解決,但我真正要做的是花更多時間來看它在實踐中用的怎麼樣。這是我花的時間最少的一個 tracer(沒有什麼特殊原因)。
6. Ktap
ktap 在過去是一款前景很好的 tracer,它使用內核中的 lua 虛擬機處理,在沒有調試信息的情況下在嵌入式設備上運行的很好。它分為幾個步驟,並在有一段時間似乎超過了 Linux 上所有的追蹤器。然後 eBPF 開始進行內核集成,而 ktap 的集成在它可以使用 eBPF 替代它自己的虛擬機後才開始。因為 eBPF 仍將持續集成幾個月,ktap 開發者要繼續等上一段時間。我希??今年晚些時候它能重新開發。
7. dtrace4linux

dtrace4linux 主要是 Paul Fox 一個人在業余時間完成的,它是 Sun DTrace 的 Linux 版本。它引入矚目,還有一些 provider 可以運行,但是從某種程度上來說還不完整,更多的是一種實驗性的工具(不安全)。我認為,顧忌到許可問題,人們會小心翼翼的為 dtrace4linux 貢獻代碼:由於當年 Sun 開源DTrace 使用的是 CDDL 協議,而 dtrace4linux 也不大可能最終進入 Linux kernel。Paul 的方法很可能會使其成為一個 add-on。我很樂意看到 Linux 平台上的 DTrace 和這個項目的完成,我認為當我加入 Netflix 後將會花些時間來協助完成這個項目。然而,我還是要繼續使用內置的 tracers,如 ftrace 和 perf_events。
8.OL DTrace

Oracle Linux DTrace為了將 DTrace 引入 Linux,特別是 Oracle Linux,做出了很大的努力。這些年來發布的多個版本表明了它的穩定進展。開發者們以一種對這個項目的前景看好的態度談論著改進 DTrace 測試套件。很多有用的 provider 已經完成了,如:syscall, profile, sdt, proc, sched 以及 USDT。我很期待 fbt(function boundary tracing, 用於內核動態跟蹤)的完成,它是 Linux 內核上非常棒的 provider。OL DTrace 最終的成功將取決於人們對運行 Oracle Linux(為技術支持付費)有多大興趣,另一方面取決於它是否完全開源:它的內核元件是開源的,而我沒有看到它的用戶級別代碼。
9. sysdig

sysdig是一個使用類tcpmp語法來操作系統事件的新tracer,它使用lua提交進程。它很優秀,它見證了系統跟蹤領域的變革。它的局限性在於它只在當前進行系統調用,在提交進行時將所有事件轉儲為用戶級別。你可以使用系統調用做很多事情,然而我還是很希望它能支持跟蹤點、kprobe和uprobe。我還期待它能支持eBPF做內核摘要。目前,sysdig開發者正在增加容器支持。留意這些內容。
延伸閱讀

我關於 tracer 的工作包括:
ftrace:我的 perf-tools工具集(參考實例目錄);我在 lwn.net 上的 關於ftrace的文章;LISA14的發言;還有帖子:函數計數, iosnoop,opensnoop,execsnoop,TCP轉發, uprobes 以及USDT。
perf_evenets:我的網頁 perf_events實例;SCALE上的發言Netflix的Linux性能分析;還有帖子CPU采樣,靜態追蹤點,熱點圖,計數,內核行追蹤,off-CPU時間圖。
eBPF:帖子eBPF:邁出一小步,和一些BPF工具(我需要發布更多)。
SystemTap:我很久以前寫了一篇有點過期的帖子使用SystemTap。最近,我發布了一些工具systemtap-lwtools來演示如何在沒有內核診斷信息的情況下使用SystemTap。
LTTng:我只花了一點時間,還不足以發表任何內容。
ktap:我的網頁ktap實例包含一些早期版本的單行小程序和腳本。
dtrace4linux:我在系統性能一書中給出了一些實例,並曾經開發了一些小的修復程序,如timestamps。
OL DTrace:由於它直接由DTrace轉變而來,很多我早期關於DTrace的工作都有相關性(如果在這里給出鏈接的話就太多了,可以在我的主頁上搜索)。當它更完善時,我會開發一些特殊工具。
sysdig:我向 fileslower 和 subsecond offset spectrogram 貢獻了代碼。
其他:我寫了關於strace 的注意事項。
請不要有更多的 tracer!如果你想知道為什麼 Linux 不僅僅只有一個 tracer,或者只用本身的DTrace,你可以在我的演講稿從DTrace到Linux中找到答案,從28張幻燈片開始。
感謝Deirdré Straughan的編輯,以及與 General Zoi 的小馬寶莉創作者一起創作的 tracing 小馬。

Ⅶ 如何選擇一個 Linux Tracer

tracer 是一個高級的性能分析和診斷工具,但是不要讓這名詞唬住你,如果你使用過 strace 和tcpmp,其實你就已經使用過 tracer 了。系統 tracer 可以獲取更多的系統調用和數據包。它們通常能跟蹤任意的內核和應用程序。
有太多的 linux tracer 可以選擇。每一種都有其官方的(或非官方的)的卡通的獨角獸吉祥物,足夠撐起一台"兒童劇"了。

那麼我們應該使用哪個 tracer 呢?
我會為兩類讀者回答這個問題,大部分人和性能/內核工程師。過一段時間這些可能會發生變化,我會持續跟進並補充,大概會一年更新一次。
多數人
多數人 (開發者,系統管理員,開發管理者,運維人員,評測人員,等等) 不關心系統追蹤器的細節。下面是對於追蹤器你應該知道和做的:
1. 使用perf_events分析CPU性能

使用 perf_events 做 CPU 性能分析。性能指標可以使用flame graph 等工具做可視化。
git clone --depth 1 https://github.com/brendangregg/FlameGraph
perf record -F 99 -a -g -- sleep 30
perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > perf.svg

Linux perf_events (又稱 "perf",同命令名) 是 Linux 用戶的官方追蹤器和性能分析器。內置於內核代碼,有很好維護(近來獲得快速增強),通常通過 linux 命令行工具包添加。
perf 有很多功能,如果只能推薦一個,我選擇 CPU 性能分析。盡陵友管這只是采樣,而不是從技術上追蹤事件。最難的部分是獲取完整的棧和信息,我為 java 和 node.js 做的一個演講 Linux Profiling at Netflix中已經說過這個問題
2.了解其他的Tracer
正如我一個朋友說的:「你不需要知道如何操作 X 射線機器,但是一旦你吞了一枚硬幣,你得知道這得去做 X 射線」,你應該了解各種 tracer 都能做什麼,這樣就能在你工作中真正需要 tracer 的時候,你既可以選擇稍後學習使用,也可以雇相應的人來完成。
簡短來說:幾乎所有的東西都可以使用 tracer 來尺手槐進行分析和跟蹤。如,文件系統,網路處理器,硬體驅動器,全部的應用程序。可以看一下我的個人網站上關於 ftrace的文章,還有我寫的薯螞關於perf_events 文檔介紹,可以做為一個追蹤(或者性能分析)的例子。
3. 尋求前端支持工具

如果你正想買一個能支持跟蹤 Linux 的性能分析工具(有許多賣這類工具的公司)。想像一下,只需要直接點擊一下界面就能「洞察」整個系統內核,包括隱藏的不同堆棧位置的熱圖,我在Monitorama talk 中介紹了一個這樣帶圖形界面的工具。
我開源了一些我自己開發的前端工具,盡管只是 CLI (命令行界面)而不是(圖形界面)。這些工具也會讓人們更加快速容易的使用 tracer。比如下面的例子,用我的 perf_tool,跟蹤一個新進程:
# ./execsnoopTracing exec()s. Ctrl-C to end.
PID PPID ARGS
22898 22004 man ls
22905 22898 preconv -e UTF-8
22908 22898 pager -s
22907 22898 nroff -mandoc -rLL=164n -rLT=164n -Tutf8
[...]

在 Netflix 上,我們創建了一個 Vector,一個分析工具的實例同時也是 Linux 上的 tracer 的最終前端。
致性能或內核工程師

我們的工作變的越來越困難,很多的人會問我們怎麼樣去追蹤,哪種路徑可以用!為了正確理解一個路徑,你經常需要花上至少100個小時才能做到。理解所有的 linux 路徑去做出理性的決定是一個浩大的工程。(我可能是唯一一個接近做到這件事情的人)
這里是我的建議,可以二選其一:
A) 選中一個全能的路徑,並且使它標准化,這將涉及花費大量的時間去弄清楚它在測試環境中的細微差別和安全性。我現在推薦 SystemTap 的最新版本(ie,從源代碼構建)。我知道有些公司已經選用 LTTng,而且他們用的很好,盡管它不是非常的強大(雖然它更安全)。Sysdig 可以成為另一個候選如果它可以增加追蹤點或者 kprobes。
B) 遵循我上面提供的流程圖,它將意味著盡可能更多的使用 ftrace 或者 perf_event, eBPF 會得到整合,之後其他的路徑像 SystemTap/LTTng 會去填補這個空白。這就是我目前在 Netflix 做的工作。
tracer 的評論:
1. ftrace
我喜歡用 ftrace,它是內核 hacker 的首選,內置於系統內核,可以使用跟蹤點(靜態檢查點),能調用內核 kprobes 和 uprobes 調試工具。並且提供幾個這樣的功能:帶可選過濾器和參數的事件追蹤功能;在內核中進行統計的事件計數和定時功能;還有函數流程遍歷的功能。可以看一下內核代碼中 ftrace.txt 例子了解一下。ftrace 由 /sys 控制,僅支持單一的 root 用戶使用(但是你可以通過緩沖區實例破解以支持多用戶)。某些時候 Ftrace 的操作界面非常繁瑣,但是的確非常「hack」,而且它有前端界面。Steven Rostedt,ftace 的主要作者,創建了 trace-cmd 命令工具,而我創建了 perf 的工具集。我對這個工具最大的不滿就是它不可編程。舉例來說,你不能保存和獲取時間戳,不能計算延遲,不能把這些計算結果保存成直方圖的形式。你需要轉儲事件至用戶級別,並且花一些時間去處理結果。ftrace 可以通過 eBPF 變成可編程的。
2.perf_events

perf_events 是 Linux 用戶的主要跟蹤工具,它內置在內核源碼中,通常通過 linux-tools-commom 加入。也稱「perf」,同前端工具名稱,通常用來跟蹤和轉儲信息到一個叫做 perf.data 的文件中,perf.data 文件相當於一個動態的緩沖區,用來保存之後需要處理的結果。ftrace 能做到的,perf_events 大都也可以做到,perf-events 不能做函數流程遍歷,少了一點兒「hack」勁兒(但是對於安全/錯誤檢查有更好的支持)。它可以進行 CPU 分析和性能統計,用戶級堆棧解析,也可以使用對於跟蹤每行局部變數產生的調試信息。它也支持多用戶並發操作。和 ftrace 一樣也不支持可編程。如果要我只推薦一款 tracer,那一定是 perf 了。它能解決眾多問題,並且它相對較安全。
3. eBPF

extended Berkeley Packet Filter(eBPF)是一個可以在事件上運行程序的高效內核虛擬機(JIT)。它可能最終會提供 ftrace 和 perf_events 的內核編程,並強化其他的 tracer。這是 Alexei Starovoitov 目前正在開發的,還沒有完全集成,但是從4.1開始已經對一些優秀的工具有足夠的內核支持了,如塊設備I/O的延遲熱圖。可參考其主要作者 Alexei Starovoitov 的BPF slides和eBPF samples。
4. SystemTap

SystemTap 是最強大的tracer。它能做所有事情,如概要分析,跟蹤點,探針,uprobes(來自SystemTap),USDT和內核編程等。它將程序編譯為內核模塊,然後載入,這是一種獲取安全的巧妙做法。它也是從tree發展而來,在過去有很多問題(多的可怕)。很多不是 SystemTap 本身的錯——它常常是第一個使用內核追蹤功能,也是第一個碰到 bug 的。SystemTap 的最新版本好多了(必須由源代碼編譯),但是很多人仍然會被早期版本嚇到。如果你想用它,可先在測試環境中使用,並與irc.freenode.net上 的 #systemtap 開發人員交流。(Netflix 有容錯機制,我們已經使用了 SystemTap,但是可能我們考慮的安全方面的問題比你們少。)我最大的不滿是,它似乎認為你有常常沒有的內核 debug 信息。實際上沒有它也能做很多事情,但是缺少文檔和例子(我必須自己全靠自己開始學習)。
5. LTTng
LTTng 優化了事件採集,這比其他 tracers 做得好。它從 tree 發展而來,它的核心很簡單:通過一組小規模的固定指令集將事件寫入追蹤緩沖區,這種方式使它安全、快速,缺點是它沒有內核編碼的簡單途徑。我一直聽說這不是一個大問題,因為盡管需要後期處理,它也已經優化到可以充分的度量。此外,它還首創了一個不同的分析技術,更多對所有關注事件的黑盒記錄將稍後以 GUI 的方式進行研究。我關心的是前期沒有考慮到要錄制的事件缺失問題如何解決,但我真正要做的是花更多時間來看它在實踐中用的怎麼樣。這是我花的時間最少的一個 tracer(沒有什麼特殊原因)。
6. Ktap
ktap 在過去是一款前景很好的 tracer,它使用內核中的 lua 虛擬機處理,在沒有調試信息的情況下在嵌入式設備上運行的很好。它分為幾個步驟,並在有一段時間似乎超過了 Linux 上所有的追蹤器。然後 eBPF 開始進行內核集成,而 ktap 的集成在它可以使用 eBPF 替代它自己的虛擬機後才開始。因為 eBPF 仍將持續集成幾個月,ktap 開發者要繼續等上一段時間。我希??今年晚些時候它能重新開發。
7. dtrace4linux

dtrace4linux 主要是 Paul Fox 一個人在業余時間完成的,它是 Sun DTrace 的 Linux 版本。它引入矚目,還有一些 provider 可以運行,但是從某種程度上來說還不完整,更多的是一種實驗性的工具(不安全)。我認為,顧忌到許可問題,人們會小心翼翼的為 dtrace4linux 貢獻代碼:由於當年 Sun 開源DTrace 使用的是 CDDL 協議,而 dtrace4linux 也不大可能最終進入 Linux kernel。Paul 的方法很可能會使其成為一個 add-on。我很樂意看到 Linux 平台上的 DTrace 和這個項目的完成,我認為當我加入 Netflix 後將會花些時間來協助完成這個項目。然而,我還是要繼續使用內置的 tracers,如 ftrace 和 perf_events。
8.OL DTrace

Oracle Linux DTrace為了將 DTrace 引入 Linux,特別是 Oracle Linux,做出了很大的努力。這些年來發布的多個版本表明了它的穩定進展。開發者們以一種對這個項目的前景看好的態度談論著改進 DTrace 測試套件。很多有用的 provider 已經完成了,如:syscall, profile, sdt, proc, sched 以及 USDT。我很期待 fbt(function boundary tracing, 用於內核動態跟蹤)的完成,它是 Linux 內核上非常棒的 provider。OL DTrace 最終的成功將取決於人們對運行 Oracle Linux(為技術支持付費)有多大興趣,另一方面取決於它是否完全開源:它的內核元件是開源的,而我沒有看到它的用戶級別代碼。
9. sysdig

sysdig是一個使用類tcpmp語法來操作系統事件的新tracer,它使用lua提交進程。它很優秀,它見證了系統跟蹤領域的變革。它的局限性在於它只在當前進行系統調用,在提交進行時將所有事件轉儲為用戶級別。你可以使用系統調用做很多事情,然而我還是很希望它能支持跟蹤點、kprobe和uprobe。我還期待它能支持eBPF做內核摘要。目前,sysdig開發者正在增加容器支持。留意這些內容。
延伸閱讀

我關於 tracer 的工作包括:
ftrace:我的 perf-tools工具集(參考實例目錄);我在 lwn.net 上的 關於ftrace的文章;LISA14的發言;還有帖子:函數計數, iosnoop,opensnoop,execsnoop,TCP轉發, uprobes 以及USDT。
perf_evenets:我的網頁 perf_events實例;SCALE上的發言Netflix的Linux性能分析;還有帖子CPU采樣,靜態追蹤點,熱點圖,計數,內核行追蹤,off-CPU時間圖。
eBPF:帖子eBPF:邁出一小步,和一些BPF工具(我需要發布更多)。
SystemTap:我很久以前寫了一篇有點過期的帖子使用SystemTap。最近,我發布了一些工具systemtap-lwtools來演示如何在沒有內核診斷信息的情況下使用SystemTap。
LTTng:我只花了一點時間,還不足以發表任何內容。
ktap:我的網頁ktap實例包含一些早期版本的單行小程序和腳本。
dtrace4linux:我在系統性能一書中給出了一些實例,並曾經開發了一些小的修復程序,如timestamps。
OL DTrace:由於它直接由DTrace轉變而來,很多我早期關於DTrace的工作都有相關性(如果在這里給出鏈接的話就太多了,可以在我的主頁上搜索)。當它更完善時,我會開發一些特殊工具。
sysdig:我向 fileslower 和 subsecond offset spectrogram 貢獻了代碼。
其他:我寫了關於strace 的注意事項。
請不要有更多的 tracer!如果你想知道為什麼 Linux 不僅僅只有一個 tracer,或者只用本身的DTrace,你可以在我的演講稿從DTrace到Linux中找到答案,從28張幻燈片開始。
感謝Deirdré Straughan的編輯,以及與 General Zoi 的小馬寶莉創作者一起創作的 tracing 小馬。

閱讀全文

與ebpf編譯性能相關的資料

熱點內容
銀河v10驅動重編譯 瀏覽:889
電腦上文件夾右擊就會崩潰 瀏覽:689
右美維持演算法 瀏覽:938
php基礎編程教程pdf 瀏覽:219
穿越之命令與征服將軍 瀏覽:351
android廣播重復 瀏覽:832
像阿里雲一樣的伺服器 瀏覽:318
水冷空調有壓縮機嗎 瀏覽:478
訪問日本伺服器可以做什麼 瀏覽:433
bytejava詳解 瀏覽:449
androidjava7 瀏覽:385
伺服器在山洞裡為什麼還有油 瀏覽:886
天天基金app在哪裡下載 瀏覽:974
伺服器軟路由怎麼做 瀏覽:292
冰箱壓縮機出口 瀏覽:229
OPT最佳頁面置換演算法 瀏覽:645
網盤忘記解壓碼怎麼辦 瀏覽:853
文件加密看不到裡面的內容 瀏覽:654
程序員腦子里都想什麼 瀏覽:434
oppp手機信任app在哪裡設置 瀏覽:189