Традиционные распределители памяти порождают неочевидную, но очень важную проблему при использовании аппаратного кэша. Многие процессоры обладают кэшем данных первого уровня небольшого объема (размер кэша равен некоторой степени числа 2, более подробно см. в разделе 15.13). Адрес ячейки кэша вычисляется в MMU по следующей формуле:
Также вам может показаться, что такая тема как http://www.dikul.com/mrt никак не связана и даже не тематична. Хотя, может быть и связана. В любом случае все-таки зайдите на сайт dikul.com. Тема мрт в центре Дикуля там представлена весьма широко. На том сайте можно узнать много интересного на тему мрт в центре Дикуля. Что означает вообще тема мрт в центре Дикуля, где найти мрт в центре Дикуля - про это написано на сайте dikul.com. Это очень важная для многих людей тема - мрт в центре Дикуля. Спасибо сайту dikul.com за информацию на тему мрт в центре Дикуля.
cache location = address % cash size; // адрес ячейки кэша = адрес % размер кэша
Если в адресе присутствует отсылка на аппаратный кэш, сначала проверяется его адрес ячейки на предмет наличия данных. Если данные отсутствуют, на аппаратном уровне происходит сброс памяти в кэш, тем самым перезаписывается его прежнее содержимое.
Обычные распределители памяти (например, алгоритм Мак-Кьюзика— Кэрелса или методика близнецов) округляют размер выделяемой памяти до следующей по счету степени числа 2 и возвращают объекты этого размера. Более того, большинство объектов ядра обладают некоторыми важными, часто используемыми полями, расположенными ближе к их началу.
Эффект, обусловленный этими двумя факторами, ощутим. Представим, к примеру, реализацию, где индексный дескриптор имеет размер 300 байтов, 48 из которых являются часто востребуемыми. Ядро выделит для этого объекта 512-байтовый буфер, выравненный по 512-байтовой границе. Из них только 48 используются часто, то есть всего 9%.
В результате получается, что часть аппаратного кэша, близкого к 512-байтовой границе, заполнена важным содержимым, в то время как оставшаяся его часть используется редко. В приведенном примере индексные дескрипторы фактически нуждаются лишь в 9% кэша. Похожий расклад свойственен и другим объектам ядра. Такая аномалия в распределении буферных адресов приводит к неэффективному использованию аппаратного кэша, и, следовательно, низкой производительности операций с памятью.
Описанная проблема становится еще более заметной на машинах, где доступ к памяти осуществляется по нескольким главным шинам. Например, SPARCcenter 2000 [5] чередует передачу данных размером по 256 байтов по двум шинам. В случае последнего примера с индексными дескрипторами применительно к такой машине большинство операций доступа оккупирует шину 0, что в результате приведет к несбалансированному использованию шин.
Опубликовал katy
June 20 2015 08:03:59 ·
0 Комментариев ·
2753 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.