contributed by < Jeffbla
>
commit 2ac0bab
使用 longjmp
與 setjmp
實作。
commit 0142a21
將 draw_board
移到 userspace , kernelspace 只負責紀錄 table
。當 user 需要繪製, kernel 會將 table
資訊傳給 user。
commit 2304e60
將原本的棋盤從利用 char
儲存、處理,變成 uint32_t
透過 bitop 縮減運算與傳輸成本。
下面為在 10 秒內的利用 strace
的統計資料
更動前:
使用 uint32_t
作為棋盤:
乍看之下,更動後的 read
系統呼叫從 58494
到 60247
,整體系統呼叫從 175521
增加到 180780
,效能變差,但由於監測項目不斷執行,因此實際上這些數值,代表在 10 秒內運行了多少系統呼叫,數值越大,代表程式在相同運行較快。
另外,關注於時間的佔比, read
系統呼叫從 19.27%
到 19.03%
佔比減少意味著改進的效能的提昇,這種效能提昇可以在 usecs/call
明顯的發現, read
從 3 變成 2 ,少了 1 微秒。
對照 Ftrace 的輸出分析。
若用 perf
觀察 cycles
、 instructions
、 cache-misses
、 mem-stores
:
Metric | Before | After |
---|---|---|
cpu_atom/cycles | 1K | 2K |
cpu_core/cycles | 2K | 2K |
cpu_atom/instructions | 3K | 4K |
cpu_core/instructions | 10K | 8K |
cpu_atom/cache-misses | 517 | 659 |
cpu_core/cache-misses | 1K | 1K |
cpu_atom/mem-stores | 3K | 3K |
cpu_core/mem-stores | 11K | 6K |
根據 Metric
表格,整體記憶體的操作從 14K 減少到 9K。