суббота, 28 сентября 2019 г.

[comp.prog.thoughts] Праздное про ноутбуки и производительность софта

Позволю себе еще раз продолжить тему ноутбуков, ибо давеча был несколько удивлен. Дело в том, что когда у меня летом обострились проблемы с моими старыми рабочими ноутами и начались поиски новой рабочей машинки, я разыскал у себя древний Lenovo ThinkPad E130. Что-то типа вот этого, с двухядерным Pentium, работающем на частоте 1.4MHz, с 4GiB RAM и 320Gb HDD.

Купил я его в начале осени 2012-го года (т.е. ровно 7 лет назад) в качестве рабочей лошадки для менеджера, коим я тогда был. Ноут маленький, не тяжелый, прочный и надежный (я как-то на него чай пролил и ему хоть бы хны, т.к. у него оказалась влагозащищенная клавиатура). Но, самое важное -- он был дешевым и его было не жалко таскать с собой повсюду. Уже не помню, во сколько он мне тогда обошелся, что-то в районе $500 что по тем временам для ноутбука было немного.

Работал он у меня изначально под Windows 7 и основными программами, которые я на нем эксплуатировал -- это Thunderbird в качестве рабочего клиента, Opera и Chrome в качестве браузеров, MS Office для работы с документами. Производительности хватало, хотя шустрым он не был. Но я всегда подозревал, что его основные тормоза определялись не столько мощностью процессора, сколько скоростью жесткого диска.

Спустя пару лет, после того как я из менеджмента более-менее вернулся в программинг, на этом ноуте я еще даже успел попрограммировать на C++. Собственно, первые публично доступные версии SObjectizer-5 как раз на этом "дохлом" ThinkPad-е и доводились до ума. Причем тогда SO-5 еще и от ACE зависел, поэтому перекомпиляция SO-5 вместе с ACE была серьезной задачей. Поэтому в конце-концов я пересел на 13.3" ноутбук с Core i7 и 8GiB RAM. ThinkPad же отправился в "закрома Родины", откуда, может быть, извлекался на свет божий раз в полтора-два года, вряд ли чаще.

А вот когда появился риск остаться без работающего ноутбука вообще я про него вспомнил, достал из закромов, где он бережно хранился, заменил HDD на SATA-шный SSD и установил на него Kubuntu 19.04. После чего пришло время удивляться.

Я был приятно поражен двумя вещами.

Во-первых, тому, насколько шустро там работают нужные мне вещи. Претензий к скорости работы KDE нет. Vim, git и Mercurial летают. С-шный проект одного из заказчиков, который мне время от времени приходится дорабатывать, собирается просто влет.

Во-вторых, тому, что 4GiB хватает для работы как с SObjectizer-5, так и, что еще более удивительно, с RESTinio. Я опасался тому, что когда gcc начнет компилировать юнит-тесты для RESTinio, в которых и Asio, и Catch2, и RESTinio, то памяти не хватит, что система пойдет в своп.

Ничего подобного. По показаниям htop-а gcc отъедает что-то порядка 700MiB, а общее потребление памяти в системе держится где-то на уровне 1.1-1.3GiB при перекомпиляциях RESTinio.

Конечно, RESTinio -- это не какой-нибудь Boost.Xpressive или Boost.Hana, но шаблонного кода внутри хватает. Плюс, как я уже сказал, в юнит-тестах еще и Asio с Catch2, а это тоже неслабая нагрузка на компилятор.

Конечно, скорость компиляции именно тестов/примеров для RESTinio не ахти. Где-то раза в три медленнее, чем на моем основном рабочем ноуте (тоже семилетней давности). Тут понятно: совсем слабый Pentium на 1.4MHz против i7-го на 2.0MHz, результат немного предсказуем. Но, что меня больше всего удивило: при моем подходе к разработке, когда я больше времени провожу в раздумьях и рисовании каракулей на бумаге, подобная скорость работы компилятора препятствием для меня бы не стала. Т.е., если бы я все-таки остался без рабочей машины, то старенький ThinkPad вполне мог бы позволить мне продолжать работу над текущими проектами.

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

Но только то тех пор, пока не приходилось заходить в современный веб через браузер. Стоит открыть какой-нибудь Yandex.Music и сразу одно ядро оказывается занято чуть ли не полностью. Попытки набрать что-нибудь в Google Docs так же сразу показывают, что современный веб требует для комфортной работы совсем другого железа.

И тут я хочу перейти к другой теме, на которую я обратил внимание при поиске нового ноутбука.

Мне показалось, что рынок ноутбуков сегментируется и это уже становится довольно сильно заметно. Вот четыре основные категории, которые я бы выделил:

  • недорогие модели без каких-либо понтов. Ценой до $500. Начиная от совсем дешевых нетбуков от Digma/Irbis/Prestigio до вполне себе полноценных рабочих лошадок от Lenovo/HP/Asus с Ryzen-ами или Core i3, SSD дисками и даже 8GiB RAM в отдельных моделях;
  • бизнес- и имиджевые ноутбуки. Ценой от $1000 и выше. Например, современные Lenovo ThinkPad-ы или тонкие и легкие Asus Zenbook-и. Отличаются высоким ценником при, в общем-то, не сильно выдающихся характеристиках. Или очень высоким ценником при хороших характеристиках ;) Но, собственно, цена здесь особо никого не волнует, т.к. за свои такие машины обычно не покупают. А если и покупают, то для поддержания статуса и явно не на последние;
  • игровые ноутбуки. Большие, тяжелые, яркие. Мощные и, в принципе, непонято зачем нужные. Хотя, если задасться целью найти именно мощный ноутбук для обработки фото или видео, причем за вменяемые деньги, то окажется, что больше всего приличных вариантов именно здесь;
  • промежуточная категория ценой от $700 где-то до $1300. Это нечто среднее между дешевой категорией и категорией бизнес-моделей. Т.е. по характеристикам чуть получше, чем дешевые ноутбуки, и ближе к начальным бизнес-моделям, но заметно дешевле последних.

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

Так же предположу, что потребность рынка в мощных ноутбуках (будь то игровых или бизнес) в принципе небольшая. Все таки тех, кому ноутбук нужен в качестве печатной машинки и удобного окошка в интернет + посмотреть фильмы, сильно больше, чем тех, кто готов выложить приличные деньги за возможность порубиться на ноутбуке в тяжелую игрушку или помонтировать 4K видео. Соответственно, на руках у пользователей в мире должно оказываться все больше и больше бюджетных моделей с отнюдь не топовыми процессорами и небольшими объемами памяти (в пределах от 2GiB до 8GiB, хотя, скорее, от 2GiB до 4GiB). И, что еще важно, моральное устаревание этих моделей будет происходить гораздо медленнее. Ибо, насколько я могу судить, в повседневных задачах нет большой разницы между i7 третьего и восьмого поколений.

А раз так, то возникает вопрос: насколько комфортно на такой технике будет пользоваться продукцией современного софтостроения? Где нормой становится написание десктопного софта на Electron-е, когда приложение без какой-либо сложной функциональности будет жрать 200MiB памяти и периодически загружать одно из ядер процессора на 100%.

Видимо, ответ меня не обрадует. Но как-то не по себе от мира, в котором gcc, перемалывающий сложные C++ные шаблоны, оказывается экономичнее, чем одна вкладка браузера с Yandex.Music :( Ну и поддерживать своим трудовым рублем таких горесофтостроителей не хочется.

Мне бы хотелось, чтобы индустрия в конце-концов осознала, что Web -- это хорошо, но производительными приложения, работающие в рамках браузеров, в принципе никогда не будут. И что надо бы разработать другой способ доставки приложений до пользователя. Скажем, прямо в собранном под конкретную архитектуру виде. Или в каком-то промежуточном, уже оптимизированном представлении, с AOT компиляцией на платформе пользователя. Причем, может так получится, что объемы загружаемых на компьютеры пользователей артефактов будут не больше, чем сейчас это происходит с "тяжелыми" веб-страницами с большим объемом JavaScript-а внутри. Есть, конечно, вопрос безопасности. Но он и с JS-ом есть, особенно когда пользователям стали подсовывать страницы с майнингом крипты внутри...

А вот произойдет ли это при моей жизни? Не уверен. На моей памяти программисты никогда не стремились экономить ресурсы, сроки выпуска софта всегда были важнее его ресурсоемкости. Хотя есть очень узкие специализированные сегменты, где софт разрабатывается под конкретную аппаратуру, но погоды эти сегменты не делают.

4 комментария:

LG.BALUKATION комментирует...

> И что надо бы разработать другой способ доставки приложений до пользователя.

В том-то и проблема, что были уже эти способы. Ява-апплеты, флеш, плагины для игр в браузере от например юнити... Но это всё сложно и не модно, решили лучше в браузер затащить все недостающие технологии (тот же OpenGL для игр) и теперь можно что угодно написать на HTML5, пусть оно будет и не шустро.

eao197 комментирует...

> и теперь можно что угодно написать на HTML5, пусть оно будет и не шустро.

В этом-то и проблема. Пусть не что угодно, но пусть будет оно шустро. Но не могуть-с... :(

Dmitry Popov комментирует...

А что думаете про WebAssembly? Вроде как раз в эту сторону целится. Но как-то не очень видно, чтобы ее массово начинали использовать.

eao197 комментирует...

@Dmitry Popov:

Я пока в живой природе WebAssembly не видел, а у самого нет времени (да и желания) в эту тему плотно погрузиться. Так что ничего путного сказать не могу.

Но, думается, очередная вариация на тему VM для безопасного исполнения приложений принципиально картину не изменит.