Память с адресацией по содержимому ( CAM ) — это особый тип компьютерной памяти , используемый в некоторых приложениях поиска с очень высокой скоростью. Она также известна как ассоциативная память или ассоциативное хранилище и сравнивает входные данные поиска с таблицей сохраненных данных и возвращает адрес соответствующих данных. [1]
CAM часто используется в сетевых устройствах , где он ускоряет операции с базой данных и таблицей маршрутизации . Этот тип ассоциативной памяти также используется в кэш-памяти. В ассоциативной кэш-памяти адрес и содержимое хранятся рядом. Когда адрес совпадает, соответствующее содержимое извлекается из кэш-памяти.
Дадли Аллен Бак изобрел концепцию адресно-контентной памяти в 1955 году. Баку приписывают идею единицы распознавания . [2]
В отличие от стандартной компьютерной памяти, оперативной памяти (RAM), в которой пользователь вводит адрес памяти, а RAM возвращает слово данных, хранящееся по этому адресу, CAM разработана таким образом, что пользователь вводит слово данных, а CAM просматривает всю свою память, чтобы увидеть, хранится ли это слово данных где-либо в ней. Если слово данных найдено, CAM возвращает список из одного или нескольких адресов хранения, где было найдено слово. Таким образом, CAM является аппаратным воплощением того, что в программных терминах называется ассоциативным массивом .
Похожую концепцию можно найти в блоке распознавания слов данных , предложенном Дадли Алленом Баком в 1955 году. [3]
Основное определение интерфейса для CAM и других сетевых поисковых систем было указано в соглашении о совместимости, называемом Look-Aside Interface (LA-1 и LA-1B), разработанном Network Processing Forum . [4] Многочисленные устройства, соответствующие соглашению о совместимости, были произведены Integrated Device Technology , Cypress Semiconductor , IBM , Broadcom и другими. 11 декабря 2007 года OIF опубликовал соглашение о последовательном интерфейсе Look-aside (SLA). [ требуется ссылка ]
CAM намного быстрее RAM в приложениях поиска данных. Однако у CAM есть недостатки в стоимости. В отличие от микросхемы RAM , которая имеет простые ячейки хранения, каждый отдельный бит памяти в полностью параллельной CAM должен иметь свою собственную связанную схему сравнения для обнаружения соответствия между сохраненным битом и входным битом. Кроме того, выходные сигналы соответствия из каждой ячейки в слове данных должны быть объединены для получения полного сигнала соответствия слова данных. Дополнительная схема увеличивает физический размер и стоимость производства микросхемы CAM. Дополнительная схема также увеличивает рассеивание мощности, поскольку каждая схема сравнения активна в каждом такте. Следовательно, CAM используется только в специализированных приложениях, где скорость поиска не может быть достигнута с использованием менее дорогостоящего метода. Одной из успешных ранних реализаций была ИС и система ассоциативного процессора общего назначения. [5]
В начале 2000-х годов несколько полупроводниковых компаний, включая Cypress , IDT , Netlogic , Sibercore, [6] и MOSAID, представили продукты CAM, ориентированные на сетевые приложения. Эти продукты были обозначены как Network Search Engines (NSE), Network Search Accelerators (NSA) и Knowledge-based Processors (KBP), но по сути были CAM со специализированными интерфейсами и функциями, оптимизированными для работы в сети. В настоящее время Broadcom предлагает несколько семейств KBP. [7]
Чтобы достичь другого баланса между скоростью, объемом памяти и стоимостью, некоторые реализации эмулируют функцию CAM, используя стандартный поиск по дереву или хеширование в аппаратном обеспечении, используя аппаратные трюки, такие как репликация или конвейеризация, для ускорения эффективной производительности. Эти разработки часто используются в маршрутизаторах . [ необходима цитата ] Алгоритм Лулео является эффективной реализацией для поиска соответствия самого длинного префикса, как требуется в таблицах маршрутизации Интернета.
Двоичный CAM является простейшим типом CAM и использует слова поиска данных, состоящие полностью из 1 и 0. Троичный CAM ( TCAM ) [8] допускает третье совпадающее состояние X или do n't care для одного или нескольких битов в сохраненном слове, тем самым добавляя гибкости поиску. Например, сохраненное слово 10XX0 в троичном CAM будет соответствовать любому из четырех поисковых слов 10000 , 10010 , 10100 или 10110. Дополнительная гибкость поиска имеет дополнительные затраты по сравнению с двоичным CAM, поскольку внутренняя ячейка памяти теперь должна кодировать три возможных состояния вместо двух для двоичного CAM. Это дополнительное состояние обычно реализуется путем добавления бита маски ( бит care или don't care ) к каждой ячейке памяти. В 2013 году IBM изготовила энергонезависимый TCAM с использованием ячеек 2-транзистор/2-резистивного хранения (2T-2R). [9] Недавно группа международных ученых опубликовала проект TCAM с использованием гибридного сегнетоэлектрика FeFET . [10]
Содержимое адресуемой памяти часто используется в сетевых устройствах компьютеров . Например, когда сетевой коммутатор получает кадр данных с одного из своих портов, он обновляет внутреннюю таблицу с исходным MAC-адресом кадра и портом, на который он был получен. Затем он ищет MAC-адрес назначения в таблице, чтобы определить, на какой порт необходимо переслать кадр, и отправляет его на этот порт. Таблица MAC-адресов обычно реализуется с помощью двоичного CAM, поэтому порт назначения можно найти очень быстро, что сокращает задержку коммутатора.
Троичные CAM часто используются в сетевых маршрутизаторах , где каждый адрес состоит из двух частей: сетевого префикса , который может различаться по размеру в зависимости от конфигурации подсети , и адреса хоста, который занимает оставшиеся биты. Каждая подсеть имеет сетевую маску, которая определяет, какие биты адреса являются сетевым префиксом, а какие биты являются адресом хоста. Маршрутизация выполняется путем обращения к таблице маршрутизации, поддерживаемой маршрутизатором, которая содержит каждый известный сетевой префикс назначения, связанную сетевую маску и информацию, необходимую для маршрутизации пакетов к этому месту назначения. В простой программной реализации маршрутизатор сравнивает адрес назначения пакета, который должен быть маршрутизирован, с каждой записью в таблице маршрутизации, выполняя побитовое И с сетевой маской и сравнивая ее с сетевым префиксом. Если они равны, соответствующая информация о маршрутизации используется для пересылки пакета. Использование троичного CAM для таблицы маршрутизации делает процесс поиска очень эффективным. Адреса хранятся с использованием не заботясь о хостовой части адреса, поэтому поиск адреса назначения в CAM немедленно извлекает правильную запись маршрутизации; И маскирование, и сравнение выполняются аппаратным обеспечением CAM. Это работает, если (a) записи хранятся в порядке убывания длины сетевой маски, и (b) оборудование возвращает только первую соответствующую запись; таким образом, используется соответствие с самой длинной сетевой маской ( соответствие с самым длинным префиксом ). [11]
Другие приложения CAM включают в себя:
TLB — это небольшая ассоциативная память, которая отображает виртуальные адреса в реальные.