Перейти до

FreeBSD 8.2 & Polling


Рекомендованные сообщения

Всем привет !

Есть фря 8.2, сервак с сетевыми карточками: fxp0, em0, age0, re0.

Подскажите нужно ли включать polling на всех интерфейсах ? Или только на интеле ?

В инете пишут по разному, у кого какие реальные результаты.

Спасибо.

Ссылка на сообщение
Поделиться на других сайтах

Оффтоп, но может кто-то посоветует, как на интеловых картах распаралеливать ппое траффик по нескольким прерываниям.

 PID USERNAME  THR PRI NICE   SIZE	RES STATE   C   TIME   WCPU COMMAND
  12 root		1 171 ki31	 0K	16K CPU4	4 164.7H 97.75% idle: cpu4
  14 root		1 171 ki31	 0K	16K CPU2	2 163.4H 96.58% idle: cpu2
  13 root		1 171 ki31	 0K	16K CPU3	3 163.8H 91.80% idle: cpu3
  11 root		1 171 ki31	 0K	16K RUN	 5 160.0H 77.44% idle: cpu5
  16 root		1 171 ki31	 0K	16K RUN	 0  99.1H 58.54% idle: cpu0
  [color=#ff0000] 32 root		1 -68	-	 0K	16K CPU2	2  39.1H 52.73% irq256: igb0 [/color]
  15 root		1 171 ki31	 0K	16K CPU1	1 129.0H 48.54% idle: cpu1
  65 root		1 -68	-	 0K	16K CPU0	0  67.1H 37.74% dummynet
  55 root		1 -68	-	 0K	16K WAIT	5 334:24 21.68% irq268: igb1
  53 root		1 -68	-	 0K	16K WAIT	4 348:16  7.76% irq267: igb1
  51 root		1 -68	-	 0K	16K WAIT	3 333:13  7.52% irq266: igb1
  45 root		1 -68	-	 0K	16K RUN	 0 401:31  6.93% irq263: igb1
  33 root		1 -68	-	 0K	16K -	   5 262:24  5.13% igb0 que
  47 root		1 -68	-	 0K	16K WAIT	1 339:59  5.08% irq264: igb1
  49 root		1 -68	-	 0K	16K WAIT	2 342:34  4.93% irq265: igb1
3349 root		2  45	0   121M 41768K select  3 168:04  1.22% mpd5

Ибо такая картина нихера не радует.

в праймтайм ложит 1 ядро проца в полку. Прибивание к нескольким ядрам только усугубляет результат. Остальные 5 ядер свободны.

Ссылка на сообщение
Поделиться на других сайтах
  В 19.04.2012 в 14:34, maxx сказав:

Оффтоп, но может кто-то посоветует, как на интеловых картах распаралеливать ппое траффик по нескольким прерываниям.

 PID USERNAME  THR PRI NICE   SIZE	RES STATE   C   TIME   WCPU COMMAND
  12 root		1 171 ki31	 0K	16K CPU4	4 164.7H 97.75% idle: cpu4
  14 root		1 171 ki31	 0K	16K CPU2	2 163.4H 96.58% idle: cpu2
  13 root		1 171 ki31	 0K	16K CPU3	3 163.8H 91.80% idle: cpu3
  11 root		1 171 ki31	 0K	16K RUN	 5 160.0H 77.44% idle: cpu5
  16 root		1 171 ki31	 0K	16K RUN	 0  99.1H 58.54% idle: cpu0
  [color=#ff0000] 32 root		1 -68	-	 0K	16K CPU2	2  39.1H 52.73% irq256: igb0 [/color]
  15 root		1 171 ki31	 0K	16K CPU1	1 129.0H 48.54% idle: cpu1
  65 root		1 -68	-	 0K	16K CPU0	0  67.1H 37.74% dummynet
  55 root		1 -68	-	 0K	16K WAIT	5 334:24 21.68% irq268: igb1
  53 root		1 -68	-	 0K	16K WAIT	4 348:16  7.76% irq267: igb1
  51 root		1 -68	-	 0K	16K WAIT	3 333:13  7.52% irq266: igb1
  45 root		1 -68	-	 0K	16K RUN	 0 401:31  6.93% irq263: igb1
  33 root		1 -68	-	 0K	16K -	   5 262:24  5.13% igb0 que
  47 root		1 -68	-	 0K	16K WAIT	1 339:59  5.08% irq264: igb1
  49 root		1 -68	-	 0K	16K WAIT	2 342:34  4.93% irq265: igb1
3349 root		2  45	0   121M 41768K select  3 168:04  1.22% mpd5

Ибо такая картина нихера не радует.

в праймтайм ложит 1 ядро проца в полку. Прибивание к нескольким ядрам только усугубляет результат. Остальные 5 ядер свободны.

PPPoE? попробуйте 9ку фрю и включенный net.isr.

Возможно придется дописать патч в isr с хэш-функцией для разделения трафика по потокам(ядрам). Есть готовый для L3 :)

Ссылка на сообщение
Поделиться на других сайтах
  В 19.04.2012 в 19:37, adeep сказав:
  В 19.04.2012 в 14:34, maxx сказав:

Оффтоп, но может кто-то посоветует, как на интеловых картах распаралеливать ппое траффик по нескольким прерываниям.

 PID USERNAME  THR PRI NICE   SIZE	RES STATE   C   TIME   WCPU COMMAND
  12 root		1 171 ki31	 0K	16K CPU4	4 164.7H 97.75% idle: cpu4
  14 root		1 171 ki31	 0K	16K CPU2	2 163.4H 96.58% idle: cpu2
  13 root		1 171 ki31	 0K	16K CPU3	3 163.8H 91.80% idle: cpu3
  11 root		1 171 ki31	 0K	16K RUN	 5 160.0H 77.44% idle: cpu5
  16 root		1 171 ki31	 0K	16K RUN	 0  99.1H 58.54% idle: cpu0
  [color=#ff0000] 32 root		1 -68	-	 0K	16K CPU2	2  39.1H 52.73% irq256: igb0 [/color]
  15 root		1 171 ki31	 0K	16K CPU1	1 129.0H 48.54% idle: cpu1
  65 root		1 -68	-	 0K	16K CPU0	0  67.1H 37.74% dummynet
  55 root		1 -68	-	 0K	16K WAIT	5 334:24 21.68% irq268: igb1
  53 root		1 -68	-	 0K	16K WAIT	4 348:16  7.76% irq267: igb1
  51 root		1 -68	-	 0K	16K WAIT	3 333:13  7.52% irq266: igb1
  45 root		1 -68	-	 0K	16K RUN	 0 401:31  6.93% irq263: igb1
  33 root		1 -68	-	 0K	16K -	   5 262:24  5.13% igb0 que
  47 root		1 -68	-	 0K	16K WAIT	1 339:59  5.08% irq264: igb1
  49 root		1 -68	-	 0K	16K WAIT	2 342:34  4.93% irq265: igb1
3349 root		2  45	0   121M 41768K select  3 168:04  1.22% mpd5

Ибо такая картина нихера не радует.

в праймтайм ложит 1 ядро проца в полку. Прибивание к нескольким ядрам только усугубляет результат. Остальные 5 ядер свободны.

PPPoE? попробуйте 9ку фрю и включенный net.isr.

Возможно придется дописать патч в isr с хэш-функцией для разделения трафика по потокам(ядрам). Есть готовый для L3 :)

при net.isr swi1 отжирает 1 ядро в 0 и начинает дропать пакеты, параллелить никак не хочет, ввиду того что сетевой стек раскидывает на ядра по заголовакам айпи пакетов. В ппое траффике таковых нету так что внуренний интерфейс априори ложится на 1 ядро. На интерфейсе ошибки. при включенном более менее вменяемо пашет. в 9ке разве реализовано распараллеливание процессов по макам ? Че-то я на 2 насе поставил 9ку - картина 1 в 1.

Ссылка на сообщение
Поделиться на других сайтах
  В 19.04.2012 в 19:45, maxx сказав:

при net.isr swi1 отжирает 1 ядро в 0 и начинает дропать пакеты, параллелить никак не хочет, ввиду того что сетевой стек раскидывает на ядра по заголовакам айпи пакетов. В ппое траффике таковых нету так что внуренний интерфейс априори ложится на 1 ядро. На интерфейсе ошибки. при включенном более менее вменяемо пашет. в 9ке разве реализовано распараллеливание процессов по макам ? Че-то я на 2 насе поставил 9ку - картина 1 в 1.

 

сравните:

включен isr:

  Цитата

12 root -72 - 0K 496K WAIT 2 0:02 7.67% intr{swi1: netisr 2}

12 root -72 - 0K 496K WAIT 1 0:02 7.28% intr{swi1: netisr 1}

12 root -72 - 0K 496K WAIT 0 0:05 4.20% intr{swi1: netisr 0}

12 root -72 - 0K 496K WAIT 3 0:02 4.20% intr{swi1: netisr 3}

я что-то не так делаю?

Вы упустили оба важных момента: фря 9.х и патч на распределение очередей - там достаточно просто, надо дописать строк 10-20 исходного кода, чтобы сделать распределение очередей на основе информации PPPoE заголовков (к примеру хэш на основе MAC-адреса пакета).

Ссылка на сообщение
Поделиться на других сайтах

мы тоже долго думалиискалимечтали...до конца просто поставили проц i5 с частотой 3,4 ггц и теперь НАС при 750мбитах(сетевуха igb.фря 7,4) по процу:

1-ое ядро на котором лежит РРРоЕ грузится ну максимум на 55%,

2-4 на 12-15 процентов...

тоисть вход распредиляется прекрасно по интерруптам, а весь исход по РРРоЕ грузит проц до 55%...

тоесть по расчетам 1 гиг прожует как раз с небольшим запасом...

 

до этого на делловском серваке с 2-мя двухядерными ксенонами по 3,3 ггц частоте проц в 98% впёрся при 580-600 мбитах....

вот вам и i5 )

Ссылка на сообщение
Поделиться на других сайтах
  В 19.04.2012 в 21:37, adeep сказав:
  В 19.04.2012 в 19:45, maxx сказав:

при net.isr swi1 отжирает 1 ядро в 0 и начинает дропать пакеты, параллелить никак не хочет, ввиду того что сетевой стек раскидывает на ядра по заголовакам айпи пакетов. В ппое траффике таковых нету так что внуренний интерфейс априори ложится на 1 ядро. На интерфейсе ошибки. при включенном более менее вменяемо пашет. в 9ке разве реализовано распараллеливание процессов по макам ? Че-то я на 2 насе поставил 9ку - картина 1 в 1.

 

сравните:

включен isr:

  Цитата

12 root -72 - 0K 496K WAIT 2 0:02 7.67% intr{swi1: netisr 2}

12 root -72 - 0K 496K WAIT 1 0:02 7.28% intr{swi1: netisr 1}

12 root -72 - 0K 496K WAIT 0 0:05 4.20% intr{swi1: netisr 0}

12 root -72 - 0K 496K WAIT 3 0:02 4.20% intr{swi1: netisr 3}

я что-то не так делаю?

Вы упустили оба важных момента: фря 9.х и патч на распределение очередей - там достаточно просто, надо дописать строк 10-20 исходного кода, чтобы сделать распределение очередей на основе информации PPPoE заголовков (к примеру хэш на основе MAC-адреса пакета).

можно ссылочку на патч? или де чего пачетать?

Ссылка на сообщение
Поделиться на других сайтах
  В 20.04.2012 в 06:46, fastvd сказав:

мы тоже долго думалиискалимечтали...до конца просто поставили проц i5 с частотой 3,4 ггц и теперь НАС при 750мбитах(сетевуха igb.фря 7,4) по процу:

1-ое ядро на котором лежит РРРоЕ грузится ну максимум на 55%,

2-4 на 12-15 процентов...

тоисть вход распредиляется прекрасно по интерруптам, а весь исход по РРРоЕ грузит проц до 55%...

тоесть по расчетам 1 гиг прожует как раз с небольшим запасом...

 

до этого на делловском серваке с 2-мя двухядерными ксенонами по 3,3 ггц частоте проц в 98% впёрся при 580-600 мбитах....

вот вам и i5 )

ну у меня на 6 яйцевом феноме запас поболе будет. Но именно интересует распаралеливание для ппое траффика. ибо при 650 мегабитах по ядрам след картинка.

http://clip2net.com/s/1PuNQ

к 0 ядру прибит думинет

прерывания внутреннего интерфейса к 1-2 но нагрузку ложит четко на 1. И это после тюнинга сетевухи. Кстати насчет запаса, я бы небыл столь категоричен. Нагрузка на яйца растет по экспоненте, так что лишние 20 кппс могут дать большую нагрузку чем предыдущие все.

Ссылка на сообщение
Поделиться на других сайтах
  В 20.04.2012 в 07:40, maxx сказав:
  В 19.04.2012 в 21:37, adeep сказав:
  В 19.04.2012 в 19:45, maxx сказав:

при net.isr swi1 отжирает 1 ядро в 0 и начинает дропать пакеты, параллелить никак не хочет, ввиду того что сетевой стек раскидывает на ядра по заголовакам айпи пакетов. В ппое траффике таковых нету так что внуренний интерфейс априори ложится на 1 ядро. На интерфейсе ошибки. при включенном более менее вменяемо пашет. в 9ке разве реализовано распараллеливание процессов по макам ? Че-то я на 2 насе поставил 9ку - картина 1 в 1.

 

сравните:

включен isr:

  Цитата

12 root -72 - 0K 496K WAIT 2 0:02 7.67% intr{swi1: netisr 2}

12 root -72 - 0K 496K WAIT 1 0:02 7.28% intr{swi1: netisr 1}

12 root -72 - 0K 496K WAIT 0 0:05 4.20% intr{swi1: netisr 0}

12 root -72 - 0K 496K WAIT 3 0:02 4.20% intr{swi1: netisr 3}

я что-то не так делаю?

Вы упустили оба важных момента: фря 9.х и патч на распределение очередей - там достаточно просто, надо дописать строк 10-20 исходного кода, чтобы сделать распределение очередей на основе информации PPPoE заголовков (к примеру хэш на основе MAC-адреса пакета).

можно ссылочку на патч? или де чего пачетать?

ничего не тюнилось, просто родные дрова с сайта интел, НО не последние...так как именно последние глюкали очень сильно(система тупо раз в сутки зависала)

Ссылка на сообщение
Поделиться на других сайтах
  В 23.04.2012 в 06:55, fastvd сказав:

ничего не тюнилось, просто родные дрова с сайта интел, НО не последние...так как именно последние глюкали очень сильно(система тупо раз в сутки зависала)

 

интересует следующее

  В 19.04.2012 в 21:37, adeep сказав:

патч на распределение очередей

Подсказали вот такое. Незнаю или оно, нету пока тестовой машины - проверить. Обкатаю "напешу атчот".

# cat if_ethersubr.c.patch
*** if_ethersubr.c	  Fri Jan 13 09:52:49 2012
--- if_ethersubr.c_	 Sun Oct 30 19:40:28 2011
***************
*** 622,627 ****
--- 622,633 ----
		    ifp->if_imcasts++;
    }
+	   m->m_flags |= M_FLOWID;
+	   m->m_pkthdr.flowid =  eh->ether_dhost[0] + eh->ether_dhost[1] + eh->ether_dhost[2] + eh->ether_dhost[3] + eh->ether_d
+	   m->m_pkthdr.flowid += eh->ether_shost[0] + eh->ether_shost[1] + eh->ether_shost[2] + eh->ether_shost[3] + eh->ether_s
+
+
+
 #ifdef MAC
    /*
	 * Tag the mbuf with an appropriate MAC label before any other
***************
*** 873,878 ****
--- 879,908 ----			   if ((m = ip_fastforward(m)) == NULL)
				    return;
		    isr = NETISR_IP;
+
+			   struct ipheader {
+				   u_char offset [12]; //ip header fields not actually needed here
+				   u_char src [4]; //ip src
+				   u_char dst [4]; //ip dst
+			   } __packed __aligned(4);
+
+			   if (m->m_pkthdr.len < sizeof(struct ipheader)) {			    //from ip_fastforward
+				   if_printf(ifp, "flowid math: discard frame with too small headern");
+				   goto discard;
+			   }
+			   if (m->m_len < sizeof (struct ipheader) &&
+				   (m = m_pullup(m, sizeof (struct ipheader))) == NULL) {	  //ip_fastforward
+				   if_printf(ifp, "flowid math: discard frame at pullupn");
+					   return;		 /* mbuf already free'd */
+			   }
+			   struct ipheader *ip;
+			   ip = mtod(m, struct ipheader *);
+			   m->m_pkthdr.flowid += ip->src[0] + ip->src[1] + ip->src[2] + ip->src[3];
+			   m->m_pkthdr.flowid += ip->dst[0] + ip->dst[1] + ip->dst[2] + ip->dst[3];
+
+			   //if_printf(ifp, "Calculated flow id %dn", m->m_pkthdr.flowid);
+
+
		    break;
    case ETHERTYPE_ARP:

Ссылка на сообщение
Поделиться на других сайтах
  В 23.04.2012 в 08:20, maxx сказав:

Подсказали вот такое. Незнаю или оно, нету пока тестовой машины - проверить. Обкатаю "напешу атчот".

он и есть. но сделан только для заголовков IP.

для заголовков ethernet (=PPPoE) его надо дописывать по аналогии.

Ссылка на сообщение
Поделиться на других сайтах

  m->m_flags |= M_FLOWID;
  m->m_pkthdr.flowid =  eh->ether_dhost[0] + eh->ether_dhost[1] + eh->ether_dhost[2] + eh->ether_dhost[3] + eh->ether_dhost[4] + eh->ether_dhost[5];
  m->m_pkthdr.flowid += eh->ether_shost[0] + eh->ether_shost[1] + eh->ether_shost[2] + eh->ether_shost[3] + eh->ether_shost[4] + eh->ether_shost[5];

не оно ли это? Или там есть какая-то особая магия о которой мы не знаем? Поделитесь...

Ссылка на сообщение
Поделиться на других сайтах
  • 2 weeks later...
  В 24.04.2012 в 20:26, Kto To сказав:

  m->m_flags |= M_FLOWID;
  m->m_pkthdr.flowid =  eh->ether_dhost[0] + eh->ether_dhost[1] + eh->ether_dhost[2] + eh->ether_dhost[3] + eh->ether_dhost[4] + eh->ether_dhost[5];
  m->m_pkthdr.flowid += eh->ether_shost[0] + eh->ether_shost[1] + eh->ether_shost[2] + eh->ether_shost[3] + eh->ether_shost[4] + eh->ether_shost[5];

не оно ли это? Или там есть какая-то особая магия о которой мы не знаем? Поделитесь...

Похоже что оно.

Ссылка на сообщение
Поделиться на других сайтах
  В 09.05.2012 в 18:54, adeep сказав:
  В 24.04.2012 в 20:26, Kto To сказав:

  m->m_flags |= M_FLOWID;
  m->m_pkthdr.flowid =  eh->ether_dhost[0] + eh->ether_dhost[1] + eh->ether_dhost[2] + eh->ether_dhost[3] + eh->ether_dhost[4] + eh->ether_dhost[5];
  m->m_pkthdr.flowid += eh->ether_shost[0] + eh->ether_shost[1] + eh->ether_shost[2] + eh->ether_shost[3] + eh->ether_shost[4] + eh->ether_shost[5];

не оно ли это? Или там есть какая-то особая магия о которой мы не знаем? Поделитесь...

Похоже что оно.

А не соблаговолит ли, глубокоуважаемых джин, кинуть уже пропатченными исходниками, кторые дают такие чудесные результаты, ибо - либо я что-то неправильно делаю, либо что-то пошло не так. Но даже пропачив if_ethersubr.c и дрова игбы, картинко не поменялась. Заранее благодарны, с нас коньяк если будете у нас на колыме.

Ссылка на сообщение
Поделиться на других сайтах
  В 09.05.2012 в 22:00, maxx сказав:

А не соблаговолит ли, глубокоуважаемых джин, кинуть уже пропатченными исходниками, кторые дают такие чудесные результаты, ибо - либо я что-то неправильно делаю, либо что-то пошло не так. Но даже пропачив if_ethersubr.c и дрова игбы, картинко не поменялась. Заранее благодарны, с нас коньяк если будете у нас на колыме.

Было бы время сделать все полностью не давал бы туманных ответов, а выкинул бы патч) А так увы, более ничего не имеем. Ежели у вас есть понимающие люди, можем списаться и покумекать вместе.

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...