Pull to refresh

Comments 21

Интересно, что патчи с обновлением микрокода Intel выпускает Microsoft, а не сама Intel.
Intel выпускает обновлённый микрокод, а MS выпускает патчи с этим микрокодом.
Микрокод может быть загружен либо BIOS'ом материнской платы, либо операционной системой. Да вот незадача — производителям материнок платы снятые с производства становятся очень быстро не интересны. Поэтому обновления биоса со свежим микрокодом по них нет.
А так Intel раздаёт микрокод своим партнёрам (а может и всем желающим, не знаю) и они выпускают патчи. MS кстати такие патчи выпускает только под Windows 10 и производные от неё серверные ОС. Т.е. для Windows 8.1 и Server 2012 R2 таких патчей нет, хотя сами эти ОС ещё на поддержке находятся.
В дистрибутивах на основе Linux вроде бы проблем с выходом подобных патчей нет (не очень силён в Linux'е). Под Ubuntu по крайней мере вышел уже.

А микрокод загружается каждый раз при загрузке ОС, или это что-то вроде прошивки процессора?
Например, пропатчили процессор в компе с Windows 10, потом переставили в комп с Server 2012, и уже там работаем с новым микрокодом. Или это так не сработает?

Каждый раз грузится. По крайней мере в x86-процессорах (за всё разнообразие не ручаюсь).
Да вот незадача — производителям материнок платы снятые с производства становятся очень быстро не интересны. Поэтому обновления биоса со свежим микрокодом по них нет.
Большинство пользователей не обновляет прошивку платы даже при наличии новых версий.
Согласен. В этом плане загрузка микрокода средствами ОС выглядит более логичной.

Вот читаю читаю. И не понимаю, как микрокод попадает в процессор. Что это вообще, пните в нужном направлении. Почему пишут что, виндовс добавила микрокод. А как же линукс? Другие ос? Почему операционка имеет прямой доступ к процессору, минуя биос?

Например, линукс применяет это где-то на ранних этапах запуска ядра. Ему надо указать параметром загрузки путь до файла intel_ucode.img, или как-то так. Можно погуглить механизм того как линукс его применяет, скорее всего у процессора есть специальные фичи для таких фокусов.

А как же тогда другие процессоры? Они тоже ждут? Арм, амд? Ладно x86 более менее понятно. Там есть некоторые механизмы, но не напрямую же?! Только через биос. А в армах как тогда?

А другие процессоры, к счастью, делает не интел…


В любой момент времени, находясь в привелегированном режиме, можно загрузить в память блоб с микрокодом и вызвать соответствующую инструкцию, передав ей указатель на начало блоба, возможно длину и другие параметры.

Вот вам документация Intel, просвещайтесь.
Procedure for Runtime Microcode Update
To load an update during runtime, software should synchronize all logical processors within the system (perform a rendezvous) to load the update in a coordinated manner.

Once all logical processors have been synchronized, one logical processor in each core should load the update while sibling logical processors wait in a spin loop of only basic instructions. Some guidelines are:

The spin loop should not contain MWAIT or HLT. PAUSE or LFENCE may be used to throttle the loop.
Software may load microcode on each core in parallel.
To help improve performance, software should check that the microcode is newer than what is already loaded immediately prior to doing the write. This may avoid redundant microcode updates, especially on processors where a microcode update also updates microcode on other cores.
You can see an example of the microcode update procedure below:
microcode_update_sync() {
    primary_thread_done = 0
    check in to MCU_GO barrier
    wait for MCU_GO barrier
    if (primary_thread_of_core) { // always true if no HT
        cpuid
        rev_id = rdmsr(0x8b).edx
        if (update_id < 0 || update_id > rev_id) {
            load_update()
        }
        primary_thread_done = 1
    } else {  // other HW threads (if they exist)
        while (primary_thread_done == 0) {
            pause //lfence is also acceptable 
        }
        cpuid
        rev_id = rdmsr(0x8b).edx
        if (update_id != rev_id &&
            (update_id < 0 || update_id > rev_id)) {
            load_update()
        }
    }
    check in to MCU_DONE barrier
    wait for MCU_DONE barrier
}
Может совпадение, но у меня уже дважды обновление выводило из строя сервер на 2012 R2. Оживает только после перепрошивки программатором.
Было бы весьма странно, если бы обновления Windows выпускала не Microsoft.

В статье речь про обновление Firmware внутри процессора.

Обновление не снижает производительность?
Скорее всего опять на доли процента, затронуты вновь процы на «старой» архитектуре (до 10 поколения включительно).

А оно реально нужно на практике или это очередное запланированное устаревание?

они meltdown архитектурно не зафиксили, amd / apple их обгоняют. Скорее суицид.

А где вообще можно почитать, что Интел в своем микрокоде меняет, историю версий? А то на мой проц у меня есть 4 варианта микрокода. Хотелось бы знать что именно там изменено.
Only those users with full accounts are able to leave comments. Log in, please.