Jump to content

прерывания по ядрам проца


Recommended Posts

  Всем доброго дня!

  Задача простая, для спеца, помогите адаптировать скрипт для привязки прерываний по ядрам проца как вариант отсюда:

https://dadv.livejournal.com/139366.html

у меня два камня по 6-сть ядер, сетевые 10Г.

Link to post
Share on other sites
  • Replies 50
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

[root@nas ~]# netstat -w1 -I ix1             input            ix1           output    packets  errs idrops      bytes    packets  errs      bytes colls     266321     0     0  344035762     1376

Будешь, будешь никуда не денешся.   https://forum.nag.ru/index.php?/topic/155130-freebsd-121-8xigb-schastya-ne-sluchilos-pomogite/

А вот в линуксе... ?

Posted Images

  On 12/16/2020 at 1:19 PM, a_n_h said:

  Всем доброго дня!

  Задача простая, для спеца, помогите адаптировать скрипт для привязки прерываний по ядрам проца как вариант отсюда:

https://dadv.livejournal.com/139366.html

у меня два камня по 6-сть ядер, сетевые 10Г.

Expand  

А что не так из коробки? Какая версия ос?

Link to post
Share on other sites
  On 12/16/2020 at 1:39 PM, maxx said:

А что не так из коробки? Какая версия ос?

Expand  

FreeBsd, шейпер грузит одно ядро. В ссылке это все расписано, но под сетевую igb, учиться не на чем, а экспериментировать на рабочем - не буду.

 

Link to post
Share on other sites
  On 12/16/2020 at 2:12 PM, KaYot said:

Ну если там светлые умы во главе с Иваном не нашли решения - значит его нет.

Какая версия bsd?

Expand  

нужно немного другое - разбросать прерывания сетевых на все ядра кроме 0-го.

цитирую отсюда:

https://dadv.livejournal.com/139366.html

"мы получим разнесение нулевых очередей разных интерфейсов igb по разным ядрам".

 

Link to post
Share on other sites
  On 12/16/2020 at 2:22 PM, a_n_h said:

нужно немного другое - разбросать прерывания сетевых на все ядра кроме 0-го.

цитирую отсюда:

https://dadv.livejournal.com/139366.html

"мы получим разнесение нулевых очередей разных интерфейсов igb по разным ядрам".

 

Expand  

Так то для 7 фрихи. уже все переписанно 10 раз. И да, уже обсасывалось тут на форуме, для фрихи не нужно много ядер, нужна частоста.

Link to post
Share on other sites

Та до сраки тот скрипт. Помню во времена 7 фрихи помогало просто прибивание думминет в статику к 0 ядру. И нагрузка падала в разы.
man cpuset

Link to post
Share on other sites
  On 12/16/2020 at 1:19 PM, a_n_h said:

  Всем доброго дня!

  Задача простая, для спеца, помогите адаптировать скрипт для привязки прерываний по ядрам проца как вариант отсюда:

https://dadv.livejournal.com/139366.html

у меня два камня по 6-сть ядер, сетевые 10Г.

Expand  

 

Если пппое то даже не играйся. Страдания очищают.

Link to post
Share on other sites

Уточню, я хочу убрать прерывания сетевых с 0-го ядра и оставить на нем только шейпер. Кто может помочь со скриптом?

Link to post
Share on other sites
  On 12/17/2020 at 8:01 AM, Чучундра said:

А что в Линуксе ? Какойто свой особый механизм RSS отличный от того который Inter заложил в архитектуру  82598EB ?

Expand  

Да, там в наличии софт-RSS называемый RPS. Можно включить на абсолютно любом железе и любом трафике.

Link to post
Share on other sites
  On 12/16/2020 at 8:43 PM, a_n_h said:

Кто может помочь со скриптом?

Expand  

 

Если не получается сделать автоматический скрипт, всегда же можно сделать руками.

Смотрим какие прерывания каких сетевых куда привязалась

#vmstat -ai | grep ix

Скорее всего лучше привязывать одну сетевую к одному процессору (чтобы избежать накладных расходов).

 

Привязываем первую сетевую

cpuset -l 0 -x 264 - пропускаем если хотим освободить 1е ядро.
cpuset -l 1 -x 265
cpuset -l 2 -x 266
cpuset -l 3 -x 267
cpuset -l 4 -x 268
cpuset -l 5 -x 269

Привязываем вторую сетевую

cpuset -l 7 -x 270 - пропускаем если хотим освободить 1е ядро.
cpuset -l 8 -x 271
cpuset -l 9 -x 272
cpuset -l 10 -x 273
cpuset -l 11 -x 273
cpuset -l 12 -x 273

Вернуть всё назад:

cpuset -l all

 

Но вот в линуксе .... :)))
 

  • Thanks 1
Link to post
Share on other sites
  On 12/17/2020 at 8:21 AM, KaYot said:

Да, там в наличии софт-RSS называемый RPS. Можно включить на абсолютно любом железе и любом трафике.

Expand  

 

И как эффективность этих софтварных костылей в сравнении с апаратным RSS ? 

Link to post
Share on other sites
  On 12/17/2020 at 9:14 AM, Чучундра said:

И как эффективность этих софтварных костылей в сравнении с апаратным RSS ? 

Expand  

Шикарно.

Раскидывается любой трафик включая pppoe и qinq.

Настраивается одной командой.

Оверхед по ресурсам незаметный.

Я у себя на БРАСах rss на 82599 и не включал(все те же приколы с pppoe/dual tag), rps работает на ура.

В bsd же был подобный механизм netisr, как я понимаю проблема в 12 версии или с настройками, или вообще этот функционал сломали.

Link to post
Share on other sites
  On 12/17/2020 at 8:31 AM, Sоrk said:

 

Если не получается сделать автоматический скрипт, всегда же можно сделать руками.

Смотрим какие прерывания каких сетевых куда привязалась

#vmstat -ai | grep ix

Скорее всего лучше привязывать одну сетевую к одному процессору (чтобы избежать накладных расходов).

 

Привязываем первую сетевую

cpuset -l 0 -x 264 - пропускаем если хотим освободить 1е ядро.
cpuset -l 1 -x 265
cpuset -l 2 -x 266
cpuset -l 3 -x 267
cpuset -l 4 -x 268
cpuset -l 5 -x 269

Привязываем вторую сетевую

cpuset -l 7 -x 270 - пропускаем если хотим освободить 1е ядро.
cpuset -l 8 -x 271
cpuset -l 9 -x 272
cpuset -l 10 -x 273
cpuset -l 11 -x 273
cpuset -l 12 -x 273

Вернуть всё назад:

cpuset -l all

 

Но вот в линуксе .... :)))
 

Expand  

не могу понять как увидеть, что ядро пропущено?

сейчас у меня так:

 

irq274: ix0:rxq0             29596385622       3922
irq275: ix0:rxq1             33744311933       4472
irq276: ix0:rxq2             33954968789       4500
irq277: ix0:rxq3             35729378578       4735
irq278: ix0:rxq4             33376476692       4423
irq279: ix0:rxq5             34195852351       4531
irq280: ix0:rxq6             34520995755       4575
irq281: ix0:rxq7             33012787218       4375
irq282: ix0:rxq8             29012983261       3845
irq283: ix0:rxq9             31046493718       4114
irq284: ix0:rxq10            30474822199       4038
irq285: ix0:rxq11            29883343925       3960
irq286: ix0:aq                         1          0
irq287: ix1:rxq0             31508582829       4175
irq288: ix1:rxq1             37638595294       4988
irq289: ix1:rxq2             38130247994       5053
irq290: ix1:rxq3             41004433258       5434
irq291: ix1:rxq4             37474567508       4966
irq292: ix1:rxq5             38623631542       5118
irq293: ix1:rxq6             38875899365       5152
irq294: ix1:rxq7             36431069859       4828
irq295: ix1:rxq8             28823369510       3819
irq296: ix1:rxq9             34704245264       4599
irq297: ix1:rxq10            33799119202       4479
irq298: ix1:rxq11            32901409324       4360
 

как правильно освободить 1-е ядро 1-го проца?

Link to post
Share on other sites
  On 12/17/2020 at 10:37 AM, a_n_h said:

как правильно освободить 1-е ядро 1-го проца?

Expand  

 

привязать 274-285 к ядрам 1-5 первого процессора

287-298 к ядрам к ядрам 0-6 второго процессора

 

логично предположить что тогда ни одно прерывание сетевой карты не будет привязано 0-му ядру первого процессора.

 

список ядер можно посмотреть как-то так:
sysctl dev.cpu

Link to post
Share on other sites

как то так

 

cpuset -l 0 -t $(procstat -t 0 | awk '/dummynet/ {print $2}')

CORE=0
for IRQS in `vmstat -i|grep ix0:q|awk '{print($1)}'|sed s/[^0-9]//g`; do
let "CORE+=1" >/dev/null
cpuset -l $CORE -x $IRQS
done

CORE=0
for IRQS in `vmstat -i|grep ix1:q|awk '{print($1)}'|sed s/[^0-9]//g`; do
let "CORE+=1" >/dev/null
cpuset -l $CORE -x $IRQS
done

CORE=0
for procid in `procstat -a -t |grep ix0:q|grep intr|awk '{print($2)}'|sed s/[^0-9]//g`; do
let "CORE+=1" >/dev/null
cpuset -l $CORE -t $procid
done

CORE=0
for procid in `procstat -a -t |grep ix1:q|grep intr|awk '{print($2)}'|sed s/[^0-9]//g`; do
let "CORE+=1" >/dev/null
cpuset -l $CORE -t $procid
done

  • Thanks 1
Link to post
Share on other sites
  On 12/17/2020 at 10:24 AM, KaYot said:

Раскидывается любой трафик включая pppoe и qinq.

Expand  

 

qiniq я раскидывал на апаратном RSS, как оказалось после прочтения даташита RSS в 82599 поддерживает двойной vlan

Link to post
Share on other sites
  On 12/17/2020 at 2:53 PM, Чучундра said:

 

qiniq я раскидывал на апаратном RSS, как оказалось после прочтения даташита RSS в 82599 поддерживает двойной vlan

Expand  

Но надо патчить драйвер. А с не-IP вообще ничего не поможет.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By mac
      Глюк в тому, що один (так - тільки один) mac адрес onu існує в білінгу у вигляді строки. Це трохи заважає.
      olt - bdcom gepon.
      Наскільки зрозумів, це виключно проблема реалізації snmpwalk у freebsd, де snmpwalk може на свій розсуд віддати mac адресу не як hex-string, а як звичайний string.
      Можливо snmpwalk тригериться на якомусь символі, мені невідомо.
       
      # tcpdump -vv -i em0 udp port 161 and host olt and host ub | grep "3320.101.10.4.1.1.241 ... olt.snmp > ub.47940: [udp sum ok] { SNMPv2c C="*****" { GetResponse(44) R=93278354 E:3320.101.10.4.1.1.241="8LO"W*" } } ub.47940 > olt.snmp: [udp sum ok] { SNMPv2c C="*****" { GetNextRequest(34) R=93278355 E:3320.101.10.4.1.1.241 } } snmpwalk -c***** -v2c -t5 olt .1.3.6.1.4.1.3320.101.10.4.1.1 SNMPv2-SMI::enterprises.3320.101.10.4.1.1.241 = STRING: "8LO\"W*" snmpwalk -Ox -c***** -v2c -t5 olt .1.3.6.1.4.1.3320.101.10.4.1.1 SNMPv2-SMI::enterprises.3320.101.10.4.1.1.241 = Hex-STRING: 38 4C 4F 22 57 2A  
      Це стосується таких параметрів у snmp конфізі bdcom
       
      [signal] MACINDEX=".1.3.6.1.4.1.3320.101.10.4.1.1" [misc] ONUINDEX=".1.3.6.1.4.1.3320.101.11.1.1.3"  
      За для усунення глюку спробував трошки змінити код і завдати тип snmp параметру явно у ./api/libs/api.ponbdcom.php у function collect()
      Це працює. Мабуть станеться у нагоді:
       
      # diff api.ponbdcom.php{.new,.bak} 37c37 < $onuIndex = $this->snmp->walk('-Ox ' . $oltIp . ':' . self::SNMPPORT, $oltCommunity, $onuIndexOid, self::SNMPCACHE); --- > $onuIndex = $this->snmp->walk($oltIp . ':' . self::SNMPPORT, $oltCommunity, $onuIndexOid, self::SNMPCACHE); 91c91 < $macIndex = $this->snmp->walk('-Ox ' . $oltIp . ':' . self::SNMPPORT, $oltCommunity, $macIndexOID, self::SNMPCACHE); --- > $macIndex = $this->snmp->walk($oltIp . ':' . self::SNMPPORT, $oltCommunity, $macIndexOID, self::SNMPCACHE);  
      P.S. Створив тему, а зараз міркую: а може це глюк у ПЗ olt. Оновлю фірмваре olt та перевірю...
       

    • By a_n_h
      Всем доброго дня и мирного неба!
        После многочисленных экспериментов выяснил, что на последних версиях freebsd  максимум удавалось прокачать до 14 ГБт суммарно трафика со 100% загрузкой процессора. На том-же железе но с установленной freebsd 11.2 прокачивается до 20-ти ГБт суммарно тестового трафика с загрузкой процессора около 50%. 
        Подскажите, что можно убрать или наоборот добавить в систему с freebsd 13,3 для получения аналогичного результата...
    • By mac
      Здається, після оновлення PHP 7.4 до PHP 8.2 feesharvester припинив працювати:
       
      /usr/local/bin/curl "http://127.0.0.1/billing/?module=remoteapi&key={SERIAL}&action=feesharvester" <br /> <b>Fatal error</b>: Uncaught TypeError: Unsupported operand types: string - string in {UBPATH}/billing/api/libs/api.fundsflow.php:570 Stack trace: #0 {UBPATH}/billing/modules/remoteapi/feesharvester.php(22): FundsFlow-&gt;harvestFees('2024-01') ...  
      Невеличке розслідування врешті з'ясувало, що це через наявність пробілу у деяких логінах абонентів. Як так сталося? Тому що інколи був неуважно додан трейлінг пробіл до номеру будинка і цей пробіл потрапив до логіну абоненту. Логін абоненту неможливо змінити ніяким чином штатними засобами. Я не розглядаю створення нового абонента для усунення помілки.

      Був обран такий шлях вирішення проблеми. Заміну функції php explode() знайшов у мережі. Мабуть це станеться в нагоді:

       
      diff api.fundsflow.php.bak api.fundsflow.php.new 559c559 < $eachfee = explode(' ', $eachline); --- > $eachfee = preg_split("~(?<!\\\\)(?:\\\\{2})*'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(*SKIP)(*F)|\s+~s" , $eachline);  
    • By FantoM_EscapE
      Хочу перенести свій білінг NODENY із фізичного сервера на віртуальний. Шукаю адміна який зможе допомогти у цьому питанні, так як нашого адміна банально призвали до війська. Вся схема на даний момент робоча, маю доступи до всього. Потрібно проінсталити на новішу версію FREEBSD, бо на моїй 10 річній вже не працюють нові SSL сертифікати. Кого зацікавила дана пропозиція - прошу у приватні повідомлення. обсудимо ціну і строки. або пишіть на будь-який месенджер 0677792091
    • By rusol
      Добрый вечер.
       
      Есть от провайдера блок реальных адресов, к примеру 100.1.1.192/26
       
      Раньше сеть была в одном влане и записи в /etc/rc.conf были такие:

       
      ifconfig_ix0="inet 192.168.0.1 netmask 255.255.255.0" # Шлюз для пользователей с локальным IP ifconfig_ix0_alias0="inet 100.1.1.193 netmask 255.255.255.192" # Шлюз для пользователей с реальными IP  
      После чего стала задача часть пользователей переводить во вланы тоже с разделением на локальные IP и реальные, первый влан создал где-то пару лет назад и все работает:
       
      ifconfig_vlan1="vlan 1 vlandev ix0 192.168.1.1 netmask 255.255.255.0" # Шлюз для пользователей с локальным IP во Влане 1 ifconfig_vlan1_alias0="inet 100.1.1.248 netmask 255.255.255.248" # Шлюз для пользователей с реальными IP  во Влане 1  
      И вот стоит задача создать еще один влан, делаю по аналогии с вланом 1, только маску смещаю назад:
       
      ifconfig_vlan2="vlan 2 vlandev ix0 192.168.1.1 netmask 255.255.255.0" # Шлюз для пользователей с локальным IP во Влане 2 ifconfig_vlan2_alias0="inet 100.1.1.246 netmask 255.255.255.254" # Шлюз для пользователей с реальными IP во Влане 2  
      Когда я внес это в /etc/rc.conf и прописал команду:
       
      ifconfig vlan2 create  
      Все заработало.
       
      Но как только перезагрузился сервер, перестали работать реальные IP без вланов, в первом влане и во втором. Не пойму что не так делаю, возможно я с маской подсети что-то недопонимаю...

×
×
  • Create New...