Как установить Intel SSD NVME irq Affinity на Ubuntu 16.04 LTS?

Спасибо за чтение этого вопроса (я везде искал, чтобы найти существующий ответ без успеха...) Вопрос в заголовке, но здесь более подробно:

Вот моя установка:

  • Я работаю с сервером S2600WT от Intel с двумя процессорами (Xeon v4 с 24 ядрами на процессор), работающими на Ubuntu 16.04 LTS.
  • Ядра [00..23] принадлежат ЦПУ № 1
  • Ядра [24..47] принадлежат процессору № 2
  • У меня есть 2 твердотельных накопителя Intel: DC3700 подключен к PCIe ЦПУ № 1 (PCIe x4-gen3 каждый через NVME)
  • У меня есть плата сбора данных (Innovative X6-1000M) на другом слоте PCIe CPU#1 (PCIe x8-gen2)

Мы пытаемся запустить программное обеспечение для сбора данных от нашей компании, которое собирает данные с платы для сбора данных и записывает их на твердотельные накопители.

  1. Когда у меня только один процессор, программа работает как положено, и мы можем записывать со скоростью до 2,4 ГБ / с.
  2. Когда у меня два процессора, у нас программный тупик, и программа зависает. Когда я использую отладчик, я вижу, что программа зависает при попытке записи в SSD.

Таким образом, я попытался бы иметь два ЦП, но запускать программное обеспечение только на ЦП № 1 и направлять все прерывания непосредственно на ЦП № 1.

Для этого я написал файл /proc/irq/defaut_smp_affinty в 0000,00000004, Это работает для платы сбора данных, я вижу, что все прерывания напрямую передаются в ядро ​​№ 2 (на ЦПУ № 1)

Тем не менее, я вижу, что прерывания моего NVMe по-прежнему распределяются по всем ядрам, а также по ядрам CPU#2 (ядра 24..47).

Я пытался сделать:

cat /proc/interrupts | grep -i nvme

чтобы увидеть номер прерывания, принадлежащего твердотельному накопителю NVMe, а затем вручную изменить файл (irq [157–186])

sudo -i echo 0000,00000004 > /proc/irq/186/smp_affinity
permission denied

Я пробовал также:

sudo sh -c "echo 0000,00000004 > /proc/irq/186/smp_affinity"
sh: echo I/O error

sudo sh -c "echo 1,3 > /proc/irq/186/smp_affinity_list"
sh: echo I/O error

Я не могу изменить эти файлы.

Я также пытался перезапустить сервис irqbalance таким образом:

export IRQBALANCE_BANNED_CPUS=ffff,fffffff0
sudo service irqbalance stop
sudo irqbalance --debug

Я тоже пробовал numactl запустить программу на CPU#1 CORE#2

Но пока ничего не получалось, я вижу, что некоторые прерывания NVMe все еще принимаются ЦПУ № 2. Есть ли у вас какие-либо идеи, как мне удалось бы передать прерывания NVM только на CPU # 1 и полностью исключить CPU # 2 из моего программного обеспечения?

Большое спасибо за ответ, я надеюсь, что я был достаточно откровенен, чтобы вы мне помогли:) в противном случае, просто попросите более подробную информацию.

EDIT_1: мне удалось заставить мое программное обеспечение работать, отключив все ядра CPU # 2 с помощью команды:

for i in {24..47} do; sudo sh -c "echo 0 > /sys/devices/cpu/cpu$i/online"

Проблема в том, что, делая это, я просто деактивирую все CORES ЦПУ № 2 и просто уменьшаю свою вычислительную мощность на два. Но это дает мне больше подсказок, что запуск программного обеспечения только на одном процессоре работает.

0 ответов

Другие вопросы по тегам