Блог компании Badoo → Clustered index в InnoDB и оптимизация запросов
В последнее время в сети часто пишут про clustered index в InnoDB и таблицах MySQL, но, несмотря на это, на практике используют довольно редко.В данной статье мы покажем на двух реальных примерах, как мы оптимизировали достаточно сложные системы Badoo, основываясь на понимании принципов работы clustered index.
Clustered index – форма организации таблицы в файле. В InnoDB данные хранятся в дереве, в таком же, в котором лежат обычные B-TREE ключи. Таблица InnoDB сама по себе уже является большим B-TREE. В качестве значений ключа используется clustered index. Согласно документации, в качестве clustered index выбирается PRIMARY KEY. Если PRIMARY KEY отсутствует – выбирается первый UNIQUE KEY. Если и такого нет, то используется внутренний 6-тибайтный код.
Что же вытекает из такой организации данных на диске?
Разработка под Apple iOS → Уменьшаем размер своего iOS приложения из песочницы
Хочу поделиться способом, который позволит сэкономить несколько мегабайт «лишнего» веса в вашем iOS приложении. Зачем это может понадобиться? Во-первых, если ваше приложение чуть больше 20 Мб, то его нельзя будет скачать по 3G, а только используя Wi-Fi или синхронизацию c iTunes (ограничение со стороны Apple). Ну, а во-вторых, если вы любите все оптимизировать или просто хотите чуть-чуть сократить время загрузки вашего апа.
Все нижеперечисленные пункты я проверял и использовал в своем апе, сэкономив суммарно около 4 Мб. Кажется не очень то и много, но если, например, умножить на 5000 тысяч загрузок в день, то уже получим около 20 Гб сэкономленного трафика. Итак, приступим.
Все нижеперечисленные пункты я проверял и использовал в своем апе, сэкономив суммарно около 4 Мб. Кажется не очень то и много, но если, например, умножить на 5000 тысяч загрузок в день, то уже получим около 20 Гб сэкономленного трафика. Итак, приступим.
Хабрахабр → Моддер выжал из Skyrim дополнительные 40% производительности
В треде форума он рассказывает, что Бетезда, по ходу, не использует оптимизирующий компилятор.
Его оптимизации достаточно просты и покрывают примерно 1% от всего кода движка. В основном это ручной инлайнинг геттеров, переписывание некоторых кусков кода с x87 на SSE2. Были пропатчены только три крупные функции. Моддер утверждает, что если бы Бетезда использовала оптимизирующий компилятор и другую библиотеку для мат. вычислений прирост в скорости составил бы 100%.
Сам мод можно скачать здесь: forums.bethsoft.com/topic/1321575-rel-tesv-acceleration-layer/
Тред с комментариями здесь: forums.bethsoft.com/topic/1321675-how-can-skyrim-be-so-unoptimized-modders-do-better-job-than-bethesda/
Обещают 20-30% прирост FPS в таких местах как Маркат и Уайтран (крупные города).
Его оптимизации достаточно просты и покрывают примерно 1% от всего кода движка. В основном это ручной инлайнинг геттеров, переписывание некоторых кусков кода с x87 на SSE2. Были пропатчены только три крупные функции. Моддер утверждает, что если бы Бетезда использовала оптимизирующий компилятор и другую библиотеку для мат. вычислений прирост в скорости составил бы 100%.
Сам мод можно скачать здесь: forums.bethsoft.com/topic/1321575-rel-tesv-acceleration-layer/
Тред с комментариями здесь: forums.bethsoft.com/topic/1321675-how-can-skyrim-be-so-unoptimized-modders-do-better-job-than-bethesda/
Обещают 20-30% прирост FPS в таких местах как Маркат и Уайтран (крупные города).
PHP → Ищем неиспользуемые расширения PHP

Одним из способов ускорения работы интерпретатора PHP является отключение неиспользуемых расширений.
Конечно же прирост производительности будет незначителен, но отключение расширений не занимает много времени, поэтому есть смысл воспользоваться данным способом.
Главной проблемой будет найти неиспользуемые расширения, для этих целей я написал небольшую утилитку, которая поможет вам в этом деле.
C++ → Немного о том, почему использование STL бывает неоптимальным из песочницы
В этой небольшой заметке пойдет речь о том, как легко и просто можно убить производительность приложения с помощью библиотеки STL. Охватить всю библиотеку в рамках этого топика не возможно, поэтому будет рассмотрен только один компонент – контейнер std::string. В качестве примера будет показана цена инициализации std::string и, как следствие, продемонстрировано, к чему может привести неоптимальное использование библиотеки. Все нижесказанное особенно остро относится к области gamedev-а.
Высокая производительность → OpenCL: универсальность и высокая производительность или не так все просто? из песочницы
На Хабре уже были статьи об OpenCL, CUDA и GPGPU со сравнениями производительности, базовыми понятиями и примерами, поэтому рассказывать об основах и принципах работы я тут не буду, даже код не покажу. Но я хочу описать в чем заключаются реальные трудности при использовании GPU (про ограничения и их последствия), почему нельзя сравнивать производительность CPU и GPU, а также про то насколько “универсален” OpenCL на самом деле.
Компиляторы → Оптимизации в компиляторах. Часть 1
Копаясь в дебрях LLVM, я неожиданно обнаружил для себя: насколько всё же интересная штука — оптимизация кода. Поэтому решил поделиться с вами своими наблюдениями в виде серии обзорных статей про оптимизации в компиляторах. В этих статьях я попытаюсь «разжевать» принципы работы оптимизаций и обязательно рассмотреть примеры.
Я попытаюсь выстроить оптимизации в порядке возрастания «сложности понимания», но это исключительно субъективно.
И ещё: некоторые названия и термины не являются устоявшимися и их используют «кто-как», поэтому я буду приводить несколько вариантов, но настоятельно рекомендую использовать именно англоязычные термины.
Я попытаюсь выстроить оптимизации в порядке возрастания «сложности понимания», но это исключительно субъективно.
И ещё: некоторые названия и термины не являются устоявшимися и их используют «кто-как», поэтому я буду приводить несколько вариантов, но настоятельно рекомендую использовать именно англоязычные термины.
C++ → Обходим чужие тормоза
Бэкапил историю сообщений из Skype самописной утилиткой, год назад она работала отлично, а теперь стала люто тормозить. Это неприемлемо, тк. в том числе ради скорости экспорта она и была написана, поэтому полез в профайлер. По итогам узнал всякое и получил множественные просветления. Оказывается, breakpoint на функцию в подгруженной системной DLL ставить приходится с подвывертом, а не просто по имени, но таки можно и нетяжело. Оказывается, Skype API написан местами зверски криво, отчего и тормозища. Оказывается, чужие бинарники иногда можно очень легко подхачить и подоптимизить (слава MS Research!). Оказывается, профайлер может сильно врать, а не просто слегка подбрехивать. Ключевые слова для нетерпеливых: C++, VS, CodeAnalyst, Skype COM API, MS Research, Detours, SQLite; а для всех остальных подробности под катом.
Персональные блоги → Как получить и измерить высокоскоростное соединение по TCP
Надежная передача данных в Интернете осуществляется на базе протокола TCP (Transmission Control Protocol), спецификация к которому была опубликована почти 30 лет назад. Алгоритм TCP (RFC793), позволяет подключенному устройству адаптироваться для работы в сети на скоростях в пределах десятков мегабит в секунду и задержки до 100 секунд. С бурным развитием новых технологий передачи данных, уже через 10 лет после внедрения стало ясно что производительность протокола не будет хватать для более широких каналов.
JAVA → История одной оптимизации
Аннотация
Статья раскрывает особенности высокоуровневых оптимизаций вычислительных алгоритмов на Java на примере кубического алгоритма перемножения матриц.
Шаг 0. Установи точку отсчета!
Определимся с окружением:
- Hardware: 1-socket/2-cores Intel Core 2 Duo T7300 2GHz, 2Gb ram;
- Java: HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing);