PC_Shopping 板


LINE

※ 引述《s25g5d4 (function(){})()》之銘言: : 1 ; rcx = kernel address : 2 ; rbx = probe array : 3 retry: : 4 mov al, byte [rcx] : 5 shl rax, 0xc : 6 jz retry : 7 mov rbx, qword [rbx + rax] 前文恕刪。 沒想到電蝦版鄉民這麼有志於學,我來更正並補充一些觀念好了 首先,來解釋幾個名詞: 1. speculative execution 例: if (a<b) c = b+1 else c = b+2 現代處理器都有分支預測器(branch predictor)去預測接下來程式會往哪走 然後就往那個方向執行下去,以範例來說,如果處理器覺得if會成立 那他不用等到(a<b)算出來,就可以先執行 c = b+1的部分 2. out-of-order exection 例: b = a * 2 c = b + 5 d = a + 10 這個例子中,第1行和第3行並沒有資料相關性(data dependency) 所以1,3行可以一起執行,第2行則需等到第1行 a*2 算出來才可執行 執行順序為(1, 3),然後(2) 3. in order retirement 雖然執行次序可以亂,但是retire指令仍要依序來 以第一個例子來說,如果if指令還沒有retire,那麼暫存器c就不會真正被寫入 回到paper例子,這個例子主要是利用speculative execution 第4行前面其實是有一個很難算出來的branch,比方說indirect jmp 根據某個記憶體內容,來決定要跳到哪,這個記憶體內容可能不在cache裡 所以要從dram那邊讀出來要很久,這個時候分支預測器就跳出來說話了 說接下來可能會從第4行開始執行,所以4,5,6,7行就這麼執行下去了 (註:4,5,7有資料相關性,因此會依序執行) 他們可以執行到前面的branch算出來,發現預測錯誤為止 第4行是把kernel的資料搬一個byte存到暫存器rax裡 由於intel在執行指令的時候沒有檢查權限,而是等到要retire了才檢查 從結果上來看,雖然rax最終都沒有被真正寫入,但是第4行終究被執行了 kernel的資料被搬到了rax的rename register(T1) 然後T1向左移了12個bit(第5行) 最後第7行,從[rbx+T1]這個user位址中讀了一個cache line出來 執行到此,第4行前面的那條指令終於算出來了,發現錯了 把rax, rbx的資料都還原回去,就當作沒有讀過kernel的資料 也有可能他預測對了,終於可以retire,retire完之後 接下來要retire第4行的指令,結果發現他根本沒有權限讀取資料 一樣也把rax, rbx的資料還原回去,當作沒有讀過kernel的資料 可是不管怎樣,第7行的那個cache line還是被搬到了cache裡 而且這個cache line還是user可以合法存取的 所以接下來駭客只需要合法的存取256(2^8)個cache line 看哪一個比較快,就知道kernel資料的那8個bit是什麼了 例如第4個cache line讀起來比較快,那8個bit就是00000100 這裡補充一點,現在學界普遍認為資料預取(data prefetch)不會越過page boundary 由於第5行shift 12個bit的關係,這256個cache line分別位於不同的page 所以存取第一個cache line並不會造成後面的cache line也被cpu預先搬到cache來 由於他們都位於不同page的關係,需要不同的位址轉換(tlb entry) 只有之前讀過的cache line那個page有做過位址轉換,因此tlb hit 其他的通通都tlb miss,要花很長時間做table walk 轉換完位址之後,cache miss又要去記憶體搬資料 因此跟之前第7行讀過的cache line比起來,讀取的執行時間差異又更大了 大概就這樣 至於白話文解釋和解法,去看我之前的回文吧#1QJRc-vL --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 136.62.164.18
※ 文章網址: https://webptt.com/m.aspx?n=bbs/PC_Shopping/M.1515139158.A.DC1.html
1F:推 ericinttu : 有白話給個推 01/05 16:04
2F:推 jclin : 簡單說就是micro-architecute跟uOPs沒有檢查權限 01/05 16:04
3F:→ jclin : 所以讀進[rcx],做了乘法,又prefetch[rbx+rax] 01/05 16:06
4F:→ jclin : 因為要盡量塞滿CPU執行單元,記憶體會盡量滿足要求 01/05 16:06
5F:→ jclin : 讓資料一ready就可以讓這些uOPs去計算 01/05 16:07
6F:→ jclin : 沒檢查權限又塞進cache,最後就能被side-channel 01/05 16:08
7F:推 DANTEINFERNO: 所以說 怎麼會設計成不先確認權限再開始算R 484偷吃 01/05 16:09
8F:→ DANTEINFERNO: 步過頭了? 01/05 16:09
9F:→ jclin : 基本上rax,rbx資料不用還原,因為是在uOPs內做 01/05 16:09
10F:→ jclin : 只是到最後發現白做,就 flush 不用存回 rax/rbx 01/05 16:09
11F:推 a58524andy : 推熱心 01/05 16:10
12F:→ twlin : 還原就白話說法嘛,實際上當然是flush掉相關的 01/05 16:11
13F:→ twlin : physical register(rename register) 01/05 16:11
14F:推 s25g5d4 : 所以 porbe array 要對齊 page 的原因是這樣,我還 01/05 16:12
15F:→ s25g5d4 : 以為是要讀整個 page 進 cache 01/05 16:12
16F:→ s25g5d4 : 當初看的時候也搞不清楚為什麼 cache line 查到的大 01/05 16:12
17F:→ s25g5d4 : 小都是 64 bytes, 卻要做 shift 12 01/05 16:13
18F:→ twlin : 是要讓256個可能的cache line分別在不同的page 01/05 16:15
19F:推 ATand : 看完這篇再跟白話解釋對照就大致明白了 01/05 16:20
20F:推 ununnihao : 所以這根本有可能是為了效能故意這樣設計的? 01/05 16:29
21F:推 likeyousmile: 推專業文。PTT清流 01/05 16:31
22F:推 KotoriCute : Meltdown 的部分應該是吧 01/05 16:31
23F:→ twlin : 理論上來說,在tlb做位址轉換時就可以順便檢查權限 01/05 16:35
24F:→ twlin : 可能他們檢查權限太慢,無法meet timing,所以等到 01/05 16:35
25F:→ twlin : 之後retire再慢慢做,也可能是貪圖方便,在retire時 01/05 16:36
26F:→ twlin : 由ROB一併處理各種exception 01/05 16:36
27F:推 jclin : meltdown是這樣,spectre是更generalized.只靠分支預 01/05 16:39
28F:→ jclin : 測,不需要記憶體保護機制,但更難實作與成功,卻也更 01/05 16:39
29F:→ jclin : 難防 01/05 16:39
30F:推 jclin : 叫 xxlin 都有這麼神嗎 01/05 16:44
31F:推 Windcws9Z : twlin版友 印像是AMD的@@ 01/05 16:49
32F:推 Shauter : 又是AMD狂戰士 01/05 16:50
33F:→ Windcws9Z : 不知道有沒有記錯 01/05 16:50
34F:→ kobe8112 : jc大是拐著彎稱讚自己嗎XDD 01/05 16:51
35F:推 kipi91718 : 話說要怎麼寫判斷是不是cache hit的存取時間阿? 01/05 16:52
36F:推 jclin : 原來早在 oversea_job 拜讀過 twlin 大大推文,一時 01/05 17:10
37F:→ jclin : 不察 01/05 17:10
38F:→ jclin : cache hit/miss這很早就做出啦. x86有很精準的rdtsc 01/05 17:13
39F:→ jclin : 可以算cycle 01/05 17:13
40F:→ StarHero : 的確是酒杯那個比喻比較恰當 01/05 17:56
41F:推 TaiwanFight : 看下來感覺intel沒啥問題 問題終究在那些駭客吧 01/05 21:37
42F:→ TaiwanFight : 把駭客抓一抓就好啦 01/05 21:37
43F:推 ken720331 : 樓上這個建議不錯..可以提供給intel 01/05 21:49
44F:推 hizerg : 推 這篇說得很白話 01/05 21:52
45F:推 NCTUFAIWEN : 推 看到這篇終於懂惹 感謝你 01/06 01:01
46F:推 ry3298 : 推 01/06 13:50
47F:推 hms5232 : 看了一些文章後去搜尋一大堆文章好不容易看懂分支和 01/06 19:51
48F:→ hms5232 : 預測器了 才看到這篇一看就懂QQ 01/06 19:51







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP