Невероятное приключение Бэтмена в x86_64

G
Завершён
2
1
Вселенная:
DC
Фэндом:
Бэтмен, Бэтмен, Джокер (кроссовер)
Размер:
14 страниц, 4 035 слов, 5 частей
Описание:
Примечания:
Публикация на других ресурсах:
Уточнять у автора / переводчика
2 Нравится 2 Отзывы 0 В сборник

Рассказ Джокера о рисках преждевременной оптимизации

Настройки
—Ну, слушайте, ребятки, эту трагикомедию в кремниевых тонах. Был у нас Бэтмен. Да не тот, что уши мышиные нацепил и по крышам скачет, как угорелый. А Бэтмен Чёртов Добряк. Тот, который каждую инструкцию по ГОСТу выверяет, каждую переменную документирует, и прежде чем `rm -rf /` нажать, трижды перекрестится и бэкап на три разных континента сделает. —И вот, значит, решил наш Добряк, что его новенький, только что из коробки, 256-ядерный "Bat-Threadripper-Extreme-Edition-For-Justice" работает... ну, недостаточно эффективно для анализа паттернов чихания Пингвина в реальном времени. "Нужно больше контроля!" – провозгласил Бэтмен, поправляя идеально завязанный галстук-бабочку (да, он даже в Бэтпещере его носил, такой уж он Добряк). —"Альфред, – говорит, – принеси-ка мне NASM, компилятор Си с поддержкой `__asm__ volatile` и пару литров крепчайшего кофе без сахара. Будем оптимизировать ядро!" —Альфред, который повидал на своем веку всякое, только тяжело вздохнул: "Сэр, может, лучше сначала патент на новый бэтаранг дооформим? А то с этими вашими низкоуровневыми экспериментами..." "Ничего, Альфред, я всё рассчитал! – Бэтмен Чёртов Добряк уже сидел, окруженный распечатками Intel Manuals, томами Таненбаума и священным писанием Кнута. – Я просто хочу написать кастомный обработчик прерываний для более быстрого переключения контекста между слежкой за Джокером и анализом котировок акций Уэйн Энтерпрайзес. Чистая экономия наносекунд! Использование каждого такта с пользой!" —И вот он, наш герой, в режиме ядра, ring 0, все дела. Загрузил свой крошечный модуль, написанный на чистейшем, как слеза младенца, NASM. Никаких тебе C-шных обёрток, только суровый ассемблер, только хардкор! —"Так, – бормотал Бэтмен, – сейчас мы запишем в MSR (Model Specific Register) 0x199 (IA32_PERF_CTL) новое значение, чтобы динамически управлять частотой процессора. Максимальная производительность, когда Джокер что-то замышляет, и энергосбережение, когда он просто рисует смайлики на стенах Аркхема." Он тыкал пальцем в распечатку, сверяясь с битами. "Ага, бит 16 – 'Disable Turbo'. Хм, нет, турбо нам нужен! Бит 32... ой, стоп, регистр-то 64-битный, а я смотрю описание для старой архитектуры! Ну ничего, тут они совместимы... почти." И вот он пишет свою роковую инструкцию: mov ecx, 0x199 ; MSR-адрес mov eax, 0x0000FFFF ; Нижние 32 бита нового значения (тут он хотел что-то умное прописать) mov edx, 0x0000000F ; ВЕРХНИЕ 32 бита! И вот тут-то собака и порылась! Бэтмен Чёртов Добряк, в своей педантичности, решил, что если старшие биты не используются для его текущей задачи, их можно просто... ну, чем-нибудь "безопасным" заполнить. И он выбрал 0x0000000F. Звучит безобидно, правда? Как имя для котенка. Он нажал Enter. wrmsr В Бэтпещере на мгновение стало тихо. Даже летучие мыши перестали шуршать. А потом... Сначала появился тонкий, едва уловимый запах. Запах паленой пластмассы и разочарования. —"Сэр, мне кажется, или запахло горелым?" – Альфред принюхался. —"Ерунда, Альфред, это просто... э-э-э... новый освежитель воздуха 'Запах Победы над Преступностью'!" Но тут "Bat-Threadripper-Extreme-Edition-For-Justice" издал тихий, жалобный "пшик". Маленькое облачко сизого дыма лениво поднялось из вентиляционных отверстий системного блока, выполненного в форме головы Бэтмена (светящиеся глаза погасли первыми). На всех 27 мониторах разом появилось... ничего. Чёрный экран отчаяния. Бэтмен Чёртов Добряк замер. Его лицо, обычно выражающее лишь праведный гнев и глубокую задумчивость, на секунду исказилось чем-то похожим на детскую обиду. "Так... Кажется, значение `0x0000000F` в старшей части IA32_PERF_CTL на этой конкретной ревизии процессора... активировало секретный режим 'Самоуничтожение при несанкционированном доступе к сверхсекретным настройкам напряжения ядра номер 128', о котором я забыл прочитать в приложении Q, пункт 7, подпункт "гамма", мелким шрифтом," – пробормотал он, снимая галстук-бабочку, который вдруг стал ему жать. Альфред подошёл, взял дымящийся системный блок двумя пальцами и брезгливо отнёс его к мусорному баку с логотипом Лиги Справедливости. —"Сэр, может, в следующий раз просто купите новый процессор помощнее? И оставите настройки по умолчанию? А для анализа чихания Пингвина воспользуемся старым добрым Python. Он, знаете ли, реже вызывает экзистенциальный кризис у аппаратного обеспечения." Бэтмен Чёртов Добряк молча кивнул. Урок был усвоен. Даже самые благие намерения, помноженные на прямой доступ к MSR и недосып, могут привести к катастрофе эпического масштаба. И к незапланированным тратам на новый флагманский процессор. —"И, Альфред, – добавил он чуть позже, уже заказывая новый CPU (и на всякий случай, небольшой огнетушитель для серверной), – в следующий раз, когда я скажу 'я всё рассчитал', пожалуйста, просто ударь меня по голове ближайшим бэтарангом. Мягким, тренировочным, разумеется." Так Бэтмен Чёртов Добряк узнал, что иногда лучший код – это тот, который ты *не* написал. Особенно в режиме ядра. И особенно, если ты немного перепутал биты. История умалчивает, поймал ли он Пингвина в тот день, но его банковский счет точно стал немного легче.
2 Нравится 2 Отзывы 0 В сборник
Отзывы (1)