ОБЛАСТЬ ТЕХНИКИ
Настоящее изобретение относится в целом к способам увеличения эффективности, скорости и/или производительности компьютерной системы, а более конкретно - к способам синхронизации и загрузки вычислительных задач, которые обычно выполняются главным процессором (хост-процессором) и которые были выгружены в определенный аппаратный компонент.
ПРЕДШЕСТВУЮЩИЙ УРОВЕНЬ ТЕХНИКИ
Усложнение и совершенствование операционных систем, прикладного программного обеспечения, организации сетей, сетевых коммуникаций и т.п. продолжают увеличиваться значительными темпами. Одним из результатов усложнения и совершенствования является появление расширенных функциональных возможностей приложений и систем. Эти расширенные функциональные возможности часто приводят к увеличению непроизводительного использования центрального процессора из-за дополнительных обязанностей, которые должны выполняться центральным процессором для выполнения расширенных функций системы и приложений.
Одной из областей, где увеличение непроизводительного использования центрального процессора является очевидным, является область сетевых приложений, где сетевые скорости увеличиваются из-за увеличения количества сред передачи данных с высокой пропускной способностью. Сетевые скорости часто соответствуют, а все чаще превышают скоростные возможности центрального процессора и пропускную способность памяти главных компьютеров. Эти сетевые приложения дополнительно нагружают главный процессор из-за многоуровневой архитектуры, используемой большинством операционных систем, такой как семиуровневая модель открытых систем международной организации по стандартизации (ISO), или многоуровневая модель, используемая операционной системой Windows. Как известно, такая модель используется для описания потока данных между физическим подключением (соединением) к сети и приложением конечного пользователя. Основные функции, такие как размещение битов данных в сетевом кабеле, выполняются в нижних уровнях, в то время как функции, обращающиеся к подробностям приложений - в верхних уровнях. По существу целью каждого уровня является обеспечение услуг следующему более высокому уровню, ограждая более высокий уровень от подробностей того, как эти услуги фактически осуществляются. Уровни являются абстрактными в том смысле, что каждый уровень считает, что он поддерживает связь с тем же самым уровнем на другом компьютере.
Различные функции, которые выполняются с пакетом данных, когда он переходит между уровнями, могут интенсивно использовать программное обеспечение и часто требуют значительного количества ресурсов центрального процессора и памяти. Например, некоторые функции, которые выполняются с пакетом на различных уровнях, потребляют чрезвычайно много ресурсов центрального процессора, например вычисление и проверка контрольной суммы пакета, шифрование и расшифровка данных (например, шифрование протокола безопасных соединений (SSL) и шифрование протокола IP Security), вычисление профиля сообщения, сегментация TCP, обработка повторной передачи TCP и подтверждения (ACK), фильтрация пакета для защиты от атак отказа в обслуживании и фрагментация пакета протокола пользовательских дейтаграмм (UDP). Когда каждая из этих функций выполняется, результирующие требования к центральному процессору могут сильно повлиять на производительность и работу всей компьютерной системы.
Хотя спрос на ресурсы центрального процессора растет, возможности и производительность компьютерных периферийных устройств, например сетевых интерфейсных плат (СИП, NIC) и т.п., также увеличиваются. Эти внешние устройства часто оборудуются специализированным процессором и памятью, которые способны выполнять многие из задач и функций, которые иначе выполняются центральным процессором.
Компьютерная промышленность распознала эту возможность и разработала способы, как разгрузить ЦП от задач и функций, потребляющих много ресурсов центрального процессора, которые ранее выполнялись центральным процессором. Например, патент США № 6141705 Anand et al., и патентные заявки № 09/657510 «Method and Computer Program Product for Offloading Processing Tasks from Software to Hardware», поданная 7 сентября 2000 г., и № 09/726 082 «Method and Computer Program Product for Offloading Processing Tasks from Software to Hardware», поданная 29 ноября 2000, обеспечивают решения, необходимые для того, чтобы сделать запрос периферийных устройств и выгрузить определенные задачи процессора на периферийные устройства, которые способны выполнять ресурсоемкие задачи и функции. Обычно также специфические выгружаемые задачи включают в себя такие задачи, как вычисление контрольной суммы TCP (протокола управления передачей) и/или IP (межсетевого протокола), сегментация TCP, например, при выгрузке от посылки больших пакетов (РПБП, LSO), и шифрование и расшифровка протокола обеспечения безопасности Интернет (IPSEC).
Эти механизмы выгрузки ограничены тем, что они имеют вторичное требование, заключающееся в том, что в сетевом стеке должно быть сделано минимальное количество изменений. В результате этого вторичного требования возникает другое ограничение - то, что выгрузки имеют длинный путь кода, потому что весь сетевой стек передается с разгруженными задачами и функциями, не доступными для периферийного устройства. Дополнительное ограничение - отсутствие интеграции с сетевым стеком. Нет хорошо определенного интерфейса для сетевого стека, чтобы сделать запрос или установить параметры на периферийном устройстве, или интерфейса для периферийного устройства, чтобы сообщить сетевому стеку о любом оповещении или изменениях возможностей. Например, если маршрут изменяется, когда обрабатывается запрос РПБП, то механизм нейтрализации неисправности для стека должен ждать окончания перерыва и повторно передавать запрос РПБП.
Другой подход, который пробовали осуществить изготовители периферийных устройств, состоял в том, чтобы разгрузить все TCP-соединение от основного стека к сетевой интерфейсной плате (СИП). Этот подход обходит весь стек протоколов, используя собственный интерфейс, и он требует, чтобы периферийное устройство обрабатывало все сообщения TCP, сообщения IP (межсетевого протокола), сообщения протокола управляющих сообщений в сети Интернет (ПУСИ, ICMP), сообщения сервера доменных имен (СДИ, DNS) и сообщения протокола маршрутной информации (ПМИ, RIP), требуя, чтобы СИП обрабатывала все. Дополнительно, этот подход не обращается к многосетевым средам и не вполне интегрируется с утилитами управления сетью операционной системы хоста. Когда состояние изменяется, разгруженное подключение может легко выйти из строя.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
Настоящее изобретение обеспечивает способ разгрузки соединения сетевого стека, такого как стек, основанный на протоколе TCP. Данные, которые обычно посылаются через путь спецификации интерфейса сетевых драйверов (СИСД, NDIS), который имеет многочисленные программные уровни, на периферийное устройство, выгружаются в путь (маршрут) от уровня коммутатора на периферийное устройство. Поддерживается жесткая синхронизация с сетевым стеком и обрабатывающим блоком (процессором). Запрос на разгрузку стека посылают через путь СИСД к периферийному устройству. Запрос включает в себя список требований к ресурсам так, чтобы периферийное устройство имело информацию, необходимую для распределения ресурсов. Каждый уровень в пути СИСД добавляет свои требования к ресурсам в список. Если периферийное устройство принимает запрос, то периферийное устройство распределяет ресурсы и посылает дескриптор разгрузки каждому из программных уровней так, чтобы программные уровни могли связаться с периферийным устройством. Состояние для каждого программного уровня посылается периферийному устройству, как только программному уровню сообщается о том, что периферийное устройство принимает разгрузку (выгружаемые данные). Альтернативно состояние посылается с запросом на разгрузку, и только изменения в состоянии посылаются периферийному устройству. Каждое состояние имеет переменные состояния, и каждая переменная состояния классифицируется как постоянная переменная, кэшируемая переменная или делегированная переменная. Постоянные переменные не изменяются во время выгрузки стека протоколов. Кэшируемые переменные обрабатываются с помощью центрального процессора, и делегированные переменные обрабатываются с помощью периферийного устройства.
Настоящее изобретение также обеспечивает способ загрузки (передачи данных) сетевого соединения от периферийного устройства к хосту (хост-компьютеру). Загрузка инициируется или периферийным устройством, или уровнем коммутатора. Как только загрузка (передача данных) инициирована, периферийное устройство завершает все невыполненные запросы и передает делегированное состояние уровню коммутатора (переключения). После того как делегированное состояние было принято хостом, ресурсы состояния в периферийном устройстве освобождаются.
Во время выполнения выгрузки или загрузки может произойти модификация (обновление информации) (например, модификация протокола преобразования адресов (ППА, ARP) или модификация протокола маршрутной информации (ПМИ)). Для гарантирования того, что используется самое последнее сообщение модификации, если многочисленные сообщения модификации принимаются периферийным устройством, применяется присвоение порядкового номера для того, чтобы периферийное устройство не использовало устаревшие данные.
Дополнительные признаки и преимущества изобретения будут очевидны из последующего подробного описания иллюстративных вариантов осуществления, которое выполнено со ссылкой к сопроводительным чертежам.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Хотя прилагаемая формула изобретения конкретно формулирует признаки настоящего изобретения, данное изобретение вместе с его задачами и преимуществами может быть лучше всего понято из следующего подробного описания, приведенного вместе с сопроводительными чертежами, на которых:
Фиг. 1 - структурная схема, в общем виде иллюстрирующая типичную компьютерную систему, в которой применяется настоящее изобретение;
Фиг. 2 - структурная схема, иллюстрирующая функциональные уровни сетевого стека и пути обхода в соответствии с настоящим изобретением;
Фиг. 3 - структурная схема, иллюстрирующая функциональные уровни маршрута СИСД и пути обхода в соответствии с настоящим изобретением;
Фиг. 4 - многоступенчатая схема, иллюстрирующая механизм выгрузки согласно настоящему изобретению;
Фиг. 5a-5c - диаграммы, иллюстрирующие обращенное дерево настоящего изобретения;
Фиг. 6 - структурная схема, иллюстрирующая синхронизацию между главным компьютером и периферийным устройством;
Фиг. 7 - многоступенчатая схема, иллюстрирующая механизм загрузки настоящего изобретения;
Фиг. 8 - многоступенчатая схема, иллюстрирующая механизм выгрузки безопасного соединения стека протоколов в соответствии с раскрытием настоящего изобретения; и
Фиг. 9 - многоступенчатая схема, иллюстрирующая механизм загрузки безопасного разгруженного соединения стека протоколов в соответствии с раскрытием настоящего изобретения.
ПОДРОБНОЕ ОПИСАНИЕ ИЗОБРЕТЕНИЯ
Обращаясь к чертежам, на которых одинаковые ссылочные номера соответствуют одинаковым элементам, данное изобретение показано как осуществляемое в соответствующей вычислительной среде. Хотя это не требуется, изобретение описано в общем контексте выполняемых компьютером команд, таких как модули программ, выполняемые персональным компьютером. В общем случае модули программ включают в себя подпрограммы, программы, объекты, компоненты, структуры данных и т.д., которые выполняют конкретные задачи или воплощают определенные абстрактные типы данных. Кроме того, специалисты должны признать, что изобретение может использоваться с другими конфигурациями компьютерной системы, которые включают в себя карманные устройства, многопроцессорные системы, программируемую или основанную на микропроцессорах бытовую электронику, сетевые ПК, миникомпьютеры, универсальные компьютеры, связанные в сеть внешние устройства (например, связанные в сеть принтеры) и т.п. Изобретение может также использоваться в распределенных вычислительных средах, где задачи выполнены удаленными устройствами обработки, которые связаны через коммуникационную сеть. В распределенной вычислительной среде модули программ могут быть расположены и в местных, и в удаленных запоминающих устройствах.
Фиг. 1 иллюстрирует пример соответствующей вычислительной системной среды 100, в которой изобретение может быть осуществлено. Вычислительная системная среда 100 является только одним из примеров соответствующей вычислительной среды, и она не накладывает какие-либо ограничения на применение или функциональные возможности изобретения. Вычислительная среда 100 не должна интерпретироваться как имеющая какую-либо зависимость или требования, относящиеся к какому-нибудь одному компоненту или их комбинации, которые показаны в примере рабочей среды 100.
Изобретение работает с многочисленными другими универсальными или специальными вычислительными системными средами или конфигурациями. Примеры известных вычислительных систем, сред и/или конфигураций, которые могут быть подходящими для использования с изобретением, включают в себя персональные компьютеры, компьютеры-серверы, карманные или портативные компьютеры, многопроцессорные системы, системы на основе микропроцессора, телеприставки, программируемую бытовую электронику, сетевые ПК, миникомпьютеры, универсальные компьютеры, связанные в сеть внешние устройства (например, связанные в сеть принтеры), распределенные вычислительные среды, которые включают в себя любую из вышеупомянутых систем или устройств и т.п., но не ограничены ими. Изобретение может быть описано в общем контексте выполняемых компьютером команд, например, выполняемых компьютером модулей программ. В общем случае модули программ включают в себя подпрограммы, программы, объекты, компоненты, структуры данных и т.д., которые выполняют определенные задачи или воплощают определенные абстрактные типы данных. Изобретение может также применяться в распределенных вычислительных средах, где задачи выполняются удаленными устройствами обработки, которые связаны через коммуникационную сеть. В распределенной вычислительной среде модули программ могут быть расположены и в местных, и в удаленных компьютерных носителях данных, которые включают в себя запоминающие устройства.
Обращаясь к фиг.1, примерная система для осуществления данного изобретения включает в себя универсальное вычислительное устройство в виде компьютера 110. Компоненты компьютера 110 могут включать в себя процессор 120, системную память 130 и системную шину 121, соединяющую различные системные компоненты, которые включают в себя системную память процессора 120, но не ограничены ими. Системная шина 121 может быть любой из нескольких типов шинных структур, которые включают в себя шину памяти или контроллер памяти, периферийную шину, перекрещивающиеся магистрали, коммутируемую шинную связную архитектуру и локальную шину, которые используют любую из разнообразия шинной архитектуры. Системная шина 121 может также быть иерархией шин. Для примера, а не в качестве ограничения такая архитектура включает в себя шину архитектуры промышленного стандарта (ISA), шину микроканальной архитектуры (MCA), шину расширенной стандартной архитектуры для промышленного применения (EISA), локальную шину Ассоциации по стандартам в области видеоэлектроники (VESA), шину архитектуры с некэшируемым доступом к неоднородной оперативной памяти (NC-NUMA), шину архитектуры с кэш-когерентным доступом к неоднородной оперативной памяти (CC-NUMA) и шину соединения периферийных устройств (PCI), также известную как шина расширения.
Компьютер 110 типично включает в себя разнообразие считываемых компьютером носителей. Считываемые компьютером носители могут быть любыми доступными носителями, к которым может обращаться компьютер 110, и они включают в себя и энергозависимые, и энергонезависимые носители, съемные и несъемные носители. Для примера, а не в качестве ограничения считываемые компьютером носители могут содержать компьютерные носители данных и средства связи. Компьютерные носители данных включают в себя и энергозависимые, и энергонезависимые, съемные и несъемные носители, воплощенные любым способом или технологией для хранения информации, такой как считываемые компьютером команды, структуры данных, модули программ или другие данные. Компьютерные носители данных включают в себя оперативную память (ОП), постоянное запоминающее устройство (ПЗУ), стираемое программируемое постоянное запоминающее устройство (СППЗУ), флэш-память или память другой технологии, компакт-диск (CD-ROM), цифровые многофункциональные диски (DVD) или другое запоминающее устройство на оптическом диске, магнитные кассеты, магнитную ленту, запоминающее устройство на магнитном диске или другие магнитные запоминающие устройства или любой другой носитель, который может использоваться для хранения требуемой информации и к которому может обращаться компьютер 110, но не ограничены ими. Средства связи типично воплощают считываемые компьютером команды, структуры данных, модули программ или другие данные в модулированном сигнале данных, таком как несущая, или используют другой механизм транспортировки и включают в себя любые средства доставки информации. Термин «модулированный сигнал данных» означает сигнал, который имеет одну или более из своих характеристик, которые устанавливаются или изменяются таким образом, чтобы кодировать информацию в сигнале. Для примера, а не в качестве ограничения средства связи включают в себя проводные каналы связи, такие как проводные сети или прямое проводное подключение, и беспроводные каналы связи, такие как акустические, радиочастотные (РЧ), инфракрасные и другие беспроводные каналы связи. Считываемые компьютером носители могут также включать в себя комбинации любого из вышеупомянутых носителей и средств связи.
Системная память 130 включает в себя компьютерные носители данных в форме энергозависимой и/или энергонезависимой памяти, такой как постоянное запоминающее устройство (ПЗУ) 131 и оперативная память (ОП) 132. Базовая система ввода-вывода 133 (BIOS), содержащая основные подпрограммы, которые помогают перемещать информацию между элементами в пределах компьютера 110, например во время запуска, типично хранится в ПЗУ 131. ОП 132 обычно содержит данные и/или модули программ, которые мгновенно доступны для обработки и/или в данный момент обрабатываются процессором 120. Для примера, а не в качестве ограничения фиг. 1 показывает операционную систему 134, прикладные программы 135, другие модули 136 программ и данные 137 программ.
Компьютер 110 может также включать в себя другие съемные/несъемные, энергозависимые/энергонезависимые компьютерные носители данных. Только для примера фиг. 1 показывает накопитель 141 на жестком диске, который считывает информацию или записывает информацию на несъемный энергонезависимый магнитный носитель, накопитель 151 на магнитном диске, который считывает информацию или записывает информацию на съемный энергонезависимый магнитный диск 152, и привод 155 оптического диска, который считывает информацию или записывает информацию на съемный энергонезависимый оптический диск 156, такой как компакт-диск или другой оптический носитель. Другие съемные/несъемные, энергозависимые/энергонезависимые компьютерные носители, которые могут использоваться в типичной рабочей среде, включают в себя кассеты с магнитной лентой, платы флэш-памяти, цифровые многофункциональные диски, цифровую видеоленту, полупроводниковую ОП, полупроводниковое ПЗУ и т.п., но не ограничены ими. Накопитель 141 на жестком диске типично подключается к системной шине 121 через интерфейс (средство сопряжения) с несъемным запоминающим устройством, например через средство 140 сопряжения с накопителем на магнитном диске 151, и привод 155 оптического диска типично подключается к системной шине 121 через средство сопряжения со съемным запоминающим устройством, например через средство 150 сопряжения.
Накопители и связанные с ними компьютерные носители данных, описанные выше и показанные на фиг. 1, обеспечивают хранение считываемых компьютером команд, структур данных, модулей программ и других данных для компьютера 110. На фиг. 1, например, жесткий диск 141 показан в качестве устройства хранения операционной системы 144, прикладных программ 145, других модулей 146 программ и данных 147 программ. Следует обратить внимание, что эти компоненты могут совпадать с или отличаться от операционной системы 134, прикладных программ 135, других модулей 136 программ и данных 137 программ. Операционной системе 144, прикладным программам 145, другим модулям 146 программ и данным 147 программ присвоены другие номера для того, чтобы показать, что они, как минимум, являются различными копиями.
Пользователь может вводить команды и информацию в компьютер 110 через устройства ввода данных, такие как клавиатура 162 и устройство позиционирования 161, обычно называемое «мышь», шаровой манипулятор («трекбол») или сенсорная панель. Другие устройства ввода данных (не показаны) могут включать в себя микрофон, джойстик, игровую клавиатуру, спутниковую антенну, сканер, устройство ввода видеоинформации или подобные им. Эти и другие устройства ввода данных часто подключаются к процессору 120 через входной пользовательский интерфейс 160, который присоединен к системной шине, но могут быть связаны через другой интерфейс и шинные структуры, такие как параллельный порт, игровой порт или универсальная последовательная шина (УПШ, USB). Монитор 191 или другой тип устройства отображения также связан с системной шиной 121 через интерфейс, такой как видео интерфейс 190. В дополнение к монитору компьютеры могут также включать в себя другие периферийные устройства вывода, такие как динамики 197, принтер 196 и устройство видеовывода, которые могут быть связаны через средство 195 сопряжения с периферийными устройствами вывода информации.
Компьютер 110 может работать в сетевой среде, используя логические подключения к одному или более удаленному компьютеру, такому как удаленный компьютер 180. Удаленный компьютер 180 может быть другим персональным компьютером, сервером, маршрутизатором, сетевым периферийным устройством (например, принтером), сетевым ПК, одноранговым маршрутизатором или другим обычным сетевым узлом, и типично включает в себя многие или все элементы, описанные выше относительно персонального компьютера 110, хотя только запоминающее устройство 181 показано на фиг. 1. Логические подключения (соединения), изображенные на фиг. 1, включают в себя локальную сеть (ЛС) 171 и глобальную сеть (ГС) 173, но могут также включать в себя другие сети. Такие сетевые среды являются обычными в офисах, компьютерных сетях в масштабах предприятия, корпоративных сетях (интранет) и Интернет.
Когда используется сетевая среда с ЛС, персональный компьютер 110 соединяется с ЛС 171 через сетевой интерфейс или адаптер (например, через сетевую интерфейсную плату (СИП)) 170. Когда используется сетевая среда с ГС, компьютер 110 типично включает в себя модем 172 или другие средства для установления связи по ГС 173, такой как Интернет. Модем 172, который может быть внутренним или внешним, может быть связан с системной шиной 121 через пользовательский входной интерфейс 160 или другой соответствующий механизм. В сетевой среде модули программ, изображенные относительно персонального компьютера 110 или его частей, могут храниться в удаленном запоминающем устройстве. Для примера, а не в качестве ограничения фиг. 1 показывает удаленные прикладные программы 185 как находящиеся в запоминающем устройстве 181. Следует признать, что показанные сетевые подключения являются примером и что могут использоваться другие средства установления связи между компьютерами.
В последующем описании изобретение будет описано со ссылкой к действиям и символическим представлениям операций, которые выполняются одним или более компьютерами, если не обозначено иначе. Также следует понимать, что такие действия и операции, которые временами упоминаются как выполняемые компьютером, включают в себя обработку процессором компьютера электрических сигналов, представляющих данные в структурированной форме. Эта обработка преобразовывает данные или хранит их в ячейках в системе памяти компьютера, которая реконфигурирует, или иначе, изменяет работу компьютера способом, хорошо понятным специалистам. Структуры данных, где данные хранятся, являются физическими ячейками памяти, которые имеют определенные свойства, которые определяются форматом данных. Однако хотя изобретение описывается в предварительно указанном контексте, оно не является ограничением, поскольку специалисты должны признать, что различные описанные в дальнейшем действия и операции также могут быть осуществлены в аппаратных средствах.
Фиг.2 иллюстрирует взаимосвязь некоторых из компонентов, которые составляют сетевую модель, и компонентов настоящего изобретения. Во время нормальной работы сетевые сообщения посылаются приложением 200 через сетевой стек 202 на периферийное устройство 204, откуда сообщения посылаются другим устройствам и приложениям в сети и принимаются от других устройств и приложений. Сетевой стек 202 включает в себя один или более промежуточных программных уровней 206. Данные, посылаемые от приложения 200, перемещаются через промежуточный программный уровень (ни) 206, где с данными могут выполняться определенные операции, такие как упаковка данных, надежная передача данных, шифрование данных и вычисление профиля сообщения.
Коммутатор (переключатель) 208 используется для разгрузки (освобождения) процессора 120 от выполнения сетевым стеком операций для промежуточного программного уровня (ней) 206. Хотя коммутатор 208 показан отдельно, следует отметить, что коммутатор 208 может быть интегрирован в верхний промежуточный уровень сетевого стека 202. Данные посылаются периферийному устройству 204 через обходной тракт 210 к периферийному устройству 204 для выполнения операций сетевого стека. В этой иерархии промежуточные программные уровни не должны исключительно постоянно находиться в хосте или периферийном устройстве, и это позволяет любому из промежуточных уровней быть или полностью выгруженным, или оставаться в хосте, или быть их комбинацией (например, выгружать одно или более из определенных соединений). Дополнительно, одни обходные тракты могут наслаиваться поверх других обходных трактов (например, обходной тракт протокола IPSEC может быть расположен поверх обходного тракта протокола TCP). Подключение (соединение) может быть комбинацией надежной и ненадежной передачи данных, одноадресной или многоадресной передачи данных. Если промежуточный уровень остается в хосте, то хост модифицирует кэшируемые переменные (как описано ниже) в периферийном устройстве 204. Например, элемент (запись) состояния блока управления транспортировкой (TCB) для соединения может быть выгружен(а) для транспортного уровня с помощью элемента кэша маршрута (ЭКМ, RCE) для сетевого уровня, выгруженного на периферийное устройство 204. Коммутатор 208 продолжает посылать трафик для различных TCB через сетевой стек 202, который совместно использует тот же самый ЭКМ, когда коммутатор 208 посылает трафик через обходной тракт 210 для выгруженного TCB.
Коммутатор 208 инициирует выгрузку, посылая промежуточному уровню 206 запрос на выгрузку. Запрос на выгрузку включает в себя информацию о ресурсах, которая помогает периферийному устройству 204 решить, может ли оно успешно выгрузить соединение. Каждый промежуточный уровень 206 или отказывается от запроса на выгрузку, или добавляет информацию о ресурсах к запросу на выгрузку и посылает запрос на выгрузку к смежному программному уровню в сетевом стеке 202. Когда периферийное устройство 204 принимает запрос на выгрузку, оно вычисляет, имеет ли оно ресурсы, доступные для выгрузки соединения. Периферийное устройство 204 отказывается от запроса на выгрузку, если выгрузка невозможна. Иначе, периферийное устройство 204 принимает запрос на выгрузку и распределяет ресурсы для соединения (подключения). Периферийное устройство 204 завершает запрос на выгрузку, посылая сообщение завершения, имеющее список параметров, связанный с промежуточным программным уровнем(нями) 206. Связанный список параметров обеспечивает передачу информации к промежуточному программному уровню(ням) 206 и коммутатору (переключателю) 208 для того, чтобы дать возможность промежуточному программному уровню(ням) 206 и коммутатору 208 связываться с периферийным устройством. Каждый промежуточный программный уровень 206 удаляет информацию для своего уровня из связанного списка параметров.
Когда промежуточный уровень 206 принимает сообщение завершения выгрузки, промежуточный уровень 206 передает свое состояние на периферийное устройство 204. Каждое состояние может иметь три типа переменных: КОНСТАНТА, КЭШИРУЕМАЯ и ДЕЛЕГИРОВАННАЯ. Состояние может иметь все три типа переменных или подмножества из трех типов переменных. Переменные КОНСТАНТА - константы, которые никогда не изменяются в течение продолжительности жизни выгруженного подключения. Они не считываются назад к уровням, когда подключение (данные соединения) загружается. Главный процессор 120 поддерживает монопольное использование КЭШИРУЕМЫХ переменных и гарантирует, что любые изменения в КЭШИРУЕМОЙ переменной в главном процессоре 120 модифицируются в периферийном устройстве 204. Управляющие сообщения, которые изменяют КЭШИРУЕМОЕ состояние, обрабатываются сетевым стеком 202. В результате хост записывает, но не должен считывать назад КЭШИРУЕМЫЕ переменные при загрузке (данных) подключения. Главный процессор 120 передает монопольное использование ДЕЛЕГИРОВАННЫХ переменных периферийному устройству 204. ДЕЛЕГИРОВАННЫЕ переменные записываются один раз, когда происходит выгрузка, и считываются назад, когда выгрузка прекращается. Из-за того что только ДЕЛЕГИРОВАННЫЕ переменные возвращаются обратно, минимизируется непроизводительная нагрузка возвращения подключения к хосту. Состояние, которое должно иметь совместный доступ (например управление) от сетевого стека 202 и периферийного устройства 204, которое по различным причинам производительности выгружается (т.е. делегируется), просто разделяется между сетевым стеком 202 и обходным трактом 210 (например, идентификатор IP при выгрузках TCP) таким образом, что и сетевой стек 202, и периферийное устройство 204 владеет эксклюзивной частью состояния. Главный процессор 120 запрашивает от периферийного устройства 204 ДЕЛЕГИРОВАННЫЕ переменные, когда это необходимо (например, для статистической информации). Главный процессор 120 может также запросить переменные КОНСТАНТА или КЭШИРУЕМЫЕ переменные для диагностики. Деление состояния на три категории дает возможность сетевому стеку 202 хорошо сосуществовать с обходным трактом 210. Следует отметить, что запрос на выгрузку может включать в себя состояние. Это может быть сделано, если состояние или не содержит делегированные переменные состояния, или содержит делегированные переменные состояния, которые не будут изменяться между началом запроса на выгрузку и завершением запроса на выгрузку.
Периферийное устройство 204 или хост решают, когда выгруженное подключение должно быть загружено. Загрузка (передача) инициируется или периферийным устройством 204, или коммутатором 208. Как только загрузка (передача) инициирована, периферийное устройство 204 завершает все невыполненные запросы с соответствующим состоянием и передает делегированное состояние самого верхнего промежуточного уровня к коммутатору 208. Коммутатор 208 ставит в очередь все дальнейшие передаваемые запросы и прекращает отправлять (содержимое) буфера приема. Коммутатор 208 дает команду самому верхнему промежуточному уровню, чтобы он взял под свое управление делегированное состояние. Самый верхний промежуточный уровень берет под свое управление делегированное состояние и посылает сообщение завершения коммутатору 208. После того как коммутатор 208 принимает сообщение завершения, коммутатор 208 подтверждает загрузку периферийному устройству 204, что дает возможность периферийному устройству 204 освободить ресурсы, которые больше не используются.
Следует отметить, что самый верхний промежуточный уровень посылает входящие пакеты данных для выгруженного соединения к периферийному устройству 204 для обработки, пока оно не взяло под свой контроль делегированное состояние. Пакеты данных могут прибывать между временем, когда периферийное устройство 204 передает делегированное состояние к коммутатору 208, и временем, когда самый верхний промежуточный уровень взял под свое управление делегированное состояние. После того как периферийное устройство 204 передало делегированное состояние к коммутатору 208, оно больше не может обрабатывать входящие пакеты данных. Периферийное устройство 204 посылает сообщение об ошибках самому верхнему промежуточному уровню, указывая, что происходит загрузка (передача), когда оно принимает входящие данные. Сообщение об ошибках сообщает самому верхнему промежуточному уровню, чтобы оно прекратило отправлять входящие данные и буферизовало дальнейшие данные, пока самый верхний промежуточный уровень не примет делегированное состояние. Альтернативно за счет дополнительной буферной памяти на периферийном устройстве 204 входящие данные могут направляться периферийному устройству 204, чтобы периферийное устройство 204 буферизировало данные.
Многочисленные подключения (соединения) могут выгружаться промежуточным программным уровнем 206 на периферийное устройство 204. Промежуточным программным уровнем 206 поддерживается счетчик обращений для количества объектов состояния верхнего уровня (т.е. объектов состояния уровней, расположенных выше промежуточного программного уровня 206), которые обращаются к объекту состояния промежуточного программного уровня для выгрузки. В данной работе считается, что объект состояния - это совокупность переменных состояния для конкретного уровня, которые категоризируются как переменные КОНСТАНТА, КЭШИРУЕМАЯ или ДЕЛЕГИРОВАННАЯ. Если выгруженный объект состояния промежуточного уровня не имеет обращений к нему от уровня, расположенного выше его, то промежуточный уровень 206 посылает сообщение периферийному устройству 204, чтобы загрузить объект состояния для промежуточного уровня и послать делегированные переменные состояния промежуточному уровню 206. Периферийное устройство 204 удаляет объект состояния для промежуточного уровня 206, и промежуточный уровень 206 посылает сообщение завершения коммутатору 208.
Обращаясь к фиг.3 теперь, когда описана полная концепция, подробности изобретения будут описаны в варианте осуществления, где периферийное устройство 204 - СИП 170, коммутатор 208 - коммутатор (переключатель) интерфейса транспортного уровня (ИТУ, TLI) 306, и сетевой стек 202 содержит транспортный уровень 300, сетевой уровень 302 и уровень 304 создания кадра. Сетевой уровень 302 также известен как уровень пути (маршрута), и уровень 304 создания кадра также известен как соседний уровень.
Во время работы сетевые сообщения посылаются приложением 200 через сетевой стек 202 к СИП 170. Данные, посылаемые от приложения 200, перемещаются через коммутатор 306 ИТУ, который управляет тем, идут ли данные в расположенный в хосте сетевой стек 202, или в обходной тракт 308. Следует обратить внимание, что коммутатор 306 ИТУ может быть внедрен в верхний уровень сетевого стека 202. Программные уровни в сетевом стеке 202 принимают данные от приложения 200, упаковывают его в пакет и посылают его аппаратным средствам периферийного устройства 314 через минидрайвер 310 СИСД. Другие задачи, которые может выполнять сетевой стек 202, когда пакет данных проходит через стек 202, включают в себя шифрование данных, надежную передачу данных и вычисление профиля сообщения (например, контрольной суммы или циклического избыточного кода (ЦИК, CRC) для пакета данных). Многие из этих задач выполняются процессором 120 и потребляют много ресурсов процессора.
Коммутатор 306 ИТУ используется для разгрузки процессора 120 от выполнения операций стека, отправляя данные для подключений к СИП 170 через обходной тракт 308 (и драйвер 312 обходного тракта). Специалисты должны признать, что верхней границей минидрайвера 310 СИСД и драйвера обходного тракта 312 является СИСД интерфейс прикладного программирования (ИПП, API) в операционной системе корпорации Microsoft. Для целей объяснения будет использоваться стек протоколов, основанный на протоколе управления передачей (TCP). Однако специалисты должны признать, что могут использоваться множество видов периферийных устройств и другие сетевые стеки могут выгружаться, используя раскрытие настоящего изобретения. Например, могут выгружаться стеки протоколов, основанные на потоковом протоколе передачи управления (ПППУ, SCTP) или протоколе пользовательских дейтаграмм (ППД, UDP). Дополнительно, изобретение может также использоваться для выгрузки протоколов более высокими функциональными возможностями, например, интерфейс малых вычислительных систем для доступа к Интернет (iSCSI), сетевая файловая система (NFS) или файловая система общего интерфейса (SIFS).
Существует много причин, почему происходит выгрузка. Для примера, а не в качестве ограничения, некоторые из причин представлены ниже. Системный администратор может выбрать определенную услугу (службу), которая должна быть выгружена. Определенное соединение может быть выгружено, если трафик (в терминах количества байтов или пакетов) через соединение потребляет существенное количество ресурсов. Могут выгружаться разные типы услуг (служб). Например, могут выгружаться протоколы защиты, такие как IPSEC. Выгрузка может управляться политикой. Например, администратор может иметь такую политику, что сначала выгружаются все соединения внутри организации. Используемые системные ресурсы (например, использование центрального процессора, использование кэша данных, использование кэша таблицы страниц, пропускная способность памяти) могут привести главный процессор к выгрузке подключений.
Фиг. 4 иллюстрирует этапы, предпринятые для выгрузки подключения TCP. Используется процесс, состоящий из трех стадий. В общем случае, процесс, состоящий из трех стадий, должен распределять ресурсы, требуемые для выгрузки подключения TCP, обеспечивать дескрипторы к каждому из уровней 300, 302, 304, 306 и выгружать состояние для каждого из уровней 300, 302 304, 306 к СИП 170. Во время выполнения выгрузки, ИТУ коммутатор 306 буферизирует все сообщения, посланные от приложения 200. Альтернативно, транспортный уровень 300 буферизирует данные. Когда выгрузка закончена, буферизированные данные перемещаются к СИП 170, используя тот же самый механизм, как передача данных выгрузки. Когда входящие пакеты принимаются во время выполнения выгрузки, СИП 170 продолжает продвигать данные вверх через уровни 300, 302, 304, 306, пока делегированное состояние транспортного уровня не будет передано СИП 170.
ИТУ коммутатор 306 инициирует выгрузку, посылая транспортному уровню 300 запрос на выгрузку (линия 400). Запрос на выгрузку включает в себя указатель на местное состояние следующего уровня (например, указатель TCB (блока управления транспортировкой) для транспортного уровня 300, указатель ЭКМ (элемента кэша маршрута) для сетевого уровня 302, указатель таблицы ППА (протокола преобразования адресов) для уровня 304 создания кадра или указателя СИСД минипорта для СИСД минидрайвера 310), тип выгрузки (например, протокол TCP для ИТУ коммутатора 306, протокол IPv6 для сетевого уровня 302 и т.д.) и информацию о ресурсах, которая помогает СИП 170 решать, может ли она успешно выгрузить подключение TCP. ИТУ коммутатор 306 может также обеспечивать таблицы диспетчеризации к СИП 170. Транспортный уровень 300 или отказывается от запроса на выгрузку, или посылает запрос на выгрузку к сетевому уровню 302 с информацией о ресурсах TCP, которая добавляется к информации о ресурсах ИТУ коммутатора (линия 402).
Сетевой уровень 302 принимает запрос на выгрузку и/или отказывается выгружать соединение, или посылает запрос на выгрузку к уровню 304 создания кадра с требованиями к сетевым ресурсам, которые добавляются к информации о ресурсах TCP и информации о ресурсах ИТУ коммутатора (линия 404). Сетевой уровень 302 может также обеспечивать таблицы диспетчеризации к СИП 170. Уровень 304 создания кадра или отказывается выгружать подключение, или посылает запрос на выгрузку к СИП 170 с требованиями к ресурсам для создания кадра, которые добавляются к требованиям к сетевым ресурсам, информации о ресурсах TCP и информации о ресурсах ИТУ коммутатора (линия 306).
СИП 170 принимает запрос на выгрузку и вычисляет, имеет ли она ресурсы, доступные для выгрузки подключения TCP. Если СИП решает, что выгрузка не возможна, то она отказывается от запроса на выгрузку. Если СИП решает, что выгрузка возможна, то она принимает запрос на выгрузку и распределяет ресурсы (например, TCB, элемент кэша маршрута (ЭКМ), ATE (элемент таблицы протокола преобразования адресов (ППА)) для соединения. СИП 170 создает связанный список параметров и таблиц диспетчеризации для передачи уровням 300, 302, 304 и 306 и завершает запрос на выгрузку, посылая сообщение завершения, которое содержит связанный список параметров для уровня 304 создания кадра (линия 408). Параметры включают в себя дескриптор выгрузки и таблицу диспетчеризации для каждого из уровней 300, 302, 304, 306. В данном документе полагается, что дескриптор выгрузки означает механизм, который дает возможность программному уровню связываться с периферийным устройством. Для примера, а не в качестве ограничения дескриптор выгрузки может быть дескриптором на основе указателя, целочисленным значением, используемым для поиска в массиве, хеш-таблицей (например, хеш-функцией), каналом связи между программным уровнем (или сетевым стеком) и периферийным устройством, или набором параметров, передаваемых программным уровнем, который используется периферийным устройством для поиска объекта состояния.
Таблицы диспетчеризации используются для отправки данных непосредственно к СИП 170 или приема данных непосредственно от СИП 170. Таблицы диспетчеризации могут также использоваться для обеспечения диагностики. Например, может быть добавлен программный уровень для контролирования системы и внесения ошибки для того, чтобы удостовериться, что система функционирует должным образом. Дополнительно таблица диспетчеризации может быть исправлена программными уровнями, которые при необходимости могут добавлять дополнительные функциональные возможности. Например, может быть добавлен программный уровень для обеспечения функциональных возможностей драйвера фильтра. Внесение исправлений типично происходит посредством, захвата указателя на первоначальную функцию, где добавленная функция вставляется и переадресовывает ее (т.е. указывая на нее) к добавленной функции. Всякий раз, когда вызывается первоначальная функция, после того как исправление было вставлено, добавленная функция выполняет свою функцию и затем вызывает первоначальную функцию.
Уровень 304 создания кадра сохраняет дескриптор выгрузки и таблицу диспетчеризации для уровня создания кадра в его элементе таблицы ППА для простой модификации, если изменяется МАК-адрес назначения или изменяется тип инкапсуляции (формирования пакета). Затем уровень 304 создания кадра модифицирует состояние СИП 170, связанное с ATE (линия 410). Уровень 304 создания кадра удаляет свое состояние из связанного списка и посылает оставшуюся в связанном списке информацию к сетевому уровню 302 (линия 412).
Сетевой уровень 302 сохраняет дескриптор выгрузки и таблицу диспетчеризации для сетевого уровня 302. Сетевой уровень 302 также посылает свое состояние к СИП 170 (линия 414). Сетевой уровень 302 удаляет информацию сетевого уровня из связанного списка и посылает сообщение завершения, содержащее связанный список параметров и таблиц диспетчеризации, к транспортному уровню 300 (линия 416). Сетевой уровень 302 может посылать фрагменты IP, которые он принимает для выгруженного состояния, к СИП 170 для обработки, или он может обрабатывать фрагменты IP в сетевом уровне и посылать их к транспортному уровню 300.
В дополнительном варианте осуществления объект состояния уровня посылается с запросом на выгрузку. Например, объект состояния уровня создания кадра и объект состояния сетевого уровня посылаются с запросом на выгрузку и состояние модифицируется, только если кэшируемое состояние изменяется между запросом на выгрузку и событием завершения. Объект состояния всего уровня может посылаться только с запросом на выгрузку, если делегированное состояние или отсутствует, или не может изменяться между запросом на выгрузку и завершением запроса на выгрузку. Однако переменные состояния, классифицируемые как КОНСТАНТА, могут посылаться с запросом на выгрузку, даже если делегированное состояние присутствует и может изменяться между запросом на выгрузку и завершением запроса на выгрузку.
Транспортный уровень 300 сохраняет дескриптор выгрузки для транспортного уровня и посылает свое состояние к СИП 170 (линия 418). Если есть какое-либо невыполненное ожидание обслуживания буферов отправления или приема, то транспортный уровень 300 возвращает содержимое буферов к ИТУ коммутатору 306. Как только транспортный уровень 300 начинает возвращать (содержимое) буферов к ИТУ коммутатору 306, ИТУ коммутатор 306 прекращает посылать содержимое буферов транспортному уровню 300 и ставит их в очередь и ждет, когда транспортный уровень 300 пошлет сообщение завершения, содержащее связанный список параметров и таблицы диспетчеризации, к ИТУ коммутатору 204. Транспортный уровень 300 возвращает все содержимое буферов и затем посылает сообщение завершения (линия 420). Как только ИТУ коммутатор 306 принимает сообщение завершения, ИТУ коммутатор 306 перемещает содержимое буферов отправления и приема к СИП 170 (линия 422). ИТУ коммутатор 306 использует таблицу диспетчеризации для отправления содержимого всех необработанных буферов и тех буферов, которые будут приниматься в будущем, и посылает к СИП 170 для обработки. В течение времени, которое требуется для завершения запроса на выгрузку, каждый уровень 300, 302, 304 или отказывается от новых запросов на выгрузку для выгруженного объекта состояния (т.е. объекта состояния, связанного с уровнем), или ставит их в очередь, пока выгрузка не закончится.
Транспортный уровень 300 все еще имеет возможность обрабатывать входящие данные TCB и передавать эти данные ИТУ коммутатору 306, если транспортное состояние не было выгружено в СИП 170. Если данные TCB прибывают в середине процесса выгрузки, то транспортный уровень 300 может или задержать данные, или обработать данные и передать их ИТУ коммутатору 306. Между временем, когда транспортный уровень 300 посылает свое состояние к СИП 170 (линия 418), и временем, когда ИТУ коммутатор перемещает содержимое буфера к СИП 170 (линия 422), входящие TCB данные, которые приходят через сетевой стек 202, посылаются к СИП 170.
При последующих запросах на выгрузку сетевой уровень 302 и уровень 304 создания кадра передают дескрипторы выгрузки, которые они приняли от СИП 170 от предшествующей выгрузки, к СИП 170. Это сигнализирует СИП 170, что ресурсы для сетевого уровня 302 и уровня 304 создания кадра уже были распределены, что сохраняет ресурсы СИП и ускоряет выгрузку.
Как предварительно показано, уровни 300, 302, 304 передают свое состояние к СИП 170. Каждое состояние имеет три типа переменных: КОНСТАНТА, КЭШИРУЕМАЯ и ДЕЛЕГИРОВАННАЯ. Переменные КОНСТАНТА являются константами, которые никогда не изменяются во время работы выгруженного соединения. Они не считываются назад к уровням, когда соединение завершено. Главный процессор 120 поддерживает монопольное использование КЭШИРУЕМЫХ переменных и гарантирует, что любые изменения КЭШИРУЕМОЙ переменной в главном процессоре 120 модифицируются в СИП 170. В результате хост будет записывать, но никогда не будет считывать назад КЭШИРУЕМЫЕ переменные (если этого не запросит системная диагностика). Главный процессор 120 перемещает монопольное использование ДЕЛЕГИРОВАННЫХ переменных к СИП 170. ДЕЛЕГИРОВАННЫЕ переменные записываются один раз, когда происходит выгрузка, и считываются назад, когда выгрузка закончена. С помощью возвращения только ДЕЛЕГИРОВАННЫХ переменных минимизируется непроизводительное использование ресурсов при возвращении данных соединения к хосту. Главный процессор 120 запрашивает от СИП 170 ДЕЛЕГИРОВАННЫЕ переменные тогда, когда это необходимо (например, для статистической информации).
Переменные КОНСТАНТА для транспортного уровня 300 включают в себя порт назначения, исходный порт, флажок указания, что существует случай «Mobile IP», когда адрес, о котором «заботятся», может изменяться, коэффициенты масштабирования окна «SEND» и «RECV» и дескриптор СИП для сетевого уровня 302. КЭШИРУЕМЫМИ переменными для транспортного уровня 300 являются переменные TCP и переменные IP. Переменные TCP включают в себя «Effective MSS», количество байтов, которые будут скопированы при приеме, указанное СИП 170, флажок для выключения «Nagling» (алгоритма Нагла), флажок для указания того, что необходима эмуляция деятельности (работы) («Keep-Alive»), и параметры настройки для «Keep-Alive» (т.е. интервал, количество элементов и "дельта" (разброс)). Переменные IP включают в себя TOS и TTL. ДЕЛЕГИРОВАННЫЕ переменные включают в себя текущее состояние TCP, порядковый номер для следующего «RECV» (т.е. RCV.NEXT), размер принимаемого окна (RCV.WND), порядковый номер для «First Un-Acked Data» (SND.UNA), порядковый номер для следующего «SEND» (SND.NEXT), максимальный порядковый номер, который когда-либо посылался (SND.MAX), максимальное значение «Send Window» (MAX_WIN), текущее окно перегрузки (CWIN), порог медленного старта (SSTHRESH), сглаженный RTT (8*A), дельта (8*D), текущий счетчик повторной передачи, время, оставшееся до «Next Retransmit» (повторной передачи), и временная метка, которая будет отображаться на экране.
Переменные КОНСТАНТА для сетевого уровня 302 включают в себя адрес IP назначения (или для протокола IPv4, или для протокола IPv6) и исходный адрес IP адресата (или для протокола IPv4, или для протокола IPv6). КЭШИРУЕМЫЕ переменные для сетевого уровня 302 включают в себя дескриптор СИП для уровня 304 создания кадра. ДЕЛЕГИРОВАННЫЕ переменные для сетевого уровня 302 включают в себя начальное значение IP идентификатора пакета. КЭШИРУЕМЫЕ переменные для уровня 304 создания кадра включают в себя адрес ППА и флажок для указания формата заголовка (например, LLC/SNAP [управление логическим звеном/протокол доступа к подсети] или DIX [Digital, Intel, Xerox]).
Состояние транспортного уровня включает в себя дескриптор для сетевого уровня, и состояние сетевого уровня включает в себя дескриптор для состояния создания кадра, потому что состояние сетевого уровня может совместно использоваться многочисленными соединениями, и состояние уровня создания кадра может совместно использоваться многочисленными путями (например, псевдонимами IP). Эта иерархия поддерживается по нескольким причинам. Соединение требует дескриптор СИП для сетевого уровня, потому что пространство имен идентификатора IP должно управляться по всем выгруженным соединениям на основе маршрута. Маршрут требует дескриптор СИП для уровня создания кадра, потому что модификация маршрута может изменить адрес следующего перехода (прыжка), таким образом указывая на новый МАС-адрес. Данная иерархия также уплотняет количество состояний, требуемых для поддержки СИП. Например, модификация ППА (протокола преобразования адресов) для протокола IPv4 может изменить отображение адреса IP на МАС-адрес (например, отказавший интерфейс на сервер). Хост поддерживает МАС-адрес как кэшируемую переменную, таким образом, необходимо только сделать единственную модификацию кэшируемого состояния и всех подключений, которые отказали, к новому интерфейсу.
Когда подключение (соединение) TCP выгружено, СИП 170 отвечает за назначение идентификаторов пакета (например, идентификаторов IP) для посылаемых пакетов. Идентификатор IP выгружается или на основе интерфейса, или на основе объекта состояния уровня. Для СИП 170 назначают часть пространства имен идентификатора IP. В одном из вариантов осуществления для СИП 170 назначают половину всего пространства имен идентификатора IP и задают начальное значение идентификатора пакета IP для использования, когда сетевое состояние передается к СИП 170. СИП 170 использует следующую формулу для генерации идентификатора IP пакетов IP, которые она посылает:
Cur_IPID = [(Start_IPID_For_This_Path) + (Counter_For_This_Path)mod32K]mod 64K Counter_For_This_Path = Counter_For_This_Path + 1
Когда выгруженное подключение или загружается, или становится недействительным, СИП 170 перемещает следующее значение идентификатора IP, которое она будет использовать, к сетевому уровню для хранения для следующей выгрузки и главный процессор 120 продолжает использовать часть пространства имен идентификатора IP, которая была назначена. Главный процессор 120 может использовать все пространство имен идентификатора IP, но счетчик должен устанавливаться каждый раз, когда происходит выгрузка.
СИП 170 располагает данные в буфере приема в порядке принятия данных и заполняет буфера приложения в том порядке, в котором они отправляются для выгруженного подключения. Многие приложения ожидают индикации приема перед отправлением буфера приема. В одном из вариантов осуществления СИП 170 имеет глобальный пул буферов для использования, если данные прибывают для подключения, и данные буфера приема приложения не были отправлены. Глобальный пул буферов используется для выгруженных подключений и может использоваться для осуществления: 1) обработки передач TCP с изменением последовательности; 2) дефрагментации дейтаграмм IP; 3) алгоритма копирования буфера вместо алгоритма нулевого копирования, если приложение отправляет содержимое буферов, которые слишком малы для алгоритма нулевого копирования. Альтернативно пул буферов на каждое соединение может использоваться, если не беспокоятся об эффективном использовании ресурсов. Однако глобальный пул буферов используется, если СИП не поддерживает пул буферов на каждое соединение или из-за отсутствия системных ресурсов (например, недостаточно ресурсов для размещения буфера приложения в памяти).
Обращаясь теперь к фиг. 5a-5d, СИП 170 имеет обращенное (инвертированное) дерево 500, которое представляет выгрузку, когда выгрузка произошла. На данных чертежах пунктирные линии представляют новые состояния, распределенные СИП 170. На фиг. 5a СИП 170 имеет элемент 502 ППА, присоединенный к элементу 504 кэша маршрута, который присоединен к элементу 506 TCP. Если, например, весь трафик идет к маршрутизатору, то следующий переход всегда будет к тому же самому элементу 502 ППА. Если элемент 504 кэша маршрута должен использоваться для следующей выгрузки подключения TCP, то единственным новым ресурсом является новый выгруженный TCB. Таким образом, когда выгрузка инициируется вниз по сетевому стеку 202, промежуточные программные уровни, которые уже выгрузили свое состояние (например, сетевой уровень 302 и уровень 304 создания кадра), будут просто вставлять сгенерированный СИП дескриптор выгрузки, который был распределен при предыдущем запросе выгрузки. СИП 170 должен только распределить новые ресурсы (например, элемент 508 TCP) и послать дескрипторы выгрузки для новых ресурсов обратно к сетевому стеку 202. Обращенное дерево 500 теперь имеет элемент 508 TCP, присоединенный к элементу 504 кэша маршрута (см. фиг. 5b). Этот подход сохраняет ресурсы СИП и ускоряет выгрузку. Дополнительно, если состояние кэшируемой переменной изменяется, то только одна структура должна модифицироваться. Если все состояния для различных программных уровней в обходном тракте были выгружены как один элемент, то любая модификация состояния, расположенного ниже верхнего программного уровня, будет требовать многочисленных модификаций.
Фиг.5C показывает обращенное дерево 500 с более сложной конфигурацией. Существуют два элемента кэша маршрута, 504 и 510, которые проходят через элемент 502 таблицы ППА. Подключения TCP 506 и 508 используют элемент 504 кэша маршрута. Подключения TCP 512 и 514 обращаются к элементу 510 кэша маршрута. Если происходит любая модификация ППА (например, отказ интерфейса многосетевого сервера), то должен модифицироваться только элемент 502. Это дает возможность потенциально тысячам или сотням тысяч подключений при отказе перейти к новому интерфейсу только с единственной требуемой модификацией СИП 170. Фиг. 5d показывает два независимых обращенных дерева (элементы 502-508 и элементы 510-516), объединенных в одно обращенное дерево 500 после того, как происходит модификация маршрута. Перед модификацией маршрута элемент следующего ППА перехода для элемента 510 кэша маршрута является элементом 516 таблицы ППА. После модификации маршрута элемент следующего перехода таблицы ППА является элементом 502 таблицы ППА. Таким образом, использование обращенного дерева дает возможность обрабатывать модификации маршрута как одну передачу к СИП 170 вместо тысяч или десятков тысяч модификаций, если бы состояние сетевого стека было выгружено как один элемент.
Обращаясь теперь к фиг. 6, когда подключение выгружено в СИП 170, существуют два пути к СИП 170. Первый путь - через СИСД минидрайвер 310, через уровень 304 создания кадра, через сетевой уровень 302 и через транспортный уровень 300. Второй путь - через выгруженное подключение 608, который называют обходным трактом. С точки зрения главного компьютера для этих двух путей все остается тем же самым в терминах осуществления связи. Кэшируемые переменные состояния синхронизируют эти два пути с помощью процессора 120, обновляя кэшируемые переменные состояния в СИП 170, как показано ранее. Обновление кэшируемых переменных обозначено стрелками 602, 604, 606.
Когда прибывает входящий пакет данных, СИП 170 определяет, проходит ли входящий пакет данных через выгруженный путь или через невыгруженный путь (т.е. через СИСД путь, состоящий из минидрайвера 310 СИСД и уровней 304, 302, 300). В одном из вариантов осуществления СИП 170 определяет, каким путем послать входящий пакет данных, выполняя хеш-функцию номера порта TCP источника и адресата, адреса IP источника и адресата и типа протокола. Если результат хэширования соответствует выгруженным параметрам подключения (т.е. обходится цепь блока хэширования, и происходит точное соответствие всех кортежей подключения), то используется обходной тракт 608. Если результат хэширования не соответствует индексу хэширования, то используется невыгруженный путь через сетевой стек 202. Сообщения управления, которые обновляют кэшируемые состояния, обрабатываются хостом. Это приводит к тому, что СИП 170 не должна обрабатывать сообщения управления вне выгруженного подключения, такие как сообщения ПУСИ (протокола управляющих сообщений сети Интернет), СДИ (службы доменных имен) и ПМИ (протокола маршрутной информации).
Настоящее изобретение обеспечивает пользователя возможностью получать статистическую информацию, используя существующее инструментальные средства, такие как Netstat, для отыскания разнообразной информации, которая включает в себя все подключения к хосту, параметры подключения, такие как тип протокола, местный и удаленный порт и привязка адреса IP, состояние подключения, идентификатор процесса и т.д. Статистическая информация в настоящем изобретении собирается или на основе уровня, или на основе объекта состояния уровня. В пределах уровня объекты состояния уровня могут группироваться для сбора статистической информации по многочисленным объектам состояния уровня. Например, статистическая информация для сетевого уровня может быть разделена таким образом, что статистическая информация существует для каждого используемого протокола (например, IPv4 и IPv6). Статистическая информация, связанная с переменными состояния КОНСТАНТА и КЭШИРУЕМАЯ, обеспечивается хостом, а статистическая информация, связанная с ДЕЛЕГИРОВАННЫМИ переменными состояния, обеспечивается периферийным устройством 204. Когда делается запрос, статистическая информация, связанная с ДЕЛЕГИРОВАННЫМИ переменными состояния, добавляется к статистической информации, связанной с переменными состояния КОНСТАНТА и КЭШИРУЕМАЯ.
Существует также класс статистической информации, которая суммируется по всей группе состояния уровня хоста (хост-компьютера) и состояния уровня периферийного устройства, например счетчик пакетов. Другой тип статистической информации - листинг состояния функции в системе (например, листинг состояния каждого TCB в системе). Статистическая информация для TCB является комбинацией статистической информации, отслеживаемой хостом, и статистической информации, отслеживаемой периферийным устройством. Точно так же статистическая информация для счетчика пакетов является суммой статистической информации состояния уровня хоста и статистической информации состояния уровня периферийного устройства.
Пример разделения статистической информации между хостом и периферийным устройством 204 для базы управляющей информации (БУИ, MIB) протокола TCP показан ниже в таблице 1, и статистическая информация для БУИ протокола IPv4 представлена ниже в таблице 2. В этих таблицах первый столбец - поле, второй столбец определяет, периферийное устройство или сетевой стек хоста отвечает за отслеживание статистической информации, и третья область указывает, как отслеживается это поле. Статистическая информация, за которую отвечает периферийное устройство, отслеживается на основе объекта состояния уровня или на основе уровня. В данной работе считается, что термин «на основе уровня» означает, что статистическая информация отслеживается через уровень, через периферийное устройство, через протокол. Однако следует обратить внимание, что когда статистическая информация синтезируется из состояния хоста и состояния от периферийного устройства, она в общем случае представлена на основе протокола. Статистическая информация, которую сетевой стек хоста может сгенерировать, не запрашивая периферийное устройство, категоризируется как «стек имеет полную информацию» или «сделано только стеком». Категория «стек имеет полную информацию» указывает, что периферийное устройство знает о статистической информации, но не отслеживает ее. Статистическая информация категории «сделано только стеком» указывает, что периферийное устройство не знает о статистической информации. Статистическая информация адаптера запрашивается через регулярный интерфейс СИСД. Статистическая информация адаптера включает в себя такие переменные, как посланные байты, принятые байты и т.д.
Разделение статистической информации для БУИ (базы управляющей информации) для протокола TCP
Параметр ts_RtoAlgoithm - значение для алгоритма, использующееся для определения значения тайм-аута (истечения времени ожидания), используемого для повторной передачи неподтвержденных октетов. Параметр ts_Rto_Min - минимальное значение, разрешенное реализацией TCP для тайм-аута (истечения времени ожидания) повторной передачи, измеренное в миллисекундах. Параметр ts_Rto_Min - максимальное значение, разрешенное реализацией TCP для тайм-аута (истечения времени ожидания) повторной передачи, измеренное в миллисекундах. Параметр ts_MaxConn - общее количество соединений TCP, которое поддерживается. Параметр ts_ActiveOpens - сколько раз соединения TCP сделали прямой переход в состояние «SYN_SENT» из состояния «CLOSED» (ЗАКРЫТО). Параметр ts_PassiveOpens - сколько раз соединения TCP сделали прямой переход в состояние «SYN_RCVD» из состояния «LISTEN» (СЛУШАЕТ). Параметр ts_AttemptFails - сколько раз соединения TCP сделали прямой переход в состояние «CLOSED» (ЗАКРЫТО) или из состояния «SYN_SENT», или из состояния «SYN_RCVD», плюс сколько раз соединения TCP сделали прямой переход в состояние «LISTEN» (СЛУШАЕТ) из состояния «SYN-RCVD». Параметр ts_EstabResets - сколько раз соединения TCP сделали прямой переход в состояние «CLOSED» (ЗАКРЫТО) или из состояния «ESTABLISHED» (УСТАНОВЛЕНО), или из состояния «CLOSE-WAIT» (БЛИЗКОЕ ОЖИДАНИЕ). Параметр ts_CurrEstab - количество соединений TCP, для которых текущим состоянием является или «ESTABLISHED» (УСТАНОВЛЕНО), или «CLOSE-WAIT» (БЛИЗКОЕ ОЖИДАНИЕ). Параметр ts_InSegs - общее количество принятых сегментов, которое включает в себя принятые по ошибке. Параметр ts_OutSegs - общее количество посланных сегментов, которое включают в себя текущие соединения, но исключают те, которые содержат только повторно переданные октеты. Параметр ts_RetransSegs - общее количество повторно переданных сегментов. Параметр ts_InErrs - общее количество сегментов, принятых по ошибке (например, неправильные контрольные суммы TCP). Параметр ts_OutRsts - количество посланных сегментов TCP, которые содержит в себе флажок RST. Параметр ts_NumCons - общее количество соединений TCP, которое в настоящее время существуют.
Разделение статистической информации для БУИ (базы управляющей информации) для протокола IPv4
Параметр ipsi_Forwarding - значение, которое обеспечивает индикацию того, действует ли хост как маршрутизатор IP по отношению к отправлению дейтаграмм, принятых хостом, но не адресованных ему. Параметр ipsi_DefaultTTL - значение по умолчанию, помещаемое в поле «Time-To-Live» заголовка IP дейтаграмм, создаваемых в этом объекте, всякий раз, когда значение TTL не доставляется с помощью протокола транспортного уровня. Параметр ipsi_InReceives - общее количество входящих дейтаграмм, принятых от интерфейса, включает в себя принятые по ошибке. Параметр ipsi_InHdrErrors - количество входящих дейтаграмм, отвергнутых из-за ошибок в их заголовках IP, включает в себя неправильные контрольные суммы, несовпадение номеров версий, другие ошибки формата, превышение значения параметра «time-to-live», ошибки, обнаруженные при обработке их опций IP, и т.д. Параметр ipsi_InAddrErrors - количество входящих дейтаграмм, отвергнутых из-за того, что адрес IP в их поле назначения заголовка IP не был допустимым адресом для приема в хосте. Параметр ipsi_ForwDatagrams - количество входящих дейтаграмм, для которых хост не был их конечным адресатом IP, в результате чего была сделана попытка найти маршрут для передачи их конечному адресату. Параметр ipsi_UnknownProtos - количество локально адресованных дейтаграмм, которые приняты успешно, но отвергнуты из-за неизвестного или неподдерживаемого протокола. Параметр ipsi_INDIScards - количество входящих дейтаграмм IP, для которых не обнаружено никаких проблем, которые бы мешали их дальнейшей обработке, но которые были отвергнуты (например, из-за недостатка объема буфера). Параметр ipsi_InDelivers - общее количество входящих дейтаграмм, успешно доставленных пользовательским протоколам IP. Параметр ipsi_OutRequests - общее количество дейтаграмм IP, которые локальный пользователь IP - протоколов (которые включают в себя ПУСИ) доставил к IP в запросах о передаче. Параметр ipsi_RoutingDiscards - количество элементов маршрутизации, которые были выбраны, чтобы отвергнуть, даже при том, что они допустимы. Параметр ipsi_OutDiscards - количество выходных дейтаграмм IP, для которых не обнаружено никаких проблем, которые бы мешали их передаче адресату, но которые были отвергнуты (например, из-за недостатка объема буфера). Параметр ipsi_OutNoRoutes - количество дейтаграмм IP, отвергнутых из-за того, что не был найден маршрут для их передачи адресату. Параметр ipsi_ReasmTimeout - максимальное количество секунд, которое принятые фрагменты хранятся, когда они ждут повторную сборку в хосте. Параметр ipsi_ReasmReqds - количество принятых фрагментов IP, которые должны быть повторно собраны в хосте. Параметр ipsi_ReasmOKs - количество дейтаграмм IP, успешно повторно собранных. Параметр ipsi_ReasmFails - количество отказов, обнаруженных алгоритмом повторной сборки IP (например, превышение времени ожидания, ошибки и т.д). Параметр ipsi_FragOKs - количество дейтаграмм IP, которые были успешно фрагментированы в хосте. Параметр ipsi_FragFails - количество дейтаграмм IP, которые были отвергнуты из-за того, что они должны были фрагментироваться в хосте, но не смогли, например, потому что был установлен флажок «не фрагментировать». Параметр ipsi_FragCreates - количество фрагментов дейтаграммы IP, которые были созданы в результате фрагментации в хосте. Параметр ipsi_NumIf - общее количество используемых интерфейсов. Параметр ipsi_NumAddr - общее количество уникальных адресов IP в системе. Параметр ipsi_NumRoutes - общее количество активных в настоящее время маршрутов.
Настоящее изобретение также обеспечивает способ загрузки выгруженного сетевого подключения от периферийного устройства к хосту. Существует много причин, почему происходит загрузка. Для примера, а не в качестве ограничения некоторые из причин представлены ниже. Маршрут может измениться, требуя, чтобы трафик посылался по другому интерфейсу. Поведение трафика подключения может измениться так, что он больше не является подходящим для выгрузки. Например, может быть недостаточный трафик, недостаток активности или подключение может находится под потоковым управлением дольше, чем установленное время (например, не принимаются никакие модификации окна). Дополнительно периферийное устройство может не поддерживать определенные функции, поведение трафика может быть неподходящим для выгрузки, если существует слишком много фрагментов IP, слишком большой трафик с измененной последовательностью, используются дополнительные данные слишком многих повторных передач, истечение времени «keep-alive» (эмуляции деятельности), безопасное соединение становится недопустимым и не возобновляется, или слишком много данных отправлено периферийному устройству. Другие причины для загрузки выгруженного подключения возникают из-за проблем с ресурсами. Например, периферийное устройство может испытывать недостаток в ресурсах для продолжения обработки подключения. Другое подключение (соединение) может иметь более высокий приоритет, чем выгруженное подключение, и загрузка подключения, когда доступность ресурсов периферийного устройства находится ниже порога, может дать возможность подключению с более высоким приоритетом продолжить использовать ресурсы периферийного устройства.
Системные ресурсы могут измениться таким образом, что главный процессор будет иметь ресурсы для обработки выгруженного подключения. Обходной тракт может потребовать других ресурсов, чем те, которые были первоначально выгружены (например, изменение фильтра защиты и т.д.). Хост может определить, когда ресурсы периферийного устройства приближаются к пороговым уровням, когда выгруженное подключение могло бы обрабатываться более эффективно главным процессором. Например, пороги могут включать в себя величину трафика (количество байтов или пакетов), количество фрагментов, размер окна и тип выгрузки.
Обращаясь теперь к фиг. 7, загрузка инициируется периферийным устройством 204 (например, СИП 170) или ИТУ коммутатором 306. Подключение может загружаться из-за разных причин. Причины включают в себя перемещение подключения на другое периферийное устройство, появление разъединения канала связи, слишком много ошибочных сегментов, слишком много данных отправлено периферийному устройству 204, приложение 200 предварительно не отправляет содержимое буферов, слишком много фрагментов IP, низкая производительность подключения и слишком много повторных передач.
Фиг.7 показывает загрузку (передачу), инициируемую ИТУ коммутатором 306 (линия 700). Следует обратить внимание, что если СИП 170 инициирует загрузку (передачу), то линия 700 не присутствует. Как только загрузка инициирована, СИП 170 завершает все невыполненные запросы с соответствующим состоянием и передает делегированное состояние транспортного уровня к уровню коммутатора (линия 702). СИП 170 может не завершить передачу или не заполнить полностью буфер приема. СИП 170 только гарантирует, что все состояния передачи и приема синхронизированы с делегированным состоянием, возвращенным к транспортному уровню 300. ИТУ коммутатор 306 ставит в очередь любые дополнительные запросы на передачу и прекращает отправлять буфера приема. ИТУ коммутатор 306 дает команду транспортному уровню взять под свое управление делегированное транспортное состояние (линия 704). Транспортный уровень 300 останавливает передачу к СИП 170 любых сегментов, которые он принимает, и берет под свое управление делегированное состояние и посылает сообщение завершения ИТУ коммутатору 306 (линия 706). После того как ИТУ коммутатор 306 принимает подтверждение, что транспортный уровень 300 взял под свое управление делегированное транспортное состояние, ИТУ коммутатор 306 передает СИП 170 подтверждение загрузки (линия 708), что дает возможность СИП 170 освободить ресурсы. Транспортный уровень 300 также информирует сетевой уровень 302 о загружаемом подключении до или после того, как сообщение завершения посылается к ИТУ коммутатору 306 (линия 710).
Следует отметить, что транспортный уровень 300 передает входящие пакеты данных для выгруженного подключения к СИП 170 для обработки, пока он не взял под свое управление делегированное состояние (линия 706). Пакеты данных могут прибывать между временем, когда СИП 170 передал делегированное состояние к ИТУ коммутатору 306 (линия 702), и временем, когда транспортный уровень 300 взял под свое управление делегированное состояние (линия 706). Когда СИП 170 передал делегированное состояние к ИТУ коммутатору 306, он больше не может обрабатывать входящие пакеты данных. Когда СИП 170 принимает входящий пакет для загружаемого подключения, он посылает сообщение об ошибках транспортному уровню 300, индицируя, что происходит загрузка, и может отказаться от входящего пакета. Сообщение об ошибках сообщает транспортному уровню 300, чтобы он прекратил отправлять входящие данные. В одном из вариантов осуществления транспортный уровень 300 буферизирует дополнительные данные, пока он не примет делегированное состояние.
Многочисленные соединения могут выгружаться промежуточными программными уровнями на периферийное устройство. Промежуточным программным уровнем поддерживается счетчик обращений количества подключений, выгруженных от промежуточного программного уровня на периферийное устройство. Если счетчик обращений обнуляется, то запрос на загрузку генерируется к следующему промежуточному программному уровню. Это заставляет уменьшать счетчик обращений следующего уровня. Запрос на загрузку продолжается вниз по сетевому стеку 202, если счетчик обращений следующего уровня доходит до нуля. Этот процесс повторяется до тех пор, пока или счетчик обращений промежуточного программного уровня не обнулен или периферийное устройство не примет запрос на загрузку. Сетевой уровень 302 уменьшает счетчик обращений количества выгруженных объектов состояния, связанных с СИП 170. Если счетчик обращений обнуляется, то никакие TCB не используют ресурсы, распределенные в СИП 170 для сетевого уровня 302. Когда счетчик обращений обнуляется, то сетевой уровень 302 посылает сообщение СИП 170, чтобы передать объект состояния сетевому уровню 302 и послать делегированные сетевые переменные состояния сетевому уровню 302 (линия 712). СИП 170 удаляет данное состояние и посылает делегированные сетевые переменные состояния и следующее значение идентификатора IP, которые СИП 170 будет использовать, к сетевому уровню 302 (линия 714). Сетевой уровень 302 хранит эту информацию для использования в качестве начального значения, если подключение снова выгружается. Сетевой уровень 302 также посылает сообщение уровню 304 создания кадра, чтобы заставить уровень 304 создания кадра уменьшить счетчик обращений (линия 716).
Уровень 304 создания кадра также поддерживает счетчик обращений, и он уменьшает счетчик обращений, когда принимается сообщение от сетевого уровня 302. Если счетчик обращений для уровня 304 создания кадра доходит до нуля, то уровень создания кадра посылает сообщение СИП 170 для удаления состояния уровня создания кадра (линия 718). СИП 170 удаляет переменные состояния в СИП 170 и посылает любые делегированные переменные состояния, которые она имеет, к уровню создания кадра (линия 720). Уровень 304 создания кадра посылает сообщение завершения сетевому уровню 302 (линия 722), и сетевой уровень 302 посылает сообщение завершения транспортному уровню (линия 724). Соединение TCP может быть обязано использовать безопасное подключение, используя протоколы защиты, такие как IPSEC, в любом пункте в его продолжительности жизни (времени работы). Если подключение выполняется по безопасному IP протоколу и периферийное устройство 204 не может обрабатывать защиту, то подключение не может быть выгружено. Когда безопасное соединение IP выгружено, состояние безопасного соединения делится на КОНСТАНТЫ, КЭШИРОВАННЫЕ и ДЕЛЕГИРОВАННЫЕ переменные и они обрабатываются, как описано выше. Главный процессор 120 управляет сообщениями управления, такими как повторное согласование ключей. Периферийное устройство 204 выполняет все необходимые операции с данными протокола IPSEC, используя переменные состояния безопасного соединения.
Обращаясь теперь к фиг. 8, там показаны этапы выгрузки безопасного подключения. В последующем описании предварительно описанные этапы, которые показаны на фиг. 4, остаются теми же самыми и не будут повторены. IPSEC подключение (соединение), работающее в транспортном режиме, будет использоваться для целей иллюстрации. Выгрузка уровня IPSEC начинается, когда транспортный уровень 300 посылает запрос на выгрузку к уровню 800 IPSEC с информацией о ресурсах TCP, которая добавляется к информации о ресурсах ИТУ коммутатора (линия 402). Уровень 800 IPSEC посылает запрос на выгрузку к сетевому уровню 302 с IPSEC требованиями к ресурсам, которые добавляют к информации о ресурсах TCP и информации о ресурсах ИТУ коммутатора (линия 802). Требования к ресурсам включают в себя количество безопасных соединений, которые хочет выгрузить IPSEC уровень. Если СИП принимает запрос на выгрузку, она распределяет ресурсы для обработки безопасного соединения. Сетевой уровень 302 посылает сообщение завершения, имеющее связанный список параметров и таблицы диспетчеризации, к уровню IPSEC вместо транспортного уровня 300 (линия 804).
Когда уровень 800 IPSEC принимает сообщение завершения, он посылает состояния уровня IPSEC к СИП 170 как часть входящих дескрипторов и отправляемых дескрипторов, если состояние не было предварительно выгружено, и перемещает монопольное использование делегированного состояния в безопасном соединении к СИП 170 (линия 806). Если состояние было предварительно выгружено, то уровень IPSEC увеличивает счетчик обращений. Как только монопольное использование было перемещено, СИП 170 расшифровывает и зашифровывает все пакеты. Уровень 700 IPSEC посылает сообщение завершения, имеющее связанный список параметров и таблицы диспетчеризации, к транспортному уровню (линия 414').
Переменные состояния КОНСТАНТА, которые приходят к СИП 170 от IPSEC уровня 800, состоят из информации, требуемой для классификации пакетов к определенному безопасному подключению и информации, определенной для входящих и отправляемых безопасных соединений. Переменные КОНСТАНТА включают в себя порт источника и назначения, тип протокола и переменные безопасного соединения.
КЭШИРУЕМЫЕ переменные состояния содержат коэффициенты для определения "продолжительности жизни" безопасного соединения и информацию, относящуюся к входящим и отправляемым безопасным соединениям. КЭШИРУЕМЫЕ переменные включают в себя мягкий предел (например, ретрансляция по счетчику байтов) и жесткий предел (например, останов по счетчику байтов), которые основаны на зашифрованных байтах, мягкий предел (например, ретрансляция при предопределенном импульсе сигнала времени) и жесткий предел (например, останов при предопределенном импульсе сигнала времени), которые основаны на максимальном времени, в течение которого безопасное соединение может использоваться, и жесткий предел (например, максимальное количество импульсов сигнала времени простоя) максимального времени простоя, в течение которого может использоваться безопасное соединение. СИП 170 действует в соответствии с мягкими и жесткими пределами. Когда достигается мягкий предел, СИП 170 сообщает главному процессору 120. Когда достигается жесткий предел, СИП 170 отвергает безопасное соединение.
ДЕЛЕГИРОВАННЫЕ переменные содержат информацию о выполнении и информацию, относящуюся к входящим и отправляемым безопасным соединениям. ДЕЛЕГИРОВАННЫЕ переменные включают в себя счетчик байтов, зашифрованных или расшифрованных с помощью безопасного соединения, продолжительность жизни (время работы) безопасного соединения и время простоя безопасного соединения.
Обращаясь к фиг. 9, там показана загрузка (передача данных) выгруженного сетевого подключения с IPSEC от периферийного устройства в хост. В последующем описании предварительно описанные этапы, показанные на фиг. 7, остаются тем же самыми и не будут повторяться. Транспортный уровень 300 сообщает уровню 800 IPSEC о загрузке соединения до того или после того, как сообщение завершения посылается уровню 306 коммутатора (линия 710'). Счетчик обращений, связанный со всеми безопасными соединениями, уменьшается. Если никакой счетчик обращений не обнуляется, то уровень 800 IPSEC посылает сообщение завершения транспортному уровню 300 (линия 724'). Если выгруженное подключение является последним подключением, использующим определенное безопасное соединение, то уровень 800 IPSEC посылает сообщение к СИП 170, чтобы она передала делегированные переменные состояния к уровню 800 IPSEC (линия 900). СИП 170 возвращает делегированные переменные состояния к уровню 800 IPSEC (линия 902). СИП 170 прекращает использовать безопасное соединение и посылает пакеты, которые принадлежат безопасному соединению, к уровню 800 IPSEC через стек 202. Уровень 800 IPSEC посылает сообщение завершения к СИП 170, и СИП 170 освобождает ресурсы, распределенные для безопасного соединения (линия 904).
Если счетчик обращений безопасного соединения обнуляется, то уровень 800 IPSEC также посылает сообщение сетевому уровню 302, информируя сетевой уровень 302 о загруженном состоянии (линия 906). После того как уровень 304 создания кадра посылает сообщение завершения сетевому уровню 302 (линия 722), сетевой уровень 302 посылает сообщение завершения уровню IPSEC (линия 908). Уровень 800 IPSEC посылает сообщение завершения транспортному уровню (линия 724').
Когда состояния для транспортного уровня 300, сетевого уровня 302, уровня 304 создания кадра или уровня 800 IPSEC выгружаются, возможно, что может прибыть модификация (например, модификация ППА или модификация ПМИ). Если модификация происходит прежде, чем сообщение завершения принято, то местное состояние просто модифицируется и флажок устанавливается для указания того, что состояние изменилось, если объекту состояния послали запрос на выгрузку.
Возможные «гонки» существуют, если модификация происходит, когда вызывают подпрограмму модификации СИП для модификации кэшируемых состояний. Если отдельное сообщение затем модифицирует состояние, что приводит к вызову подпрограммы модификации СИП, то возможно, что СИП сначала увидит второй запрос из-за проблем планирования и прекратит использовать устаревшие данные, когда прибудет первоначальная модификация. Если используются устаревшие данные, то неправильный элемент будет использоваться до тех пор, пока не прибудет следующая модификация, что может привести к тому, что большое количество данных будет или посылаться в неправильное место, или удаляться. Существуют два возможных решения этого условия «гонки». Первое возможное решение состоит в том, чтобы сообщение завершения всегда выполняло вторую модификацию, что может привести к проблемам рекурсии, если приходит большое количество модификаций. Второе возможное решение состоит в том, чтобы добавлять порядковый номер к модификации, чтобы гарантировать, что всегда используется самый последний порядковый номер.
Другим рабочим режимом, который поддерживает IPSEC, является туннелирование, когда пакеты данных инкапсулируются в новый пакет как часть безопасного подключения. Туннель выступает как виртуальный интерфейс к сетевому стеку 202. Этапы выгрузки IPSEC туннеля подобны этапам выгрузки IPSEC подключения в транспортном режиме. В транспортном режиме заголовок IPSEC помещается между заголовком IP и заголовком TCP. В туннельном режиме UDP используется для обеспечения туннеля. Цепочка заголовков - от заголовка TCP к заголовку IPSEC, к заголовку UDP, к заголовку IP, к заголовку уровня создания кадра. Для того чтобы установить туннель, входящий дескриптор и отправляемый дескриптор, которые описывают согласованные подключения защиты, посылаются периферийному устройству. Дескрипторы содержат переменные состояния для подключения и другую информацию, требуемую для установления подключения. КЭШИРУЕМЫЕ и ДЕЛЕГИРОВАННЫЕ переменные состояния для туннеля являются теми же самыми, как КЭШИРУЕМЫЕ и ДЕЛЕГИРОВАННЫЕ переменные состояния для транспортного режима. Переменные состояния КОНСТАНТА для туннеля включают в себя порт источника и порт назначения, локальный адрес, удаленный адрес, тип протокола и переменные безопасного соединения.
Был описан способ выгрузки и загрузки (передачи данных) подключений (соединений) сетевого стека к периферийному устройству, которое поддерживает жесткую синхронизацию с главным процессором. Способ может использоваться со многими протоколами. Например, протоколы, которые могут использоваться, включают в себя TCP, SCTP и т.д.
Поскольку существует много возможных вариантов осуществления, к которым могут применяться принципы данного изобретения, следует признать, что вариант осуществления, описанный со ссылками на чертежи, является только иллюстративным и не должен использоваться для ограничения объема изобретения. Например, специалисты должны признать, что элементы иллюстрированного варианта осуществления, показанного в программном обеспечении, могут быть осуществлены в аппаратных средствах, и наоборот, что иллюстрированный вариант осуществления может изменяться в расположении и деталях, не отступая от объема изобретения. Поэтому описанное изобретение рассматривает все подобные варианты осуществления как находящиеся в пределах следующей формулы изобретения и эквивалентны ей.
Изобретение относится к области распределения вычислительных ресурсов сетевого оборудования, в частности способам синхронизации и управления распределением ресурсов по передаче данных между хостом и периферийным устройством. Технический результат заключается в передаче управляющих функций по поддержанию активного сетевого подключения в периферийное сетевое устройство, достигается за счет того, что периферийному устройству для каждого уровня в стеке посылается объект состояния, который включает в себя переменные состояния, которые классифицируются как константа, кэшируемая переменная, которая обрабатывается хостом, или делегированная переменная, которая обрабатывается устройством. Состояние, которое должно модифицироваться сетевым стеком и периферийным устройством, полностью разделяется. Например, статистические данные отслеживаются хостом, устройством или хостом и устройством. Статистическая информация, которая отслеживается и хостом, и периферийным устройством, делится на непересекающиеся части, и они объединяются для генерации статистической информации. При инициации загрузки устройство достигает непротиворечивого состояния и передает делегированные состояния стеку. Каждый уровень в стеке берет под свое управление делегированное состояние и ресурсы в устройстве, когда они освобождаются. 5 н. и 23 з.п. ф-лы, 9 ил.
посылают посредством хоста к периферийному устройству запрос на выгрузку, содержащий требования к ресурсам, которые необходимы для соединения с периферийным устройством,
в ответ посылают из периферийного устройства на упомянутый промежуточный уровень информацию о распределении ресурсов для соединения,
выгружают совокупность переменных состояния сетевого стека из уровня коммутатора во второй путь посредством выдачи хостом команды промежуточному уровню принять управление над упомянутой по меньшей мере одной делегированной переменной состояния, и
передают посредством промежуточного уровня значение упомянутой по меньшей мере одной делегированной переменной состояния к периферийному устройству, причем упомянутое значение по меньшей мере одной делегированной переменной состояния управляется промежуточным уровнем по время выгрузки совокупности переменных сетевого стека, и
посылают данные по второму пути согласно распределенным ресурсам на основании, по меньшей мере частично, значений упомянутой по меньшей мере одной делегированной переменной состояния и значений по меньшей мере одной кэшированной переменной состояния.
уменьшают счетчик множества выгруженных транспортных соединений сетевого уровня для делегированной переменной состояния сетевого уровня, и
если значение упомянутого счетчика уменьшено до нуля:
посылают сообщение на периферийное устройство для того, чтобы оно послало делегированную переменную состояния сетевого уровня к сетевому уровню.
уменьшают счетчик множества выгруженных транспортных соединений уровня создания кадра для делегированной переменной состояния уровня создания кадра, и
если значение упомянутого счетчика уменьшено до нуля:
посылают сообщение на периферийное устройство для того, чтобы оно послало делегированную переменную состояния уровня создания кадра к уровню создания кадра.
определения, что количество данных, отправляемых периферийному устройству, превышает максимальный порог,
определения, что периферийное устройство может обработать функцию,
определения, что приложение предварительно не отправило содержимое буферов, и
определение, что количество данных, отправляемых периферийному устройству, находится ниже минимального порога.
определения, что количество данных, отправляемых периферийному устройству, превышает максимальный порог,
определяют, что периферийное устройство может обработать функцию,
определяют, что приложение предварительно не отправило содержимое буферов, и
определяют, что количество данных, отправляемых периферийному устройству, находится ниже минимального порога.
уменьшают счетчик количества выгруженных транспортных соединений сетевого уровня для делегированной переменной состояния сетевого уровня, и
если упомянутый счетчик уменьшен до нуля:
посылают сообщение на периферийное устройство для того, чтобы оно послало делегированную переменную состояния сетевого уровня на сетевой уровень,
уменьшают счетчик количества выгруженных транспортных соединений состояний уровня создания кадра для делегированной переменной состояния уровня создания кадра, и
если значение упомянутого счетчика уменьшено до нуля:
посылают сообщение на периферийное устройство для того, чтобы оно послало делегированную переменную состояния уровня создания кадра на уровень создания кадра.
завершают периферийным устройством невыполненные запросы, имеющие статус передачи, передают значение делегированной переменной состояния от периферийного устройства к уровню коммутатора, причем значение делегированной переменной состояния управляется периферийным устройством во время упомянутой передачи,
дают команду от уровня коммутатора промежуточному уровню принять управление над делегированной переменной состояния;
освобождают ресурсы в периферийном устройстве для промежуточного уровня, и
распределяют ресурсы, на основании, по меньшей мере частично, значения упомянутой делегированной переменной состояния и значения кэшированной переменной состояния, для посылки данных через второй путь.
определяют, что количество данных, отправляемых из уровня коммутатора на периферийное устройство, превышает максимальный порог,
определяют, что существует недостаток активности выгруженного соединения сетевого стека,
определяют, что периферийное устройство не может обработать функцию,
определяют, что поведение соединения является неподходящим для выгрузки,
определяют, что загрузка даст возможность соединениям с более высоким приоритетом использовать ресурсы периферийного устройства, если доступность ресурсов периферийного устройства находится ниже порога,
определяют, что приложение предварительно не отправляет содержимое буферов, и
определяют, что количество данных, отправляемых периферийному устройству, превышает максимальный порог.
определяют, что количество данных, отправляемых от уровня коммутатора на периферийное устройство, превышает максимальный порог,
определяют, что существует недостаток активности на выгруженном сетевом соединении стека,
определяют, что периферийное устройство не может обработать функцию,
определяют, что поведение соединения является неподходящим для выгрузки,
определяют, что загрузка даст возможность соединениям с более высоким приоритетом использовать ресурсы периферийного устройства, если доступность ресурсов периферийного устройства находится ниже порога,
определяют, что приложение предварительно не отправляет содержимое буферов, и
определяют, что количество данных, отправляемых периферийному устройству, находится выше максимального порога.
для каждого программного уровня в множестве программных уровней:
классифицируют по меньшей мере одну переменную состояния, чтобы она была одной из постоянной переменной состояния, кэшируемой переменной состояния и делегированной переменной состояния,
посылают упомянутую по меньшей мере одну переменную состояния на периферийное устройство, и
если во время выгрузки совокупности переменных состояния сетевого стека, по меньшей мере одна переменная состояния была классифицирована как кэшируемая переменная состояния, то:
с помощью хоста управляют обработкой значения упомянутой кэшируемой переменной и управляют обновлением значения кэшируемой переменной в периферийном устройстве, если кэшируемая переменная изменилась, и
если во время выгрузки объекта совокупности переменных состояния сетевого стека по меньшей мере одна переменная состояния была классифицирована как делегированная переменная, то:
с помощью периферийного устройства управляют значением упомянутой делегированной переменной и изменяют значение упомянутой по меньшей мере одной переменной состояния,
передают данные между хостом и периферийным устройством на основании упомянутого управления значениями переменных состояния.
US 2001027496 A1, 04.10.2001 | |||
WO 0227519 A1, 04.04.2002 | |||
СПОСОБ УПРАВЛЕНИЯ ОБСЛУЖИВАНИЕМ ЗАПРОСОВ ПОЛЬЗОВАТЕЛЕЙ В ВЫЧИСЛИТЕЛЬНОЙ СИСТЕМЕ | 1996 |
|
RU2121709C1 |
Авторы
Даты
2008-10-20—Публикация
2003-04-29—Подача