Я не думаю, что проблема здесь в Арбитраже, и настройка его настроек требует поддержки платы, а также модификации ядра. ВК расширенный интерфейс возможность заниматься в ядре Линукс здесь: http://lxr.free-electrons.com/source/drivers/pci/vc.c
Я написал драйверы для пользовательских плат PCIe в Linux, и алгоритм маршрутизации трафика между платами не показал себя проблемой в прошлом, если у вас нет очень необычного вариант использования - чрезвычайно длительные передачи с требованиями задержки почти в реальном времени (в этом случае вы не должны использовать PCIe).
что может непосредственно повлиять на этот тип производительности, и гораздо более легко решить, топология шины сама по себе, хотя влияние, как правило, едва измеримы.
на машине, выполните команду lspci как:
lspci -tv
который покажет вам вид дерева PCIe интерфейсы и маршрут к ЦП, которые они берут. С большинством процессоров вы будете иметь некоторые слоты, которые идут непосредственно к процессору и другие, которые проходят через чип моста (см. чипсет Intel x99
эти мосты вводят задержку и возможность более медленной пропускной способности. Прямой процессор, предназначенный для высокопроизводительных устройств, таких как видеокарты. К начальной точке, глубоко в микро-коде процессора могут быть оптимизации, которые еще больше ухудшают мостовые связи. Чтобы копнуть глубже в оценке производительности и маршрутизации слотов PCIe продолжить в sysfs.
под /sys / bus / pci / slots / будет список слотов pci (физических) в вашей системе. В нем находится виртуальный файл, который связывает адрес шины < - - - - > физический
шлиц.
в /sys / bus / pci / devices находится список всех устройств (здесь lspci получает информацию).
проходя через каждое из устройств, вы можете увидеть всю информацию, предоставляемые ядро на них, драйверы, связанные с ними, процессор, связанный с устройством (на нескольких процессорных системах), среди прочего.
Edit - я не упоминал некоторые очевидные вещи, которые, как я полагаю, вы исключили, но на всякий случай:
1. У разных слотов есть по крайней мере столько полос, сколько досок?
2. Есть ли несоответствие спецификации-например, плата pcie 3, один слот 3, а другой 2?
3. Обсуждали ли вы эту проблему с поставщик платы и / или разработчик драйвера за их пределами, признающий iy? Они могут быть осведомлены о некоторых случайных опечатках относительно этого
Если вы обеспечиваете специфические детали, то я могу обеспечить специфическую консультацию.
помимо топологии (это более быстрое устройство на прямом пути процессора, а другое-нет), не зная тип набора микросхем / процессора, который вы используете, я могу предложить только общие советы, но три области, которые я бы начал смотреть are:
задержка прерывания: если прерывание для платы связано с ЦП / ядром, которое обрабатывает другие устройства с высокой скоростью прерывания, вы получите снижение производительности. Есть ли другой контекст ядра, тяжелый подъем на этом ядре? смотрите /proc / interrupts, чтобы увидеть, какие другие модули ядра используют этот процессор для обработки прерываний и количество/скорость, с которой они происходят. Попробуйте настроить сходство ЦП для этого устройства в /proc / irw ... smp_affinity. SMP affinity-это маска, Если у вас 8 ядер и вы ничего не указали, она будет установлена на FF (8 1). Если вы установите его, например, 0x02, это заставит ядро 2 обрабатывать IRQ. Если вы не знаете, что решаете конкретную проблему, форсирование этих изменений может легко ухудшить ситуацию.
поддержка прерываний: посмотрите, использует ли одно из устройств прерывания MSI-x или MSI, а другое-стандартное (электрическое) прерывание. Иногда мосты не поддерживают реализация MSI плат (MSI означает сообщение, сигнализировавшее прерывание-вместо электрического прерывания его просто пакет, который передается по самой шине). Если устройство, как правило, использует несколько прерываний, но должно работать только с одним из-за этого, это может быть трудно обнаружить, если вы непосредственно не ищете его, и может вызвать проблемы с производительностью.
характеризуют производительность. В ядре существует множество инструментов для сбора данных о производительности. Единственное, что у них есть как правило, они плохо документированы и обычно не поддерживаются. Но с учетом сказанного, я бы посмотрел на использование Ftrace для характеристики переводов dma с каждой платы и задержки IRQ для каждой из них. Вы можете получить статистическую информацию, а также конкретные сведения о событиях останеца. Вы можете начать поиски в этом здесь: http://elinux.org/Ftrace
В общем, я настоятельно не рекомендую гадить в очень низких настройках уровня без как можно более полного понимание того, что вы пытаетесь исправить (не проблема исправить, но основная первопричина). 99% времени вы в конечном итоге поворачиваете "ручки" ради этого, но не понимая, почему или в чем заключается первоначальная проблема, как можно оценить эффективность данной настройки (как немедленную, так и с точки зрения долгосрочной стабильности).
Я активно использую ftrace для общей отладки ядра и настоятельно рекомендую его. Если вы хотите абстрагироваться немного, есть обертки вокруг ftrace, которые утверждают, что упрощают использование, но я нашел, что дополнительная абстракция просто мутит воду - trace-cmd, kernel shark и т. д. Если вы находитесь на системе red hat, вы можете посмотреть в systemtap - не то же самое, но может предоставить аналогичные данные (и это хорошо поддерживается).