Компанія NVIDIA представила процесор Vera як окрему систему на кристалі (SoC), яка позиціонується як альтернатива Arm для серверних рішень та може бути використана сторонніми виробниками у якості конкурента для Intel Xeon чи AMD EPYC. Однак у процесі експлуатації спільно з відеокартами або прискорювачами штучного інтелекту від інших виробників, зокрема AMD, фіксуються технічні проблеми.
Про це розповідає ProIT
Причини виникнення та особливості проблеми
В основі труднощів лежить апаратний баг, який виникає під час взаємодії процесорів Vera з відеокартами сторонніх виробників. Проблема пов’язана з тим, як PCIe-контролери в складі NVIDIA Vera генерують адреси пам’яті. За певних умов, коли йдеться про операції запису у PCIe Memory-Mapped I/O (MMIO), контролери можуть створювати некоректні адреси, що порушує стабільність зв’язку з підключеними пристроями. Зокрема це відбувається, коли процесор здійснює запис з частковим байтовим дозволом у визначені MMIO-області.
Ситуація ускладнюється, якщо такі області пам’яті відзначені атрибутом Arm Normal Non-Cacheable (MT_NORMAL_NC), що може призвести до серйозних проблем сумісності. Це пов’язано з тим, що Arm передбачає менш сувору послідовність доступу до пам’яті для таких областей, що у результаті збільшує ризик генерації некоректних адрес, пошкодження даних і навіть збоїв пристроїв PCIe. Особливо критично це проявляється при виконанні завдань, пов’язаних з інтенсивним використанням DMA — наприклад, під час навчання моделей штучного інтелекту або масштабних обчислень HPC.
“GPU NVIDIA розроблені з урахуванням особливостей Vera та їхнього специфічного доступу до пам’яті, тому жодних проблем не виникає”.
Як вирішують проблему у різних системах
Для мінімізації ризиків NVIDIA використовує власні ядра Linux з апаратно-специфічними патчами, які дозволяють обійти подібні обмеження. Зокрема, у NV-Kernels передбачений патч, який перетворює MT_NORMAL_NC на Device-nGnRE (non-Gathering, non-Reordering, Early acknowledgement), забезпечуючи більш суворе впорядкування доступу до пам’яті. Хоча загальна продуктивність пристроїв зберігається, у деяких сценаріях, чутливих до затримок вводу/виводу, можливе певне зниження швидкодії.
Подібний баг зустрічається і в системах на базі Ampere Computing Altra, що також використовують архітектуру Arm. Їхні PCIe-контролери іноді генерують недійсні адреси при записі у MMIO-області під навантаженням, але Ampere застосовує аналогічні рішення для обходу проблеми. Це підтверджує, що джерело несправності криється в особливостях роботи з пам’яттю в Arm-системах при підключенні зовнішніх PCIe-пристроїв. Водночас відомості про зниження продуктивності при роботі таких систем поки не надходили.