# 2017q1 Homework1 (phonebook) contributed by <`chadcoco1222`> >中英文字間請以空白隔開,下方以幫忙修改完畢 >[name=課程助教][color=red] >>謝助教提醒 >>[name=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) ```shell 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 原理和實務](https://hackmd.io/s/B11109rdg) ```shell #最後如果要檢測 cache miss event ,需要先取消 kernel pointer 的禁用。 $ sudo sh -c " echo 0 > /proc/sys/kernel/kptr_restrict" ``` * 何謂 kernel pointer? * 為什麼 kptr_restrict 被設為 0 就可以檢測 cache miss event? https://www.kernel.org/doc/Documentation/sysctl/kernel.txt * 有哪些 trace/debug 工具使用tracepoint? #### louielu: [共筆](https://hackmd.io/s/BJjL6cQ6) ## Phonebook案例分析 ### 程式分析 - main.c 分析 第一眼掃下來就注意到這行程式碼 ```c==52 #if defined(__GNUC__) __builtin___clear_cache((char *) pHead, (char *) pHead +sizeof(entry)); #endif ``` 後來發現了這行 ```c==6 #include IMPL ``` ### 未優化  ### 優化後 ##### 縮小 struct 的 size  ##### 使用hash來減低尋找的時間 :::danger 進展太慢,你到底花了多少時間在作業上呢? --jserv ::: ## Reference
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up