?

Log in

Возможно, кто-то собрался проспать момент, когда производительный софт снова будет в моде. Если так, то я вам не дам этого сделать :)

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

Когда речь идет о софте, которому не нужно быть шустрым, часто приводится такой пример:
"Если бы я написал свой веб-сервер на C++, а не на Java, мне удалось бы, возможно, снизить время отклика с 2мс до 1мс. Но пользователь все равно этого не заметит. Так что 2мс - ок".

Удивительно, но этот клиенто-ориентирванный подход, который разработчикам активно вдалбливали в головы последние 10 лет, в современном мире работать уже не будет. О клиенте, конечно же, будут думать, но в уравнении появятся (уже появляются!) и другие параметры.

Допустим, что у вас крутится где-нибудь на Амазоне 10 000 копий того веб-сервиса, о котором речь шла выше. Пусть для этого требуется 1000 машин (т.е. по 10 копий сервиса на машину).
Допустим, что вам удалось снизить требования по ресурсам всего на 10%. Что это дает?
Правильно! Вы можете отказаться от 100 машин. Т.е. снизить свои расходы на те же 10%. Нефигово, да?

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

Пока весь софт крутился на десктопах, ноутбуках и корпоративных серверах, о производительности не особо заботились. Ибо ваш ноут все равно сильно мощнее, чем вам необходимо. Это ресурс, на котором только электричество можно экономить. А оно дешевое.

Однако для облачных сервис-провайдеров такой "жирок" станет непозволительной роскошью. Его придется сгонять в ценовой борьбе за клента.

Это, конечно, не значит, что везде будет только С++ и ничего больше. У более высокоуровневых средств лучше time-to-market, ниже затраты на разработку, deployment и поддержку. Все это очень ценится. Но на весы ляжет еще и производительность. Так что где-то могут возникнуть неожиданные компромиссы.

Кстати, набирающее нынче силу full-system профилирование производительности с учетом Java-машины - совсем не сахар. И есть подозрение, что performance-аналитик для Java будет стоить не меньше, чем тот же аналитик для C++.
Посмотрим... Может глубокое знание машинной архитектуры снова войдет в моду.

Tags:

Open source снова порадовал

Я уже писал пару раз на Хабр, что эта штука никогда не бывает бесплатной. Ну да не будем больше об этом. И так всем давно понятно. Приведу только еще один пример из личной практики.

Вчера обнаружил, что в одном популярном продукте исчезла фича, которую я активно использую. Нашел коммит, которым ее удалили. Комментарий там примерно такой: "Мы удаляем эту фичу, чтобы она не мешала нам активно развивать другую. Обе фичи используют общие структуры данных. Нас запарило менять первую фичу, каждый раз, когда мы что-то меняем в этих структурах".

"Как же так?.." - наверняка, подумали вы. А все просто: за разработку второй фичи платят деньги, а первая - просто так. Ценная, но денег за нее никто не платит.

Вот вам и Open source.

Tags:

Фишка, которой нет

В С++ есть такая штука как consume-семантика для операций чтения из памяти. Если load пометить как consume, то это указание компилятору и - в конечном счете - аппаратуре исполнить зависящие от этого load'а операции строго после него.

Казалось бы, бесплатная вещь. Все современные процессоры автоматом выдерживают зависимости через аргументы и через память. В мире существовал только один массовый процессор, который мог не выдержать такие зависимости. Это первая версия процессора Alpha. Уже сто лет, как не выпускается. Так что, вроде бы, с consume-операциями и делать-то ничего не надо.

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

Видимо, по двум причинам. Во-первых, во время оптимизации компилятор может разорвать цепочку зависимостей, идущую от consume-операции. А это проблема для процессоров типа ARM. "Оторванные" операции могут быть исполнены перед consume-чтением. Поэтому компилятор должен все-таки сохранить цепочку. Но это не означает, что ее нельзя оптимизировать. Например, ее можно выдержать с помощью более дешевых искусственных зависимостей.
На x86 такой проблемы нет. Там ни одна операция не может быть переупорядочена "вверх" относительно чтения из памяти. Но проблема с выдерживанием зависимостей все равно остается. Ибо есть спекулятивные оптимизации. Что-то типа такого:
if ( ptr )
x = *ptr;
можно преобразовать в (при выполнении определенных условий, на которые мы здесь забьем):
x = *(0xABCD);
if ( !ptr || ptr != 0xABCD )
x = *ptr;

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

Так в чем же тогда дело? Почему они не решены полноценно?

Думаю, по двум причинам:
1) Влом. Нынешние промышленные компиляторы - это многоэтажные наслоения архаического наследия. Вы можете написать новую современную оптимизацию как надо. Но вот найти и поправить все предыдущие - большая проблема;
2) Семантика все равно дебильная. Если компилятор видит, что может разорвать зависимость, это может означать, что ее и нет. Но судить об этом сейчас компилятор полноценно не может. Поэтому на ARM и подобных машинах зависимости нужно выдержать по-любому. Для чего армовские компиляторщики выбрали самый топорный способ: барьер - и все тут.

Итак, товарищи, приведенный пример наглядно демонстрирует две проблемы:
1) Может статься, что программисты, наконец, поняли, что им нужно, и придумали подходящую модель языка. Наконец, мы подошли к моменту, когда требуется полноценная ревизия железа и системного софта, чтобы реализовать эту модель;
2) А может статься, что разработчики языковых стандартов уже задолбали своими попытками скрестить мышь со слоном.

Формализация языков типа С и C++ вызывает у меня противоречивые чувства. Джава в этом отношении меня, например, не волнует. Потому что это язык изначально оторванный от аппаратуры. Там все должно быть супер-предсказуемо. Но с С и С++ ситуация другая. С одной стороны, охота, чтобы все все было четко, без разночтений и переносимо. Но с другой стороны, попытки этого добиться пока что приводят к невероятно раздутому стандарту, который, думаю, ни один человек в мире не соблюдает. Плюс разношерстность аппаратуры вынуждает авторов стандарта придумывать новые ужасные фишки, которые призваны удовлетворить всех, а на деле не работают, либо слишком сложны в использовании.
На данном этапе я склоняюсь больше к варианту 2). Пока что я не верю в переносимость С и С++. А также полное абстрагирование от машины через эти языки. Если же это возможно, то мне, скорее всего, такие С и С++ будут не нужны. (Хотя вышесказанное и не означает, что не надо пытаться сделать их такими).

Tags:

Сделал небольшое открытие.

В ядре Линукса есть забавный механизм синхронизации программных потоков.
Он используется для высвобождения памяти в стиле lock-free. Вообще, высвобождение памяти, если верить многочисленным публикациям - это как раз та проблема, которая делает дизайн lock-free структур данных невероятно сложным.
Но не для Линукса :)
Посмотрим коротенько, как это работает.
1) У вас есть куча параллельных потоков, которые читают одну и ту же структуру данных. И есть поток, который хочет что-то из нее удалить. Собственно, удалить несложно. Он просто берет и удаляет. А вот дальше встает вопрос о высвобождении памяти, связанной с удаленным элементом. Вопрос: как ее освободить так, чтобы не оставить "читателей" с битыми ссылками и чтобы читатели могли продолжать делать свою работу?
2) Последнее условие существенно, т.к. есть простые решения, при которых читатели вынужденно отказываются от уже проделанной работы и повторяют ее заново. Формально они не блокируются, но и не прогрессируют! Т.е. не делают полезной работы. Что не есть гут.
3) Решение. Читатели запрещают переключать их контекст, пока находятся в критической секции. Это означает, что одновременно в критической секции может находиться не больше читателей, чем существует ядер в системе. После удаления элемента и перед высвобождением памяти надо дождаться пока активные читатели завершат свою работу. Затем память можно безболезненно вернуть системе.
4) Но как дождаться? В Линуксе реализовано гениальное решение. Отдельный процесс в цикле поочередно переключает собственный контекст на все ядра в системе. Когда цикл завершается, можно гарантировать, что никто в системе больше не держит старые ссылки. Почему это так? Потому что активные читатели не дадут переключить контекст, пока не завершат свою критическую секцию. Если ждущему процессу удалось переключиться на все ядра, это значит, что все "застарелые" активные читатели завершили свою работу.
По-моему, это прекрасно. Хотя я и не представляю, где такой механизм можно было бы использовать помимо ядра. Слишком он уж специфичен для операционной системы.
Кстати, он не работает на realtime-ядрах, ибо на них нельзя задерживать переключение контектса. Какой тут, иначе, realtime?
Есть еще куча нюансов и подробностей, как всегда. Подробнее можно почитать по ссылке и по ссылкам через ссылку. Предупреждаю: текст плохо написан, приходится сильно напрягать мозг.

http://lwn.net/Articles/262464/

Tags:

Забавно, но компания Интел документально зафиксировала модель памяти собственных микропроцессоров только в районе 2008-го года.

Если кто-то забыл или не в курсе, коротенько и без нюансов эту модель можно описать так: операции обращения к памяти исполняются в порядке, в котором указаны в программе. И только чтение из памяти может опережать запись в память, если они не пересекаются по адресам.

До 2008-го года (или около того) весь мир об этом знал и как-то использовал в своих целях на протяжении тридцати лет. Но официальной бумажки не было :)

Сегодня такая модель памяти выглядит слишком ограничительной. Современным языкам программирования достаточно более мягких гарантий.

При этом x86 никак нельзя назвать архаичной тупой железкой. Десятилетиями эти процессоры работали на программистов, которые сами не знали чего хотят. Только в середине 2000-х (!) формально очертились первые модели памяти языков программирования.

Обычно теоретики опережают время. А тут явно замешкались :)

Tags:

Пора обществу всерьез взяться за регулирование научной деятельности.

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

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

Журналист спрашивает одного из главных идеологов: "А это вообще этично убить всех маскитов?" Тот с умным видом сначала выпендривается про Дарвина и религию, а затем заявляет: "Это просто межвидовая борьба между людьми и москитами. У животных нет права существовать или не существовать. У них есть просто приспособленность к природной нише. А мы эту приспособленность отнимем".

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

И это верно. Но узко. Право - социальный конструкт. Однако это не умоляет его значимости. Благодаря праву, например, этого самого ученого еще в детстве не покалечил ребенок, который занимался боксом вместо уроков. Да и сейчас не калечит "более биологически приспособленный" качок-сосед, который хочет его дом или машину.

В той же статье есть еще один забавный пример. Убивать москитов планируется с помощью других, ГМО-москитов. И одного такого москита - теоретически - может быть достаточно, чтобы истребить вообще всех сородичей. Возникает проблема: а что если один из ГМО-москитов окажется на воле еще до того, как мы решим, хотим ли их истребить? И приводится ответ: ГМО-москиты сейчас живут в Великобритании, а разносчики заразы - в Африке. Типа ГМО-паразиты просто не долетят, замерзнут.

Логично. Но вот меня больше беспокоит то, что кто-то из ученых в порыве спасти человечество просто отвезет несколько "боевых единиц" в Африку.

Не может быть? Потому что это ученые? Святые люди?

Еще как может. Ученые круто двигают науку вперед. Но в социальном плане их тяжело идеализировать. Такие же люди, как и все. Или даже временами менее социально приспособленные. Например, среди последователей авторитарных сект доля людей, имеющих ученую степень, сильно превышает аналогичную долю в среднем по популяции. И это более-менее нормально. Объясняется примерно тем, что люди, которые двигают науку, должны быть более открыты к нетривиальным идеям и новому опыту.

Такая "открытость к новому опыту" свойственна даже самым-самым. Ярых расистов типа нобелевских лауреатов Шокли и Уотсона еще поискать надо. Дайсон предлагает странам разоружаться в одностороннем порядке. Но самый крутой пример - это, наверное, Рассел (хоть он-то, по идее, не естественник и занимался исследованиями в том числе и этики). Рассел получил Нобелевку за то, что предложил трахаться всем со всеми, а детей считать общими. И с первой частью своей теории он отлично справился. А вот со второй частью подкачал. Он так и не смог принять детей своих жен и любовниц.

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

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

Tags:

Ну и новость!

Одна из крупнейших фармацевтических компаний мира Bayer хочет приобрести тоже немаленького производителя ГМО под названием Monsanto. Предложенная цена сделки - $62 ярда!

Я даже озадачился поначалу. Чего общего между лекарствами и жратвой?

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

Вот так вот... Рынки разные, а подход и технологии в основе - одни и те же.

Кто что думает?

Ссылка на новость: https://www.theguardian.com/business/2016/may/23/bayer-bids-62-billion-dollars-for-monsanto-agriculture-gm

Tags:

Диссонанс

Как в американском кино представлены бытовые сцены?

Человек заходит в магазин, берет, что нужно, платит и уходит.
Человек заходит в лифт, доезжает молча до нужного этажа и выходит.
Человек заходит в приемную, сразу говорит о деле и получает четкий ответ.

НО В РЕАЛЬНОСТИ ТАК НЕ БЫВАЕТ. И знаете, почему? Потому что в американском кино, по какай-то причине, никогда не показывают важного элемента их жизни - потрындеть.
Правильное кино должно быть таким.

Подходите к кассе - вас спрашивают "Как дела?", "А вы купили витаминки, чтобы компенсировать вред купленного шоколада?" и еще много чего.
Заходите в лифт - молитесь, чтобы там никого не было и никто больше не подсел. Иначе придется трындеть на абсолютно бестолковые темы.
С приемными история, конечно же, та же.

При этом, всем этим людям на вас глубоко посрать. Особенно это заметно по лифтам. Как только лифт останавливается, вы слышите "Ну, приятного дня". И попутчик убегает, даже если вы вышли там же, где и он.

У Аверченко есть забавный рассказ. Там человек, которому надоели бессмысленные вопросы, хватает за руку очередного господина, который бросил ему "Как дела?" и начинает обстоятельно, во всех подробностях рассказывать, как у него дела :)
Я пару раз провернул подобное с болтунами из лифта. Выглядело это примерно так. Лифт останавливается на первом этаже:
- Ну, приятного дня.
Но я иду туда же, куда идет попутчик, и продолжаю затеянный им разговор. Через несколько десятков метров человек начинает нервничать и крутить головой по сторонам. Пытается угадать, куда я иду, чтобы свернуть в другую сторону. Я не поддаюсь. Иду рядом с ним, "общаюсь" :)
Человек нервничает еще сильнее. Говорит, что идет к жене. Я поддакиваю. Типа, да, дело хорошее. Хорошо, что нам по пути.
В конце концов, он вынимает телефон и делает вид, что звонит кому-то (или действительно звонит, лишь бы спастись).

Шутки шутками... Но вопрос остается. Почему американское кино совсем другое? Почему там у них все только по делу? Никаких тебе "Как дела?", "Прекрасная погода" и пр. Ведь это супер-весомая часть их жизни.

Tags:



На днях приехал из Штатов, и в тот же день Штаты "приехали" ко мне.
В метро ко мне подсел мормонский миссионер из США.
Должен сказать, что мне крупно повезло. Сектантского сброда вокруг всегда хватало. Но настоящие профессионалы встречаются редко. Если вам встретился миссионер от мормонов или бахаистов, можете радостно плясать и наслаждаться "действом". Но нужен именно миссионер, а не просто последователь или лидер общины.
Почему это так круто? Да потому, что миссионеры от бахаистов и мормонов - это профессионалы экстра-класса. По крайней мере, мне попадались только такие (хотя и всего раза три-четыре). Наблюдать за их работой - настоящее удовольствие.
В них вложены большие деньги. А имидж и программу конкретно для этих двух сект создают супер-профессионалы. Я вот все мечтаю узнать, кто эти люди.
Но вернемся к миссионеру. Парень не старше 25. Одет с иголочки. Костюм черного цвета, т.е. уже не деловой. Но покрой такой, что костюм нельзя назвать ни банкетным, ни "а ля секьюрити". Даже не знаю, за счет чего достигается такой эффект. Белая рубашка, желтый галстук. Казалось бы, будь парень брюнетом, и всё насмарку. Какой тогда, в жопу, желтый галстук, учитывая остальную цветовую гамму? Но парень блондин, с очень аккуратной прической.
Мормоны - это имидж. Это крутой, щедро оплаченный имидж.
Речь. Речь - как у лучших дикторов с телевидения. Невероятно четко артикулированный английский. Никаких усилий для восприятия.
Миссионер использовал интересный элегантный заход для начала разговора. К сожалению, я "обломал" этот заход. Но я не специально. Совсем не хотел ему мешать.Только потом понял, что немного спутал парню карты. Однако его это вообще не смутило, он мгновенно подстроился.
Не буду рассказывать в деталях. Не хочу никого утомить.
Тем более, что пишу здесь об этом по другой причине. В тот момент мне подумалось: мормоны - мастера холодных продаж. Вроде бы, я не знаю ни одного сэйла, который мог бы делать холодные продажи (или все же знаю? Кто-нибудь умеет?). Имеются в виду не продажи пирожков или другого ширпотреба, а продажи нишевых продуктов. Например, B2B решений.
Такое ощущение, что для мормонов не важно, кто "закроет сделку". Это может быть другой мормон, который случайно попадется "клиенту" в будущем. Главное - создать и поддерживать правильный имидж.
У сэйлов, ведь, обычно как? Нужно самому закрывать сделку. Если работать на имидж, то бонус от продажи достанется другому продавцу.
Но! Если люди работают в общей системе и имеют общую профессиональную подготовку (как в наиболее прокачанных сектах), то стимул работать на общий имидж все-таки есть: пускай кто-то закроет мою сделку, но и я, в итоге, назакрываю "чужих" сделок.
Честно говоря, не знаю, так ли думают мормонские миссионеры. Но факт есть факт: никакого давления. Даже слово религия не произносится. Выглядит действительно как работа на имидж.
Для меня это пример идеальной холодной продажи. Именно продажи, а не рекламы. Современная реклама тоже работает на имидж, на формирование эмоциональной связи с брендом. Но реклама - это массовый продукт. А продажа - она под конкретного клиента.
Если у меня когда-нибудь будет свое сэйловое подразделение, отдам рекрутеру любые деньги, лишь бы нанял мне мормона. Вот только боюсь, что для найма такой нетривиальной "рыбы" рекрутер тоже должен быть мормоном, которого мне самому придется каким-то образом рекрутить :)
Первая декада мая - время, когда "либеральные" круги традиционно разражаются нытьем по поводу георгиевской ленточки, патриотизма, зомбирования и пр.
Меня это всегда немного удивляло. Потому что как бы ни буйствовала наша пропаганда, жаловаться нам пока особо не на что. Мы все равно остаемся одной из самых свободомыслящих стран. Я серьезно так считаю. "Демократия" развитых стран - это просто консенус, при котором все хотят одного и того же просто потому, что не знают, что может быть по-другому. Этот консенсус либо воспитывается сызмальства (как у детей), либо покупается (как у эмигрантов).
Однако мне тоже не очень нравятся наши всплески патриотизма. Не нравятся своей неуклюжестью. Просто набор спорадических плохо спланированных акций. Идеологическая прокачка в большинстве развитых стран (тех же Штатах, например) гораздо тоньше и эффективнее. Нам до них еще расти и расти.
Рассмотрим какой-нибудь пример... Вот на что у нас в магазинах деньги собирают? На больных детей. И все! А вот в "демократических" Штатах, помимо этого, собирают еще и на армию. Причем забавно посмотреть как именно собирают. Это не просто коробки с надписью "на армию". За каждой коробкой стоит небольшая история. Это как в литературном постмодернизме. Вы должны дать явлению какое-то имя и какую-то историю, чтобы оно стало для читателя реальностью. Поэтому на коробках написано "бритвенные принадлежности для солдат, воюющих за рубежом" или "на телефонные звонки домой для солдат, воюющих за рубежом".
И это гениально! Порядочный американский гражданин не станет думать "А какого хера наши солдаты делают за рубежом?" Он просто хочет, чтобы солдатик позвонил своей маме. У солдата сразу появляется человеческое лицо и он получает от гражданина доллар. А гражданин тем самым становится соучастником какого-нибудь очередного кошмара в Африке. А раз он соучастник, то и думать об этом кошмаре может уже только вполне определенным образом.
Мне нравится наблюдать за машиной пропаганды в развитых странах. Она отработана и выхолощена. А мы в этом направлении делаем только первые робкие шаги.
Патриотизм, пропаганда - это все плохо. Это не нужно миру. Но это игра, в которую на данном этапе необходимо играть и из которой нельзя выходить в одностороннем порядке.
Существует мнение, что вместо этого надо заниматься повышением уровня жизни. Уровень жизни повышать, конечно же, надо. Но почему вместо? Самые продвинутые в плане уровня жизни страны являются одновременно самыми прокачанными в идеологическом плане. США, Израиль, Великобритания. Нам есть, чему у них поучиться.

Tags: