Кіріспе
Желілік интерфейс карталарында қолданылатын технологиялар
TCP жүктемесін түсіру механизмі (TOE) – кейбір желілік интерфейс карталарында (NIC) толық TCP/IP стегінің өңдеуін желілік контроллерге жүктеуге арналған технология. Ол негізінен гигабиттік Ethernet және 10 гигабиттік Ethernet сияқты жоғары жылдамдықты желілік интерфейстерде қолданылады, онда желілік стек өңдеуінің үлкен жүктемесі туындайды. TOE көбінесе iSCSI және Желілік файлдық жүйе (NFS) сияқты Интернет протоколы (IP) сақтау протоколдарымен байланысты қосымша шығындарды азайтудың бір жолы ретінде пайдаланылады.
Мақсаты
Бастапқыда TCP сенімді емес, төмен жылдамдықты желілер үшін (мысалы, ерте замандағы диал-ап модемдер) жасалған. Бірақ Интернеттің арқалық желілердегі беріліс жылдамдығының өсуімен (оптикалық тасымалдаушы, гигабит Ethernet және 10 гигабит Ethernet байланыстарын пайдалану) және жылдамдатылған, сенімді қолжеткізу механизмдерінің (DSL және кабельдік модемдер) пайда болуымен, ол деректер орталықтарында және десктоптық компьютерлерде секундына 1 гигабиттен жоғары жылдамдықпен жиі қолданылады. Осы жылдамдықтарда хост-жүйелердегі TCP бағдарламалық қамтамасы маңызды есептеу қуатын қажет етеді. 2000-жылдардың басында толық дуплекс гигабиттік TCP байланысы 2.4 ГГц Pentium 4 процессордың 80%-дан астамын жұмсауы мүмкін. Мысалы, 5 Гбит/с (625 МБ/с) желілік трафикке 5 ГГц процессорлық өңдеу қажет. Бұл 5 Гбит/с TCP/IP трафигін өңдеу үшін 2.5 ГГц көп ядролы процессордың 2 толық ядросы қажет екенін білдіреді. Ethernet (осы мысалда 10GE) екі бағытты болғандықтан, 10 Гбит/с (жалпы өткізу қабілеті 20 Гбит/с) жіберу және қабылдау мүмкін. 1 Гц/(бит/с) ережесін қолданғанда, бұл 2.5 ГГц сегіз ядроға тең. TCP/IP өңдеуге жұмсалатын көптеген CPU циклдары TCP/IP жүктемесі арқылы босатылады және CPU (әдетте серверлік CPU) файлдық жүйені өңдеу (файл-серверде) немесе индекстеу (қосымша медиа-серверде) сияқты басқа тапсырмаларды орындау үшін пайдаланылуы мүмкін. Басқаша айтқанда, TCP/IP жүктемесі бар сервер, TCP/IP жүктемесі жоқ желілік картаға (NIC) қарағанда көбірек серверлік жұмыс істей алады.
PCI трафигін азайту
TOE протоколының қосымша жүктемесін шеше алудан басқа, хостқа негізделген (сервер және дербес компьютерлер) көптеген түйінді құрылғыларға әсер ететін архитектуралық мәселелерді де шеше алады. Көптеген ескі түйінді құрылғылар PCI шинасына негізделген, ол серверлер мен дербес компьютерлерге желілік интерфейстер сияқты кейбір сыртқы құрылғыларды қосу үшін стандартты интерфейс қамтамасыз етеді. PCI негізгі жадтан PCI шинасы арқылы желілік интерфейс микросхемаларына шағын деректерді беруде тиімсіз, бірақ деректер көлемі ұлғайған сайын тиімділігі артады. TCP протоколында көптеген кішкентай пакеттер (мысалы, растамалар) жасалады. Бұл пакеттер әдетте хост процессорда (CPU) жасалып, PCI шинасы арқылы және желілік физикалық интерфейс арқылы жіберіледі, бұл хост компьютердің кіріс-шығыс (IO) өнімділігіне әсер етеді. Желілік интерфейсте орналасқан TOE шешімі процессордан PCI шинасының екінші жағында орналасқан, сондықтан ол бұл кіріс-шығыс тиімділігі мәселесін шеше алады. Себебі TCP қосылысы арқылы жіберілетін деректер үлкен көлемде PCI шинасы арқылы процессордан TOE-ге жіберілуі мүмкін, ал кішкентай TCP пакеттері PCI шинасынан өтуі қажет емес.
Тарих
Бұл технологияға арналған алғашқы патенттердің бірі, UDP жүктемесін түсіруге байланысты, 1990 жылдың басында Auspex Systems компаниясына берілді. Auspex негізін қалаушы Ларри Бучер және бірқатар Auspex инженерлері 1997 жылы Alacritech компаниясын құрды, олардың мақсаты желілік стек жүктемесінің тұжырымдамасын TCP-ге кеңейту және оны арнайы кремний кристалдарында іске асыру болды. Олар 1999 жылдың басында алғашқы параллель стек толық жүктемелі желілік картасын ұсынды; компанияның SLIC (Session Layer Interface Card) картасы қазіргі TOE ұсыныстарының алдағысы болды. Alacritech компаниясы TCP/IP жүктемесі саласында бірнеше патентке ие. 2002 жылы iSCSI сияқты TCP негізделген сақтау технологияларының пайда болуы қызығушылықты арттырды, сол кезде былай делінді: «Кем дегенде он екі жаңа компания, көбінесе dot com көпіршігінің соңында құрылған, сақтау протоколдары мен қолданбалары үшін жартылай өткізгіш үдеткіштеріне қол жеткізуге тырысып, жеті-сегіз орнықты жеткізушімен және ішкі ASIC жобаларымен бәсекелеседі». 2005 жылы Microsoft Alacritech компаниясының патенттік базасына лицензия алып, Alacritech компаниясымен бірлесіп TCP түтінін жүктеу деп аталатын TCP ішінара жүктеме архитектурасын жасады. TCP түтінін жүктеу Alacritech компаниясының «Коммуникациялық блоктарды беруге арналған патенті» негізінде құрылған. Сонымен қатар, Broadcom да TCP түтінін жүктеу чиптерін жасауға лицензия алды.
Түрлері
TCP стегін TOE-мен толық ауыстырудың орнына, операциялық жүйенің TCP стегімен бірлесіп жұмыс істеп, кейбір операцияларды жеңілдетудің баламалы тәсілдері бар. Көптеген қазіргі Ethernet желілік карталары (NIC) TCP тексеру сомасын жеңілдету және үлкен сегменттерді жеңілдету мүмкіндіктерін қолдайды. Жаңа тәсілдер, мысалы, үлкен қабылдауды жеңілдету және TCP растауды жеңілдету, кейбір жоғары деңгейлі Ethernet аппараттық құралдарында қолданылып жүр, бірақ олар тек бағдарламалық қамтамасыз етуде іске асырылғанда да тиімді.
Параллельді қаптаманың толық түсірілуі
Параллель стек толық жүктемесі екі параллельді TCP/IP стектерінің тұжырымдамасынан атын алды. Біріншісі – хост операциялық жүйесімен бірге келетін негізгі хост стегі. Екінші, немесе "параллельді стек" қолданбалық қабат пен тасымалдау қабаты (TCP) арасында "вампирлік кран" арқылы қосылады. "Вампирлік кран" қолданбалардың TCP қосылысын орнату сұрауларын ұстап алады және TCP қосылысын басқарумен, сондай-ақ TCP деректерін жіберумен айналысады. Келесі бөлімдегі көптеген сын-ескертпелер осы типтегі TCP жүктемесіне қатысты.
HBA толық түсірілуі
HBA (Host Bus Adapter) толық босату iSCSI хост адаптерлерінде кездеседі, олар хост жүйесіне диск контроллерлері ретінде көрінеді, ал iSCSI сақтау құрылғысына қосылу (TCP/IP арқылы) арқылы жүзеге асырылады. Осы типтегі TCP босатуы TCP/IP өңдеуін ғана емес, сонымен қатар iSCSI инициаторының функциясын да босатады. HBA хостқа дискілік контроллер ретінде көрінетіндіктен, оны тек iSCSI құрылғыларымен ғана пайдалануға болады және жалпы TCP/IP босатуы үшін қолайлы емес.
TCP түтіндіктің ішінара түсірілуі
TCP түтіндік жүктемесі параллель стек толық жүктемесінің басты қауіпсіздік кемшілігін шешеді. Ішінара жүктемеде, негізгі жүйе стегі хостқа жасалған барлық қосылымдарды басқарады. Жергілікті хост (әдетте сервер) және алыс хост (әдетте клиент) арасында қосылыс орнатылғаннан кейін, қосылыс пен оның күйі TCP жүктемесін басқару құралына жіберіледі. Деректерді жіберу және қабылдаудың негізгі жұмысын жүктеме құрылғысы атқарады. TCP жүктемесін басқару құралдарының көпшілігі хост процессордың араласуынсыз деректерді беру үшін TCP/IP аппараттық шешімін пайдаланады. Қосылыс жабылғанда, қосылыс күйі жүктемеден босатылған құралдан негізгі жүйе стегіне қайтарылады. TCP қосылымдарын бақылауда ұстау негізгі жүйе стегіне қосылыс қауіпсіздігін іске асыруға және басқаруға мүмкіндік береді.
Үлкен қабылдау жүктемесі
Үлкен қабылдау жүктемесі (LRO) – орталық процессордың (CPU) жүктемесін азайту арқылы жоғары өткізгіштігі бар желілік қосылымдардың кіріс өнімділігін арттыру тәсілі. Ол бір ағыннан келіп түсетін бірнеше пакеттерді үлкен буферге біріктіру арқылы жұмыс істейді, содан кейін олар желілік қабаттың жоғары деңгейіне жіберіледі, осылайша өңделуі тиіс пакеттердің санын азайтады. Linux жүйесіндегі іске асырылымдар LRO-ны Жаңа API (NAPI) ерекшелігімен бірге қолданып, үзілістер санын да азайтады. Тіпті осы тәсілді толығымен бағдарламалық қамтамасыз етуде іске асырғанда желінің өнімділігі айтарлықтай артатыны дәлелденді. Linux ядросы TCP үшін LRO-ны тек бағдарламалық қамтамасыз етуде қолдайды. FreeBSD 8 оны қолдайтын адаптерлерде аппараттық деңгейде LRO-ны қолдайды. LRO маршрутизатор ретінде жұмыс істейтін құрылғыларда қолданылмауы керек, себебі ол тікелей байланыс принципін бұзады және өнімділікке маңызды әсер етеді.
Жалпы қабылдау және түсіру
Жалпы қабылдау жүктемесі (GRO) – TCP/IPv4-ке немесе LRO-ның тудырған мәселелеріне шектеу қоймайтын, бағдарламалық қамтамасыз етуде жалпыланған LRO-ны іске асырады.
Үлкен жүк түсіру
Компьютерлік желілерде үлкен көлемді жіберу (LSO) – жоғары өткізгіштігі бар желілік қосылымдардың шығыс өнімділігін CPU-дың жүктемесін азайту арқылы арттыру тәсілі. Ол желілік интерфейс картасына (NIC) көп пакеттік буферді жіберу арқылы жұмыс істейді. NIC бұл буферді жеке пакеттерге бөледі. Бұл тәсіл TCP протоколына қолданылғанда TCP сегментациялық жүктемесі (TSO) немесе жалпы сегментациялық жүктемесі (GSO) деп те аталады. LSO және LRO тәуелсіз, және біреуін пайдалану екіншісін міндетті түрде пайдалануды талап етпейді. Жүйеге компьютерлік желі арқылы үлкен деректер блогын жіберу қажет болғанда, бұл блокты бастапқы және мақсатты компьютерлер арасындағы маршрутизаторлар мен коммутаторлар сияқты желі элементтерінен өтуге болатын кішірек сегменттерге бөлу қажет. Бұл процесс сегментация деп аталады. Көбінесе хост компьютердегі TCP протоколы осы сегментацияны жүзеге асырады. Бұл жұмысты NIC-ке жүктеу TCP сегментациялық жүктемесі (TSO) деп аталады. Мысалы, 64 КиБ (65,536 байт) дерек көлемі, NIC арқылы және желі арқылы жіберілгенге дейін әдетте 1460 байттан тұратын 45 сегментке бөлінеді. NIC-дегі интеллектуалдық мүмкіндіктердің арқасында хост CPU 64 КБ деректерді NIC-ке бір жіберу сұранысымен тапсыра алады, NIC бұл деректерді 1460 байттық кішірек сегменттерге бөледі, хосттың TCP/IP стегімен ұсынылған үлгіге сәйкес TCP, IP және деректер байланысы қабаты протоколдарының тақырыптарын әрбір сегментке қосып, нәтижедегі фреймдерді желіге жібереді. Бұл процессордың жұмысын едәуір азайтады. Нарықтағы көптеген жаңа NIC-тер TSO-ны қолдайды. Кейбір желілік карталар TSO-ны басқа транспорттық қабат протоколдарының фрагментациясын жүктеу үшін немесе UDP сияқты фрагментацияны өздігінен қолдамайтын протоколдар үшін IP фрагментациясын орындау үшін қолдануға болатындей етіп жалпылай іске асырады.
Linux-та қолдау
FreeBSD сияқты басқа операциялық жүйелерден өзгеше, Linux ядросы TOE қолдауын қамтымайды (желілік жүктеменің басқа түрлерімен шатастырмаңыз). Chelsio немесе Qlogic сияқты аппараттық өндірушілердің TOE қолдауын қосатын түзетулері болғанымен, Linux ядросының әзірлеушілері бірнеше себептермен бұл технологияға қарсы:
Қауіпсіздік – TOE аппараттық құралда іске асырылғандықтан, кез келген қауіпсіздік көйкейін жою үшін тек бағдарламалық жасақтама ғана емес, сонымен қатар TOE микропрограммасына түзетулер енгізілуі керек. Бұл, TOE қолданбайтын операциялық жүйедегі жақсы сынақтан өткен TCP/IP стектерімен салыстырғанда, аппараттың жаңалығымен және өндірушіге тән ерекшеліктерімен күшейе түседі. Аппараттық шектеулер – қосылымдар TOE чипінде буферленгендіктен және өңделгендіктен, операциялық жүйеге қолжетімді кең көлемді процессор мен жадқа қарағанда, ресурстардың жетіспеушілігіне бейімділік артады. Күрделілік – TOE ядролардың барлық ресурстарға кез келген уақытта қол жеткізуге болатындығы туралы болжамын бұзады – ашық қосылымдар пайдаланатын жад сияқты ерекшеліктер TOE-де қолжетімді емес. Сондай-ақ, TOE-ні дұрыс қолдау үшін желілік стекке үлкен өзгерістер қажет, тіпті осы өзгерістер енгізілсе де, қызмет сапасы және пакет сүзгісі сияқты мүмкіндіктер жұмыс істемеуі мүмкін. Жекеменшік – TOE әрбір аппараттық өндірушіде әртүрлі іске асырылады. Бұл жоғарыда аталған күрделілік пен, мүмкін, қауіпсіздік есебінен, әртүрлі TOE іске асыруларын шешу үшін көбірек кодты қайта жазу қажеттігін білдіреді. Сонымен қатар, TOE микропрограммасын өзгерту қиын, өйткені ол жабық кодты. Ескіру – Әрбір TOE желілік картасының пайдалы өмірі шектеулі, себебі жүйелік аппараттық жабдық тез арада TOE өнімділігіне жетеді және ақырында одан да асып түседі.
Security – because TOE is implemented in hardware, patches must be applied to the TOE firmware, instead of just software, to address any security vulnerabilities found in a particular TOE implementation. This is further compounded by the newness and vendor specificity of this hardware, as compared to a well tested TCP/IP stack as is found in an operating system that does not use TOE. Limitations of hardware – because connections are buffered and processed on the TOE chip, resource starvation can more easily occur as compared to the generous CPU and memory available to the operating system. Complexity – TOE breaks the assumption that kernels make about having access to all resources at all times – details such as memory used by open connections are not available with TOE. TOE also requires very large changes to a networking stack in order to be supported properly, and even when that is done, features like quality of service and packet filtering might not work. Proprietary – TOE is implemented differently by each hardware vendor. This means more code must be rewritten to deal with the various TOE implementations, at a cost of the aforementioned complexity and, possibly, security. Furthermore, TOE firmware cannot be easily modified since it is closed source. Obsolescence – Each TOE NIC has a limited lifetime of usefulness, because system hardware rapidly catches up to TOE performance levels, and eventually exceeds TOE performance levels.
Жеткізушілер
TOE технологиясы бойынша ағымдағы жұмыстың көп бөлігі 10 Гигабит Ethernet интерфейс карталарын шығаратын Broadcom, Chelsio Communications, Emulex, Mellanox Technologies, QLogic сияқты өндірушілер жүргізіп жатыр.