Как я преодолевал ограничения Ryzen'а
Домашний компьютер у меня построен на базе процессора 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 растерял свои преимущества, притом, похоже, исключительно из соображений маркетинга и экономии.