Есть ли у команды системы Linux, который можно назвать изменение арбитражной схемой набор для PCIe устройств?

при зондировании наших плат PCIe мы видим, что все в нашей системе настроено на фиксированную арбитражную схему. Из моих показаний эта схема оставлена поставщику (который, как я предполагаю, является нашей ОС).

Я хотел бы сделать некоторые эксперименты с различными арбитражными схемами, чтобы увидеть, как это влияет на наши ставки DMA.

для контекста, у нас есть материнская плата duel socket с 6 слотами PCIe, 3 для CPU1 и 3 для CPU2. Одна из наших плат находится на слоте для одного процессора и другой платы находится на слоте CPU2. Это идентичные платы с одинаковым программным обеспечением. Мы передаем данные DMA из системной памяти в память, расположенную на наших платах. Тариф DMA меняет между 2 досками где одно типично всегда быстре чем другая доска значительно тарифом.

наш поставщик ПК подтвердил, что другие клиенты видят это несоответствие, когда одной плате, по-видимому, предоставляется более высокий приоритет над другой на разных слотах PCIe.

есть ли способ, чтобы нажать в этот порт VC возможность зарегистрировать изменить схему арбитража?

Если бы я не перечислил правильный регистр, который отрегулировал бы арбитражную схему, не могли бы вы сказать мне, какой из них правильный?

15
задан shaboinkin
19.04.2023 22:16 Количество просмотров материала 3565
Распечатать страницу

1 ответ

Я не думаю, что проблема здесь в Арбитраже, и настройка его настроек требует поддержки платы, а также модификации ядра. ВК расширенный интерфейс возможность заниматься в ядре Линукс здесь: 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 - не то же самое, но может предоставить аналогичные данные (и это хорошо поддерживается).

2
отвечен Argonauts 2023-04-21 06:04

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх