tag:blogger.com,1999:blog-4104166652917248782024-03-14T10:03:11.818+04:00>рабочие заметкиМысли вслух: математика, программирование, и тому подобные извращенияRuslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.comBlogger186125tag:blogger.com,1999:blog-410416665291724878.post-90434647061293043672023-01-18T14:42:00.000+04:002023-01-18T14:42:35.392+04:00Еще один сценарий для waiting time paradoxЧестно говоря, повседневная работа программиста не требует особо много математических знаний. Поэтому особенно приятно, когда удается разглядеть что-нибудь интересное-математическое в повседневных задачах.
Сейчас по работе пишу небольшую странично-организованную структуру данных. Записи в ней случайного размера – т.е. не выровнены по границам страниц. Если очередная запись не влезает место, Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com0tag:blogger.com,1999:blog-410416665291724878.post-39804831127281678192022-05-11T16:14:00.001+04:002022-05-12T10:54:50.435+04:00Mystery of link imbalance #2: как можно починить MRU-пулЯ не удержался, и еще поэкспериментировал с симуляцией link imbalance из предыдущего поста. Там есть вопрос: как эту проблему исправить? Как сделать так, чтобы трафик не собирался на один-единственный канал?
Инженеры фейсбука порешали проблему тем, что сменили в пулах соединений стратегию MRU на LRU. LRU хорошо балансирует нагрузку – старается все соединения в пуле использовать в равной степени –Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com0tag:blogger.com,1999:blog-410416665291724878.post-16427931192072674592022-05-08T22:04:00.010+04:002022-05-14T11:10:48.443+04:00Mystery of link imbalance (metastable failure)Я люблю системы, где из простых элементов возникает какое-то нетривиальное поведение. Последний месяц я игрался с симуляцией одной такой системы из статьи "Metastable Failures in Distributed Systems"1
В статье целый ряд примеров мета-стабильных сбоев, но почти все они ретроспективно устроены довольно понятно. А зацепил меня пример от инженеров фейсбука: в их случае группы серверов в Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com2tag:blogger.com,1999:blog-410416665291724878.post-20185771489703971142022-01-30T20:51:00.005+04:002022-01-31T10:58:50.639+04:00Are You Sure You Want to Use MMAP in Your Database Management System?Кажется, что отображение файлов в память (mmap) удобно использовать для реализации баз данных, потому что можно не реализовывать пул страниц, а бесплатно использовать всю машинерию виртуальной памяти, уже существующую в ОС – работать с данными как будто они лежат в памяти, и ОС позаботится почти обо всех деталях.
В статье Are You Sure You Want to Use MMAP in Your Database Management System?1 Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com12tag:blogger.com,1999:blog-410416665291724878.post-47771635209650301532021-11-02T16:33:00.004+04:002021-11-02T16:38:34.447+04:00SiliFuzz: Fuzzing CPUs by proxyНедавно писал про статью инженеров гугла об аппаратных дефектах микропроцессоров (Cores that don't count) Там констатировалось, что такие дефекты есть, и их не так уж мало – но что с этим делать обсуждалось только гипотетически.
SiliFuzz: Fuzzing CPUs by proxy1 – продолжение этой темы. Авторы задались целью создать механизм непрерывного тестирования парка серверов на аппаратные ошибки. Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com0tag:blogger.com,1999:blog-410416665291724878.post-59692362982013317612021-10-10T19:49:00.002+04:002021-10-16T14:59:55.786+04:00Тестирование конфигурации: aftermath через 5 летПару лет назад я увлекался темой тестирования конфигурации – проверку конфигурации приложений оффлайн, перед выкладкой на рабочие сервера, с помощью юнит-тестов. Эту идею к нам в проект принес Андрей Сатарин, позже я применил ее более масштабно в другом проекте, и рассказывал об этом опыте на Гейзенбаге 2018.
Я давно уже не касался этой темы, потому что для меня в ней ничего принципиально нового Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com2tag:blogger.com,1999:blog-410416665291724878.post-40316454382764295642021-08-31T18:58:00.006+04:002021-11-01T13:35:26.070+04:00Ironies of automationВ 1983 году когнитивный психолог Лизанна Бэйнбридж опубликовала статью "Ironies of automation"1, о человеческом факторе в автоматизации. Статья – одна из наиболее цитируемых в области human-machine systems, о ней даже есть отдельная страница на википедии 2.
Основная идея статьи: автоматизация какой-либо системы – перевод ее с ручного управления на автопилот – часто не улучшает, а Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com2tag:blogger.com,1999:blog-410416665291724878.post-21142703596381534972021-08-15T13:30:00.003+04:002021-08-18T11:57:07.546+04:00Примеры зачастую полезнее объясненийЯ тут осознал, что сильно недооценивал роль примеров (examples) для технической документации. Документация очень сильно выигрывает от хороших примеров. Продуманные примеры могут быстро сориентировать читателя – ввести в курс дела, и облегчить понимание более детального описания. Более того, хорошо подобранные примеры способны сходу предоставить читателю (= пользователю) решение конкретной Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com0tag:blogger.com,1999:blog-410416665291724878.post-31098723774460105192021-08-04T19:50:00.004+04:002021-08-05T15:37:39.139+04:00Никто не читает документациюВ комментариях к передыдущему посту я спорил с этим утверждением, но потом порефлексировал над своим собственным опытом, и передумал: нет, и правда, почти никто.
Если аккуратнее: никто не любит читать документацию, никто не любит искать ответы на свои вопросы в документации.
Сколь бы понятную и логичную документацию я не написал – скорее всего, люди сами ее не отыщут и не прочитают. Скорее всего,Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com8tag:blogger.com,1999:blog-410416665291724878.post-76401418617576621182021-07-28T18:47:00.003+04:002021-07-28T18:59:12.898+04:00Умение понятно писать – один из самых недооцененных инженерных навыков Мне кажется, что умение понятно писать – ясно излагать мысли, создавать понятные описания и ясные инструкции, формулировать четкие вопросы и давать полезные ответы – один из самых недоразвитых сейчас навыков среди инженеров. Недоразвитых, и недооцененных.
Я сейчас не говорю о техническом писательстве как профессиональном навыке. Я говорю о более поверхностном – но и более универсальном – умении Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com4tag:blogger.com,1999:blog-410416665291724878.post-34589995369210096662021-07-20T12:26:00.009+04:002021-07-20T14:15:44.743+04:00 What makes a rule complex (for brain): mechanical sympathy applied to humansИнтересная статья 2020 года: "What makes a rule complex?". Что делает правило (алгоритм) сложным для выполнения человеческим мозгом?1
Мы часто оцениваем стоимость выполнения алгоритма: на какой-то абстрактной машине, или на реальном железе (конечном автомате, машине Тьюринга, Intel Core i7…). А что насчет человеческого мозга? Если смотреть на мозг как вычислительную машину, и Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com1tag:blogger.com,1999:blog-410416665291724878.post-21124747129996053422021-06-14T19:41:00.002+04:002021-06-14T19:52:39.913+04:00Cores that don't count: "тихие" производственные дефекты процессоров
TL;DR: Инженеры гугла утверждают, что примерно 0.1% современных процессоров содержат дефекты, ускользнувшие от техконтроля производителя, из-за чего некоторые инструкции на таких процессорах втихую дают неправильный результат. Вероятно, доля таких производственных дефектов будет расти. Вероятно, пора отвыкать думать о процессоре как об идеальном вычислителе, и искать способы создавать такие Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com10tag:blogger.com,1999:blog-410416665291724878.post-68521889488063162232021-05-24T12:17:00.001+04:002021-05-24T12:17:45.512+04:00Когда имеет смысл передавать IO в отдельный поток?
Допустим, у нас есть простая система, которая принимает запросы из сети, как-то их обрабатывает ("бизнес-логика"), и отправляет результат назад, в сеть. Мы заинтересованы в быстром отклике (=latency), а отправка – это IO, так что возникает идея ее снести в отдельный поток.
Но тогда придется передавать данные из основного потока в поток отправки – а межпоточная коммуникация это какие-тоRuslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com7tag:blogger.com,1999:blog-410416665291724878.post-44399777667599041172021-03-27T21:55:00.002+04:002022-10-23T20:43:10.639+04:00Рабочие заметки в помощь мозгуДавно уже хотел написать об этом, но только сейчас дошли руки:
Комрады! Пишите рабочие заметки – о чем вы думаете, над чем работаете – особенно если думаете о чем-то достаточно сложном. Это очень, очень, очень помогает думать! (И не только думать)
Вот уже несколько лет я практически все рабочие и личные задачи обсуждаю с большим файлом notes.txt (notes.org). Этот файл решает сразу несколько задачRuslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com9tag:blogger.com,1999:blog-410416665291724878.post-50793745381253886072020-08-09T14:59:00.008+04:002022-05-24T12:19:28.303+04:00Queueing theory for fun and practice #3: системы с потерями
Начальник отдела челобитных Апполинарий Матвеевич любит порядок, поэтому просители могут ожидать его внимания только смиренно сидя в приемной, а не толкаясь возле дверей присутственного места – оттуда их гоняет казак Семен.
Какова должна быть посадочная вместимость приемной, чтобы не более 1 просителя в день ушло не солоно хлебавши, если пропускная способность Апполинария Матвеевича не более Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com0tag:blogger.com,1999:blog-410416665291724878.post-49617300572565882522020-07-27T19:13:00.006+04:002021-07-20T12:36:46.705+04:00Queueing theory for fun and practice #2: нагрузка и время отклика
Во храме Божьей Матери Поклонской батюшка Иннокентий принимает исповедь у раба божьего обыкновенно минут за 10, а утешения жаждут около 5-и рабов божьих в час. Много ли стульев надобно поставить во храме, дабы исповеди ожидающие не толпились в праздности пред святым алтарем?
"Массовое окормление паствы: пособие для начинающих" (редакция 3-я, неизданная)
(Часть 2, начало: ТМО, square Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com0tag:blogger.com,1999:blog-410416665291724878.post-59036512135105899112020-07-24T16:35:00.003+04:002020-07-27T19:16:49.731+04:00Queueing theory for fun and practice (#1): square root staffing, Little's lawНа 28-ом этаже центра разработки крупного инвестиционного банка есть 8 туалетных кабинок для людей, идентифицирующих себя с мужским гендером. Работающий в центре высокофункциональный аутист Иннокентий подсчитал, что когда он заходит в туалет, в среднем 5 из 8 кабинок уже заняты.Сколько человеко-часов в день сотрудники офиса спускают в унитаз?"Теория массового обслуживания для сантехников&Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com0tag:blogger.com,1999:blog-410416665291724878.post-84652702348058508362020-07-19T23:13:00.001+04:002020-07-20T00:54:16.589+04:00Design of everyday things
Недавно прочитал "Дизайн привычных вещей" Дональда Нормана. Норман – computer scientist, и когнитивный психолог, известный и авторитетный специалист по эргономике. Он популяризовал сам термин "user experience", и был, вероятно, первым User Experience Architect – в Apple, что совершенно не удивляет.
На его книгу я наткнулся совершенно случайно, и залип с первых страниц. Книга Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com0tag:blogger.com,1999:blog-410416665291724878.post-88182078650155310242020-02-08T20:44:00.002+04:002020-02-08T20:44:29.541+04:00Charlie Gracie: Current state of JVM Escape Analysis and downstream optimizationsЯ уже какое-то время отошел от темы скаляризации и escape-анализа, но тут случайно наткнулся на любопытное видео с JFokus: Чарли Грасье из Микрософта рассказывает, как они для своих целей сделали прототип stack allocation для java 11. И даже не для Graal (где нынче чаще всего делают что-то новое), а для старого-доброго C2. Чарли начинает с краткого обзора escape-анализа и скаляризации в целом, Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com0tag:blogger.com,1999:blog-410416665291724878.post-72275976574322228142019-06-12T15:55:00.001+04:002020-06-29T13:59:26.432+04:00Waiting time paradox #4: aftermath(продолжение серии про парадокс времени ожидания)
…Мне кажется, это поразительный эффект: добавка sleep(5) в цикл обработки задач может уменьшать среднее время обработки. Даже после того, как я уже разобрался с этим эффектом на примере автобусной остановки, я все еще не мог поверить, что такой же эффект будет и в системе с очередью. И, несмотря на все формулы, разобранные примеры и симуляции, наRuslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com0tag:blogger.com,1999:blog-410416665291724878.post-41662715424963040732019-05-23T20:17:00.003+04:002020-06-29T13:59:13.819+04:00Waiting time paradox #3: сервера и их очереди
Если происходит что-то странное, значит, где-то рядом автобусная остановка
(Народная мудрость)
(Продолжение серии про парадокс времени ожидания. Персонажи выдуманы, цифры получены из симуляции, формулы выведены специально сделанными людьми. В общем, все не по-настоящему, не пытайтесь повторить)Представьте себе сервер, на который приходят заявки, и очередь, где заявки могут чуток обождать, покаRuslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com8tag:blogger.com,1999:blog-410416665291724878.post-69075857019127166702019-05-05T01:59:00.000+04:002020-06-29T13:59:03.231+04:00Waiting time paradox #2: почему успешный поиск в хэш-таблице дольше не успешного?…Продолжение предыдущей статьи про waiting time paradox: на этот раз разберемся, почему успешный поиск в хэш-таблице обычно дольше, чем не-успешныйВозьмем классическую хэш-таблицу с разрешением коллизий цепочками: K пар ключ-значение, B корзинок со связными списками для разрешения коллизий, вот это все. Мы ищем в этой таблице разные ключи (а зачем еще нужна хэш-таблица?). Для каких-то ключей в Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com5tag:blogger.com,1999:blog-410416665291724878.post-20443132549889557362019-04-30T11:37:00.001+04:002020-07-26T16:25:54.583+04:00Waiting time paradox #1: автобусы, очереди, и хэш-таблицы
Ничего не доводи до крайности: человек, желающий трапезовать слишком поздно, рискует трапезовать на другой день поутру.
(Козьма Прутков)
…парадокс времен ожидания, или почему автобуса приходится ждать дольше, чем казалось бы, почему успешный поиск в хэш-таблице скорее всего медленнее, чем неуспешный, и почему иногда среднее время обработки запроса можно уменьшить, если добавить в цикл Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com3tag:blogger.com,1999:blog-410416665291724878.post-86332767942783190242019-04-08T12:56:00.002+04:002021-07-13T16:29:00.521+04:00Теория разбитых окон в применении к разработкеВ социальной психологии есть такая "теория разбитых окон". Она утверждает, если упрощенно, что бардак который не исправляют — воспроизводит вокруг еще больший бардак. Точнее, утверждается, что человек смотрит на то, в каком состоянии находится его окружение, и интуитивно выводит отсюда неформальные социальные нормы (“как здесь можно себя вести”) — в противовес формальным социальным нормам ("как Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com10tag:blogger.com,1999:blog-410416665291724878.post-87205892225299367952018-08-20T01:20:00.000+04:002019-05-07T13:13:57.071+04:00Оценки квантилей распределений потока данныхПоследнюю неделю копаю алгоритмы оценок для квантилей выборок. Началось все с префетчинга: есть хранилище данных на диске, часть из них кэшируется в памяти, и надо бы успевать кэшировать предварительно с такой скоростью, чтобы клиентам не приходилось ожидать ввода-вывода. Доступ последовательный, так что все сводится к вопросу "сколько страниц загрузить в текущем раунде упреждающего чтения". И Ruslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.com0