shared memory что такое

Использование протокола Shared Memory в MS SQL Server 2012 /2008 на примере работы с сервером «1С:Предприятия» 8

В этой статье я расскажу о протоколе «Общая память» (Shared Memory) обмена данными в MS SQL Server 2012 (справедливо и для MS SQL Server 2008 (R2)). Данный протокол может использоваться при подключении к SQL-серверу клиента, установленного на том же компьютере, где и запущена служба SQL Server, и при использовании дает ощутимый прирост производительности за счет использования оперативной памяти для передачи данных, и как следствии, ликвидации накладных расходов при обмене данными между приложениями. В системе «1С:Предприятие» 8 начиная с версии 8.2.17 появилась поддержка протокола Shared Memory. По оценкам специалистов фирмы 1С, прирост производительности при использовании протокола «Общая память» (Shared Memory) должен составить от 10 до 15%. На примере совместной работы MS SQL Server 2012 с сервером 1С:Предприятие 8 и рассмотрим настройку данного протокола.

0. Оглавление

1. Включение протокола «Общая память» (Shared Memory) в MS SQL Server

Хоть протокол «Общая память» (Shared Memory) и включен по умолчанию, все же стоит убедиться что данный протокол работает и имеет наивысший приоритет над другими протоколами подключений к MS SQL Server. Для этого запустим оснастку «Диспетчер конфигурации SQL Server» (SQL Server Configuration Manager). В Microsoft Windows Server 2012 (R2) ее можно найти в списке всех программ.

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

В Microsoft Windows Server 2008 (R2) в меню «Пуск» (Start) — «Microsoft SQL Server 2012» — «Средства настройки» (Configuration Tools) — «Диспетчер конфигурации SQL Server» (SQL Server Configuration Manager)

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

В запустившейся оснастке раскроем вкладку «Сетевая конфигурация SQL Server» (SQL Server Network Configuration), затем выделим вкладку «Протоколы для » (Protocols for …) (экземпляр по умолчанию называется MSSQLSERVER). В таблице справа увидим используемые для данного экземпляра протоколы. Убедимся, что протокол «Общая память» (Shared Memory) имеет состояние «Включено» (Enabled). В противном случае необходимо кликнуть по данной строке правой кнопкой мыши и в контекстном меню выбрать «Включить» (Enable), после чего перезапустить экземпляр SQL Server.

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

Далее убедимся что на закладках «Клиентские протоколы» (Client Protocols) настроек клиента «Native Client SQL версии 11.0 (32-разрядная версия)» (SQL Native Client 11.0 Configuration (32bit)) и «Native Client SQL версии 11.0» (SQL Native Client 11.0 Configuration) также включен протокол «Общая память» (Shared Memory), и он имеет порядок — «1», т. е. наивысший приоритет над другими протоколами. Если это не так, необходимо изменить настройки до данного состояния.

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

2. Настройки строки подключения баз данных в системе «1С:Предприятия»

Как уже говорилось ранее, сервер «1С:Предприятия» должен быть запущен на том же самом компьютере, где и запущенна служба MS SQL Server. Кроме того, формат строки подключения информационных баз к SQL серверу должен быть задан в виде \ или для экземпляра по умолчанию. Для того, чтобы проверить или изменить это значение необходимо запустить оснастку «Администрирование серверов 1С:Предприятия» (предварительно должна быть установлена). Далее в запустившейся оснастке раскрываем вкладки — «Кластеры» — «Локальный кластер» — «Информационные базы» и вызываем свойства информационной базы выбрав соответствующий пункт контекстного меню.

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

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

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

Затем запустим клиент «1С:Предприятие» для данной информационной базы, для инициализации соединения с указанным экземпляром SQL сервера.

3. Просмотр текущих подключений в MS SQL Server

Теперь просмотрим все активные подключения к MS SQL Server, а также протоколы используемые в каждом из подключений. Для этого запустим программу SQL Server Profiler. В Microsoft Windows Server 2012 (R2) ее можно найти в списке всех программ.

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

В Microsoft Windows Server 2008 (R2) в меню «Пуск» (Start) — «Microsoft SQL Server 2012» — «Средства обеспечения производительности» () — «SQL Server Profiler».

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

В запустившейся программе выберем в меню «Файл» (File) — «Создать трассировку…» (New Trace…).

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

В окне соединения с сервером введем имя текущего экземпляра SQL Server, данные для авторизации и нажмем «Соединить» (Connect).

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

Запуститься окно настройки свойств новой трассировки. Не меняя параметров, перейдем на вкладку «Выбор событий» (Events Selection), снимем отметку со всех событий кроме «ExistingConnection» и нажмем «Запустить» (Run).

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

Затем в активном окне трассировки увидим все подключения к данному экземпляру SQL Server. Среди них и соединение с именем 1CV83 Server, что соответствует подключению сервера «1С:Предприятия». В столбце TextData увидим используемый для подключения протокол. В данном случае надпись LPC (Local Prpcedure Call) означает использование протокола Shared Memory, что нам и в общем то и требуется.

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

Посмотреть активные соединения можно также выполнив запрос:

Для этого подключимся к текущему экземпляру SQL Server с помощью программы «SQL Server Management Studio». Далее, в окне программы кликнем правой кнопкой мыши в обозревателе объектов по строке с именем сервера и в контекстном меню выберем «Создать запрос» (New Query).

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

Вставляем текст запроса в появившейся справа окно и нажимаем кнопку «Выполнить» (Execute) на панели задач. После чего в окне «Результаты» (Results), расположенном ниже, увидим результат выполнения запроса, а именно все текущие соединения с данным экземпляром SQL Server. Среди них и соединение с именем 1CV83 Server и используемым протоколом Shared memory.

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

4. Соединение с помощью протокола «Именованные каналы» (Name pipe)

Для чистоты эксперимента попробуем подключиться к SQL Server с помощью какого-нибудь другого протокола, например с помощью протокола «Именованные каналы» (Name pipe). Для этого, соответственно, включим поддержку протокола именованных каналов для данного экземпляра SQL Server. Создадим псевдоним экземпляра, например, с именем TEST1. В настройках соединения информационной базы «1С:Предприятия» с сервером баз данных укажем имя только что созданного псевдонима и запустим клиент «1С:Предприятия» для данной информационной базы.

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

Запускаем заново трассировку и видим, что теперь приложение с именем 1CV83 Server использует протокол Name Pipes.

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

То же самое увидим выполнив запрос из предыдущего пункта.

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

Смотрите также:

Может случиться так, что в процессе установки MS SQL Server 2012 были установлены компоненты, необходимость в которых со временем отпала (или были установлены по ошибке). В этом случае, в целях…

В данной статье будут рассмотрены способы лицензирования Microsoft SQL Server 2012. Будет приведен краткий обзор каждого из способов лицензирования, а также указаны возможные варианты лицензирования для различных выпусков MS SQL Server…

Microsoft SQL Server 2012 / 2008 включает в себя 9 предопределенных серверных ролей. Данные роли определены на уровне сервера и поэтому существуют вне баз данных. Они предусмотрены для удобства администрирования MS…

Источник

Распределенная общая память (DSM — Distributed Shared Memory)

shared memory что такое. Смотреть фото shared memory что такое. Смотреть картинку shared memory что такое. Картинка про shared memory что такое. Фото shared memory что такое

Виртуальная память для распределенных вычислительных систем

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

Производители процессоров не предлагают решений данной задачи, а идут путем увеличения числа ядер и интерфейсов памяти в серверных решениях. В настоящий момент задача доступа решается посредством эмуляции прямого доступа в память с использованием сетевых интерфейсов (RDMA).

Внимание:

Все идеи и алгоритмы, описываемые в данной статье, являются результатом моей независимой и полностью самостоятельной интеллектуальной деятельности. Как автор, разрешаю свободно использовать, изменять, дополнять все идеи и алгоритмы любому человеку или организации в любых типах проектов при обязательном указании моего авторства (Балыбердин Андрей Леонидович Rutel@Mail.ru).

Предлагаю механизм работы современной виртуальной памяти расширить в сторону виртуализации памяти для всего дата-центра целиком. В качестве линии передачи данных между процессорами предлагаем использовать оптическое волокно для линий связей больше метра и электрический интерфейс для меньших расстояний (100G на пару, для 12 пар 1.2Т). Современные трансиверы позволяют достигать скоростей передачи до 400G (ближайшей перспективе до 800G), при этом максимальная пропускная способность PCI-E 5.0 500G, а пропускная способность интерфейса памяти DDR4 200G. Получается, что полное задействование всех имеющихся интерфейсов не позволяет полностью использовать производительность даже одного оптического интерфейса, поэтому данный механизм необходимо интегрировать именно в процессор, а не сделать в виде устройства на шине PCI с доступом в основную память.

Расположение виртуальной памяти

Модуль виртуальной память должен быть непосредственно в процессоре и работать с кэш-памятью практически со скоростью процессорных ядер (архитектура COMA). Кроме того, необходимо учитывать, что далеко не все данные необходимо сохранять в локальной оперативной памяти, оптимальнее произвести обработку прямо в кэш-памяти, а результат отправить в кэш другого ядра для дальнейшей обработки, не отправляя их в «бутылочные горлышки» медленных интерфейсов. Такой подход позволит строить очень эффективные цепочки конвейерной обработки, собирать данные, считываемые с большого числа интерфейсов DDR памяти в кэш-память процессоров или контроллеров DSM, где находится начало конвейера, далее передавать через промежуточные обрабатывающие звенья, до конца и уже там производить обратное сохранение результата в DDR. Появится возможность отделить основную оперативную память от процессора, по примеру СХД.

Количество каналов

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

Минимальные требуемые характеристики

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

Для системы с временем доступа к разделяемой памяти сопоставимой с локальной динамической памятью, максимум производительности соответствует квадрату или кубу со стороной 3 метра для задержки доступа к первому элементу не более 50нс, в этом случае время доступа в кэш любого процессора не будет больше времени доступа в локальную память. Современная динамическая память, хоть и имеет высокие скорости передачи данных, но доступ к новой строке медленный и особого прогресса в этом параметре нет (всего в 2 раза за 20 лет).

Устройство виртуальной памяти с точки зрения программиста

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

Устройство распределенной памяти

Для понимания проблемы DSM желательно прочитать это.

Предлагаю такой вариант: Модель консистентности: Последовательная (Все процессы видят все записи разделяемых данных в одном и том же порядке).

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

Итог: Такая реализация виртуальной общей памяти позволяет сделать ее полностью прозрачной для программ и не требующей каких-либо дополнительных вызовов при ее использовании (кроме начального конфигурирования системы виртуальной памяти при запуске системы). Соответственно не потребуется написания какого-либо дополнительного софта (кроме ПО обслуживающего виртуальную память), с точки зрения программиста никаких отличий от системы с последовательной консистентностью, при использовании префикса LOCK и вообще обычного компьютера. Если грамотно использовать предоставленные возможности (совместное использование физической памяти и конвейерную обработку данных без промежуточной записи в локальную память), то можно существенно повысить производительность многопроцессорной системы, относительно обычной грид-системы.

Реализация виртуальной общей памяти с точки зрения аппаратуры

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

Сетевой основой выбрана свободно распространяемая коммуникационная технология: «Синхронная символьная коммутация» (разработанная Балыбердиным А.Л. Rutel@Mail.ru).

Данная технология соответствует всем заявленным характеристикам и имеет относительно небольшие требования к размеру аппаратуры. Описание примененной коммуникационной парадигмы ( https://habr.com/ru/post/512652/ ).

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

Возможность непосредственно задать маршрут и скорость передачи данных при контролируемой задержке передачи, позволяет оптимизировать потоки данных и решить давно востребованную, но не решенную задачу дезагрегации оперативной памяти (примерно как дисковые хранилища СХД). Можно создавать процессоры с малым размером оперативной памяти (на одном кристалле с процессором), построенной на основе статического ОЗУ (сейчас это кэш).

Повышения производительности за счет лучшей загрузки АЛУ

Сети символьной коммутации позволят производить оптимизацию потоков передачи данных и взаимного расположения задействованных задачей вычислительных ядер. Оперативность управления потоками данных в совокупности с высокой пропускной способностью современных трансиверов позволит загрузить исполнительные устройства процессоров до уровня пиковой производительности на постоянной основе, а не в отдельные моменты времени определяемые размером КЭШ памяти.

Распределенный по отдельным процессорам вычислительный конвейер может повысить производительность в несколько раз. Есть статистика, что на каждые пять исполняемых команд, требуется одно обращение в оперативную память за обрабатываемыми данными. Если считать, что одно 32х разрядное число считывается из памяти за 200 ps (25E9 команд в секунду), а одно 400G сетевое соединение позволяет его получить за 80 ps, то это позволит поддерживать в 2.5 раза больший темп исполнения команд (60E9 команд в секунду).

Если задействовать все 6 каналов, то это позволит загрузить в вычислитель практически в пиковой производительности на постоянной основе. Современная оперативная память является достаточно медленным устройством (относительно процессора), и символьная сеть позволит суммировать пропускные способности многих интерфейсов памяти для «запитывания» точек входа таких вычислительных конвейеров, что существенно увеличит производительность вычислительной системы целиком.

Хочу отдельно выделить интересный момент : Максимальная производительность на современных процессорах часто достигается только при правильном расположении данных в памяти, а сеть с синхронной символьной коммутацией может это делать без практически дополнительных затрат. Причем возможно сразу делать несколько различных раскладок, если данные используются в нескольких частях программы и не только для одного конкретного процессора. Есть возможность следить за «комплектностью» данных и формировать сигнал вызова нужного обработчика, иными словами выполнять аппаратную поддержку параллельной обработки.

Краткое описание работы распределенной виртуальной памяти

Если локальный процессор выполняет запись данных в разделяемую память, то сначала данные помещаются в буфер местного контроллера DSM, далее он формирует и передает запрос на изменение данных контроллеру владеющему оригиналом данных. Контроллер «хозяин», получив запрос, помещает его в общую очередь изменений (формирует одинаковую для всех последовательность изменений) и используя единый и очень быстрый канал рассылает уведомления всем владельцам копий. Получив уведомление, владелец копии обновляет данные в своем кэше (даже тот кто инициировал исходную запись). Для куба размером 3 метра, теоретическое полное время составляет 50нс. Если использовать префикс LOCK, то можно очень быстро (50нс) разрешать ситуации входа в критические секции для всей вычислительной системы целиком.

Влияние задержки передачи данных на производительность вычислительной системы

Есть еще важное соотношение, известное существенно меньше закона Амдала :

«Степень распараллеливания задачи равна корню из отношения времени исполнения на одном процессоре к суммарному времени затрачиваемому на передачу данных»

Иными словами, чем медленней сеть соединяющая отдельные процессоры тем крупнее должен быть параллелизм. Влияние этого закона резко возрастает при увеличении числа задействованных процессоров. (Лекции СибГУТИ)

Цели проекта

Создание прототипа универсальной сети на базе недорогой FPGA матрицы с достаточным число трансиверов ) в формате сетевой карты с интерфейсом PCI-E.

Подтвердить предположения о возможности новой сетевой технологии (ССИ) на реальной вычислительной системе.

Создание IP блока контроллера виртуальной общей памяти и применение его в выпускаемых процессорах (например, только для версии для дата-центров).

И еще впервые с 60х годов показать, что наша страна и наши ученые и инженеры что то стоят как самостоятельные игроки в области высокопроизводительных вычислений. (Шучу — в нашей стране нет такой науки).

Ожидаемые результаты

Для системы из 1000 процессоров и максимальном числе промежуточных коммутаторов 20.

Среднее ожидаемое время доставки:

(Размер посылки в символах) * (Время передачи символа) + (Длина кабеля связи) * (Скорость света в кабеле) + (Число промежуточных коммутаторов) * (Время передачи символа.)

Максимальное ожидаемое время доставки:

(Размер посылки в символах) * (Время передачи символа) + (Длина кабеля связи) * (Скорость света в кабеле) + (Число промежуточных коммутаторов) * (Время передачи символа) * 2.5

Чтение (запись) страницы размером 4кБ в монопольном режиме (пиковая производительность).

Чтение (запись) страницы размером 4кБ в режиме средней загрузки сети

Чтение (запись) от 8 до 32 бит в монопольном режиме

Чтение (запись) от 8 до 32 бит в режиме средней загрузке сети

Время задержки стремится к 40 нс, ко времени распространения света по оптическому волокну.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *