WFI(Wait for interrupt)和WFE(Wait for event)是兩個讓ARM核進入low-power standby模式的指令,由ARM architecture定義,由ARM core實現。oop
WFI和WFE的功能很是相似,以ARMv8-A爲例(參考DDI0487A_d_armv8_arm.pdf的描述),主要是「將ARMv8-A PE(Processing Element, 處理單元)設置爲low-power standby state」。性能
須要說明的是,ARM architecture並無規定「low-power standby state」的具體形式,於是能夠由ARM core自行發揮,根據ARM的建議,通常能夠實現爲standby(關閉clock、保持供電)、dormant、shutdown等等。但有個原則,不能形成內存一致性的問題。以Cortex-A57 ARM core爲例,它把WFI和WFE實現爲「put the core in a low-power state by disabling the clocks in the core while keeping the core powered up」,即咱們一般所說的standby模式,保持供電,關閉clock。ui
那它們的區別體如今哪呢?主要體現進入和退出的方式上。
對WFI來講,執行WFI指令後,ARM core會當即進入low-power standby state,直到有WFI Wakeup events發生。
而WFE則稍微不一樣,執行WFE指令後,根據Event Register(一個單bit的寄存器,每一個PE一個)的狀態,有兩種狀況:若是Event Register爲1,該指令會把它清零,而後執行完成(不會standby);若是Event Register爲0,和WFI相似,進入low-power standby state,直到有WFE Wakeup events發生。spa
a)資源空閒
b)Core1訪問資源,acquire lock,得到資源
c)Core2訪問資源,此時資源不空閒,執行WFE指令,讓core進入low-power state
d)Core1釋放資源,release lock,釋放資源,同時執行SEV指令,喚醒Core2
e)Core2得到資源orm
以往的spinlock,在得到不到資源時,讓Core進入busy loop,而經過插入WFE指令,能夠節省功耗,也算是因禍(損失了性能)得福(下降了功耗)吧。內存