Низкоуровневые коммуникационные программы

Врагом высокоскоростного обмена данными в многомашинных системах является излишнее копирование пакетов. В лучшем случае происходит одна операция копирования из оперативной памяти на интерфейсную плату источника, одна операция копирования с интерфейсной платы источника на интерфейсную плату приемника (если промежуточное хранение пакетов по маршруту передачи не применяется) и одна операция копирования с интерфейсной платы приемника в оперативную память.
Итого три операции копирования. Однако во многих системах складывается еще более неприятная ситуация. В частности, если интерфейсная плата отображается на виртуальное адресное пространство ядра, а не на виртуальное адресное пространство пользователя, процесс пользователя может отправить пакет только за счет выдачи системного вызова, перехватываемого ядром. Возможно, ядру потребуется скопировать как исходящие, так и входящие пакеты в собственную память, например, чтобы избежать ошибок отсутствия страницы во время передачи пакета по сети. Кроме того, ядро получателя может не знать, куда следует поместить входящий пакет, пока не получит возможность изучить его содержимое. Эти пять операций копирования показаны на рис. 8.18.

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

Прежде всего, что будет, если на узле запущены несколько процессов, которым нужен доступ к сети для отправки пакетов? Какой из них получит интерфейсную плату в свое адресное пространство? Использование системного вызова для отображения платы на виртуальное адресное пространство и прекращение этого отображения обходится дорого, но если плату получает только один процесс, то как смогут отправлять сообщения все остальные процессы? И что произойдет, если плата отображена на виртуальное адресное пространство процесса A, а пакет поступил для процесса B, особенно если у A и B разные владельцы, не желающие помогать друг другу?

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

Тут нужен какой-то механизм синхронизации, но такие механизмы, как мьютексы, работают, только если предполагается взаимодействие процессов. В среде с разделением времени, где несколько пользователей и все они спешат выполнить свою работу, один из пользователей может просто заблокировать мьютекс, связанный с платой, и не освобождать его никогда. Отсюда следует вывод, что отображение интерфейсной платы на пользовательское пространство реально работает при наличии только одного пользовательского процесса на каждом узле, если только не предприняты какие-то специальные меры предосторожности (например, разным процессам предоставляются различные участки интерфейсной оперативной памяти, отображаемой на их адресные пространства).

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

В то же время самые новые сетевые интерфейсы зачастую обладают многоочередностью, которая означает наличие у них более одного буфера для эффективной поддержки нескольких пользователей. Например, серия сетевых карт Intel I350 имеет 8 очередей на отправку и 8 очередей на получение и обладает способностью виртуализации на множество виртуальных портов. Еще больше радует, что карта поддерживает привязку (affinity) ядер. В частности, у нее имеется собственная логика хэширования, что помогает направить каждый пакет в подходящий процесс. Поскольку быстрее будет обработать все сегменты в одном и том же потоке TCP на одном и том же процессоре (где кэши сохраняют нужные данные), карта может использовать логику хэширования для хэширования полей потока TCP (IP-адресов и номеров TCP-портов) и добавить все сегменты с одинаковым хэшем в одну и ту же очередь, обслуживаемую конкретным ядром. Это также поспособствует виртуализации, поскольку позволит нам дать каждой виртуальной машине ее собственную очередь.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Низкоуровневые коммуникационные программы:

  1. Третью коммуникационную революцию
  2. четвертая коммуникационная революция
  3. ПСИХОТЕРАПИЯ КОММУНИКАЦИОННАЯ
  4. Глава 3. Электронные средства массовой информации в глобальных коммуникационных процессах
  5. Первая коммуникационная революция XX в.
  6. Вторая коммуникационная революция
  7. Модель сетевого анализа коммуникационных сетей.
  8. Дискурсная теория истины и априорность коммуникационной общности
  9. Программа Да и программа Нет
  10. Свободное воспроизведение программ для ЭВМ и баз данных. Декомпилирование программ для ЭВМ
  11. 10. ФИГУРА ЖУРНАЛИСТА В МАССОВО КОММУНИКАЦИОННЫХ ПРОЦЕССАХ. СОЦИАЛЬНАЯ, ГРАЖДАНСКАЯ, ЮРИДИЧЕСКАЯ, ЭТИЧЕСКАЯ ОТВЕСТВЕННОСТЬ ЖУРНАЛИСТА. НРАВСТВЕННО-ЭТИЧЕСКИЕ УСТАНВОКИ ЛИЧНОСТИ. МОТИВАЦИЯ.
  12. Музыкальные концертные программы
  13. Г л а в а 9 О ПРОГРАММАХ
  14. Программа телевидения
  15. ПРОЕКТНЫЙ И ИСПОЛНИТЕЛЬНЫЙ УРОВНИ ПРОГРАММ
  16. ИЗНАЧАЛЬНО КОРОТКАЯ ПРОГРАММА