Блог дилетанта широкого профиля

Как я преодолевал ограничения Ryzen'а

07 января 2022 года

Домашний компьютер у меня построен на базе процессора AMD Ryzen 7 PRO 2700 и мат. платы на чипсете AMD B450. В мат. плату подключены два SATA3 SSD, которые, в свою очередь, собраны в RAID1 средствами ОС. И, до недавнего времени, эта, на первый взгляд, весьма производительная конфигурация, умудрялась безбожно "лагать" при некотором стечении обстоятельств.

Типичный пример: начинаешь качать что-то массивное с интернета (торрент поставил на закачку), а у тебя графический интерфейс теряет отзывчивость и начинает "залипать". Запускаешь какой-нибудь GVim (или даже Vim в консоли), а он виснет. Открываешь файловый браузер, и он тоже виснет… А если захочешь что-нибудь посмотреть с флешки, то у тебя есть шанс окончательно "повесить" машину, но только если эта флешка будет воткнута в определённый разъём. Не каждый разъём USB позволяет завесить машину наглухо, однако.

Странное описание проблемы? Странное. Спору нет. Но, на самом деле, я такое уже видел. Когда coreboot осваивал и игрался с системами на базе Sandy Bridge. Я тогда методом научного тыка пытался выработать лучшие варианты "намазывания" прерываний на PCI-мосты и устройства. И симптомы, перечисленные мною выше, это не проявление известного бага #12309. Нет. Это просто "ширины" PCIe не хватило, чтобы все устройства на отдельные линии посадить. Или на PCI-мост назначали прерывания, как на устройство, а не как на мост, собственно. А может сразу и то, и другое.

Проверим? lspci выглядит так:

-[0000:00]-+-00.0  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Root Complex
                          +-00.2  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) I/O Memory Management Unit
                          +-01.0  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
                          +-01.3-[01-07]--+-00.0  Advanced Micro Devices, Inc. [AMD] 400 Series Chipset USB 3.1 XHCI Controller
                          |               +-00.1  Advanced Micro Devices, Inc. [AMD] 400 Series Chipset SATA Controller
                          |               \-00.2-[02-07]--+-00.0-[03]--
                          |                               +-04.0-[04]--
                          |                               +-05.0-[05]--
                          |                               +-06.0-[06]--
                          |                               \-07.0-[07]----00.0  Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
                          +-02.0  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
                          +-03.0  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
                          +-03.1-[08]--+-00.0  Advanced Micro Devices, Inc. [AMD/ATI] Lexa XT [Radeon PRO WX 3200]
                          |            \-00.1  Advanced Micro Devices, Inc. [AMD/ATI] Baffin HDMI/DP Audio [Radeon RX 550 640SP / RX 560/560X]
                          +-04.0  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
                          +-07.0  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
                          +-07.1-[09]--+-00.0  Advanced Micro Devices, Inc. [AMD] Zeppelin/Raven/Raven2 PCIe Dummy Function
                          |            +-00.2  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Platform Security Processor
                          |            \-00.3  Advanced Micro Devices, Inc. [AMD] Zeppelin USB 3.0 Host controller
                          +-08.0  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
                          +-08.1-[0a]--+-00.0  Advanced Micro Devices, Inc. [AMD] Zeppelin/Renoir PCIe Dummy Function
                          |            +-00.2  Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode]
                          |            \-00.3  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) HD Audio Controller
                          +-14.0  Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller
                          +-14.3  Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge
                          +-18.0  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 0
                          +-18.1  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 1
                          +-18.2  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 2
                          +-18.3  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 3
                          +-18.4  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 4
                          +-18.5  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 5
                          +-18.6  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 6
                          \-18.7  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 7
               

Что мы тут видим? А я был прав! Все проблемные устройства: SATA-контроллер, сетевой контроллер и проблемный контроллер USB, все они расположены за одним PCI-мостом (на листинге выделен красным цветом)! И мост этот, похоже, — чипсет материнской платы. А что там ещё за пустые порты? Это, друзья мои, порты PCI-e! Такие дела. Все порты, доступные пользователю, за исключением M2 и PCIe x16, подключены через PCI-мост чипсета. Которого не хватает уже изначально, даже на встроенные в чипсет устройства.

Очень хорошо, что мне удалось найти описание микроархитектуры Zen перед тем, как начал втыкать контроллеры в штатные разъёмы расширения. Это могло закончится разочарованием. Вместо этого я заказал… сами знаете где… контроллер SATA под разъём M2. Новый листинг lspci (установленный контроллер выделен зелёным цветом, чипсет, по-прежнему, — красным):

-[0000:00]-+-00.0  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Root Complex
                          +-00.2  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) I/O Memory Management Unit
                          +-01.0  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
                          +-01.1-[01]----00.0  JMicron Technology Corp. JMB58x AHCI SATA controller
                          +-01.3-[02-08]--+-00.0  Advanced Micro Devices, Inc. [AMD] 400 Series Chipset USB 3.1 XHCI Controller
                          |               \-00.2-[03-08]--+-00.0-[04]--
                          |                               +-04.0-[05]--
                          |                               +-05.0-[06]--
                          |                               +-06.0-[07]--
                          |                               \-07.0-[08]----00.0  Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
                          +-02.0  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
                          +-03.0  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
                          +-03.1-[09]--+-00.0  Advanced Micro Devices, Inc. [AMD/ATI] Lexa XT [Radeon PRO WX 3200]
                          |            \-00.1  Advanced Micro Devices, Inc. [AMD/ATI] Baffin HDMI/DP Audio [Radeon RX 550 640SP / RX 560/560X]
                          +-04.0  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
                          +-07.0  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
                          +-07.1-[0a]--+-00.0  Advanced Micro Devices, Inc. [AMD] Zeppelin/Raven/Raven2 PCIe Dummy Function
                          |            +-00.2  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Platform Security Processor
                          |            \-00.3  Advanced Micro Devices, Inc. [AMD] Zeppelin USB 3.0 Host controller
                          +-08.0  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
                          +-08.1-[0b]--+-00.0  Advanced Micro Devices, Inc. [AMD] Zeppelin/Renoir PCIe Dummy Function
                          |            \-00.3  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) HD Audio Controller
                          +-14.0  Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller
                          +-14.3  Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge
                          +-18.0  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 0
                          +-18.1  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 1
                          +-18.2  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 2
                          +-18.3  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 3
                          +-18.4  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 4
                          +-18.5  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 5
                          +-18.6  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 6
                          \-18.7  Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 7
               

И да, баг больше не проявляется. Вынос SATA контроллера "ближе" к процессору решил проблему. Ну а подключения между мостом и процессором вполне хватает для оставшихся USB-контроллера (я с него использую только usb 2.0) и гигабитной сети.

А к чему эта заметка, собственно? А к тому, что долго я понять не мог, отчего же так рванули цены вверх на серверное железо. Теперь же понял: всё выше описанное мною — это не следствие просчётов в проектировании набора системной логики. Нет. Это сознательное "закручивание гаек". Ведь ещё совсем недавно, простенький сервачок под сайт легко мог быть построен на обычной потребительской компонентной базе, и её "за глаза" бы хватило. Если удастся ещё и память ECC’шную поставить, то и, считай, больше ничего и не надо. А теперь нет. Современная компонентная база ограничивает пользователя возможностью установить в свой компьютер только видеокарту и один M2-накопитель. Хочешь чего-то большего? Покупай железку за в разы большие деньги!

Ты чем-то недоволен? Зачем тебе что-то другое, когда мы тебе, в твою материнскую плату, вставили такую красивую подсветку? И в BIOS’е крутилка есть, которая тебе делает разгон. Что? ЛГБТ-подсветка не радует тебя?! Ты не испытываешь радости от роста производительности на 1% от разгона, и считаешь, что это не стоит того, чтобы убивать память и процессор?! Да что ты за человек-то такой?

Ну а если серьёзно, то мы всё ждали, когда же энергоэффективные архитектуры, типа того же ARM’а, догонят по возможностям ввода-вывода монстра x86. А случилось обратное: потребительский x86 растерял свои преимущества, притом, похоже, исключительно из соображений маркетинга и экономии.

Выбор заметок по дате