Алексей Иванов из компании Dropbox подготовил полезный отчёт о результатах оптимизации web-серверов, обеспечивающих работу сервиса Dropbox Edge Network, используемого как для отдачи чувствительных к задержкам метаданных, так и для передачи больших потоков данных (десятки тысяч транзакций и десятки гигабит в секунду). В материале затрагиваются вопросы оптимизации драйверов, привязки обработки прерываний к фиксированным ядрам CPU, параметров TLS, nginx, стека TCP/IP, ядра Linux, влияние компиляторов и библиотек. Для каждой возможной оптимизации рассматривается её эффективность и вклад в увеличение общей производительности и сокращение задержек.
Марек Майковски (Marek Majkowski), разработчик ядра Linux, работающий в компании CloudFlare, провёл заслуживающий внимания эксперимент, пытаясь разобраться насколько быстр сетевой стек ядра Linux и возможно ли в Linux обеспечить работу пользовательского приложения, способного обработать миллион UDP-пакетов в секунду на обычном сервере с шестиядерным CPU Xeon (2GHz) и сетевой картой 10G. В эксперименте применялась связка из программы для отправки данных, использующая вызов sendmmsg для отправки информации порциями по 1024 пакета за раз, и программы для приема данных, использующая системный вызов recvmmsg, более эффективный чем recv благодаря пакетной обработке данных. Первый вариант приложения продемонстрировал производительность отправки данных в диапазоне от 197 до 350 тысяч пакетов в секунду. Непостоянство производительности объяснялось миграцией обработчиков между ядрами CPU. После жесткого закрепления программы за одним ядром CPU возросла эффективность кэша и производительность стабилизировалась на
Некоторое время назад в Chrome OS была реализована техника ускорения загрузки системы, основанная на асинхронной инициализации (probe) устройств. Теперь механизм асинхронной инициализации устройств предложен для включения в состав основного ядра Linux. Суть проблемы состоит в том, что некоторые устройства работают достаточно медленно. Поэтому вызов probe() при сканировании и инициализации устройств может занимать весьма ощутимое время. В этот момент загрузка системы приостанавливается и система не делает ничего полезного вплоть до завершения инициализации устройства, что является неоптимальным с точки зрения времени запуска системы. Предложенный патч отличается от предыдущих вариантов подобных патчей тем, что старается сохранить точки синхронизации, используемые драйверами в процессе загрузки, что минимизирует побочные эффекты от перехода на асинхронный режим. Кроме того, реализован интерфейс, через который драйвер может отказаться от асинхронной инициализации. Для экспериментаторов доступен
Facebook открыл код проекта warp, в рамках которого подготовлен высокопроизводительный препроцессор для языков C и C++. Внутри компании препроцессор warp используется в качестве быстрой замены препроцессора cpp из состава GCC. Кроме GCC, warp также может использоваться совместно с Clang. warp написан на языке D, основной автор кода - Уолтер Брайт (Walter Bright), автор компилятора Zortech C++ и создатель языка программирования D. Код warp опубликован на Github под свободной лицензией BSL (Boost Software License). Одной из ключевых особенностей warp является кэширование препроцессором результатов разбора файлов С/C++. Из-за того, что стадия разбора кода С++ является относительно медленной операцией, использование warp позволяет сократить время пересборки в условиях работы команд разработчиков над большими программными проектами и, таким образом, увеличить эффективность разработки за счёт снижения времени ожидания. В тесте пересборки крупного программного проекта с большим числом зависимостей после изменения
В драйвере RadeonSI, отвечающем за поддержку 3D в GPU от AMD семейства HD7000 и новее (т.е. все GPU на основе архитектуры GCN) будет активирована по умолчанию поддержка тайлинга, так как по мнению разработчиков эта возможность достигла стабильного состояния. Как правило, активация тайлинга приводит к достаточно заметному приросту производительности графического драйвера, что делает данное изменение достаточно ожидаемым для владельцев карт на основе GCN, желающих использовать открытые драйверы. Как ранее показали замеры производительности, выполненные ресурсом Phoronix, хотя свежие версии RadeonSI и прибавили в производительности, проприетарный драйвер Catalyst пока демонстрирует существенно более высокую производительность, в отличие от ситуации с драйвером R600g, где открытый драйвер иногда показывает производительность даже выше чем у проприетарного драйвера Catalyst. Включение поддержки тайлинга скорее всего поможет сократить разрыв в результатах. Также можно отметить, что реализованный в ядре Linux
Для ядра Linux представлена реализация нового механизма кэширования на SSD-накопителях - dm-writeboost. Основным отличием новой системы от уже существующих механизмов DM-Cache и Bcache является ориентация на пакетную запись для продления службы SSD-накопителя и ускорения операций записи. Модуль dm-writeboost претендует на включение в экспериментальное дерево staging следующего выпуска ядра Linux. Dm-writeboost хранит информацию в лог-подобной последовательно заполняемой цикличной структуре для заполнения которой случайный набор операций записи накапливается и сбрасывается на SSD в пакетном режиме в виде большого непрерывного блока. Подобный подход позволяет значительно поднять эффективность записи - при использовании dm-writeboost потеря производительности кэширования случайных запросов составляет всего 3% по сравнению с последовательной записью. Например, при пропускной способности SSD-накопителя в 266MB/s, dm-writeboost обеспечивает запись со скоростью 259MB/s.
Вышла новая версия расширения PHP QB 1.3, предоставляющего средства для написания требовательных к производительности приложений на языке PHP. В то время как PHP является отличным языком для создания сложных веб приложений, он имеет несколько определённых ограничений. Написание кода который выполняет низкоуровневые, интенсивные по вычислениям задачи, в основном не практично - он просто будет слишком медленен. Расширение QB направлено на устранение этой слабости PHP. Транслируя Zend опкод и исполняя его с помощью статически типизированной виртуальной машины или преобразуя его в нативный исполняемый код, QB обеспечивает колоссальный прирост производительности (от 5 до 20 раз). Добавленная мощность позволяет программистам на языке PHP делать вещи которые они не могли сделать ранее, такие как сложные операции с видео и изображениями на уровне пикселей. В QB программа может быть скомпилирована как в родной для платформы код, так и в байткод для исполнения в виртуальной машине. Код, использующий QB, можно
Представлен первый стабильный релиз проекта BTIER 1.0.0, предназначенного для формирования многоуровневых блочных устройств, состоящих из нескольких разнотипных устройств небольшого размера. Код системы отмечен как стабильный и прошедший тестирование в промышленном использовании, в том числе в достаточно сложных конфигурациях, в которых используются сетевые разделы DRDB и работают приложения Oracle. BTIER оформлен в виде модуля для ядра Linux, который может быть собран для ядер, начиная с выпуска 2.6.32. Изначально проект развивался под именем TIER, но был переименован в BTIER для того чтобы упростить выборку связанной с проектом информации через поисковые системы. Исходные тексты BTIER распространяется под лицензией GPL. За счёт оптимального разнесения блоков по дискам и использования техники активного кэширования данных в ОЗУ раздел на базе BTIER позволяет заметно поднять производительность сводного раздела. Например, при тестировании BTIER-раздела, созданного на базе SSD-накопителя STEC Zeus и 5 SAS
В ходе работ по улучшению поддержки системного менеджера systemd в качестве init-процесса начального RAM-диска (initrd), разработчики Кей Сайверс и Гарольд Хойер столкнулись с интересным и по-своему курьёзным фактом — при использовании initrd, суммарное время инициализации ядра и initrd оказалось примерно на 10% меньше, чем время инициализации ядра без initrd. Начальный RAM-диск (initrd) представляет собой специализированную файловую систему, которая используется ядром на стадии начальной загрузки. Основная задача initrd — обеспечить монтирование жизненно важных файловых систем: корня и /usr. В наиболее простых ситуациях (локальные дисковые разделы) данная работа может быть проделана и ядром, однако в случае использования для этих разделов специфических механизмов (LVM, RAID, multipath, шифрование, NFS), initrd является наиболее простым и гибким решением. Также он может оказаться полезен в качестве аварийно-восстановительной системы, предоставляя администратору средства, необходимые для
Разработчики из компании Intel опубликовали патч для drm-драйвера Intel из состава ядра Linux, который активирует поддержку оверклокинга для GPU семейства Sandy Bridge, Ivy Bridge и Haswell (Intel HD 2000/3000/2500/4000) в случае когда материнская плата поддерживает управление напряжением. Для оценки насколько текущий чип подвержен разгону драйвер следует загрузить с опцией drm.debug=0xe, при этом в лог dmesg будет выведена максимально возможная частота. Разгон подразумевает собой повышение частоты до потенциально поддерживаемых величин, предусмотренных в рамках штатного запаса мощности, но при которых не гарантируется корректная работа рендеринга и возможно нарушение нормальной работы системы. При использовании разгона рекомендуется задействовать дополнительные механизмы охлаждения чипа.