Try   HackMD

2017q1 Homework1 (phonebook)

contributed by <chadcoco1222>

中英文字間請以空白隔開,下方以幫忙修改完畢
課程助教

謝助教提醒
chadcoco1222

Reviewed by sufuf3

  • commit messages 太多一樣的,卻是不同的hash,倘若想改前一個commit的內容,應該於改完檔案後,使用git add <file>, git commit --amend 改寫原本的commit。
    或是使用git rebase -i HEAD~x, squash commit 或是edit commit 會讓commit messages比較漂亮。
    另外,commit message 描述需要多一點可讀性。adding_PHONE_BOOK_INFO 這不是function,這樣的message會令人困惑。
  • branch 開的有點亂,在branch 上應該可以再簡潔一點。

開發環境

  • Ubuntu 16.04(64-bit)
wjc@wjc-P43E:~$ lscpu
Architecture:          x86_64
CPU 作業模式:    32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
每核心執行緒數:2
每通訊端核心數:2
Socket(s):             1
NUMA 節點:         1
供應商識別號:  GenuineIntel
CPU 家族:          6
型號:              42
Model name:            Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz
製程:              7
CPU MHz:             800.050
CPU max MHz:           2100.0000
CPU min MHz:           800.0000
BogoMIPS:              4190.53
虛擬:              VT-x
L1d 快取:          32K
L1i 快取:          32K
L2 快取:           256K
L3 快取:           3072K
NUMA node0 CPU(s):     0-3

學習目標

  • 學習 perf
  • 改善 phonebook 效能

Perf

perf 原理和實務

#最後如果要檢測 cache miss event ,需要先取消 kernel pointer 的禁用。
$ sudo sh -c " echo 0 > /proc/sys/kernel/kptr_restrict"

louielu: 共筆

Phonebook案例分析

程式分析

  • main.c 分析
    第一眼掃下來就注意到這行程式碼

    ​​​​#if defined(__GNUC__) ​​​​__builtin___clear_cache((char *) pHead, (char *) pHead +sizeof(entry)); ​​​​#endif

    後來發現了這行

    ​​​​#include IMPL

未優化

優化後

縮小 struct 的 size

使用hash來減低尋找的時間

進展太慢,你到底花了多少時間在作業上呢? jserv

Reference