Буферизация памяти

Обновлено: 21.11.2024

В этом разделе описывается структура общей памяти в буферах приема VMQ. Дополнительные сведения об использовании буферов в индикации приема см. в разделе Путь получения VMQ.

Если драйвер покрывающего протокола установил флаг NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED в элементе Flags структуры NDIS_RECEIVE_QUEUE_PARAMETERS, сетевой адаптер должен разделить полученный пакет со смещением, равным или превышающим запрошенный размер упреждающего просмотра, и использовать DMA для передачи упреждающих данных и данные постпросмотра для разделения сегментов общей памяти.

Драйверы минипорта задают параметры для упреждающего типа (NdisSharedMemoryUsageReceiveLookahead) или других типов общей памяти при выделении общей памяти. Например, драйвер мини-порта вызывает функцию NdisAllocateSharedMemory и задает члену Usage в структуре NDIS_SHARED_MEMORY_PARAMETERS значение NdisSharedMemoryUsageReceiveLookahead. Драйверы минипорта должны выделять общую память для очереди, когда выделение очереди завершено. Сведения о выделении и освобождении ресурсов общей памяти для очередей см. в разделе Распределение ресурсов общей памяти.

На следующем рисунке показаны отношения для сетевых данных, когда входящие данные разделены на два буфера общей памяти.

Структура NET_BUFFER_SHARED_MEMORY указывает информацию об общей памяти. Может существовать связанный список таких буферов общей памяти, связанных со структурой NET_BUFFER.

Используйте макросы NET_BUFFER_SHARED_MEM_NEXT_SEGMENT, NET_BUFFER_SHARED_MEM_FLAGS, NET_BUFFER_SHARED_MEM_HANDLE, NET_BUFFER_SHARED_MEM_OFFSET и NET_BUFFER_SHARED_MEM_LENGTH для доступа к NET_BUFFER_SHARED_MEMORY в структуре NET_BUFFER. Элемент SharedMemoryInfo структуры NET_BUFFER содержит первую структуру NET_BUFFER_SHARED_MEMORY в связанном списке.

Примечание. Начиная с NDIS 6.30, разделение пакетных данных на отдельные буферы просмотра вперед больше не поддерживается. Начиная с Windows Server 2012, драйвер вышележащего протокола не будет устанавливать флаг NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED в члене Flags структуры NDIS_RECEIVE_QUEUE_PARAMETERS.

Мы знаем, что скорость процессора намного выше, чем скорость подключенных к нему периферийных устройств ввода-вывода. Таким образом, большая часть процессорного времени тратится впустую, ожидая ответа периферийных устройств ввода-вывода. Чтобы правильно использовать процессорное время, мы используем буферную память. Буфер — это область временного хранения, обычно в оперативной памяти. Идея буфера была использована для предотвращения перегрузки данных от входящего порта к исходящему порту передачи. Большинство буферов используются для хранения данных, которые должны быть перенаправлены на устройства ввода-вывода, а тем временем ЦП продолжает обрабатывать другие запросы или процессы. Поскольку процессы чтения и записи данных на диск сравнительно медленные, многие программы отслеживают изменения данных в буфере, а затем данные этого буфера копируются на диск.

Теперь давайте рассмотрим несколько примеров использования буферной памяти.

  • В качестве примера рассмотрим текстовые процессоры, которые используют буфер для отслеживания всех изменений, внесенных в файлы, и при сохранении файла текстовый процессор обновляет содержимое файла на диске, копируя содержимое буферной памяти. Это более эффективный способ управления изменениями, чем каждый раз обращаться к файлу на диске. Но следует отметить, что изначально изменения вносятся и временно сохраняются в буферной памяти, а не на диске, поэтому, если компьютер выйдет из строя, пока мы редактируем файл, мы потеряем содержимое файла. Поэтому важно сохранять файл через равные промежутки времени. Благодаря новым функциям большинство текстовых процессоров периодически автоматически сохраняют содержимое файла.
  • Драйверы клавиатуры также имеют буфер, позволяющий нам редактировать опечатки в команде перед их отправкой в ​​программу.
  • Еще одно применение буферов — печать файлов или документов. Когда дается команда печати, процессор копирует содержимое файла в буфер печати (который представляет собой свободное место в памяти или на диске, называемом буфером), а затем принтер может использовать данные буфера на своей собственной скорости для их печати. Таким образом, принтер продолжает работать в фоновом режиме.
  • Когда нам нужно скопировать файл на дискету или записать данные на компакт-диск, обычно используются буферы. Здесь данные передаются в буферы перед копированием на дискету или перед записью на диск.
  • DOS и другие операционные системы также имеют дисковый буфер для временного хранения данных, считываемых с диска.
  • когда мы хотим просмотреть или загрузить онлайн-видео или аудиофайл, определенный процент загруженного файла помещается в буфер. Затем файл воспроизводится, и устройство постоянно загружает файл и помещает его в буфер. Таким образом, очень мало шансов, что видео- или аудиофайл прервется из-за перегрузки сети.

Что такое кэш?

Кэш в информатике определяется как аппаратное или программное обеспечение, которое используется для временного хранения данных. Кэш — это высокоскоростная и дорогая память, которая может быть частью основной памяти или жесткого диска. Кэш используется для повышения производительности компьютера. Для этого данные или файлы, к которым обращались или которые часто использовались, временно сохраняются в кэше. Нам нужен кеш, потому что объемная память, такая как ОЗУ или жесткий диск, имеет медленную скорость и не может соответствовать требованиям высокоскоростных клиентов, таких как ЦП, операционные системы, приложения или веб-браузеры. Таким образом, кеш сокращает время доступа к данным и время задержки, тем самым повышая производительность операций ввода-вывода.

Разница между буферной памятью и кэшем

И буферная память, и кеш — это области памяти, используемые для временного хранения данных, но между ними есть много различий, например:

< /tr>
Буферная память Кэш-память
Буферная память в основном расположена в оперативной памяти. (ОЗУ) компьютера. Она является частью основной памяти или жесткого диска
В этой области ЦП может временно хранить свои данные, например данные для пересылки на другие низкоскоростные устройства вывода или другие вторичные устройства хранения, чтобы позволить компьютеру выполнять другие процессы. Информация, которая используется и к которой обращается большинство программ во время работы, сохраняется в кэше для сделать их быстрее.
Это обычная область хранения в динамической ОЗУ Это высокоскоростная область хранения статической ОЗУ.
Буфер обычно используется для процессов ввода/вывода для отправки или получения данных, например, ввода с клавиатуры или вывода на принтер. Кэш используется для хранения данных или временные файлы, к которым часто обращаются процессы
Он хранит или хранит фактическую копию данных. Кэш содержит копию исходных данных.
Это реализовано для согласования скорости медленных устройств ввода-вывода с процессором. Это реализован для сокращения времени доступа и уменьшения времени ожидания часто используемых данных.

Заключение

И буферная память, и кеш — это области памяти, которые используются для хранения данных, временно буфер, являющийся частью ОЗУ и, в частности, динамической ОЗУ, тогда как кеш — это высокоскоростная память, которая может быть частью ОЗУ (статической ОЗУ) или жесткого диска, и того и другого. буфер и кэш стали неотъемлемой частью компьютерной системы. Оба они помогают повысить скорость работы ЦП. Подумайте немного, что будет, если не будет буферной памяти и кеша?

Категория в списке Common Weakness Enumeration, опубликованном корпорацией MITRE.

Каталог CWE – 4.6

Обзор

Категории в элементах группы Common Weakness Enumeration (CWE) на основе некоторой общей характеристики или атрибута.

Слабые места этой категории связаны с обработкой буферов памяти в программной системе.

Слабые стороны

Программное обеспечение читает или записывает в буфер, используя индекс или указатель, который ссылается на ячейку памяти после конца буфера.

Программное обеспечение читает или записывает в буфер, используя индекс или указатель, который ссылается на ячейку памяти до начала буфера.

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

Программа копирует входной буфер в выходной буфер, не проверяя, что размер входного буфера меньше размера выходного буфера, что приводит к буферизации.

Программное обеспечение записывает в буфер, используя индекс или указатель, который ссылается на ячейку памяти до начала буфера.

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

Программное обеспечение считывает данные после конца или до начала предполагаемого буфера.

Программное обеспечение записывает данные после конца или перед началом предполагаемого буфера.

Любое состояние, при котором злоумышленник может записать произвольное значение в произвольное место, часто в результате переполнения буфера.

Концепции

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

Контент Common Weakness Enumeration на этом веб-сайте защищен авторским правом корпорации MITRE, если не указано иное. Использование Перечня общих недостатков и связанных с ним ссылок на этом веб-сайте регулируется Условиями использования, указанными корпорацией MITRE.

Буферы — это память на устройстве CUDA или в системной памяти. Пропускная способность памяти устройства выше, чем пропускная способность системной памяти, но кэши и общая память обеспечивают гораздо меньшую задержку и более высокую пропускную способность. Таким образом, наиболее эффективный способ доступа к памяти устройства и системы — избегать многократного повторного доступа к одним и тем же буферным данным, если они могут быть сохранены в общей памяти или кэше. Поскольку первоначальный доступ к памяти устройства и системной памяти должен быть выполнен, он часто является узким местом в производительности, поэтому важно контролировать пропускную способность буферов.

Диаграмма

Буферы

Все обращения к буферам со стороны графического процессора направляются через кеш обратной записи L2. Доступ к системной памяти можно получить непосредственно из ядра CUDA с помощью нулевого копирования, где API CUDA используется для выделения системной памяти, отображаемой в адресное пространство устройства CUDA. На диаграмме Буферы показан объем данных, загруженных и сохраненных по отдельности, а также сумма загрузок и сохранений в областях системной памяти и памяти устройства, а также процент общего использования полосы пропускания.

Анализ

  • Если скорость передачи в/из системы ниже ожидаемой…
    • … попробуйте сделать более крупные переводы. Небольшие редкие передачи могут иметь большие накладные расходы.
    • … постарайтесь повысить эффективность кэширования, чтобы уменьшить пропускную способность.
    • … проверьте, чтобы пропускная способность не тратилась впустую из-за неэффективных шаблонов доступа, вызывающих большое количество транзакций кэша.
    • … рассмотрите возможность использования данных с более низким разрешением или сжатых данных, которые можно разместить в общей памяти.
    • … рассмотрите решение с несколькими графическими процессорами или кластером.
    • … постарайтесь скрыть задержку передачи, накладывая ее на параллельные вычисления или передачи в противоположном направлении.
    • … постарайтесь повысить эффективность кэширования, чтобы уменьшить пропускную способность.
    • … проверьте, чтобы пропускная способность не тратилась впустую из-за неэффективных шаблонов доступа, вызывающих большое количество транзакций кэша.
    • … убедитесь, что устройство CUDA использует самую высокую поддерживаемую версию PCI-Express.
    • … рассмотрите возможность использования графического процессора с большей памятью устройства, чтобы большие задачи могли полностью умещаться в памяти одного устройства.
    • … рассмотрите возможность использования данных с более низким разрешением или сжатых данных, которые можно промежуточно хранить в памяти устройства или в общей памяти.
    • … рассмотрите решение с несколькими графическими процессорами или кластером.

    Документация NVIDIA GameWorks, ред. 1.0.150630 © 2015. Корпорация NVIDIA. Все права защищены.

    Читайте также: