Foundationপ্রথম নীতি থেকে
LEVEL 11 · Advanced Architecture & Performance

Speculative Execution

স্পেকুলেটিভ এক্সিকিউশন

Branch resolve হওয়ার আগেই predicted path-এ real ALU/cache ব্যবহার করে কাজ চালিয়ে যাওয়া। Misprediction-এ architectural state (register/memory) rollback হয়, কিন্তু cache-এর মতো microarchitectural state হয় না — এই ফাঁকই Spectre/Meltdown-এর ভিত্তি।

also: Spectre, Meltdown, transient execution, branch target injection

Predict হওয়ার সাথে সাথে CPU থেমে থাকে না — fetch/decode/execute সবই সত্যিকারের হয়, ফলাফল [[reorder-buffer]]-এ pending থাকে। Misprediction-এ শুধু ROB entry flush হয় — architectural state (register, memory) কখনো ছোঁয়া হয়নি বলে rollback পরিষ্কার। কিন্তু speculative load যদি cache-এ একটা লাইন এনে ফেলে, সেই microarchitectural ছাপ থেকেই যায় — ROB-এর দায়িত্বের বাইরে।

Cache-timing side channel: একটা probe array-র নির্দিষ্ট entry speculatively touch হলে সেই cache line load হয়ে যায়। Rollback-এর পরেও timing মেপে (hit ~৪ cycle বনাম miss ~২০০ cycle) কোন entry touch হয়েছিল তা বের করা সম্ভব — secret data leak, কোনো architectural trace ছাড়াই।

Spectre (CVE-2017-5753/5715): branch predictor-কে ভুল-training করে একটা bounds-check bypass করানো, বা indirect branch-কে attacker gadget-এ redirect করানো (branch target injection)।

Meltdown (CVE-2017-5754): ভিন্ন mechanism — permission check সম্পূর্ণ হওয়ার আগেই out-of-order load-এর ফলাফল dependent instruction-এ ব্যবহৃত হয়ে যাওয়া। কোনো predictor বিভ্রান্ত করার দরকার নেই।

Mitigation-এর দাম: retpoline (indirect branch-কে return-trampoline-এ বদলানো) আর KPTI (kernel/user page table আলাদা করা) — দুটোই measured ৫-৩০% পর্যন্ত overhead তৈরি করেছে, নির্ভর করে workload কতটা indirect-call/syscall-heavy তার উপর।