Вызов функции сбрасывает кеш-память?
вызов функции - это всего лишь вызов функции
Ура! (Точно?)
Сам по себе вызов ничего не изменит. А если функция начнет какие-нибудь массивы многомегабайтные в памяти ворочать - кеш, конечно, пойдет лесом.
Во-вторых, derect call и indirect call это две большие разницы, например, во втором случае сбрасывается конвейер.
В-третьих, есть кеш инструкций, а есть кеши данных.
В-четвертых, как вообще могло в голову прийти, что многомегабайтные кеши сбрасываются по миллиону раз в секунду?
Мне вот больше интересно, сбрасывается ли кеш при системном вызове? Если тоже нет, то еще один вопрос, кеш вообще в виртуальных адресах работает или в физических?
С виртуальными связан TLB - тоже полезный ресурс. При системных вызовах в Linux например не сбрасывается ни то, ни другое. Хотя есть извратный 4+4 split, при котором TLB сбрасывается, но с внедрением amd64 этот кошмар отходит в прошлое.
То есть даже при доступе в L1 кеш адрес разрешается дважды? И при этом все равно это удается делать за единицы тактов? Хм... это надо обдумать
Поискал в гугле. Кэш работает в физических адресах (что в общем-то логично).
что в общем-то логичноО да! Это настолько логично, что когда я спрашивал об этом на своей прошлой работе у сравнительно опытных системных программистов, мнения раздилились ровно пополам, и у большинства из отвечавших не было и тени сомнений.
Если бы я проектировал архитектуру я бы сделал, чтобы L1 кеш работал в виртуальных адресах, а L>1 в физических, чтобы быстрый кеш работал еще быстрее, а большой не сбрасывался при переключении. Вот это было бы логично. А так это не "логично", а просто "надо знать".
и не сбрасывается при системных вызовах ,
изза чего и бывают глюки на 2х и более процессорных машинах если криво писать
Раньше кэш работал в виртуальных адресах, но сейчас (почти) во всех архитектурах в физических.
Хотя есть извратный 4+4 split, при котором TLB сбрасывается, но с внедрением amd64 этот кошмар отходит в прошлое.Остаётся ещё кошмар со сбросом TLB при переключении адресных пространств из-за того, что в x86 TLB non-tagged.
Раньше кэш работал в виртуальных адресах, но сейчас (почти) во всех архитектурах в физических.Раньше это когда?
Оставить комментарий
Olenenok
Это правда?