Перейти к содержимому
Калькуляторы

FreeBSD бордер - вижать максимум

mlevel

irq256: em0 610681168 15185

irq257: em1 724979183 18027

чтота так мне кажется, что у Вас или приведенные sysctl не применились (если они стоят только в sysctl.conf то они по состоянию на пол года назад не применялись, как сейчас не проверял. но пол года назад и ранее если вы ставите *_delay в sysctl, то оно применяется, потом при инициализации сети линк падает-включается и все. по sysctl -a вы видите нужные Вам значения, а в дебаге (и по кол-ву прерываний) там стоят стандартные 0/66) потому где то в районе rc.local неплохо бы ТЕЖЕ значения загнать еще раз в sysctl (ну просто позвать /etc/rc.d/sysctl start не прокатит, в выводе sysctl значения верные и их по второму разу не пропишет, тут народ пришет по 2 строки каждого значения с разными цифрами и гоняет /etc/rc.d/sysctl)

 

Но скорее всего таки при включенном пуллинге эти значения и не собираются использоваться. Там, в сорцах, стоит #ifdef на наличие оной опции в ядре и просто собирается разный код для пуллинга и не для пуллинга. Да, его еще потом и включить надо, но код изначально разный.

Поделиться сообщением


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

cpuset пробовал, такие варианты: все системные на 0,1; все em на 2,3; em0 на 0,1; em1 на 2,3. Всё, в общем-то, то же самое.

[root@Bastinda /usr/home/dyr]# pfctl -s memory
states        hard limit   600000
src-nodes     hard limit    60000
frags         hard limit   100000
tables        hard limit     1000
table-entries hard limit   200000

 

 

[root@Bastinda /usr/home/dyr]# vmstat -i
interrupt                          total       rate
irq1: atkbd0                         806          0
irq17: atapci1+                 30710824          2
cpu0: timer                    757664774         68
irq256: em0                   1670101491        150
irq257: em1                   1549949906        139
cpu1: timer                    757664752         68
cpu2: timer                    871818546         78
cpu3: timer                    871818546         78
Total                         6509729645        587

vmstat -i, боюсь, не показатель, ибо роутер уже довольно солидно времени работает, за это время пробовал разные варианты настроек "на лету".

 

st_re, про багу с sysctl в курсе, я сам о ней когда-то здесь писал :) Так что конечно, в rc.local засунут соответсвующий кусок "передёргивания".

 

 

Сейчас посмотрел на sysctl -v 1, и обратил внимание что прерываний у сетевух стабильно 500 +- десяток. Уменьшил все rx_ и tx_ delay с 900/1800 до 450/450, прерывания вышли на на уровень порядка 2000, и load average примерно вдвое упал, так что сейчас так:

 

last pid: 81696;  load averages:  2.05,  1.66,  1.49                                                                               up 128+05:26:23 17:26:53
105 processes: 7 running, 80 sleeping, 18 waiting
CPU 0:  0.0% user,  0.0% nice, 14.7% system,  1.5% interrupt, 83.8% idle
CPU 1:  0.0% user,  0.0% nice, 34.6% system,  1.5% interrupt, 63.9% idle
CPU 2:  0.0% user,  0.0% nice, 60.4% system,  1.9% interrupt, 37.7% idle
CPU 3:  0.0% user,  0.0% nice, 66.0% system,  1.5% interrupt, 32.5% idle
Mem: 185M Active, 1225M Inact, 511M Wired, 35M Cache, 199M Buf, 45M Free
Swap: 8192M Total, 8192M Free

  PID USERNAME      PRI NICE   SIZE    RES STATE   C   TIME    CPU COMMAND
   12 root          171 ki31     0K     8K CPU1    1 1920.1 77.78% [idle: cpu1]
   13 root          171 ki31     0K     8K RUN     0 1693.2 71.58% [idle: cpu0]
   25 root           43    -     0K     8K WAIT    1 626.3H 52.20% [em0_rx0_0]
   26 root           43    -     0K     8K CPU2    2 619.7H 45.17% [em0_rx0_1]
   29 root           43    -     0K     8K CPU3    3 589.9H 41.99% [em1_rx0_0]
   30 root           43    -     0K     8K WAIT    3 589.3H 41.36% [em1_rx0_1]
   11 root          171 ki31     0K     8K RUN     2 3031.3 36.77% [idle: cpu2]
   10 root          171 ki31     0K     8K RUN     3 3031.6 32.86% [idle: cpu3]
   23 root           16    -     0K     8K WAIT    2  35.5H  1.86% [swi16: em0_tx]
   27 root           16    -     0K     8K WAIT    2  34.5H  1.76% [swi16: em1_tx]
   15 root          -32    -     0K     8K WAIT    0  59.9H  1.56% [swi4: clock]
   37 root            8    -     0K     8K pftm    0  32.8H  1.07% [pfpurge]

 

[root@Bastinda /usr/home/dyr]# netstat -i -I em0 -dh 1
            input          (em0)           output
   packets  errs      bytes    packets  errs      bytes colls drops
       48K     0        29M        45K     0        40M     0     0
       46K     0        28M        43K     0        36M     0     0
       47K     0        27M        45K     0        39M     0     0
       44K     0        27M        40K     0        35M     0     0

[/code]

 

 

 

Поделиться сообщением


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

По ifdef'у, вы этот кусок имели в виду, из /usr/src/sys/net/netisr.c?

 

#ifdef DEVICE_POLLING
        const int polling = 1;
#else
        const int polling = 0;
#endif

        do {
                bits = atomic_readandclear_int(&netisr);
                if (bits == 0)
                        break;
                while ((i = ffs(bits)) != 0) {
                        isrstat.isrs_swi_count++;
                        i--;
                        bits &= ~(1 << i);
                        ni = &netisrs[i];
                        if (ni->ni_handler == NULL) {
                                printf("swi_net: unregistered isr %d.\n", i);
                                continue;
                        }
                        if ((ni->ni_flags & NETISR_MPSAFE) == 0) {
                                mtx_lock(&Giant);
                                if (ni->ni_queue == NULL)
                                        ni->ni_handler(NULL);
                                else
                                        netisr_processqueue(ni);
                                mtx_unlock(&Giant);
                        } else {
                                if (ni->ni_queue == NULL)
                                        ni->ni_handler(NULL);
                                else
                                        netisr_processqueue(ni);
                        }
                }
        } while (polling);
}

 

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

Поделиться сообщением


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

C таким трафиком:
# netstat -I em0 -idh 1

input (em0) output

packets errs bytes packets errs bytes colls drops

56K 0 45M 49K 0 34M 0 0

54K 0 43M 48K 0 33M 0 0

Детский трафик.

Старинный asus rs100-e5, c2d e7300, фильтрация+шейпинг+netflow (без nat и bgp) = 600mbps.

Процессор занят не полностью. Скорее всего, потолок из-за фряшных драйверов broadcom'a.

Поделиться сообщением


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

Поменял процессор, сейчас:

CPU: Intel(R) Xeon(R) CPU            3050  @ 2.13GHz (2136.62-MHz 686-class CPU)
FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs

Доставил 1 гиг оперативки, теперь:

[border:/]# less /var/log/dmesg.today | grep 'real memory'
real memory  = 2147483648 (2048 MB)

Обновил систему:

[border:/]# uname -a
FreeBSD border.example.com 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Fri Feb 25 16:49:44 EET 2011  root@border.example.com:/usr/obj/usr/src/sys/BORDER  i386

Пересобрал ядро, без поллинга и со стандартными драйверами em от Intel:

# Personalization
options         KVA_PAGES=512

device          pf
device          pflog
device          pfsync
device          carp

device          if_bridge

options         ALTQ
options         ALTQ_CBQ        # Class Bases Queuing (CBQ)
options         ALTQ_RED        # Random Early Detection (RED)
options         ALTQ_RIO        # RED In/Out
options         ALTQ_HFSC       # Hierarchical Packet Scheduler (HFSC)
options         ALTQ_PRIQ       # Priority Queuing (PRIQ)
options         ALTQ_NOPCC      # Required for SMP build

options         SC_DISABLE_REBOOT
options         SC_HISTORY_SIZE=10000

options         IPFIREWALL
options         IPFIREWALL_VERBOSE  
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPFIREWALL_FORWARD
options         IPDIVERT
options         DUMMYNET

options         IPFIREWALL_NAT
options         LIBALIAS

 

Sysctl:

[border:/]# cat /etc/sysctl.conf
net.inet.ip.fw.one_pass=1

kern.corefile=/tmp/%U.%N.%P.core

net.inet.tcp.msl=7500
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=0
net.inet.icmp.icmplim=250
kern.ipc.somaxconn=16384

net.inet.ip.redirect=0
net.inet.icmp.drop_redirect=1
net.inet.icmp.log_redirect=0

net.inet.ip.fastforwarding=1

net.inet.ip.dummynet.io_fast=1

kern.ipc.nmbclusters=262144
net.inet.ip.dummynet.hash_size=32768
net.inet.tcp.delayed_ack=0
net.inet.ip.intr_queue_maxlen=4096
net.inet.tcp.recvbuf_max=16777216
net.inet.tcp.sendbuf_max=16777216
net.inet.tcp.maxtcptw=40960
kern.ipc.maxsockbuf=384000
kern.ipc.maxsockets=262144

dev.em.0.tx_int_delay=600
dev.em.0.rx_int_delay=600
dev.em.1.rx_int_delay=600
dev.em.1.tx_int_delay=600

dev.em.0.rx_abs_int_delay=1000
dev.em.0.tx_abs_int_delay=1000
dev.em.1.tx_abs_int_delay=1000
dev.em.1.rx_abs_int_delay=1000

net.inet.ip.fw.dyn_max=65535
net.inet.tcp.recvspace=65535
net.inet.tcp.recvspace=65535
net.inet.ip.ttl=128
net.inet.ip.fw.dyn_buckets=2048
net.inet.ip.fw.dyn_syn_lifetime=10
net.inet.ip.fw.dyn_ack_lifetime=120

net.inet.tcp.sack.enable=0
net.inet.tcp.drop_synfin=1
net.inet.tcp.nolocaltimewait=1
net.inet.ip.rtmaxcache=1024
net.local.stream.recvspace=32768
net.local.stream.sendspace=32768

 

Картина:

last pid: 10700;  load averages:  1.44,  1.34,  1.26                                                                                            up 0+01:00:52  20:39:36
106 processes: 5 running, 85 sleeping, 16 waiting
CPU 0:  0.0% user,  0.0% nice, 97.8% system,  0.0% interrupt,  2.2% idle
CPU 1:  0.0% user,  0.0% nice, 83.7% system,  0.0% interrupt, 16.3% idle
Mem: 21M Active, 13M Inact, 124M Wired, 44K Cache, 18M Buf, 1841M Free
Swap: 4096M Total, 4096M Free

  PID USERNAME PRI NICE   SIZE    RES STATE   C   TIME    CPU COMMAND
    0 root     -68    0     0K    88K -       0  52:34 100.00% {em1 taskq}
    0 root     -68    0     0K    88K CPU1    1  45:02 83.69% {em0 taskq}
   10 root     171 ki31     0K    16K RUN     1  14:04 15.72% {idle: cpu1}
   10 root     171 ki31     0K    16K RUN     0   7:50  1.42% {idle: cpu0}
    7 root      44    -     0K     8K pftm    1   0:50  0.73% [pfpurge]

 

Траффик:

[border:/]# netstat -w1 -I em0
            input          (em0)           output
   packets  errs idrops      bytes    packets  errs      bytes colls
       41K     0     0        20M        46K     0        44M     0
       41K     0     0        20M        46K     0        44M     0
       41K     0     0        20M        46K     0        44M     0
       40K     0     0        20M        44K     0        42M     0
       41K     0     0        19M        44K     0        41M     0
       39K     0     0        19M        43K     0        40M     0
       40K     0     0        20M        45K     0        42M     0
       40K     0     0        20M        45K     0        42M     0
       42K     0     0        20M        45K     0        43M     0
       40K     0     0        20M        45K     0        42M     0

 

pfctl memory:

[border:/]# pfctl -s memory
states        hard limit   250000
src-nodes     hard limit    10000
frags         hard limit    70000
tables        hard limit    10000
table-entries hard limit  9000000

 

vmstat:

[border:/]# vmstat -i
interrupt                          total       rate
irq1: atkbd0                        1690          0
irq4: uart0                          329          0
irq6: fdc0                             8          0
irq14: ata0                           35          0
irq19: uhci1+                      18286          4
cpu0: timer                      8291337       2039
irq256: em0                      4264834       1048
irq257: em1                      2721290        669
cpu1: timer                      8291220       2039
Total                           23589029       5801

 

PF:

# Options
set timeout { interval 5, frag 10 }
set timeout { tcp.first 60, tcp.opening 15, tcp.established 64200 }
set timeout { tcp.closing 100, tcp.finwait 10, tcp.closed 30 }
set timeout { udp.first 30, udp.single 15, udp.multiple 30 }
set timeout { icmp.first 20, icmp.error 20 }
set timeout { other.first 30, other.single 15, other.multiple 30 }
set timeout { adaptive.start 0, adaptive.end 0 }
set limit { states 250000, frags 70000 }
set limit tables 10000
set limit table-entries 9000000
set loginterface none
set optimization aggressive
set block-policy drop
set require-order yes
set fingerprints "/etc/pf.os"
set skip on lo0

Изменено пользователем mlevel

Поделиться сообщением


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

 

Ну выигрыш от смены проца налицо... ;-))))

 

Теперь пробуйте увеличить/уменьшить таймауты в dev.em до оптимальных...

 

что в pfctl -si ? Что с net.isr ?

Поделиться сообщением


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

PF:

[border:/]# pfctl -si
Status: Enabled for 0 days 02:01:43           Debug: Urgent

State Table                          Total             Rate
  current entries                   147179
  searches                      1200070991       164325.8/s
  inserts                         30140574         4127.1/s
  removals                        29993395         4107.0/s
Counters
  match                           34495952         4723.5/s
  bad-offset                             0            0.0/s
  fragment                             539            0.1/s
  short                                 19            0.0/s
  normalize                              0            0.0/s
  memory                                 0            0.0/s
  bad-timestamp                          0            0.0/s
  congestion                             0            0.0/s
  ip-option                              0            0.0/s
  proto-cksum                         7716            1.1/s
  state-mismatch                     27693            3.8/s
  state-insert                           0            0.0/s
  state-limit                            0            0.0/s
  src-limit                              8            0.0/s
  synproxy                               0            0.0/s

 

sysctl - net.isr

[border:/]# sysctl net.isr
net.isr.numthreads: 1
net.isr.defaultqlimit: 256
net.isr.maxqlimit: 10240
net.isr.bindthreads: 0
net.isr.maxthreads: 1
net.isr.direct: 1
net.isr.direct_force: 1

 

Есть какая нибудь методика расчета(зависимость) для значений rx/tx_int_delay и rx/tx_abs_int_delay, и как понять что эти значения оптимальни?

Поделиться сообщением


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

Dvr: есть еще всякие /usr/src/sys/dev/e1000/if_em.c, где тоже встречается кой че..

 

 

egrep -R '#ifdef[[:space:]]+DEVICE_POLLING' /usr/src/sys/dev/e1000/ | wc -l

22

 

 

Там раньше больше кода было под такими ифами, сейчас не настолько, но тут действительно нужно анализировать, так ли все еще оно по разному себя ведет. Это только драйвера, а там еще разного кода, где оно воткнуто.

 

Есть, например, такая вот фигня в свеженькой 8:

/usr/src/sys/net/netisr.c

#ifdef DEVICE_POLLING
        /*
         * The device polling code is not yet aware of how to deal with
         * multiple netisr threads, so for the time being compiling in device
         * polling disables parallel netisr workers.
         */
        if (netisr_maxthreads != 1 || netisr_bindthreads != 0) {
                printf("netisr_init: forcing maxthreads to 1 and "
                    "bindthreads to 0 for device polling\n");
                netisr_maxthreads = 1;
                netisr_bindthreads = 0;
        }
#endif

Поделиться сообщением


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

mlevel

взял Ваш конфиг

# Options
set timeout { interval 5, frag 10 }
set timeout { tcp.first 60, tcp.opening 15, tcp.established 64200 }
set timeout { tcp.closing 100, tcp.finwait 10, tcp.closed 30 }
set timeout { udp.first 30, udp.single 15, udp.multiple 30 }
set timeout { icmp.first 20, icmp.error 20 }
set timeout { other.first 30, other.single 15, other.multiple 30 }
set timeout { adaptive.start 0, adaptive.end 0 }
set limit { states 250000, frags 70000 }
set limit tables 10000
set limit table-entries 9000000
set loginterface none
set optimization aggressive
set block-policy drop
set require-order yes
set fingerprints "/etc/pf.os"
set skip on lo0

 

и 2 раза запихал его в pf. (8.2 недельной давности) Во второй раз set optimization aggressive вынес выще первого set timeout

 

pfctl -s all начиная с TIMEOUTS: запхал в файлики

 

diff aaa.aaa aaa1.aaa
2,6c2,6
< tcp.first                    30s
< tcp.opening                   5s
< tcp.established           18000s
< tcp.closing                  60s
< tcp.finwait                  30s
---
> tcp.first                    60s
> tcp.opening                  15s
> tcp.established           64200s
> tcp.closing                 100s
> tcp.finwait                  10s

 

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

 

для скорости можно посмотреть на сочетание

net.inet.ip.fastforwarding=0/1

и

net.isr.direct: 0/1

 

если в pf только нат, то no rdr и set skip вписать все интерфейсы, кроме натового, для ускорения вылетания пактов из pf.

 

Еще я в 8 выключил net.inet.ip.dummynet.io_fast. Ибо оно больше 12 мб не шейпит при хз=1000 а каких либо неудобств я не увидел, когда тут 0. Опять же, на скорость не влияет.

Поделиться сообщением


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

 

Для начала увеличиваем:

#
# FreeBSD 9.x+
# Increase interface send queue length
# See commit message http://svn.freebsd.org/viewvc/base?view=revision&revision=207554
net.link.ifqmaxlen="1024"

 

Поделиться сообщением


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

st_re, спасибо, сегодня ночью или уже в понедельник попробую поиграться.

Не подскажете, кстати, где-то встречал описание прохождения пакета через все эти isr и fastforwarding, но тогда не осилил, а теперь было бы интересно ещё раз вдумчиво почитать.

 

 

В pf только [bi-]nat, интерфейсов на роутере и так всего три, не должно бы влиять.

 

 

Вот думаю ещё вынести ng_netflow с этого сервера на сервер с шейпером.

ngctl mkpeer vlan3050: netflow lower iface0
ngctl name vlan3050:lower netflow
ngctl connect vlan3050: netflow: upper iface1
ngctl connect netflow: netflow: out0 out1
ngctl mkpeer netflow: ksocket export inet/dgram/udp
ngctl msg netflow:export connect inet/192.168.254.88:9996

 

 

 

 

vlad11, ничего что мы тут 8 ветку обсуждаем? ;)

Поделиться сообщением


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

Не подскажете, кстати, где-то встречал описание прохождения пакета через все эти isr и fastforwarding,
фаст форвадинг - это прямой прогон пакета который:

- не содержит опций

- не предназначен этому хосту

- не широковещательный (мультикаст/броадкаст)

 

Если пакет удовлетворяет этим условиям и фастфорвадинг активен, то пакет проходит фастфорвадинг [ip_input +...фаер, нат, роутинг...+ ip_output], это всё собрано в одной функции и пакет не ставится ни в какие очереди внутри ядра, за исключением случая когда HW адрес дст хоста не известен и инициализируется arp lookup процедура - пакет может там побыть в очереди.

 

Соответственно для однопроцовых машин фаст форвадинг это скорее хорошо, для многоядерных скорее зло.

 

 

Если пакет не подошёл по условиям либо фастфорвадинг отключён, то пакет попадаёт в netisr, которая прогоняет его по (proto_input, ибо не ip единым...) ip_input ...фаер, нат, роутинг... ip_output

Поделиться сообщением


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

Гм. То есть в сущности, удлинение только лишь на одну функцию proto_input?

Поделиться сообщением


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

proto_input
proto - иммелось ввиду что [proto]_input может быть arp_input или другой протокол.

 

Да, ещё одно условие забыл:

- пакет не должен быть фрагментирован чтобы попасть в фастфорвадинг.

 

Fastforwading содержит упрощённые версии ip_input+...+ip_output, и вроде не содержит блокирующих вызовов.

Поделиться сообщением


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

vlad11, ничего что мы тут 8 ветку обсуждаем? ;)

На посмотреть в системе этот параметр не судьба?

Практика заимствования кода/багов/фич из HEAD в релизы вам не знакома?

Изменено пользователем vlad11

Поделиться сообщением


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

vlad11, во-первых, этого параметра в восьмёрке-таки нет, во-вторых, заимствование "кода/багов/фич" из HEAD в продакшн не практикую именно из-за второго понятия в вашем перечислении, не говоря уж об умножении лишних сущностей по поддержанию в единообразной форме работающих серверов.

Тем не менее - вы не могли бы пояснить, что именно заставило вас подозревать, что виновато именно малое значение "default send interface queue length"?

Поделиться сообщением


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

Кстати, в предлагаемом вами коммите отсутствуют изменения для if_em.c по причине отсутствия в нём заменяемой IFQ_MAXLEN.

Поделиться сообщением


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

vlad11, во-первых, этого параметра в восьмёрке-таки нет,
Неправильный ответ.

# uname -prs
FreeBSD 8.2-PRERELEASE amd64
# sysctl net.link.ifqmaxlen
net.link.ifqmaxlen: 50

 

 

во-вторых, заимствование "кода/багов/фич" из HEAD в продакшн не практикую именно из-за второго понятия в вашем перечислении, не говоря уж об умножении лишних сущностей по поддержанию в единообразной форме работающих серверов.
Не путайте понятия. В HEAD отлавливают баги и всю "неправильную" работу STABLE. То, что вы используете Stable - это не значит, что в них нет багов и фич, найденных в HEAD, просто фиксы не так быстро мигригруют вниз.

 

 

 

Поделиться сообщением


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

Вы не ответили на остальные куда более важные два вопроса.

Поделиться сообщением


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

Вы не ответили на остальные куда более важные два вопроса.

Вы стараетесь всю вину спихнуть на драйвера сетевух. Я иду по пути настроек стека tcp/ip и тюнинга софта.

Я в свое время получил удовольствие позаниматься сексом с дровами от Интела. Больше такого не хочу.

Теперь мой выбор сетевух - дешевые модели.

 

 

 

Поделиться сообщением


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

Я в свое время получил удовольствие позаниматься сексом с дровами от Интела.

Больше такого не хочу. Теперь мой выбор сетевух - дешевые модели.

Зря. Дорогие карты существенно разгружают процессор.

Лучше P4 с Интелами, чем Ксеон с Реалтеками :)

Поделиться сообщением


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

В /var/log/messages начали появляться ошибки:

Apr 23 21:00:10 router kernel: Bump sched buckets to 32768 (was 0)
Apr 23 21:00:10 router last message repeated 89 times

Пробовал менять значение sysctl net.inet.ip.dummynet.hash_size на большее - 65536 и меньшее - 16384, картина не меняется, те же ошибки.

Изменено пользователем mlevel

Поделиться сообщением


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.