Тестирование производительности подсистемы памяти и кэша
4. Какую команду нужно ввести в поле «Выполнить» чтобы посмотреть список автозагрузок?
5. Перечислите основные корневые разделы системного реестра.
Практическая работа №5
Под термином «подсистема памяти» понимается связка «процессор-чипсет-память». Сюда входит блок ввода-вывода процессора, канал межпроцессорного обмена и контроллер памяти с самими модулями памяти. Система кэширования, состоящая из кэшей нескольких уровней, обычно первого и второго, обеспечивает поддержу кэширования в процессоре. Давайте в первую очередь вспомним, от каких факторов зависит производительность оперативной памяти. Естественно было бы основным фактором производительности оперативной памяти назвать ее пропускную способность, т.е. количество мегабайт в секунду, которое способна считать (записать) оперативная память. Разумеется, пропускная способность оперативной памяти напрямую зависит от частоты работы чипов памяти и от ширины шины, связывающей память и процессор, и обычно определяется как произведение ширины шины на частоту работы памяти. Например, при ширине шины 64 бита (8 байт) и частоте работы памяти 100 МГц, пропускная способность составляет 8 байт х 100 МГц = 800 Мбайт/с. Но пропускная способность - не единственный фактор, определяющий производительность подсистемы памяти. Важнейшим параметром также является время доступа, т.е. временная задержка между запросом на выдачу какой-либо информации из памяти и ее реальной выдачей. Какая память лучше: с малой задержкой и малой пропускной способностью или с большой задержкой и большой пропускной способностью? Однозначного ответа на этот вопрос, конечно, быть не может. Если конкретная программа работает с большими массивами непрерывных данных, т.е. лишь однажды получает доступ, а затем линейно считывает, то для такой программы оптимальна память с большой пропускной способностью. А если программа оперирует малыми блоками данных, т.е. постоянно получает доступ к разным областям памяти и понемногу читает из каждой области, то оптимальна память с малым временем доступа, а пропускная способность имеет меньшее значение. Так как обычно на компьютере исполняются разные приложения, то очень трудно найти компромисс. В общем случае, естественно, необходимо стремиться к тому, чтобы и время доступа и пропускная способность памяти были оптимальными. Теперь разберемся с тем, какую роль играет кэширование. Кэширование операции чтения (спекулятивное чтение) не может ускорить доступ к внешней памяти выше того, что может сама подсистема памяти, оно убирает паузы в обмене. Кэширование записи (отложенная запись) может несколько замаскировать время операции записи при том условии, что эти операции будут редки. Отложенная запись называется так потому, что сама операция физической записи на диск может быть отложена на некоторое время и выполниться позднее. Данные, предназначенные для записи, временно сохраняются в кэше. Причем, в выполняемую программу сразу посылается признак о завершении операции записи. Это позволяет программе не тратить время на ожидание завершения операции ввода-вывода. При постоянной записи или при переписывании кэширование записи только затормаживает процесс. Причем, чтение по случайным адресам вообще невозможно ускорить кэшированием, в отличие от записи, которая может выполняться в то время, когда контроллер памяти будет не слишком занят. Таким образом, если программа не часто записывает, то сами операции записи в память выполняются прозрачно, не останавливая процессор для ожидания окончания операции ввода-вывода. Проблемы возникают, когда программа начинает записывать слишком часто. При этом отложенная запись «съедает» место в кэше, и подсистема памяти не знает, когда лучше перейти от незаметной к постоянной записи, которая уже никак не будет невидимой и будет «тормозить» процессор, точнее, его блок ввода-вывода. Как и по каким правилам будет выполняться запись, если программе требуется делать это часто, - целиком зависит от аппаратной реализации подсистемы памяти. В руках программиста очень мало средств повлиять на этот механизм. Можно поменять принцип кэширования или отключить его вовсе для какого-либо региона или всей памяти, но это малоэффективно и редко используется. В SSE появились команды прямой записи в RAM минуя кэширование. Эффективность может составлять до 30% (по данным AMD) из-за того, что кэш не засоряется. Спекулятивность чтения заключается в чтении памяти блоками, равными размеру строки кэша, и попытке начать операцию чтения следующего блока сразу по завершении ввода текущего. Как правило, программа читает и исполняет последовательные ячейки памяти. Но это «как правило» и в этом может быть больше вреда, чем пользы. Операция чтения с участием кэша выполняется аналогично записи, только «наоборот». Если процессору потребовались данные и их не оказалось в кэше, то посылается запрос на чтение в контроллер памяти. После получения этого запроса контроллер формирует адрес и начинает последовательное чтение блока данных из внешней памяти. Не дожидаясь окончания чтения блока, контроллер начинает посылку данных в процессор по мере считывания. При поступлении в процессор они автоматически копируются в кэш. И сразу возникает проблема - размер кэша не бесконечен и при поступлении новых данных приходится выкидывать старые. А если это были данные отложенной записи, и они не были записаны? Естественно, эти данные обязательно надо записать, но, пока идет чтение, это не возможно. Возникает еще один конфликт: контроллер внешней памяти не может выполнять чтение и запись одновременно. Приходится решать проблему первоочередности операций. Но записывающая программа решить такую проблему не может, сказав «брось все, записывай». Это решается на уровне контроллера. Тестирование производительности подсистемы памяти и кэша в SiSoftware Sandra выполняется двумя модулями: Тест пропускной способности памяти (Memory Bandwidth Benchmark) и Тест кэш и памяти (Cache & Memory Benchmark).
|