Повышение производительности приложений с многопоточностью

Прочитано: 108 раз(а)


Многоядерные процессоры подпитывают производительность серверной операционной системы и технологии виртуализации. Могут ли многопоточные приложения и многоядерные процессоры повысить производительность приложений?

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

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

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

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

Определите параметры многопоточности

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

Например, Windows 7 рассматривает многоядерные процессоры так, как если бы они были процессорами SMP . Другими словами, ОС не различает один ЦП с несколькими ядрами или несколько ЦП с одним ядром, и возможность запуска нескольких потоков не зависит от конкретной используемой процессорной технологии. Другие приложения, которые используют как SMP, так и многоядерные серверы, включают серверы баз данных (такие как Oracle, MySQL и DB2), приложения SAP и приложения, созданные с использованием новейших сред разработки.

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

Реальное решение сводится к тому, как улучшить производительность приложения. Для некоторых собственных приложений может потребоваться перекодирование или повторная разработка. Это может быть дорогостоящим мероприятием, но среда разработки будет определять большую часть усилий и расходов. Например, среда разработки Microsoft .NET упрощает многопоточность с помощью API-интерфейсов, включенных в Parallel Language Integrated Query (PLINQ) и Task Parallel Library. В мире Java многопоточность подпадает под термин «параллелизм». Платформа Java разработана с нуля для поддержки параллельного программирования на языке программирования Java и библиотеках классов Java. Начиная с версии 5.0, платформа Java также включает высокоуровневые API-интерфейсы параллелизма, находящиеся в пакетах java.util.concurrent.

Рекомендации для многопоточных приложений

Тем не менее, требуются некоторые усилия и опыт, чтобы правильно включить многопоточность в приложении. Это также требует некоторых дополнительных инструментов разработки. Некоторые инструменты включены в среду разработки, например PLINQ, другие являются сторонними опциями, такими как java.util, а некоторые операционные системы содержат полезные утилиты, которые могут помочь с привязкой к процессору и так далее. Инструменты обычно используются для выявления дисбаланса потоков, мониторинга использования ядра и отслеживания производительности.. Некоторое тестирование можно выполнить с помощью диспетчера задач Microsoft, доступного в большинстве версий ОС Windows. Диспетчер задач может отслеживать загрузку ЦП в режиме реального времени, позволяя программисту быстро понять, как приложение использует многопоточность. Помимо этого базового анализа, программисты могут выбирать такие инструменты, как набор программных инструментов Intel для высокопроизводительных вычислений. Intel также предлагает автономные программные инструменты, такие как Intel VTune Performance Analyzer и приложение Intel Thread Checker.

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

Также взвесьте влияние любого повышения производительности на сообщество пользователей. Например, приложение может предложить гораздо более высокую производительность за счет перекодирования для многоядерной/многопоточной среды, но если это приложение с самого начала мало используется, улучшение может никогда не быть реализовано, и это сводит на нет всю ценность инвестиций. С другой стороны, инвестиции могут быть полностью оправданными (возможно, даже критически важными), если вы ожидаете, что в ближайшем будущем приложение будет использоваться значительно чаще.

Разработчики обнаружат, что перекодирование приложения — не единственный путь к увеличению использования процессора, особенно если приложение выполняется на сервере в центре обработки данных. Для размещенных приложений может быть лучше улучшить производительность и использование сервера — часто путем обновления операционных систем и внедрения виртуализации серверов. Обе тактики могут использовать несколько ядер и работать как многопоточные приложения. Благодаря виртуализации серверов приложения могут быть выделены для одного экземпляра сервера, что позволяет приложению использовать максимальную пропускную способность ЦП даже в рамках одного потока. Более того, несколько экземпляров сервера можно настроить для балансировки нагрузки, что поможет приложению совместно использовать ядра на виртуальных серверах. Более новые операционные системы могут решить проблемы с производительностью приложений, используя «сопоставление процессоров,

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

Ученые устраняют потенциальную уязвимость к атакам по сторонним каналам в многоядерных процессорах



Новости партнеров