что поддержка передачи одноранговых транзакций между иерархическими доменами через root является не обязательной и зависит от реализации. Но что это в точности означает?
Я, конечно, не могу заглянуть в голову автора, но думаю, что это обозначает именно то, что я процитировал выше из спецификации PCIe Gen 3. Что поддержка P2P транзакций для Root Complex optional.
В PCI(e) каждое устройство может быть инициатором транзакции на шине (если специально спроектировано для этого, конечно). Обычно это используется для обмена с буферами в SDRAM, так как самостоятельное чтение из адресов устройств процессором на PCI особо неэффективно: процессор может прочитать одной командой один свой регистр максимум, а задержка на транзакцию на шине нередко огромна. Устройство же может прокачать одной транзакцией большой блок данных целиком. Для этого выполняемый процессором драйвер устройства резервирует в оперативке неотсвапливаемый буфер и передаёт его физический адрес устройству вместе с командами чтения или записи, а само устройство уже самостоятельно запускает в шину транзакцию чтения или записи нужного ему блока данных. В принципе, можно передать устройству в задании и адрес в памяти другого устройства, но, во-первых, инфраструктура железа должна суметь зароутить эту транзакцию не только между устройством и оперативкой (которая находится над Root Complex, вообще говоря, вне PCIe), но и между двумя устройствами на шине. Во-вторых, драйвера этих двух устройств должны хорошо знать друг друга и работать согласованно, так как, насколько мне известно, подобная совместная работа с данными без захода их в оперативку выходит за рамки стандартных моделей драйверов.
то при обмене данными они уменьшают общую производительность системы? Как это может проявляться? Как замедление обмена данными с южным мостом?
Если данные качаются через оперативку, а не напрямую, то и пропускная способность оперативки отожрётся, разумеется.