Архитектура PlayStation 3

Практический анализ от Rodrigo Copetti

Переведено несколькими авторами

Классическая версия - Обновлено: 2 октября 2024 г.

Доступные языки: 🇬🇧 - English, 🇧🇷 - Português (Brasil), 🇷🇺 - Русский, 👋 - Добавить перевод


Об этой версии

"Классическое" издание является альтернативной версией "современного" аналога. Для работы не требуется Javascript, современный CSS или сложный HTML, что делает его идеальным для читателей, использующих устройства без поддержки этих технологий или устаревшие интернет-браузеры. С другой стороны, пользователи электронных книг теперь могут воспользоваться цифровой версией книги.

Эта версия идентично по содержанию. Однако интерактивные виджеты были упрощены для работы с чистым HTML, но они будут предлагать ссылку на оригинальную статью, если читатель захочет попробовать "полную версию".

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


Содержание

  1. Опорные изображения
  2. Краткое введение
    1. О длине статьи
  3. Процессор
    1. Введение
      1. Положение дел
      2. Новые философии дизайна
      3. Новая эра многоядерности
    2. Взгляд на Cell
      1. Общая структура
      2. Как организовано это исследование
    3. Cell изнутри: Сердце
    4. Cell изнутри: Лидер
      1. Состав PPE
      2. PowerPC Processing Unit
        1. Знакомая архитектура
        2. Отличительные особенности
      3. Строительные блоки PPU
        1. Инструкции
        2. Управление памятью
        3. Арифметика
      4. Суммируя PPE
    5. Cell снаружи: Основная память
    6. Cell изнутри: Помощники
      1. Состав SPE
        1. Memory Flow Controller
        2. Synergistic Processor Unit
      2. Архитектура SPU
        1. Нечётный конвейер
        2. Чётный конвейер
    7. Cell изнутри: Стили программирования
      1. Подходы, ориентированные вокруг PPE
      2. Подходы, ориентированные вокруг SPE
    8. Вывод
  4. Графика
    1. Общие сведения
    2. Организация контента
    3. Построение кадра
      1. Команды
      2. Вершинный шейдер
      3. Растеризация
      4. Пиксельный шейдер
      5. Пиксельные операции
    4. Единый видеовыход
    5. 3D-эффект в “реальном времени”
  5. Аудио
  6. Ввод/вывод и обратная совместимость
    1. Внешние интерфейсы
      1. Беспроводное оборудование
    2. Внутренние интерфейсы
      1. Обратная совместимость
      2. Странная смена курса
      3. Поздняя совместимость
  7. Операционная система
    1. Привилегированная безопасность Cell
    2. Общие сведения
    3. Иерархия безопасности ОС
    4. Носители информации
      1. Cell BootROM
      2. Флэш-память NAND/NOR
      3. Жесткий диск
      4. eMMC
    5. Процесс загрузки
      1. Измененный процесс загрузки
    6. Визуальная оболочка
      1. Одолжи мне свою PS3
    7. Несколько ОС
    8. Обновляемость
  8. Игры
    1. Экосистема разработки ПО
      1. Разработка без лицензии
      2. Аутсорсинг разработки
    2. Носители информации
      1. Диски Blu-ray
      2. Онлайн-магазин
    3. Сетевой сервис
  9. Борьба с пиратством и хоумбрю
    1. Обзор фундамента безопасности
    2. Поражение
      1. Обход гипервизора
      2. PSJailbreak
      3. Достойны упоминания
      4. Падение шифрования
    3. Эра кастомных прошивок (CFW)
      1. Крепкий ответ от Sony
      2. Возрождение хоумбрю
      3. Частичный ответ Sony
  10. Вот и всё, ребята
  11. Copyright and permissions
  12. Источники / Продолжить чтение
  13. Помощь проекту

Опорные изображения

Модель

Image
Оригинальная PlayStation 3 или 'PS3'.
Выпущена 11/11/2006 в Японии, 17/11/2006 в Америке и 23/03/2007 в Европе
Image
PS3 серии 2000/3000 (модель "Slim").
Выпущена 01/09/2009 в Европе и Америке, и 03/09/2009 в Японии
Image
PS3 серии 4000 (модель "Super Slim").
Выпущена в 09/2012 по всему миру

Материнская плата

Image
Материнская плата
Ревизия COK-001 (самая первая), взятая из моей модели CECHA12.
Остальные 128 МБ флэш-памяти NAND и разъемы PATA для привода Blu-ray, Wi-Fi/BT дочерняя плата, передняя панель и карт-ридер установлены сзади
Image
Материнская плата с помеченными важными частями

Диаграмма

Image
Диаграмма основной архитектуры

Краткое введение

В 2006 году Sony выпустила долгожданную игровую консоль “следующего поколения”. Это блестящая (хоть и тяжелая) машина, чья базовая аппаратная архитектура развивает идеи Emotion Engine из PS2, которые фокусируются на векторных вычислениях для достижения высокой производительности, даже ценой сложности. И в то же время, их новый “суперпроцессор”, Cell Broadband Engine, был разработан в эпоху кризиса инноваций. Он должен будет идти в ногу с развитием тенденций в области мультимедиа.

В этой статье подробно рассматривается совместный проект Sony, IBM, Toshiba и Nvidia, а также его реализация и влияние на индустрию.

О длине статьи

Боюсь, что эта статья не будет из тех, которые я обычно пишу про другие консоли в данной серии статей. Если вы хотите узнать всё про PlayStation 3, то вас ждёт целое приключение! Стоит отметить, что эта работа охватывает ~6 лет исследований и разработок, проведенных бесчисленным количеством инженеров. Поэтому я не ожидаю, что вы сможете переварить всё это за один раз. Пожалуйста, не торопитесь при чтении (и делаете перерывы при необходимости). Если в конце вам захочется ещё, то проходите в раздел “Источники”!


Процессор

Время познакомится с самой узнаваемой и инновационной частью данной консоли.

Введение

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

Положение дел

Image
Процессор PS1 (1994). Создан LSI и Sony на основе технологии MIPS.
Image
Emotion Engine, процессор PS2 (2001). Создан Toshiba, опять же, на основе технологии MIPS.

Прошло почти десять лет после выхода первой PlayStation на процессоре MIPS, и мы находимся в начале нулевых. В это время дела у SGI/MIPS шли не очень хорошо. Nintendo недавно отказалась от них в пользу бюджетного ядра PowerPC от IBM, в то время как Microsoft, будучи новичком на этом рынке, выбрала Intel и их доминирующую x86.

Sony же брала существующие бюджетные решения (дешевые ядра MIPS) и модифицировала их так, чтобы получить приемлемую производительность в 3D при сниженных затратах. В этот процесс включались другие компании, будь то LSI (для процессора PS1) или Toshiba (для Emotion Engine). Эта методология использовалась до 2004 года с выпуском PlayStation Portable. Итак, какой новый MIPS-агрегат они собирались создать для PlayStation 3?

Оказывается, что работа над PlayStation 3 началась до разработки PlayStation Portable [1]. В 2000 году, через несколько месяцев после выхода PS2, Sony сформировала альянс совместно с IBM и Toshiba под названием “STI”. Единственная цель альянса - создать чип, который мог бы работать в следующем поколении суперкомпьютеров [2]. Если это звучит недостаточно экстравагантно, то будущий чип также будет использоваться в преемнике PS2. В конце концов, в 2004 году IBM представила процессор Cell Broadband Engine (также известный как “Cell BE” или просто “Cell”) [3].

Новые философии дизайна

Image
Чип Cell Broadband Engine. К сожалению, слишком блестящий для моей камеры.

Чтобы понять радикальные решения в Cell, мы должны описать проблемы, которые были актуальны в данную эпоху (конец 90-х - начало 00-х).

С каждым годом потребители требуют всё больших скоростей. Так было всегда. Тем не менее, последний подход, призванный это решить (конвейер данных и увеличение частот), теперь не справляется с масштабированием. Архитектура Netburst от Intel не смогла развиваться дальше, а обещанный преемник так и не появился. Аналогично, IBM в своем PowerPC 970/G5 не смогла предоставить ни обещанные 3 ГГц, ни низкое энергопотребление (а значит, Apple не может поставлять ноутбуки с процессором последнего поколения) [4]. В общем, похоже, что инженеры столкнулись с новым кризисом масштабируемости.

Поэтому, фокус сместился на распределенные вычисления [5]. Другими словами, зачем увеличивать производительность одной машины, если вместо этого можно взять несколько машин поменьше и распределять нагрузку между ними? Напротив, этот подход не является чем-то новым, поскольку все консоли, проанализированные на этом веб-сайте, содержат более одного процессора. Однако именно разработка “единого процессора с несколькими ядрами” открывает новые возможности для проектирования процессоров (которые могут использоваться не только в консолях).

Следовательно, Cell является частью этой новой волны исследований и разработок. Новый процессор сочетает в себе многоядерный дизайн с особым акцентом на векторные вычисления. Если помните, векторные вычисления являются оптимальными для симуляций (физика, освещение и подобное). Эту задачу ранее выполняли Geometry Transformation Engine или два Vector Unit. Но вы также увидите, почему дизайн Cell является большим шагом вперед по сравнению с двумя предыдущими решениями.

Новая эра многоядерности

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

Если задуматься, то и процессор PS1, и Emotion Engine уже были многоядерными. Тогда почему же вокруг Cell было так много шума? Ну, два предыдущих чипа состояли из одного универсального ядра и нескольких ядер для конкретных задач (аудио-процессор, декомпрессия изображений). Эти ядра сочетали различные архитектуры, в которых универсальное ядро управляло другими ядрами.

Этот тип архитектуры процессора относят к Гетерогенным вычислениям, и он являлся де-факто выбором для создания машин, которые предназначены для выполнения конкретных задач (в данном случае, игр). Аналог в виде Гомогенных вычислений более преобладает на рынке ПК, где процессоры должны выполнять более широкий круг задач (и все они имеют одинаковый приоритет). Поэтому, в последнем типе может быть несколько ядер одного и того же типа.

Возвращаясь назад к теме, Cell сочетает обе модели: в этом процессоре одно универсальное “главное” ядро и 8 векторных “вспомогательных” ядер. Эти векторные ядра могут принимать различные роли, и при этом они выполняют те предыдущие задачи, которые первоначально решались с помощью гетерогенных конструкций. Поскольку ядра Cell не ограничиваются одним типом задач, то они обеспечивают гибкость гомогенных компьютеров. В целом, данный дизайн не идеален и содержит некоторые компромиссы, но на протяжении этой статьи вы увидите различные проблемы, которые попытается решить Cell, и как ему это удалось.

Взгляд на Cell

Рассказав всю эту историю и теорию, думаю, что мы готовы представить нашего главного героя этого раздела. Знакомьтесь, Cell:

Image
Cell Broadband Engine (вариант для PS3).
Создан IBM для суперкомпьютеров и научных исследований. Зачеркнутый ‘SPE’ означает, что он отключен (не используется). Другой ‘SPE’ слева зарезервирован для операционной системы.

… и к концу этого раздела вы будете знать, что делает каждый компонент.

Общая структура

Процессор Cell работает на частоте мощных 3,2 ГГц и состоит из множества компонентов. Итак, для целей этого анализа этот процессор можно разделить на три основные части [6]:

Эта информация будет более подробно позже рассмотрена в статье, поэтому вам пока не нужно запоминать эти имена. Основная цель этого раздела - дать читателю мысленное представление о природе Cell и ознакомить со всеми компонентами, которые мы будем обсуждать в подходящее время.

Как организовано это исследование

Видя предыдущую структуру, мне пришлось организовать её так, чтобы вам не надоело от большого количества информации. Поэтому мы собираемся проанализировать Cell путем изучения каждого его компонента в следующем порядке:

  1. Шина Element Interconnect Bus (EIB), которая соединяет все компоненты.
  2. PowerPC Processing Element (PPE) и его основной элемент PowerPC Processing Unit (PPU).
  3. Какая память общего назначения используется в этой консоли.
  4. Блоки Synergistic Processing Element (SPE) и их основной элемент Synergistic Processing Unit (SPU).
  5. Модель программирования, разработанная для эффективного программирования под Cell.

Учитывая это, давайте приступим к настоящему анализу.

Cell изнутри: Сердце

С момента своего анонса Cell упоминается как сеть на кристалле (Network-on-Chip, NoC) [7] вместо стандартного определения “системы на кристалле” (System-On-Chip, SoC). Это связанно с неортодоксальной шиной данных чипа Element Interconnect Bus (EIB). Мы уже видели насколько требовательными могут быть компоненты процессора, и насколько подвержены система узким местам. Чтобы решить эту проблему в одиннадцатый раз, IBM разработала новый дизайн … и задокументировала его, используя термины, аналогичные дорожному движению.

Image
Упрощенная схема шины Element Interconnect Bus (EIB).
Каждая стрелка между “рампами” (узлами) представляет собой две однонаправленные шины, поэтому каждый узел подключен к следующему по четырем каналам.

Шина EIB состоит из 20-ти узлов (рампы), каждый из которых соединяет один компонент Cell. Рампы соединены между собой с помощью четырех шин, две из которых работают по часовой стрелке, а другие две - против часовой. Каждая шина (или канал) имеет ширину в 128 бит. При этом вместо того, чтобы повторять топологию с одной шиной (как это делали в Emotion Engine и его предшественник), рампы соединены между собой по топологии “маркерного кольца” (token ring). В ней пакеты данных должны пройти через все соседние узлы, пока они не достигнут места назначения (прямого пути нет). Учитывая, что шина EIB предоставляет четыре канала связи, то для пакетов существуют четыре возможных маршрута (кольца).

Теперь вы можете подумать, в чем смысл маркерного кольца, если данные могут проходить более длинные пути (по сравнению с одной прямой шиной)? Ну, единственная шина очень подвержена перегрузке. Поэтому инженеры шины EIB решили использовать эту топологию, чтобы обеспечить большой объем параллельного трафика (читайте дальше, если хотите узнать, как помогло данное кольцо).

Данные передаются в виде 128-битных пакетов [8]. Каждое кольцо может осуществлять до трех передач одновременно при условии, что пакеты не пересекаются. Шина EIB работает с использованием командных кредитов. Другими словами, всякий раз, когда компоненту нужно начать передачу, он отправляет запрос Data Arbirter, который управляет трафиком внутри колец. После утверждения запроса пакеты вводятся в кольцо и получают “маркер”, который арбитр данных использует в качестве метаданных для контроля передачи. Кроме того, некоторые компоненты имеют более высокий приоритет, чем другие, например, компонент Memory Interface Controller (MIC), в котором находится ОЗУ. Наконец, арбитр данных никогда не будет размещать пакеты в кольцах, путь которых длиннее половины кольца.

Каждая рампа участвует в передаче. Она читает адрес назначения пакета, чтобы знать, отправлять ли данные в свой компонент или передать их следующей рампе. Во время каждого тактового цикла рампы могут одновременно принимать и отправлять пакеты размером в 128 бит (16 байт). Итак, если учитывать наличие четырех каналов и частоту шины EIB в 1.6 ГГц (половина частоты Cell), то теоретическая максимальная скорость передачи составляет 16 байт х 2 передачи/такт х 4 кольца х 1.6 ГГц = 204.8 ГБ/с. Конечно, это значение слишком оптимистичное, и есть много других внешних факторов (путь отправления или назначения, состояние шины), определяющих производительность. В любом случае во многих исследовательских работах, выполненных IBM и другими авторами, были получены более реалистичные скорости с использованием практических экспериментов [9].

Теперь, когда вы увидели, как каждый компонент Cell связан между собой, пришло время рассмотреть первый компонент этого чипа…

Cell изнутри: Лидер

Здесь мы посмотрим на “главную часть” Cell. Это часть чипа, которая отвечает за управление остальной частью. Имя компонента - PowerPC Processing Element (PPE), и и его можно рассматривать как MIPS R5900 в Emotion Engine.

Состав PPE

Помните, как я ранее разделил Cell на разные области? То же самое можно сделать с PPE. IBM использует термин ‘элемент’ для описания независимой машины [10], но, оказавшись внутри неё, использует термин ‘юнит’, чтобы отделить основную схему от интерфейсов, которые взаимодействуют с остальной частью Cell.

Image
Упрощенная схема PowerPC Processing Element (PPE).

Исходя из вышесказанного, PowerPC Processing Element неожиданно состоит из двух частей:

Как вы можете видеть, архитектура PPE (и остального Cell) довольно модульная, что соответствует принципам архитектуры RISC. Вы скоро увидите, что модульность применяется даже внутри PPU.

PowerPC Processing Unit

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

Знакомая архитектура

Начнем с того, что PPU не создан с нуля, а cтроится на основе существующей архитектуры PowerPC. Однако, в отличие от предыдущих итераций, когда IBM брала существующий процессор и немного обновляла его для соответствия новым требованиям, PPE не является преемником какого-либо предыдущего дизайна процессора. Вместо этого IBM создала новый процессор, который реализует спецификацию PowerPC версии 2.02 (это последняя спецификация PowerPC перед ребрендингом в ‘Power ISA’). Суммируя вышесказанное, можно сказать, что с этого времени вы не найдете такой же дизайн PPU ни в одном существующем чипе того времени. Но он имеет те же машинные коды, что и в других чипах PowerPC.

Тем не менее, почему IBM выбрала архитектуру PowerPC для разработки высокопроизводительного чипа? Всё просто, PowerPC - это зрелая платформа [11], которая в течение 10 лет тестировалась на пользователях Macintosh и постоянно обновлялась. Она соответствует всем требованиям Sony, и, если возникнет такая необходимость, её можно адаптировать к различным средам. Последнее, но тем не менее важное: использование хорошо известной архитектуры является благоприятным для существующих компиляторов и кодовых баз, что для новой консоли - большое стартовое преимущество.

Стоит отметить, что IBM была одним из авторов первых чипов PowerPC совместно с Motorola и Apple (вспомните об альянсе AIM). Как бы то ни было, к началу 00-х годов так называемые участники альянса уже работали отдельно, где Motorola/Freescale разрабатывали отличную от IBM серию PowerPC.

Отличительные особенности

PPU имеет общую историю с PowerPC 970 (Apple называла его G5). Оба являются потомками POWER4, предшественника PowerPC, который в основном использовался в рабочих станциях и суперкомпьютерах. Это станет более очевидным, когда я скоро покажу вам модульные исполнительные устройства. Это радикальное изменение по сравнению с процессором линейки 750 в Gamecube, который имел значительный вклад от Motorola, но затем был слегка изменен IBM.

Возвращаясь к теме, PPU - полноценный 64-битный процессор. Это означает, что:

Наконец, PPU реализует набор инструкций PowerPC версии 2.02, включая дополнительные опкоды для вычисления квадратного корня с плавающей точкой [12]. Ядро также было расширено группой SIMD-инструкций, называемых Vector/SIMD Multimedia Extension (VMX). С другой стороны, в первоначальной спецификации нет некоторых элементов, в частности, режима little-endian (Cell работает только в big-endian) и нескольких опкодов.

Строительные блоки PPU

Применяя ‘микроскопический’ вид к PPU, мы можем видеть, что это устройство состоит из различных блоков или подблоков, выполняющих независимые операции (загрузка значений из памяти, выполнение арифметики и так далее). Возможности PPU определяются тем, что и как может делать каждый блок:

Инструкции
Image
Упрощенная схема блока команд (IU).

Первый блок называется блоком команд (Instruction Unit, IU). Как следует из названия, он берёт инструкции из кэша L2 и даёт сигналы другим устройствам для выполнения запрошенной операции. Как и в современниках i686, часть набора инструкций интерпретируется при помощи микрокода (для этого IU включает в себя небольшой ROM). Наконец, в IU также размещен кэш L1 размером в 32 КБ для инструкций.

Обработка инструкции осуществляется с помощью 12-уровневого конвейера, хотя на практике общее количество уровней будет сильно различаться в зависимости от типа инструкции. Например, модуль предсказания переходов может пропустить большую часть конвейера. Если мы объединим IU с соседними блоками, то финальное число уровней часто приближается к 24 (да, это большое число, но помните, что Cell работает на частоте 3.2 ГГц).

Теперь самое интересное: IU имеет “двойную обработку” (dual-issue): в некоторых случаях IU может обработать до двух инструкций за такт, что значительно повышает пропускную способность. На практике, однако, существует множество условий для того, чтобы это работало, поэтому программисты или компиляторы отвечают за оптимизацию своих процедур, чтобы их последовательность инструкций могла использовать преимущества этой функции. Кстати, двойная обработка реализована и в предыдущих процессорах, и этот термин может различаться между производителями. Поэтому я использовал определение от IBM.

В довершение всего, IU также многопоточный, то есть блок может одновременно выполнять две разные последовательности инструкций (называемых “потоками”). За кулисами, IU просто чередуется между двумя потоками за такт, создавая иллюзию многопоточности. Эта техника исторически известна как одновременная многопоточность (simultaneous multi-threading, SMT) или, как её позже назвала Intel, гиперпоточность (hyper-threading). Тем не менее, многопоточность от IBM смягчает нежелательные эффекты, такие как остановка конвейера, поскольку процессор больше не будет блокироваться всякий раз, когда одна инструкция блокирует поток. Чтобы достичь многопоточности, инженеры IBM продублировали внутренние ресурсы IU, включая регистры общего назначения (ранее я говорил, что регистров 32, но это для одного потока. В реальности их всего 64!). Однако ресурсы, которые не относятся спецификации PowerPC (например, кэш L1 или L2, интерфейсы), по-прежнему общие для потоков. Таким образом, ресурсы - однопоточные.

В общем, объединяя два потока с двойной обработкой, IU способен выполнять до четырех инструкций за такт. Несмотря на то, что это “наилучший сценарий”, он все ещё предоставляет возможности оптимизации, которые пользователи в конечном итоге заметят в частоте кадров игры!

Управление памятью
Image
Упрощенная диаграмма блока загрузки-сохранения (Load-Store Unit, LSU) и его соседей.

Следующие блоки дают PPU возможность выполнения инструкций загрузки/сохранения и осуществлять управление памятью.

Начнем с того, что блок загрузки/сохранения (Load-Store Unit, LSU) выполняет опкоды “load” и “store”, используя 32 КБ кэша данных L1. Как следствие, этот блок имеет прямой доступ к памяти и регистрам.

Кроме того, LSU содержит Memory Management Unit (MMU), который встречается повсеместно в современном оборудовании. Проще говоря, MMU обрабатывает адресацию памяти, используя виртуальную карту адресов в сочетании с защитой памяти. Для улучшения последней MMU, в частности, оснащен сегментным блоком, который группирует адреса памяти, используя диапазоны под названием “сегменты”. Также, что предотвратить снижение производительности в процессе работы, были включены Translation Lookaside Buffer (TLB) (кэширует преобразованные адреса) и Segment Lookaside Buffer (SLB) (кэширует сегменты).

Арифметика
Image
Упрощенная диаграмма блоков, выполняющих арифметику.

Осталось объяснить всего два блока PPU, которые вычисляют математику, необходимую для любой игры.

Первый блок - традиционное АЛУ Fixed-Point Integer Unit (FXU). Оно осуществляет целочисленные вычисления: деление, умножение, циклический сдвиг (схоже с обычным сдвигом, только уходящие биты возвращаются с конца) и нахождение ненулевого бита (например, оно полезно для нормализации координат вершины). Его конвейер длиной в 11 уровней.

Если вы посмотрите на диаграмму, вы увидите, что FXU, LSU и MMU объединены в один блок под названием исполнительный блок (Execution Unit, XU). Это потому, что они имеют один и тот же регистровый файл.

Второй блок куда более интересный. Vector/Scalar Unit (VSU) выполняет операции с числами с плавающей точкой и векторами. Он состоит из 64-битного блока FPU (на основе стандарта IEEE 754) и блока Vector/SIMD Multimedia Extension (VXU), который исполняет набор SIMD-инструкций под названием VMX. Блок VXU работает со 128-битными векторами, состоящими от шестнадцати 8-битных значений до четырёх 32-битных [13]. Возможно, вы уже слышали об расширении “VMX” раньше. Оно также называется “AltiVec” у Motorola или “Velocity Engine” у Apple (да здравствуют торговые марки). И наоборот, конкурентные возможности SIMD в Cell можно найти и в другом процессоре, так что пока не расслабляйтесь!

Суммируя PPE

Вы увидели как работает и из чего сделан PPE, но что это всё значит для разработчиков?

В конце концов, PowerPC Processing Element - единственный процессор общего назначения на чипе. Но есть одно но: он не должен работать в одиночку. Помните ту широкую главную шину (EIB)? IBM разработала PPE так, чтобы инженеры могли совмещать его с другими процессорами для ускорения конкретных задач (т.е. высокопроизводительные вычисления, 3D-графику, научные симуляции, работа с сетями, обработка видео). Так как эта статья о PlayStation 3, то вы увидите, что остальная часть Cell отвечает за обработку графики и физики, поэтому в дальнейшем мы будем описывать эту часть.

Cell снаружи: Основная память

Давайте немного уйдем в сторону от Cell. Не важно, насколько хорош PPE, если у нас нет подходящего рабочего пространства (памяти) для его работы.

Поэтому Sony добавила ОЗУ в виде XDR DRAM памяти объемом 256 МБ… Но опять-таки, что это всё значит? Чтобы ответить на это, нам нужно взглянуть на то, как работают блоки памяти и как они подключаются к Cell.

Image
Cell рядом с четырьмя чипами XDR DRAM на 64 МБ.

Прежде всего, тип установленной памяти называется Extreme Data Rate (XDR). Вы могли увидеть в XDR DRAM наследника неудачного RDRAM, используемого в Nintendo 64 и PlayStation 2. Но пока не спешите с выводами!

Rambus, как и любая другая компания, совершенствует свои изобретения. Их третья версия (XDR) теперь передает за такт 8 бит (это в 4 раза больше, чем у DDR DRAM) [14]. Задержка больше не создает проблем. Если мы посмотрим на данные одного из производителей, то задержка XDR составляет от 28 до 36 нс [15], что почти в 10 раз быстрее, чем первое поколение чипов RDRAM.

Первая ревизия материнской платы PlayStation 3 содержит 4 чипа по 64 МБ, которые объединены в пары. XDR подключен к Cell, используя две 32-битных шины, по одной на каждую пару. Поэтому когда PPU записывает слово (64-битные данные), оно разделяется между двумя чипами XDR. Эти чипы работают на частоте 400 МГц [16].

Image
Диаграмма архитектуры памяти Cell.

Cell соединяется с чипами XDR при помощи Memory Interface Controller (MIC), другой компонент внутри Cell (как и PPE). Дополнительно, MIC буферизирует передачи памяти для улучшения пропускной способности, но имеет одно ограничение: выравнивание больших байтов. По сути, при передаче наименьший размер данных MIC составляет 128 байт, что хорошо работает для последовательного чтения и записи. Но если данные меньше, чем 128 байт, или требуется чередование между записью и чтением, то возникают проблемы с производительностью.

Тем не менее, является ли MIC узким местом или нет? Вы должны взглянуть на это в перспективе того, что оптимизация пропускной способности имеет решающее значение в системах, которые зависят от данных. В прошлом мы видели такие решения, как write-gather pipe или write back buffer. Поэтому MIC - просто новое предложение по решению повторяющейся проблемы. Как бы то ни было, Sony утверждает, что скорость передачи данных составляет 25.6 ГБ/с. Однако на практике существует слишком много факторов, которые будут определять конечную скорость (вы видели, насколько сложно перемещать данные из одного места в другое в Cell).

Это все, что касается ОЗУ, но есть ещё больше памяти в другом месте: жесткий диск. PS3 позволяет играм использовать 2 ГБ на внутреннем жестком диске в качестве рабочей области (аналогично тому, что было в первом Xbox) [17].

Cell изнутри: Помощники

Мы уже видели ранее, что Sony всегда добавляет к процессору общего назначения (в данном случае, PPE) дополнительные ускорители для достижения приемлемой производительности в играх (блоки VPU и IPU в случае с PS2; или GTE и MDEC с PS1). Это обычная практика для аппаратного обеспечения игровых консолей, поскольку универсальный процессор может выполнять широкий спектр задач, при этом ни на чем не специализируясь. Консолям требуется лишь некоторый набор навыков (например, физика, графика и аудио), поэтому сопроцессоры позволяют им справляться с этими задачами.

[PPE] - это версия, которую урезали для снижения энергопотребления. Поэтому у неё нет тех лошадиных сил, как, например, у Pentium 4 (…) Если взять код, который работает сейчас на Intel и AMD, независимо от мощности, и перекомпилировать его для Cell, то он будет работать - ну, может вам придется изменить одну, две библиотеки. Но полученный код будет примерно на 50-60% медленнее, и люди будут кричать: “Боже мой! Этот процессор Cell ужасен!” Но это потому, что вы используете только одну его часть [18].

Доктор Майкл Перроне, менеджер Отдела по разработке Cell, Исследовательский Центр IBM TJ Watson

Ускорители, входящие в состав Cell на PS3, это элементы Synergistic Processor Element (SPE). В Cell их восемь, однако один элемент отключается во время запуска консоли. Это связано с тем, что производство микросхем требует исключительной точности (изначально Cell создавался при техпроцессе в 90 нм), а оборудование не является совершенным. Поэтому вместо того, чтобы выбрасывать схемы, которые оказались бракованными менее чем на 10%, Cell включает один запасной SPE. Таким образом, если один из них выходит из строя, весь чип не отбраковывается. Теперь этот запасной SPE всегда будет отключен, независимо от того, хорошо ли это или нет (у Sony не может быть двух PS3 с разными версиями процессора на рынке).

Состав SPE

Двигаясь дальше, Synergistic Processor Element (SPE) - крошечный независимый компьютер внутри Cell, управляемый PPE. Помните, что я рассказывал ранее о принятии элементов из гомогенных вычислений? Что ж, эти сопроцессоры в некоторой степени универсальны и не ограничиваются одним приложением, поэтому они смогут помогать в решении широкого круга задач, то есть до тех пор, пока разработчики смогут их правильно запрограммировать.

Image
Упрощенная диаграмма Synergistic Processor Element (SPE), в Cell этих элементов 8 (один отключен).

Как и в случае с PPE, мы рассмотрим SPE поподробнее. Это будет кратко, поэтому, если в конце вы захотите узнать больше о SPE, ознакомьтесь с разделом “Источники” в конце статьи. Итак, давайте начнем…

SPE - это процессор, который похож структурно на PPE, состоит из 2 частей:

Memory Flow Controller

Memory Flow Controller (MFC) - это блок, который находится между ядром и остальной частью Cell. Он является аналогом PowerPC Processor Storage Subsystem (PPSS) в PPE. Основная задача MFC - перемещать данные между локальной памятью SPU и основной памятью Cell, а также синхронизировать SPU со его соседями.

Для выполнения своих обязанностей MFC содержит в себе контроллер DMA, чтобы поддерживать связь между шиной EIB и локальной памятью SPU. Кроме того, MFC содержит другой компонент под названием Synergistic Bus Interface (SBI), который находится между шиной EIB и контроллером DMA. Это довольно сложная схема для обобщения, но она в основном интерпретирует команды и данные, полученные извне, и подает сигналы внутренним блокам SPE. Будучи входной дверью для Cell, SBI работает в двух режимах: ведущая шина (где SPE адаптирован для запросов данных снаружи) и ведомая шина (где SPE настроен на прием запросов извне).

Любопытный факт: если учитывать ограничение пакетов EIB (длиной до 128 бит), то в MFC блок DMA может перемещать только до 16 КБ данных за такт, иначе EIB вызовет исключение “Bus Error” во время выполнения [19].

Synergistic Processor Unit

Блок Synergistic Processor Unit (SPU) - это часть SPE, в котором находится основной процессор, аналогично “PPU” в PPE.

В отличии от PPU, SPU изолирован от остальной части Cell. Следовательно, между PPU или другими блоками SPU нет общей памяти. Вместо этого SPU содержит локальную память, используемую в качестве рабочей области. Однако, содержимое локальной памяти можно перемещать туда и обратно с помощью MFC.

Что касается функциональности, то SPU гораздо более ограничены, чем PPU. Например, SPU не включает в себя никаких функций управления памятью (трансляция адресов или защита памяти) и даже самых современных функций (динамическое предсказание переходов). Тем не менее, он исключительно хорошо выполняет векторные вычисления.

Для программирования этого блока разработчики используют PPU для вызова процедур, предоставляемых ОС PlayStation 3. Эти процедуры загружают исполняемый файл, специально написанный для SPU, в выбранный SPU и дают ему сигнал начать выполнение. После этого PPU сохраняет ссылку на поток SPU для дальнейшей синхронизации [20].

Архитектура SPU

Как и любой процессор, Synergistic Processor Unit (SPU) имеет собственную архитектуру набора команд (ISA). Оба SPU и PPU следуют методологии RISC, однако, в отличии от PPU (который реализует архитектуру PowerPC), архитектура SPU - проприетарная и в основном состоит из инструкций SIMD-типа. В результате, в SPU есть 128 128-битных регистров общего назначения, которые хранят вектора из 32/16-битных целочисленных чисел или чисел с плавающей точкой. С другой стороны, чтобы сэкономить память, инструкции SPU маленькие, длиной 32 бита. Первая часть содержит код операции, а остальные могут ссылаться на три операнда, которые вычисляются параллельно.

Это очень похоже на предыдущий блок Vector Floating Point Unit из PS2, но с тех пор многое что изменилось. Например, SPU не требует, чтобы разработчики изучали новый проприетарный язык ассемблера. IBM и Sony предоставляли инструментарий для программирования на SPU, используя C, C++ или ассемблер.

В плане архитектуры этот процессор не выполняет все инструкции, используя один и тот же блок. Вместо этого выполнение делится на две части или “конвейер исполнения”, один из которых называется Нечётный конвейер, а другой - Чётный конвейер. Эти два конвейера выполняют различные типы инструкций, позволяя SPU обрабатывать две инструкции за такт когда это возможно. С другой стороны, SPU никогда не будет работать с двумя инструкциями, которые зависят друг от друга, и, таким образом, смягчая потенциально возможные конфликты данных.

Давайте теперь посмотрим на два конвейера [21]:

Нечётный конвейер
Image
Упрощенная схема нечетного конвейера.

Нечетный конвейер выполняет большинство инструкций, кроме арифметических.

Прежде всего, вы найдете в SPU блок загрузки/сохранения (SLS), который делает три важные вещи:

Обратите внимание, что для хранения программы доступно только 256 КБ. Учитывая, что программы SPU могут быть скомпилированы с помощью C/C++, трудно предсказать, насколько велики будут бинарные файлы. По этой причине рекомендуется, чтобы разработчики думали, что имеется только половина доступной памяти (128 КБ) [22]. Это оставляет достаточно места, чтобы скомпилированный код занимал столько места, сколько ему нужно, хотя это и происходит за счет хранилища и эффективности.

Наконец, есть также блок SPU Channel and DMA Transport (SCC), который контроллер Memory Flow использует для заполнения и/или получения локальной памяти, и хилый блок Fixed-Point Unit, который умеет только перемешивать и поворачивать вектора.

Чётный конвейер
Image
Упрощенная схема четного конвейера.

Четный конвейер отличается своими арифметическими возможностями.

Здесь мы находим настоящий блок Fixed-point Unit (FXU), который выполняет основные арифметические, логические операции (И, ИЛИ и другие), битовые сдвиги.

И последнее, но не менее важное: есть блок Floating-point Unit (FPU), который выполняет операции с числами одинарной точности (32-битные float), двойной точности (64-битные double), а также с целыми числами (32-битные int). Это соответствует стандарту IEEE с некоторыми отклонениями (значения float ведут себя аналогично в PS2).

Cell изнутри: Стили программирования

Поскольку мы дошли до конца Cell, вы можете спросить - как разработчики должны работать с этим монстром? Аналогично предыдущим моделям программирования, разработанным для Emotion Engine, IBM предложила следующие методологии [23]:

Подходы, ориентированные вокруг PPE

Image
Представление многоуровневого подхода: PPE назначает задачу, затем она передается по каждому SPE и в конце возвращается с обработанными данными.
Image
Представление параллельного подхода: PPE назначает подзадачи каждому SPE, а те в свою очередь возвращают обработанные данные, которые потом PPE объединяет.
Image
Представление сервисного подхода: PPE распределяет различные задачи каждому SPE, который затем индивидуально работает с ней.

Подходы, ориентированные вокруг PPE, представляют собой набор паттернов программирования, которые возлагают основные обязанности на PPE и оставляют SPE для разгрузки. Есть три возможных паттерна:

Подходы, ориентированные вокруг SPE

Image
Представление подхода, ориентированного вокруг SPE. Каждый SPE отвечает за свою функциональность и взаимодействует с PPE только, чтобы получить ресурсы.

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

Эта модель гораздо более радикальна, чем остальные, в том смысле, что предыдущие модели ближе к традиционным и похожи на парадигму “универсальный процессор со сопроцессорами”, применяемую в ПК. Поэтому кодовые базы, реализующие алгоритмы вокруг SPE, может быть сложнее перенести на другие платформы.

Вывод

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

Для примера, разработчики движка Unreal Engine 3 (Epic Games) демонстрировали ограничения SPU, пытаясь реализовать свою систему обнаружения коллизий [24]. Их реализация опирается на двоичном разбиении пространства (Binary Space Partitioning, BSP), алгоритм, который сильно зависит от сравнений (ветвлений). Поскольку блоки SPU не обеспечивают динамические предсказания переходов, как PPU, их реализация разочаровала пользователей PlayStation 3 по сравнению с другими платформами (например, Xbox 360 или i686 ПК, которые обеспечивают стабильные методы предсказания на всех своих ядрах). Следовательно, Epic Games пришлось прибегать к дальнейшим оптимизациям, совместимыми только с Cell.

Я полагаю, что для разработчиков ПО полностью раскрыть потенциал Cell - это вопрос времени, терпения и большого объема знаний. Однако история показала, что это возможно не для каждой студии. Это заставляет меня задуматься, не в этом ли причина того, нынешнее железо консолей (по состоянию на 2021 год) так сильно гомогенизировалось.


Графика

Если вы подумали, что Cell со всеми своими особенностями мог бы справится со всеми задачи этой консоли, то позвольте мне сказать вам кое-что истеричное: Sony установила отдельный чип для 3D-графики.

Image
Uncharted 3: Drake’s Deception (2011).
Image
The Elder Scrolls V: Skyrim (2011).
Image
Killzone 3 (2011).
Image
One Piece: Pirate Warriors (2012).
Примеры игр для PS3. Все скриншоты сделаны на максимальном доступном разрешении (1280 на 720 пикселей).

Похоже, что даже с чипом от суперкомпьютеров, Sony все же пришлось добавить GPU для завершения PlayStation 3. Это заставляет задуматься, не попали ли IBM/Sony/Toshiba в тупик, пытаясь масштабировать Cell дальше, поэтому у Sony не было другого выбора, кроме как обратиться за помощью к графической компании.

Мы создали команду ICE [Initiative For A Common Engine, инициатива за общий движок] с целью разработать некоторую основную технологию, которую могут использовать другие первосторонние разработчики (…) Долгое время [у PS3] не было ГП, планировалось запускать всё на SPU. Команда ICE доказала Японии, что это просто невозможно. Это было бы нелепо. С точки зрения производительности, это было бы катастрофой. Поэтому ближе к концу они наконец-то добавили ГП [25].

Неназванные источники из Naughty Dog

Но я точно знаю, что PS3 содержит чип GPU, произведенный Nvidia и предназначенный для разгрузки части графического конвейера. Чип называется Reality Synthesizer или ‘RSX’, и он работает на частоте 500 МГц [26]. Его тактовая частота выглядит тревожной по сравнению с тактовой частотой Cell (3,2 ГГц), хотя вскоре вы увидите, что графический процессор лучше справляется с параллельным выполнением большого числа операций. Поэтому, когда дело доходит до построения графического конвейера, то нужно найти баланс между Cell и RSX (хотя я должен признаться, что на бумаге это звучит проще, чем на практике).

Теперь я проведу тот же уровень анализа, который ранее проводился с Cell, на этот раз сосредоточившись на RSX и его графических возможностях.

Общие сведения

Прошло пять лет с тех пор, когда Nvidia представила линейку GeForce3/NV30 в 2001 году, и к тому времени на арене сражались такие сильные игроки, как 3dfx, S3, Artx, ATI. Однако, в последующие годы число компаний постепенно сократилось до такой степени, что к 2006 году только ATI и Nvidia остались ведущими поставщиками видеокарт на рынке ПК.

Image
Чип RSX рядом с чипом Cell.

RSX наследует существующую технологию Nvidia, которая, как сообщается, базируется на модели 7800 GTX для ПК. Модель реализует архитектуру GeForce 7 (NV47) [27] под кодовым именем “Curie”.

В моем предыдущем анализе первого Xbox, я говорил о GeForce 3 и дебютировавших в ней пиксельных шейдерах. Так что же изменилось с тех пор? Были и взлеты, и падения, но в основном изменения происходили постепенно, так что ничего особенного нет по сравнению с пиксельными шейдерами GeForce3.

С другой стороны, в то время как 7800 GTX использует протокол PCI-Express для связи с процессором, RSX был переделан для работы проприетарным протоколом Flex I/O [28], отдельным интерфейсом внутри Cell для подключения соседних чипов. Flex I/O работает в двух режимах:

Увы, RSX это не Cell, поэтому он работает через протокол IOIF, используя быстрый слот.

Для сравнения, IOIF ведет себя как 32-битная параллельная шина с теоретической пропускной способностью до 20 ГБ/с, в то время как PCI-Express, используемый в 7800 GTX (x16 1.0), представляет собой 16-битную последовательную шину с теоретической пропускной способностью до 4 ГБ/с.

Организация контента

RSX имеет в своем распоряжении 256 МБ GDDR3 SDRAM памяти. Удивительно то, что этот же тип памяти используется в Wii. Шина памяти работает на частоте в 650 МГц с теоретической пропускной способностью до 20.8 ГБ/с.

Image
Пример того, как данные организованы в доступной памяти. Обратите внимание на то, что RSX может получить доступ к своему содержимому с разных чипов памяти.

Внутри этих 256 МБ, Cell может разместить всё, что требуется RSX для отрисовки кадра. Это включает в себя вершины, шейдеры, текстуры и команды. Теперь, благодаря шине Flex I/O чипа Cell, RSX также может использовать вышеупомянутые 256 МБ XDR памяти (главная память процессора) как рабочую область, хоть это и будет снижать производительность. Это удобно в том случае, если, например, SPU наложит пост-обработку на отрисованный кадр.

Как вы можете видеть, хоть в этой консоли и нет унифицированной шейдерной архитектуры (Unified shader model, UMA), она все еще может распределять графические данные по разным микросхемам памяти, если это нужно программистам. Я упоминаю об этом, потому что мне хотелось бы, чтобы многие “технические эксперты” прочитали больше об этой особенности, прежде чем делать обобщающие заявления в духе “PS3 была ограниченной из-за отсутствия UMA”. Это может быть правдой в некоторых случаях, но, если они не упоминают об этом, это общее утверждение, на мой взгляд, вводит в заблуждение.

Наконец, RSX поддерживает множество форм оптимизации данных для увеличения пропускной способности, например, цветовое сжатие 4:1, z-сжатие и “tiled”-режим (я расскажу о нём подробнее позже).

Построение кадра

Давайте посмотрим на то, как RSX обрабатывает и рисует 3D-сцены.

Image
Обзор конвейера RSX.

Его модель конвейера очень похожа на GeForce 3, но была сильно обновлена за пять лет технического прогресса. Поэтому я предлагаю заранее ознакомиться с той статьей, поскольку в этой основное внимание будет уделено новым функциям. Я также рекомендую прочитать о графическом процессоре PlayStation Portable, потому что многие новые разработки и потребности частично совпадают с тем чипом. После вышесказанного, посмотрим, что у нас здесь есть… [29]

Команды

Image
Диаграмма командной стадии.

Как и в любом другом GPU, должен быть блок, отвечающий за прием команд снаружи. В RSX это происходит с помощью двух блоков, Хоста и Graphics Front End.

Хост отвечает за чтение команд из памяти (либо локальной, либо основной) и их перевод во внутренние сигналы, которые понимают другие компоненты в RSX. Это делается с помощью четырех подблоков:

Затем Graphics Front End считывает данные из Графического FIFO и подает сигнал необходимым блокам внутри RSX для вычисления операций. Если помните, то это эквивалент «pfifo» в GeForce3.

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

Вершинный шейдер

Image
Диаграмма процесса вершинной стадии. Обратите внимание, что блоки Vertex Processing Engine (VPE) пропускаются, если вершинам не нужна дальнейшая обработка вершинным шейдером.

Следующий блок - это блок Geometry Processing, эволюция блока “Vertex Block” из GeForce 3, который выполняет трансформацию вершин. Он всё ещё программируется с помощью вершинных шейдеров, которые на сегодня широко распространены в графической индустрии. Более того, количество инструкций было увеличено, как минимум, до 512 (первоначально их было 136!).

Блок, который выполняет шейдеры, называется Vertex Processing Engine (VPE), и он может обрабатывать одну вершину за такт. Если этого показалось мало, то существуют восемь VPE, работающих параллельно. После серии GeForce 6 Nvidia привязала интерфейс программирование шейдеров к модели “Vertex Shader Model 3” или “vs_3_0_”. Это стандарт был разработан Microsoft для использования в библиотеке DirectX 9.0c [30]. Блоки VPE также поддерживают открытую модель OpenGL 2.1 [31] и собственный от Nvidia вариант (Сg) [32].

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

Блок Geometry Processing работает так:

  1. Index Vertex Processor (IDX) извлекает и кэширует вершины и текстуры из VRAM. После этого он отправляет данные в VAB.
  2. Vertex Attribute Buffer (VAB) берёт данные из кэша IDX и перенаправляет их в каждый VPE.
  3. Каждый VPE обрабатывает данные на основе загруженного шейдера. Он вычисляет одну инструкцию шейдера за такт.
  4. Результат каждого VPE отправляется в кэш Post Transform Cache, который кэширует результаты, чтобы пропустить идентичные вычисления над одной и той же вершиной. Это применимо только в том случае, если вместо данных вершин используются индексы вершин.
  5. Конечный результат сохраняется в блок Viewport Cull Unit (VPC) и в память атрибутов (Attribute RAM, ATR). Блок VPC убирает вершины, найденные за пределами области видимости. Память ATR кэширует атрибуты вершин (текстуру, цвет, туман и далее) для чтения на следующих этапах.

Растеризация

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

Двигаясь дальше, пришло время преобразовать вершины в пиксели (растеризация). Растеризатор RSX довольно быстрый, он может преобразовать до 8x8 пикселей (64) за такт и работать с буферами кадров размером до 4096x4096 пикселей (хотя разработчикам может потребоваться и меньше).

Растеризатор принимает точки, линии (включая полосы и замкнутые типы), треугольники (включая веера), четырехугольники и правильные многоугольники. Естественно, как и в текущем поколении консолей, растеризатор работает с субпиксельными координатами, где точки семплирования являются пол-координатами (0.5) пикселей. Это позволяет впоследствии использовать методы сглаживания, такие как мультисэмплинг. Мультисэмплинг растрирует одну и ту же геометрию несколько раз, но смещает несколько субпикселей друг от друга в каждом батче (RSX поддерживает четыре различных режима смещения), а затем вычисляет среднее значение. Это приводит к сглаженному изображению.

Более того, этот блок применяет z-culling, используя отдельную память внутри RSX (емкость которой около 3 миллионов пикселей). Это экономит обрабатываемые пиксели и трафареты, которые уже были отрисованы, и позволяет выполнить ранний z-тест для входящей геометрии.

Отдельный блок используется для растеризации 2D объектов (спрайтов), хоть и он изолирован от 3D-конвейера. Следовательно, RSX работает в режимах 2D и 3D, но периодическое переключение между ними обходится дорого с точки зрения производительности.

Пиксельный шейдер

Image
Диаграмма пиксельной/фрагментной стадии.

Следующий по нашему списку идёт блок Fragment Shader & Texture. Это программируемый блок (с помощью “фрагментных программ” или “шейдеров”), который применяет текстурирование и другие эффекты.

Являясь продвинутым наследником текстурных юнитов из GeForce 3, новый блок содержит шесть фрагментных юнитов (“pipes”, “каналы”), каждый из которых обрабатывает 2х2 текселя (“квады”). Для организации нескольких юнитов, работающих параллельно, был размещен другой подблок Shader Quad Distributor (SQD), чтобы отправлять квады каждому фрагментному юниту. После этого юнит загружает фрагментную программу.

Для вычислительных операций каждый канал содержит огромное количество 128-битных регистров (всего их 1536). Помимо этого, каждый канал может обрабатывать несколько квадов параллельно (многопоточность), хотя количество квадов, обрабатываемых параллельно, зависит от количества регистров, выделенных фрагментной программе (кол-во. потоков = 1536 ÷ кол-во регистров для шейдера). Глобально, параллельно может обрабатываться до 460 квадов. Кроме того, до трех фрагментных каналов могут обрабатывать две инструкции одновременно (как, например, двойная обработка у PPU) до тех пор, пока инструкции не зависят друг от друга.

Фрагментные юниты предоставляют арифметические и текстурные инструкции. Первые похожи на инструкции для вершинных блоков, а вторые, например, могут извлекать и распаковывать множество типов текстур (поскольку текстуры могут быть закодированы с помощью структур, а затем сжаты). Как и в случае с вершинным блоком, фрагментный шейдер придерживается модели “Pixel Shader 3.0” от DirectX [33], профилю “NV_fragment_program2” от OpenGL [34] и профилю “fp40” от Cg [35]. Все это позволяет облегчить программирование и избежать изучения низкоуровневых API с самого начала.

Наконец, поскольку юниты постоянно извлекают части текстур из VRAM или ОЗУ, то этот блок содержит три кэша для текстур: 4 КБ кэша L1 для каждого канала, 48 КБ кэша L2 для выборок из видеопамяти и 96 КБ кэша L2 для основной памяти. Заметьте, что кэш основной памяти значительно больше остальных. Это было сознательное решение, принятое для компенсации более высокой задержки.

Пиксельные операции

Image
Стадия пост-обработки.

Финальный блок Raster Operation Block (ROP) выполняет финальные тесты для полученных пикселей перед записью результатов в буфер кадра (который хранится в VRAM или в ОЗУ).

Есть два набора ROP, по четыре блока каждый (всего восемь блоков). Каждая группа выполняет z-тестирование, альфа-смешивание и финальную запись в память. В целом, эта схема может обрабатывать до 16 z-значений и 8 цветов пикселей за такт. Любопытно, что ПК-вариант Nvidia 7800 GTX поддерживает 16 ROP вместо 8. Может быть, это сокращение было сделано для приоритизации пропускной способности памяти, потребляемой блоками SPU?

Для увеличения пропускной способности ROP также обеспечивает цветовое сжатие и Z-сжатие. Кроме того, есть tiling-режим для оптимизации доступа к памяти с помощью видеокодера. В этом режиме, буфер кадра хранится в непрерывных блоках по 128 байт, которые упорядочены так, как они будут транслироваться/сканироваться. Поэтому, GPU избавляется от необходимости подкачки страниц (используется для адресации памяти) при передаче буфера кадра для отображения, что, следовательно, улучшает пропускную способность. Эти «tile» хранятся в отмеченных в памяти местах исключительно для этого типа адресации.

Единый видеовыход

Прошли времена проприетарных видео-разъемов для консолей и десятков аналоговых сигналов, скомпонованных в одном разъеме для учета каждого региона Земли. В PlayStation 3, наконец-то, встроили единый видеосигнал, который вскоре будет принят во всем мире: High Definition Media Interface (HDMI). Он используется для одновременной передачи аудио и видео.

Image
Обратная сторона PS3, слева выход на HDMI, справа старый на выход Multi A/V для аналогового видео.

Коннектор HDMI состоит из 19 контактов [36], все в одном корпусе. Он передает цифровой сигнал, означая, что картина и звук транслируются с помощью ‘0’ и ‘1’, а не диапазона значений, как в аналоговых сигналах. Следовательно, он не страдает от помех или ухудшения качества изображения, как это было с предыдущим оборудованием - например, артефакты экрана, создаваемые дешевыми кабелями SCART.

По сей день протокол HDMI постоянно обновляется. Новые версии спецификации предлагают больше возможностей (высокое разрешение изображения, большая частота обновления, альтернативные цветовые пространства и так далее), сохраняя при этом тот же физический носитель для обратной совместимости.

На протяжении всего жизненного цикла PS3 Sony добавляла некоторые функции HDMI в новые модели PS3 с помощью обновлений ПО [37]. Последним протоколом, совместимым с PS3, является версия 1.4, в первую очередь обеспечивающая поддержку «3D-телевидения». Однако, другие возможности, такие как более высокое разрешение видео, остались ограниченными на уровне 1920x1080 пикселей (хотя большинство игр отображали свой буфер кадров на уровне 1280x720 пикселей).

3D-эффект в “реальном времени”

Так что же это было за “3D-телевидение”, о котором я упоминал ранее? Что ж, так получилось, что срок жизни этой консоли совпал с кратковременной лихорадкой на 3D-телевизоры (так называемые 3DTV) [38]. Для их поддержки Sony обновила свой SDK для облегчения рендеринга стереоскопических кадров в RSX и внедрила “3D-спецификацию” в свой кодировщик HDMI. За кулисами происходит то, что кодировщик транслирует два кадра за раз, а телевизор чередует их аналогично тому, как это делали 3D-очки для Master System 30 лет назад.


Аудио

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

Видите ли, в то время как потребность в лучшей графике имеет тенденцию расти экспоненциально (потребители хотят больше декораций, лучшей детализации и цветов), вы не услышите такого же уровня требований к звуку. Я предполагаю, что это связано с тем, что возможности достигли нашего когнитивного предела (частота дискретизации в 44.1 кГц и 16-битное разрешение). Единственное, что осталось - реализовать больше каналов и эффектов, но для этого не требуется вычислительная мощность, которая потребовала бы установки специальных чипов, по крайней мере, в потребительское оборудование.

Image
Краткое описание звукового конвейера.

Итак, в конце концов, аудио теперь полностью реализовано с помощью ПО и обрабатывается блоками SPU (я имею в виду Synergistic Processor Unit, а не Sound Processing Unit! это немного иронично, что оба названия имеют одни и те же буквы…). Далее, Sony предоставляет множество библиотек в своем SDK, которые инструктируют блоки SPU выполнять секвенирование и микширование звука, и потоковую передачу. И если этого недостаточно, можно также применить множество эффектов.

После этого куда передается звуковой сигнал для вещания? RSX. Он также содержит порты, используемые для трансляции звуковых сигналов в телевизор. Перед отправкой сигнал кодируется в различных форматах, в зависимости от выбранного выхода (аналоговый, HDMI или S/PDIF, последний также называется “цифровым аудио”).


Ввод/вывод и обратная совместимость

Все операции ввода/вывода делегированы другому большому чипу, южному мосту [39]. Это очень похоже на архитектуру, принятую в свое время в первом Xbox. Похоже, что разрыв в архитектурах между консолями становится все уже, или, может быть, этот подход оказался очень надежным, и он не зависит от архитектуры. Решайте сами.

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

Как и IOP в PS2, южный мост полностью проприетарный, хотя на этот раз он изготовлен Toshiba (они назвали его ‘Super Companion Chip’ [40]). Но несмотря на то, что он все ещё остается неясным куском кремния, он делает превосходную работу, объединяя множество интерфейсов и протоколов, как внешних (будь то USB, Ethernet и прочее), так и внутренних ( SATA). Для справки, в прошлом низкая тактовая частота IOP создавала узкое место для быстрых интерфейсов, таких как ATA и Ethernet, значительно снижая их полную пропускную способность.

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

Image
Диаграмма соединений южного моста.

В целом, Southbridge встраивает огромное количество интерфейсов. Это связано с тем, что эта консоль была разработана во время тренда на “мультимедийные комбайны”. Недостаточно, чтобы игровые консоли запускали только игры. Они также стали плеерами DVD и Blu-ray, ресиверами ТВ (частично), просмотрщиками фотографий (импортируя фото с камеры через карт-ридер) и, возможно, ещё большим по мере развития потребностей (благодаря своей обновляемой ОС).

Внешние интерфейсы

Image
Как и во многих ПК той эпохи (включая мой), здесь есть карт-ридер. Рядом с ним есть четыре порта USB 2.0.
Это было довольно “премиально” для консоли стоимостью £425! (£628 в 2021 с учётом инфляции).
Image
Та же консоль с закрытой крышкой.
Для снижения стоимости в поздних моделях запечатали крышку и убрали кард-ридер и два порта USB.

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

Беспроводное оборудование

Благодаря широкому внедрению технологии Bluetooth проводное управление теперь уходит в прошлое. Новая форма контроллера Dualshock 2 от PS2 теперь называется Sixaxis. Хоть это и не радикальное изменение, на которое решились другие, но в нём есть гироскоп для новых типов человеческого ввода. Однако это произошло за счет отказа от тактильной обратной связи (вибрации). Год спустя Sony удивила игроков контроллером Dualshock 3, в который вернулся тактильный мотор.

Также теперь вы можете включить консоль с помощью беспроводного контроллера.

Внутренние интерфейсы

Что касается внутренних компонентов, то южный мост соединяет:

Обратная совместимость

Упомянув чипы PS2, полагаю, что это мой намек на то, чтобы надо поговорить об обратной совместимости PlayStation 3 раз и навсегда.

Для начала, позвольте мне рассказать то, как обычно работает обратная совместимость: консоли могут либо играть в игры своих предшественников с помощью программного обеспечения (инструкции, чтобы существующее оборудование могло вести себя как бы ожидалась старая игра) и аппаратного обеспечения (либо существующее оборудование обеспечивает полную или частичную обратную совместимость; либо компания добавила дополнительные чипы для воссоздания старой системы на новой материнской плате). При той вычислительной мощности, которую демонстрирует PS3, можно ожидать, что Sony выпустит эмулятор PS2, работающий в Cell и ускоренный RSX. Ну, по какой-то причине этого не произошло. Вместо этого Sony установила чипсет PS2 в одном углу материнской платы.

Image
Большой чип EE+GS, два модуля RDRAM по 16 МБ и ‘PS2 мост’.
Image
То же изображение, но с важными обозначениями.

С другой стороны, отсутствующие, но не столь критичные чипы (IOP, SPU и прочее) эмулируются с помощью Cell. В случае игровых сохранений изначально пользователям приходилось приобретать адаптер карты памяти. Но после выхода нового обновления ПО карты памяти теперь эмулируются как образы дисков, хранящиеся на жестком диске, а Magic Gate (система шифрования) обрабатывается одним SPU.

Поскольку Cell и RSX все ещё “включены” во время игры на PS2, то система предлагает два метода масштабирования для увеличения площади экрана во время геймплея: метод “ближайших соседей” и “антиалиасинг”.

Image
Интерфейс PS3 показывает значок игры после вставки диска от PS2.
(Пока не беспокойтесь о других значках, так как некоторые из них даже не официальные).

В общем, благодаря данным решениям, PS3 запускает игры PS2 с впечатляющей совместимостью. Вдобавок ко всему, вы можете воспользоваться новыми функциями консоли (беспроводное управление, интерфейс HDMI и виртуальные карты памяти).

Как будто этого было мало, игры PS1 также могут запускаться. Для этого не требуется встроенного SoC или GPU (всё работает через чистую программную эмуляцию).

Странная смена курса

Sony на протяжении всего жизненного цикла консоли медленно убирала чипы для PS2 из материнской платы PS3. В итоге обратная совместимость была реализована только через программную эмуляцию (со многими ограничениями, такими как запуск PS2 игр, купленных через их онлайн-магазин). Поскольку Sony так и не заменила чипсет PS2 (как это было раньше с железом PS1 в PS2), то это заставляет задуматься о техническом и исполнительном обосновании этого. Что ж, в качестве примера, вот мое краткое мнение о причинах этого:

Лично я считаю, что чистая программная эмуляция является наиболее приемлемым вариантом в долгосрочной перспективе благодаря её масштабируемости, настройке и независимости от проприетарного оборудования. Но, конечно, это требует больше усилий для точной реализации, как показывает текущая разработка PCSX2 сообществом добровольцев (обратите внимание, что эмулятор работает только на ПК с x86).

Поздняя совместимость

Мы еще не закончили говорить о совместимости! Возможно, вас удивит тот факт, что Sony также позволила пользователям запускать подмножество игр PlayStation Portable. Хотя эмуляция осуществлялась полностью с помощью программного обеспечения, как и совместимость PS2 в более поздних моделях.

Поскольку PS3 не может читать UMD диски, то пользователи должны получить доступ к каталогу игр из интернет-магазина Sony, чтобы загрузить и установить любую игру для PSP.


Операционная система

Теперь, когда домашние консоли стали мощными мультимедийными центрами, потребуется более сложная операционная система (ОС), чтобы предоставить пользователям больше сервисов и игр с более толстым слоем абстракции. Все это при сохранении безопасности и производительности на должном уровне.

Следовательно, такие термины, как shell или BIOS больше не используются для описания этой области, не потому что они больше не существуют, а потому что они описывают небольшую часть новой системы. В настоящее время общим термином является “операционная система”, которая включает в себя множество областей (загрузчик, ядро, пользовательский интерфейс), анализируемых отдельно. Как всегда, я рекомендую сначала ознакомиться с ОС PSP, поскольку её модульная конструкция - повторяющийся ингредиент PS3.

Привилегированная безопасность Cell

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

Тем не менее, для защиты от несанкционированного доступа к конфиденциальным данным и/или ресурсам, Cell реализует уровни привилегий, унаследованных от спецификации PowerPC. Другими словами, Cell выполняет программы в двух режимах:

Кроме того, блоки SPE содержат режим работы под названием изолированный режим. Этот режим защищает процесс выполнения внутри SPU, так что никакие внешние блоки (PPE или другие SPE) не смогут получить к нему доступ до завершения работы SPU. Эта функция может быть активирована после загрузки программы в любом SPE и гарантирует, что в процессор не вмешаются во время выполнения важного кода (процедуры шифрования).

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

Общие сведения

Как я уже говорил ранее, ОС довольно сложная. Итак, чтобы без проблем следовать этому разделу, мы можем разделить типы файлов, которые мы найдем в ОС этой консоли, на различные уровни:

Иерархия безопасности ОС

В общем, ОС PS3 разработана с использованием того же модульного подхода, что и в PSP. Если вспомнить предыдущую статью, ОС состоит из множества модулей. Они могут обслуживать пользователей (игра или приложение) или находиться в памяти неопределенное время для обслуживания других модулей (в виде системных вызовов и/или драйверов). Некоторые модули имеют больше привилегий, чем другие (модуль ядра против модуля пользователя).

Image
Диаграмма показывает, как компоненты операционной системы PlayStation соответствуют уровням привилегий Cell.
Ссылки на ‘OtherOS’ объясняются в следующих разделах.

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

Носители информации

С учетом всего сказанного, где хранятся все эти данные? С точки зрения обычного пользователя, есть только два видимых средства: диски Blu-ray для игр и жесткий диск для сохранений. Есть еще несколько, и сейчас мы рассмотрим каждый из них!

Cell BootROM

Оказывается, что производители спрятали внутри Cell маленький ROM, в котором хранится ‘защищенный’ загрузчик (boot-loader). IBM дает это пространство, чтобы избавить любую компанию (не только Sony) от необходимости вручную применять специальные методы обфускации для защиты своего загрузочного кода, поскольку готовые компоненты не всегда готовы к конкретным потребностям.

Поскольку эта часть уже физически защищена обфускацией, её не нужно шифровать. Таким образом, он идеально подходит для первоначального загрузчика (first-stage boot-loader) (который не может быть зашифрован), и PlayStation 3 хранит свой ранний этап загрузки именно там.

Флэш-память NAND/NOR

Помните о тех 256 МБ флэш-памяти NAND, о которых я кратко упоминал ранее? Здесь находится большая часть операционной системы. Так было до тех пор, пока в конце 2007 года Sony не выпустила модель CECHH, заменив 256 МБ NAND на ничтожные 16 МБ NOR. Как следствие, некоторые файлы пришлось перенести в другое место. Для простоты давайте сначала посмотрим, что хранят эти чипы [54]:

Из-за большего объема модели с флэш-памятью NAND также хранят оставшуюся часть ОС (называемую GameOS или devflash). Сюда входит:

Как будто этого было мало, но консоли с NAND также содержат другие данные, такие как xRegistry (коллекция сетевых настроек, учетных записей PlayStation Network и список устройств Bluetooth), больше записей об отзыве и загрузчик для OtherOS (действительно интересная часть, о которой мы поговорим подробнее в следующих параграфах).

Жесткий диск

Дебютный 2,5-дюймовый жесткий диск объемом от 20 до 500 Гб (по мере выпуска новых версий) обеспечивает постоянное хранение данных:

Системы с NOR, однако, также хранят GameOS на жестком диске. Как следствие, каждый раз, когда пользователь меняет жесткий диск, консоль запрашивает файл обновления для переустановки GameOS на диск. Как бы то ни было, системы ни с NOR, ни с NAND не загружаются без жесткого диска.

Некоторые пользовательские данные можно сохранить с помощью USB-накопителя, а затем при необходимости перенести на другую консоль. Однако этот процесс переформатирует новую консоль перед копированием старых данных.

eMMC

В 2012 году Sony представила обновленную версию консоли под названием ‘SuperSlim’ (кодовое название CECH-4xxx). Они были доступны в трех вариантах: один с жестким диском на 250 ГБ, другой с жестким диском на 500 ГБ или третий вариант с внутренней флэш-памятью eMMC на 12 ГБ. Первые два варианта следуют схеме файловой системы, реализованной в моделях с NOR. Третий вариант хранит все в eMMC (включая данные пользователей) и следует схеме с NAND для хранения системных файлов.

Однако в модели с eMMC есть одна загвоздка. Вместо чипа NOR компания Sony установила чип Panasonic ‘MN66840’, который, согласно PS3 Dev Wiki [55], перенаправляет шину NOR на eMMC. Я предполагаю, что это просто трюк для экономии средств, так как он использует один и тот же южный мост из других вариантов.

Довольно любопытно, что если пользователь решит установить жесткий диск в модель eMMC, консоль перенесет все пользовательские данные с eMMC на новый жесткий диск. Как следствие, пользователь может полностью использовать жесткий диск, хотя пустое место в eMMC теперь остается незанятым.

Процесс загрузки

Итак, используя все предыдущие знания, вы узнаете, как загружается система - и, скажу я вам, это довольно сложно. Причина проста: Sony не хочет, чтобы вы возились с их железом или ПО. Поэтому они создали множество уровней обфускации и шифрования, чтобы помешать вам взломать систему и загрузить свой собственный код (и, надеясь, отказаться от него и продолжать покупать игры/фильмы/другое). Но, как покажет история, произошло совершенно обратное.

В следующем разделе я опишу, что делает эта консоль после нажатия кнопки питания. Обратите внимание, что этот процесс радикально изменился только один раз (после того, как хакеры взломали его). Итак, для простоты мы начнем с “оригинального” процесса загрузки (реализованного до версии системы 3.60)[56] [57] [58]:

  1. Отдельный чип на материнской плате (Syscon) активируется и выполняет инструкции из внутреннего ROM. Потом он отправляет “кольцо конфигурации” в Cell через SPI (последовательное соединение), которое инициализирует Cell и деактивирует восемь SPU. Затем, он защемляет линию питания и дает жизнь Cell.
  2. Вектор сброса PPU в Cell указывает на его скрытый ROM, в котором хранятся процедуры поиска и расшифровки bootldr из флэш-памяти. Потом расшифрованный фрагмент загружается SPU в режиме изоляции.
  3. Теперь изолированный SPU, загрузив bootldr, инициализирует часть аппаратного обеспечения (память XDR и интерфейсы ввода-вывода), расшифровывает двоичный файл lv0 и дает команду PPU запустить его.
  4. PPU, теперь выполняющий lv0, расшифровывает metldr (загрузчик, специфичный для консоли) и посылает его третьему SPU, снова в режиме изоляции.
  5. Третий SPU, теперь выполняющий metldr, последовательно выполняет ещё пять загрузчиков:
    1. lv1ldr расшифровывает и загружает lv1, который содержит гипервизор, переходящий на первый уровень привилегий. Кроме того, lv1 настраивает жесткий диск, привод Blu-ray и RSX.
    2. lv2ldr расшифровывает и загружает lv2, который содержит ядро и работает поверх гипервизора. Также он завершает инициализацию RSX, эмуляции PS2, Bluetooth, контроллера USB и карт-ридер.
    3. appldr расшифровывает и загружает vsh ( визуальную оболочку) и другие зависимости. vsh позже позволит пользователю загрузить игру.
    4. isoldr расшифровывает и загружает модули, которые будут работать в третьем SPU в изолированном модуле. Эти модули критически важны для безопасности и выполняют множество криптографических функций на протяжении всего жизненного цикла консоли. Следовательно, третий SPU зарезервирован для функций безопасности, и игры не могут его использовать (для игр остается только шесть SPE).

PPU, загрузив vsh, предоставляет пользователю управление через графический интерфейс пользователя, который проявляется знаковым оркестровым звуком запуска, за которым следует меню XMB.

Измененный процесс загрузки

В марте 2011 года хакер “GeoHot” взломал защиту metldr, тем самым нарушив подлинность последующих загрузчиков. После этого Sony нанесла ответный удар, выпустив обновления безопасности в своем оборудовании и ПО. Эти исправления более подробно описаны в разделе “Борьба с пиратством”.

Визуальная оболочка

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

XrossMediaBar (XMB) - это новый пользовательский интерфейс, получивший международное признание за два года до этого. Он был слегка адаптирован, чтобы с ним можно было взаимодействовать с дивана (так называемый “10-футовый интерфейс”), и расширен, чтобы использовать преимущества разрешения “Full HD” (1920х1080 пикселей).

Image
XMB в PSP (2004).
Разрешение 480×272.
Image
XMB в PS3 (2006).
Разрешение 1920×1080.

Хотя пользователи PSP найдут много знакомого, Sony добавила новый набор приложений, использующих потенциал Cell, RSX и привода Blu-ray. Многие из них связаны с мультимедиа (видеоплеер и слайд-шоу изображений), телевидением (приложения для телевидения, такие как BBC iPlayer), социальным профилем (онлайн-аватары) и онлайн-покупками (PlayStation Now, PlayStation Store и другие).

Кроме того, поскольку это домашняя консоль, которая может быть общей для нескольких пользователей, XMB поддерживает множество пользователей, где каждый может использовать свою учетную запись PlayStation Network и хранить отдельные пользовательские данные (купленные игры и сохранения).

Image
Как и в PSP, выбор игры в меню может стилизовать фон, чтобы привлечь ваше внимание!
Image
XMB предоставляет огромное количество настроек. Это особенно полезно тогда, когда вам нужно настроить новый блестящий 1080p ТВ с объёмным 3.1-аудио.
Image
Различные мультимедиа-возможности.
Image
XMB может устанавливать игры, обновления и дополнения (DLC) с помощью встроенного инсталлятора.

Наконец, добавление жесткого диска - это облегчение для ветеранов, которые в прошлом были вынуждены покупать дорогие проприетарные накопители (Memory Stick Pro Duo), когда у них заканчивалось место.

Одолжи мне свою PS3

Впечатляет то, что не все приложения, поставляемые в комплекте с этой консолью, преследовали корыстные цели. С появлением распределенных вычислений и возможностей Cell для проектов по изучению данных Стэнфордский университет объединил усилия с Sony, чтобы владельцы PlayStation 3 могли внести свой вклад в медицинские исследования. Результатом стало приложение Folding@home.

Folding@home - это приложение, установленное на каждой PlayStation 3, которое, будучи открытым для пользователей, подключалось к центральному серверу и выполняло моделирование белков. Кроме того, приложению было разрешено работать в фоновом режиме в непиковое время.

Image
Folding@Home отображает работу, выполненную с момента запуска приложения [59].

В течение всего времени работы Folding@home объединенные вычислительные мощности 15 миллионов пользователей PS3 по всему миру помогали в исследованиях, направленных на лечение болезни Альцгеймера [60]. В конце концов, Folding@home и Sony убрали приложение в 2012 году, а первое продолжает жить на других платформах.

Это мое личное мнение, но мне нравится читать о проектах, которые вносят глобальный вклад, используя возможности распределенных вычислений, в отличие от бесконечных сенсационных статей о майнинге криптовалюты. Думаю, не стоит забывать, что с каждой новой мощной технологией всегда будут разрабатываться бескорыстные приложения для неё.

Несколько ОС

Когда IBM описывала Cell на уровне ПО, они упомянули, что Cell способен работать с несколькими ОС одновременно, благодаря множеству исполняющих ядер Cell [61]. Таким образом, Sony взяла эту идею на вооружение и добавила в XMB опцию, позволяющую установить вторую ОС [62]. Эта функция получила название OtherOS, и она, в двух словах, предоставляла собой менеджер разделов (XMB просто направляет пользователя для изменения размера раздела GameOS и выделения нового места для второй ОС) и кнопку для загрузки со второй ОС (благодаря загрузочным файлам OtherOS, уже установленным во флэш-памяти). Таким образом, пользователю просто нужно заполнить новый раздел системой. Следовательно, многие дистрибутивы Linux (например, Ubuntu и Fedora) добавили PS3 в качестве еще одной возможной платформы для установки. Вы можете считать это духовным преемником Linux for PS2.

Image
Red Ribbon GNU/Linux - это дистрибутив, предназначенный исключительно для PS3/Cell и скомпилированный с использованием PPC64 [63].

Благодаря OtherOS опытные пользователи имели возможность разрабатывать хоумбрю-приложения, работающие на Cell без лицензионных ограничений. Это было особенно интересно для исследовательских/научных целей [64] [65], так как эта консоль имела более доступную цену, чем мейнфрейм. Для мультимедийных целей привод Blu-ray и карт-ридер также были доступны в OtherOS.

С другой стороны, хоть привилегии OtherOS и могут превосходить привилегии GameOS (на уровне ядра), они не превосходят гипервизор, который все ещё находится в памяти. Таким образом, любой аппаратный доступ из OtherOS по-прежнему зависит от воли гипервизора Sony. Так получилось, что последний блокирует доступ к командным буферам RSX (препятствуя использованию шейдерных блоков и прочих компонентов для ускорения графических операций). Следовательно, в результате дистрибутив Linux прибегает к программному рендерингу (вся графика рисуется через Cell), а затем передает кадровый буфер в RSX для отображения. Разочаровывает, что OtherOS не может использовать все возможности этой консоли. Вероятно, это было сделано для уменьшения поверхности атаки. По иронии судьбы, использование Cell в OtherOS похоже на то, как IBM/Toshiba/Sony, возможно, изначально представляли себе PS3!

Разделив судьбу Folding@home, OtherOS в конечном итоге была удалена в последующем обновлении, но по другим причинам (в основном связанным с безопасностью). Вскоре после этого OtherOS была неофициально восстановлена благодаря программным эксплойтам и усилиям по обратной разработке. В настоящее время OtherOS доступна, если пользователь устанавливает кастомную прошивку. Подробнее об этом я рассказываю в разделе “Борьба с пиратством и хоумбрю”.

На момент написания этой статьи разработчик Рене Ребе реализует надлежащие драйверы xf86, которые используют преимущества ускорения, обеспечиваемого RSX и его 256 МБ памяти [66]. Его работа сочетается с другими разработками, которые устранили ограничения, наложенные гипервизором (первоначально благодаря обнаружению программных эксплойтов, а затем с использованием кастомной прошивки, последняя более подробно описана в разделе “Борьба с пиратством и хоумбрю”). Г-н Ребе публикует свои успехи на своем YouTube-канале и полагается на добровольные пожертвования для продолжения своей работы [67].

Обновляемость

В заключительной части этого длинного раздела поговорим о возможностях обновления GameOS.

В двух словах, как и в случае с PSP, Sony распространяла файлы PS3UPDAT.PUP, в которые упакованы все новые двоичные файлы ОС. Из-за системы безопасности консоли, только те файлы, которые не защищены уникальными ключами консоли и хранятся на перезаписываемых носителях (флэш-память, жесткий диск, eMMC), могут быть обновлены. Остальные файлы должны оставаться как есть.

Файлы PUP распространялись через официальный сайт Sony, помощника по обновлению XMB или находились в содержимом диска с игрой (все игры содержат файл PUP, отражающий версию SDK, для которой они разработаны). Поскольку модели с флэш-памятью NAND содержат всего 256 МБ и хранят там всю ОС, Sony никогда не выпускала файлы обновлений размером более 256 МБ.


Игры

Этот раздел охватывает темы, связанные с разработкой, распространением и обслуживанием игр.

Экосистема разработки ПО

Поскольку эта консоль объединяет технологии различных компаний, включая продукты, уже коммерциализированные на других рынках (например, GPU-линейка GeForce7 от Nvidia для ПК), разработчики утопали во множестве различных инструментов для разработки своего ПО. Обратите внимание, что это не означает, что разработка была легкой, но это стоит ценить, если сравнивать с временами ассемблера.

Для программирования Cell IBM и Sony выпустили отдельные пакеты разработки. IBM делала для неограничивающих сред, таких как Linux (и OtherOS). С другой стороны, инструменты Sony явно нацелены на GameOS в PS3 в качестве единственной среды выполнения.

IBM бесплатно распространяла пакет IBM Cell SDK [68]. Он включал в себя набор инструментов GCC, модифицированных для создания бинарных файлов для PPU и SPU. Набор позволял разрабатывать на C, C++, Fortran и языке ассемблера. Он также является кроссплатформенным, позволяя компилировать код с другого оборудования (например, с ПК на x86). SDK также включал библиотеки низкого уровня для облегчения математических операций SIMD и управления SPU-PPU. Наконец, он включал в себя форк среды разработки Eclipse.

Чтобы облегчить сложность разработки Cell, IBM также разработала еще один недолговечный компилятор XLCL, который компилирует код OpenCL (вариант C/C++ для параллельных вычислений) для PPU и SPU. Он распространялся только через канал IBM Alphawork. Это значит, что он оставался экспериментальным.

А что насчет Sony? По аналогии с SDK для PSP, они поставляли девкиты (множество вариантов с различными размерами и улучшениями) и пакет ПО, состоящий из компиляторов, библиотек и отладчиков, которые использовали Visual Studio 2008 (а позже и 2010) в качестве IDE [69]. Поскольку они поддерживали только PS3, их SDK включал тот же набор инструментов GCC, но дополненный тоннами библиотек для графических задач, аудио и ввода-вывода. В случае с графикой для RSX, Sony предоставляла библиотеки GCM для создания необработанных команд и psGL, построенная поверх GCM для обеспечения OpenGL ES API. Для написания шейдеров Nvidia предоставляла Cg, компилятор шейдеров, который парсирует язык, похожий на HLSL (язык шейдеров, созданный Microsoft).

Разработка без лицензии

С появлением хоумбрю (работающего на GameOS, а не на OtherOS) были созданы новые SDK с открытым исходным кодом, чтобы обойти зависимость от библиотек Sony, защищенных авторским правом, чтобы, следовательно, предотвратить судебные разбирательства. Одним из примеров является PSL1GHT, SDK, используемый в сочетании с ps3toolchain [70]. Это обеспечивает полный набор средств разработки, готовый для создания легального хоумбрю (хотя для этого требуется модифицированная/взломанная консоль с отключенной проверкой подписи).

В 2018 году я создал собственный набор на основе ps3toolchain, но распространяемый в виде контейнера Docker [71]. Чтобы самому не компилировать ps3toolchain, можно было загрузить мою предварительно скомпилированную среду (сэкономив много часов времени на компиляцию). Контейнер также содержит множество инструментов, таких как шейдер Cg от Nvidia, чтобы смягчить проблемы с зависимостями, которые я обнаружил во время экспериментов с проектом на базе PSL1GHT. В конце концов, это был забавный эксперимент, который помог мне больше узнать о среде разработки.

Аутсорсинг разработки

Стоит отметить, что за это время выросла популярность своеобразной бизнес-модели: игровые движки. Вместо того чтобы тратить время и деньги на разработку игры с нуля, почему бы не купить кодовую базу других компаний и не создать игру на ее основе? Это то, что предполагали игровые студии, такие как Epic Games [72]. Помимо продажи популярных игр, таких как Unreal Tournament 3, студия лицензировала урезанную версию игры (без ассетов) другим разработчикам. Она была упакована и названа “Unreal Engine 3”. Вкратце, игровые движки заботятся обо всех фундаментальных областях (физика, освещение и так далее). Разработчикам остается только добавить свой собственный контент (скрипты, текстуры, модели, звуки и прочее).

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

Носители информации

Теперь, когда мы закончили говорить о разработке игр, настало время рассмотреть их распространение. Итак, здесь я описываю официальные механизмы распространения игр для PS3.

Диски Blu-ray

Image
Пример розничной игры.

Новое поколение = новый носитель. По мере того, как преимущества DVD начинают иссякать, а его ограничения, выраженные игровой индустрией (предел пространства) и киноиндустрией (формат 480i) [73] становятся всё более очевидными, то это вопрос времени, когда Sony представит другой стандарт для замены своих новых устройств. Для этой новой консоли был выбран диск Blu-Ray.

Blu-ray, как видно из названия, - это новый формат оптических дисков, обеспечивающий более высокую плотность хранения данных благодаря использованию синих светодиодов [74], в отличие от красных, используемых в DVD. Поскольку синий свет имеет меньшую длину волны, чем красный, то в том же месте может быть записано больше информации (питов и лендов) [75]. В результате диски Blu-ray обеспечивают удивительно большую емкость (от 25 Гб до 50 Гб!), используя тот же пластиковый диск с теми же размерами, что и CD/DVD.

Формат данных Blu-ray отвечает многим потребностям различных отраслей: фильмы высокой четкости, управление цифровыми правами (DRM), региональная блокировка, новая файловая система и даже среда выполнения для Java-программ [76]. В случае индустрии видеоигр, розничные игры для PlayStation 3 распространялись на 25 Гб или 50 Гб дисках Blu-ray с защитой от копирования. Они считываются приводом 2x, развивающим скорость до 8.58 МБ/с [77], однако лазер PS3 также может считывать DVD (на скорости 8x) и CD (на скорости 24x) для воспроизведения старых игр и фильмов.

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

Онлайн-магазин

Image
Приложение PS Store в XMB.
Image
Каталог игр, отображаемый при открытии магазина.
Image
Интерфейс поиска (который использует другую, не от XMB, клавиатуру).
Image
Пример страницы игры (сопровождается предложениями, которые работают только на других консолях…).

Одновременно с выпуском консоли компания Sony запустила собственный канал распространения под названием PlayStation Store, позволяющий игровым студиям продавать свои игры в цифровом виде, а пользователям приобретать новый контент, не вставая с дивана. Для их работы не требуется никакого физического носителя (кроме места на жестком диске), но владение цифровым продуктом было привязано к онлайн-аккаунту. Это вызвало беспокойство пользователей в марте 2021 года, когда Sony объявила [78] (а затем отменила [79]) закрытие этого магазина.

В своем цифровом магазине Sony также воспользовалась возможностью продавать оцифрованные версии игр для PS1, PS2 и PSP под названием PlayStation Classics. Они также загружаются и устанавливаются аналогичным образом, но для их работы используются прилагаемые эмуляторы. Фактически, игры PS2 используют один и тот же неускоренный программный эмулятор независимо от того, содержат ли модели PS3 чипсет PS2[80]! Полагаю, это заключительная глава для аппаратной эмуляции на PS3.

За кулисами PS Store - это просто веб-сайт, доступный только через приложение PS Store в XMB. На протяжении своего жизненного цикла пользовательский интерфейс несколько раз переделывался, чтобы отразить, как я полагаю, глобальный спрос на более причудливые пользовательские интерфейсы.

Сетевой сервис

Помимо интернет-магазина, на платформе появилось множество других онлайн-решений, включая дебютировавший PlayStation Network, бесплатный онлайн-сервис, напрямую конкурирующий с платным Xbox Live от Microsoft.

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

Image
Игры предлагают каталог достижений, чтобы бросить вызов пользователям. Цель - предоставить игрокам чувство гордости и достижения.
Image
Список друзей. (Имена отредактированы по очевидным причинам).
Image
После того, как я немного поиграл в онлайн-игры, случайные люди начали присылать мне сообщения.

И последнее, но не менее важное: как и в случае с обновляемой операционной системой, игры тоже обновляются. Таким образом, при запуске игры XMB может предложить загрузить обновления игры (в виде “пакетов”), которые исправляют ошибки и/или добавляют новый контент. Обновления устанавливаются на жесткий диск и работают аналогично слоистой файловой системе.


Борьба с пиратством и хоумбрю

Все, что вы только что прочитали, должно быть каким-то образом защищено от “несанкционированного” доступа. Если вы хотите ознакомиться с тем, как компания Sony выполнила эту работу, то вам будет интересно.

Обзор фундамента безопасности

Многие части консоли уже обеспечивают функции безопасности, которые не требуют ручной реализации в ПО:

Кроме того, Sony внедрила в ПО следующие средства защиты:

Поражение

Вы видели, на что способна эта консоль, ожидали ли вы, что хакеры будут довольствоваться ограниченными возможностями OtherOS? Думаю, Sony тоже не ожидала. Компания изо всех сил старалась защитить некоторые области, оставляя другие полузакрытыми, чем позже воспользовались хакеры.

Давайте посмотрим, как некоторые из её крепостей были взломаны независимыми хакерами по всему миру. Следует помнить, что сообщество взломщиков PS3 было очень активным, каждый год выпуская множество инструментов и документации. Итак, я остановлюсь на нескольких вехах, которые проложили путь к притоку контента и разработке хоумбрю, но больше информации вы найдете на PS3History [81].

Обход гипервизора

В 2010 году, после трех лет затишья на хакерской сцене, в сообществе произошел поворот к лучшему. Джордж Хотц - это хакер, известный тем, что ранее разблокировал первую модель iPhone (также известную как “2G”), чтобы она могла работать с любой сетью (первоначально только с Cingular/AT&T). Он сумел прочитать и записывать защищенные области в памяти консоли, не будучи остановленным гипервизором. Затем он опубликовал свой эксплойт вместе с кратким описанием в своем блоге [82].

Эксплойт требует двух материалов: установка Linux под управлением OtherOS (для выполнения произвольного, но ограниченного кода) и наличие внешнего глитчера, подключенного к шине XDR (для общения с ОЗУ). Короче говоря, гипервизор использует хэш-таблицу, хранящуюся в ОЗУ, для каталогизации адресов памяти вместе с их уровнями привилегий. Поэтому пользовательские программы не могут получить доступ к защищенным областям памяти. Атака работает путем нарушения целостности такой таблицы, чтобы иметь возможность писать поверх нее, а затем использовать эту привилегию для изменения записей, чтобы предоставить текущей программе доступ к каждому углу в памяти.

В итоге Хотц обнаружил, что в Linux/OtherOS программы могут запрашивать у гипервизора множество блоков памяти, указывающих на один и тот же физический адрес. Если программа деаллоцирует их в то время, когда на шине XDR присутствуют внешние помехи (из-за глитчера, посылающего электрические импульсы), процесс деаллокации завершается наполовину [83]. Как следствие, хэш-таблица гипервизора (находящаяся в ОЗУ) все еще содержит запись о выделенных адресах, но в то же время он считает, что это пространство было освобождено. Затем эксплоит Хотца запрашивает дополнительные блоки, поэтому гипервизор расширяет свою таблицу новыми записями. Этот процесс продолжается до тех пор, пока запись в хэш-таблице не перекрывает место в памяти блока, который должен был быть деаллоцирован. Поскольку в хэш-таблице сохранилась старая запись, дающая пользователю доступ к этому адресу, гипервизор в итоге предоставляет к изменению записи в хэш-таблице! Таким образом, эксплойт изменяет запись, чтобы расширить доступ ко всему пространству памяти.

Хоть этот эксплойт и требовал использования среды Linux, работающей из под OtherOS, он стал огромным шагом к дальнейшему реверс-инжинирингу и исследовательским проектам. Теперь хакеры получили возможность исследовать критические области системы, которые изначально были недоступны. Стоит отметить, что в это же время Sony выпустила обновление ПО версии 3.21, которое убирало OtherOS. Можно было бы подумать, что это удержит хакеров от продолжения работы, но это только дало им больше причин ускорить её.

PSJailbreak

Позже, в 2010 году, группа под названием ‘PS Jailbreak’ анонсировала (и позже выпустила) уникальное решение для запуска хоумбрю непосредственно из встроенной оболочки консоли (XMB, из под GameOS) без вмешательства в железо консоли. И все это не понравилось Sony, которая вскоре пойдёт юридическим путём, чтобы заблокировать продажи этого продукта.

‘PS Jailbreak’ состоял из USB-флешки, который подключался к переднему USB-порту перед включением консоли. Затем пользователь должен был нажать кнопку питания, после этого - кнопку извлечения. Если инструкции были выполнены успешно, то пользователь видел обычный интерфейс XMB, но с добавленной опцией ‘Install PKG’ и нескольких самодельных приложений, созданных для записи игр Blu-ray на жесткий диск и их последующей загрузки.

За кулисами эта флешка выполняет огромное количество работы, которую можно разделить на две группы [84]:

  1. USB-эксплойт: после включения консоли ключ обманывает систему, заставляя ее думать, что она подключена к USB-хабу со шестью портами. Потом он выполняет сложную последовательность USB-команд, пока не достигнет переполнения кучи и эскалации доступа к ядру PS3 (уровень 2). Затем приступает к выполнению полезной нагрузки (пейлоада).
  2. Payload: это еще один сложный пакет, который исправляет оригинальную оболочку, чтобы включить скрытые функции, доступные только на отладочных устройствах (кнопка ‘Install PKG’). Он отключает проверку подписи (для загрузки произвольного модуля или пакета) и перенаправляет команды Blu-ray на жесткий диск (для загрузки игр). Тот факт, что эта программа может изменить так много на уровне ядра, заставляет задуматься, а чем же хорош гипервизор?
    • В дополнение к этому M4j0r позже сказал: “Интересно, что он даже не использует код Sony, эта часть lv2 была написана Logitech, и разработчики этого эксплойта могли иметь доступ к исходному коду (благодаря взлому 2008 года).” [85].

Впоследствии этот продукт был взломан другими сообществами, и вскоре после этого появились клоны с открытым исходным кодом (например, PS Groove), которые снимали многие ограничения (например, пользователи теперь могли отключать устройство от сети после завершения эксплойта). Некоторые форки были даже развернуты на калькуляторе Texas Instruments [86]. В любом случае, Sony действовала быстро, выпустив обновление ПО версии 3.42, чтобы удалить эту золотую жилу [87], хотя дверь для хоумбрю уже была открыта.

Достойны упоминания

Прежде чем я наконец-то расскажу о главном достижении хоумбрю-сцены PS3, позвольте мне описать вам пару методов, которые были разработаны примерно в то же время:

Падение шифрования

Как и в саге с PSP, первоначальные эксплойты требовали больших усилий и легко исправлялись Sony, что привело к невыгодной игре в кошки-мышки. Однако, как и в случае с PSP, это был вопрос времени, когда какое-нибудь открытие нарушит фундамент безопасности этой системы: её цепочку доверия.

В 2011 году Джордж Хотц (вместе с командой fail0verflow) опубликовал еще одно открытие - закрытые ключи шифрования, которые Sony использует для подписи двоичных файлов, выполняемых metldr. Бинарные файлы, загружаемые на этапе загрузки, подписываются ключом ECDSA. Будучи асимметричной системой шифрования, это означает, что любой, кто владеет закрытым ключом (Sony, а теперь и другие), может зашифровать и подписать двоичные файлы, следовательно, в глазах metldr они будут выглядеть ‘подлинными’. Поскольку metldr является третьим этапом загрузки перед загрузкой lv1 (гипервизора), это означает, что хакеры смогут создавать собственные гипервизор, ядро и всё, что находится под ними. Кроме того, любая PlayStation 3 на рынке будет думать, что пользовательские двоичные файлы являются подлинными. В общем, это эксплойт в стиле батарейки Пандоры, но полностью программный.

Открытие этого ключа, которое должно было быть вычислительно невыполнимым, стало возможным благодаря тому, что считается ‘ошибкой’ в реализации алгоритма ECDSA компанией Sony. Короче говоря, математическая формула, используемая для ECDSA, использует случайное значение, которое Sony никогда не меняла во всех файлах обновлений, которые они распространяли [88], тем самым облегчая решение других переменных, что в итоге и произошло.

Последствия этого открытия описаны в следующих параграфах.

Эра кастомных прошивок (CFW)

Взлом metldr означал, что теперь все могли создавать ‘официальные’ системы для PS3, что привело к появлению ‘разновидностей’ GameOS, которые различные сообщества выпускали с различными настройками. Эти системы представляли собой модификации официальных файлов прошивки Sony (которые она распространяла в виде обновлений) и пересобирались с использованием утечки ключей, поэтому их можно было установить куда угодно. Результат получил название кастомной прошивки (Custom Firmware, CFW) и стал методом взлома этой консоли де-факто, пока Sony не приняла жесткие меры.

Image
Моя установленная CFW с открытым ‘меню VSH’. Этот вариант прошивки (под названием ‘Rebug’) также позволяет мне превратить консоль в отладочную станцию (обратите внимание на IP-адрес в правом нижнем углу, его нужно ввести в отладчике, чтобы подключиться к запущенному процессу) и возиться со своими хоумбрю.

Тем временем в сети появилось множество CFW с разными названиями (например, ‘Rebug’, ‘Ferrox’ и прочее), и они содержали такие настройки, как [89]:

Есть и мой любимый вариант: привнести отладочные функции тест-кита, позволяя любой розничной консоли стать отладочной станцией. Это может быть сделано установкой либо CFW с возможностями отладки, либо CFW, который может преобразовать розничную консоль (‘CEX’) в отладочную модель (‘DEX’) путем изменения специфических для консоли данных во флэш-памяти.

Крепкий ответ от Sony

Аналогично событиям, произошедшим после появления CFW для PSP, Sony ответила двумя обновлениями системы безопасности:

Со стороны ПО Sony выпустила два системных обновления, которые улучшили систему безопасности:

С аппаратной стороны, не только последующие модели PS3 (поздние CECH-25xxx, CECH-3xxx и CECH-4xxx) поставляются с версией системы выше 3.55, но и содержат другой вариант bootldr/lv0ldr (называемый lv0ldr.1), который не только расшифровывает и загружает lv0, но и извлекает новый системный файл lv0.2. Последний содержит метаданные о lv0 [91], чтобы удостовериться, что lv0 не был подделан. lv0.2 подписывается новым ключом (также неуязвимым к предыдущему открытию ECDSA), что не позволяет хакерам получить контроль над цепочкой загрузки.

По сей день эти модели не могут запустить CFW, поэтому их прозвали непрошиваемыми. Однако они могут работать с ‘гибридной прошивкой’ (HFW), о которой мы поговорим позже.

Со временем количество консолей, совместимых с CFW, только уменьшалось. Следовательно, PS3, которые не обновлялись выше 3.55, стали своего рода реликвиями. В то же время резко возрос спрос на альтернативы, такие как даунгрейдеры (для возврата к версии системы 3.55 на старых моделях) и ODE (для запуска пиратских игр на новых моделях).

Возрождение хоумбрю

После длительного периода ожидания для пользователей, которые пропустили окно для установки CFW, в конце 2017 года команда хакеров выпустила PS3Xploit, коллекцию эксплойтов и утилит [92], которая вернула возможность установки CFW на старые модели без необходимости дорогостоящего даунгрейдера (и навыков работы с ним).

Основной пейлоад PS3Xploit полностью повторяет работу аппаратного даунгрейдера (исправление файлов CoreOS), только программным путём. Он работает следующим образом:

  1. Отправной точкой является интернет-браузер XMB, построенный на базе Webkit. PS3Xploit использует Javascript для получения возможности выполнения произвольного кода в пользовательском пространстве системы (и вне среды Javascript). Чтобы запустить эту программу, пользователю достаточно открыть родной веб-браузер XMB, ввести URL-адрес, указывающий на хост PS3Xploit, и позволить ему сделать свою работу.
  2. Так получилось, что ядро предоставляет системные вызовы, которые могут быть использованы для перезаписи файлов системы во флэш-памяти. Кроме того, оболочка (XMB) и ее плагины хранят в памяти процедуры, которые используют эти вызовы.
  3. PS3Xploit не может вызвать эти системные вызовы напрямую из-за защиты “no-execute” гипервизора, не позволяющей эксплойту загружать новый код в пользовательскую среду. Однако он может найти способ перезаписать флэш-память, “позаимствовав” процедуры у оболочки.
  4. Следовательно, PS3Xploit модифицирует стек выполнения Webkit так, чтобы перенаправить выполнение на подпрограммы оболочки. Этот тип атаки (повреждение стека для перенаправления выполнения на другой код, находящийся в памяти) называется программированием, ориентированным на возврат (ROP), и он очень популярен в жанре InfoSec. Одним из способов борьбы с ним - реализация рандомизации расположения адресного пространства (ASLR), которая затрудняет угадывание расположения процедур (называемых гаджетами). Но, как вы можете догадаться, в гипервизоре Sony отсутствует ASLR.
  5. Наконец, эти системные вызовы запускаются с параметрами PS3Xploit, и таким образом они заменяют файлы CoreOS (первая часть операционной системы, хранящаяся во флэш-памяти) на исправленные {{< cite “anti_piracy-flash_writer]}}.
  6. Теперь консоль способна устанавливать неофициальные обновления программного обеспечения, и пользователь может этим воспользоваться для установки кастомной прошивки. Правда, пока что он не может понизить версию системы, но после установки актуального CFW пользователь может установить дополнительные утилиты для понижения версии системы, и если захочет, и установить более улучшенную CFW.

Как видите, этот подарок с небес вернул кастомные прошивки в центр внимания и сделал аппаратные даунгрейдеры и ODE устаревшими. С другой стороны, для тех моделей, которые не могли установить CFW любым способом (непрошиваемые), позже командой был предложен другой пакет эксплойтов, PS3Hen. Он фокусировался на включении подмножества функций CFW (включая возможность запуска хоумбрю). Этот пакет устанавливает запись в XMB, и пользователь должен запускать его каждый раз при включении консоли, чтобы снова активировать хоумбрю.

Частичный ответ Sony

К счастью, Sony предприняла лишь небольшие шаги, чтобы заблокировать PS3Xploit (возможно, потому, что такой поворот событий произошел спустя годы после того, как преемник PS3, PlayStation 4, появился в магазинах). Они выпустили несколько системных обновлений, которые не исправили эту цепочку эксплойтов, но удалили процедуру, используемую в Webkit для начальной загрузки цепочки. В ответ хакеры опубликовали слегка измененные обновления ПО, которые содержали восставленную точку входа (и почему-то их не нужно было заново подписывать) [93]. Эти пользовательские обновления были названы Гибридной прошивкой (Hybrid firmware, HFW). На момент написания этой статьи, они являются единственной возможностью запускать хоумбрю на непрошиваемых моделях.

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


Вот и всё, ребята

Image
Две PS3, на одной из которых игра, “которую нельзя называть”.
Несмотря на забагованный геймплей и необычную сюжетную линию, мне вполне понравился этот жанр.

Вы добрались до конца!

Буду откровенен, я изначально планировал это сделать за 2 месяца, однако это растянулось на целое лето (и вы знаете почему). В любом случае, я надеюсь, что это помогло вам расширить свои знания об этой системе и позволило вам понять причины технологического прогресса в ту эпоху. Таким образом, теперь вы можете мыслить шире популярных слухов, постоянно повторяемых массами.

Если вам интересно, для этой статьи я использовал три модели PS3:

Хоть я много раз повторял, что Cell был революционной технологией, вы, возможно, заметили, что я не упомянул, насколько ненадежными оказались ранние модели. Это был первый раз, когда я услышал о неисправности консоли, просто некоторое время поиграв в игру. И правда, эти штуки съедают электричество как динозавры и греются как печка (пластиковая печка). К счастью, у меня была модель Slim (которую следует назвать “рабочей” моделью)… Стремительная эпоха была, да?

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

До скорых встреч!
Rodrigo


Помощь проекту

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

Donate with PayPal
Become a Patreon

Вы также можете купить цифровую версию книги на английском языке. Я отношусь к прибыли как к пожертвованиям.

Image

Большое спасибо следующим людям за их пожертвование:

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


Copyright and permissions

This work is licensed under a Creative Commons Attribution 4.0 International License. You may use it for your work at no cost, even for commercial purposes. But you have to respect the license and reference the article properly. Please take a look at the following guidelines and permissions:

Article information and referencing

For any referencing style, you can use the following information:

For instance, to use with BibTeX:

@misc{copetti-ps3,
    url = {https://classic.copetti.org/writings/consoles/playstation-3/},
    title = {PlayStation 3 Architecture - A Practical Analysis},
    author = {Rodrigo Copetti},
    year = {2021}
}

or a IEEE style citation:

[1]R. Copetti, "PlayStation 3 Architecture - A Practical Analysis", Copetti.org, 2021. [Online]. Available: https://classic.copetti.org/writings/consoles/playstation-3/. [Accessed: day- month- year].

Special use in multimedia (Youtube, Twitch, etc)

I only ask that you at least state the author’s name, the title of the article and the URL of the article, using any style of choice.

You don’t have to include all the information in the same place if it’s not feasible. For instance, if you use the article’s imagery in a Youtube video, you may state either the author’s name or URL of the article at the bottom of the image, and then include the complete reference in the video description. In other words, for any resource used from this website, let your viewers know where it originates from.

This is a very nice example because the channel shows this website directly and their viewers know where to find it. In fact, I was so impressed with their content and commentary that I gave them an interview 🙂.

Appreciated additions

If this article has significantly contributed to your work, I would appreciate it if you could dedicate an acknowledgement section, just like I do with the people and communities that helped me.

This is of course optional and beyond the requirements of the CC license, but I think it’s a nice detail that makes us, the random authors on the net, feel part of something bigger.

Third-party publishing

If you are interested in publishing this article on a third-party website, please get in touch.

If you have translated an article and wish to publish it on a third-party website, I tend to be open about it, but please contact me first.


Источники / Продолжить чтение

Борьба с пиратством

Бонус

Процессор

Игры

Графика

Ввод/вывод

Операционная система

Фотографии