calculator Опубликовано 1 марта, 2009 · Жалоба Уважаемые, какой можете поставить диагноз по статистике oprofile: # opreport -le mwait_idle CPU: CPU with timer interrupt, speed 0 MHz (estimated) Profiling through timer interrupt samples % image name app name symbol name 11968 10.2238 vmlinux vmlinux tcp_v4_rcv 10507 8.9757 vmlinux vmlinux inet_csk_search_req 10302 8.8006 vmlinux vmlinux read_hpet 5568 4.7565 bnx2 bnx2 (no symbols) 3184 2.7200 nginx nginx ngx_http_parse_header_line 2931 2.5038 vmlinux vmlinux ip_route_input 2308 1.9716 vmlinux vmlinux current_fs_time 1933 1.6513 vmlinux vmlinux timespec_trunc 1901 1.6240 vmlinux vmlinux _spin_lock_bh 1699 1.4514 libcrypto.so.0.9.8b libcrypto.so.0.9.8b (no symbols) 1665 1.4223 vmlinux vmlinux tcp_ack 1433 1.2242 vmlinux vmlinux __ip_route_output_key 1428 1.2199 vmlinux vmlinux schedule 1379 1.1780 vmlinux vmlinux do_gettimeofday 1368 1.1686 vmlinux vmlinux kmem_cache_free 1232 1.0525 vmlinux vmlinux _read_trylock 1024 0.8748 vmlinux vmlinux dnotify_parent Это вебсервер(nginx) с Broadcom NetXtreme II BCM5708 Gigabit Ethernet на борту и hpet(без него к сожалению никак). iptables/qdisc в ядре выключены. softirq на нем подбирается к 100%, но чувствую что машинка может работать лучьше. Хочется понять можно ли что-то подкрутить. Ivan Rostovikov >2. Можно ли как-то управлять поллингом для драйвера e1000? Потому как, судя по документации, поллинг начинает работать только, когда количество пакетов превышает количество возможных прерываний в системеЕсли режим - авто - то нельзя. Иначе можно указать конкретное кол-во пакетов на каждое прерывание. А где указать можно не подскажите? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
nuclearcat Опубликовано 2 марта, 2009 · Жалоба Какой проц? netstat -s (особо интересует количество установленных коннектов) mpstat -P ALL 1 cat /proc/interrupts Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
calculator Опубликовано 2 марта, 2009 (изменено) · Жалоба nuclearcat Статистики довольно много, поместил все на pastebin. Сейчас статистика довольно скудная, потому как нагрузка не пиковая и этот аналогичный конфигу сервер добавили в помощь буквально как пару дней. По прирываниям для eth0, eth1 CPU0 тикает. Пробовал их разнести по разным процессорам, но там похоже без патча не обойтись. Отключение MSI не помогает - BIOS с последней прошивкой упорно ставит сетевые да еще и megasas на 1 прирывание. И честно говоря патчить пока страшно, тем более что он не под мое ядро(2.6.18). На интерфейсах(они в бондинге) есть дропы, но их небольшой процент. Стоит еще сказать что сейчас nginx работает на всех 8 процессорах. Но видимо его лучьше вынести с процессора разруливающего softirq? Изменено 2 марта, 2009 пользователем calculator Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
nuclearcat Опубликовано 2 марта, 2009 · Жалоба Эммм, у вас 2.6.18 ? Так тот патч был сделан гораздо позже. С таким древним ядром сложно что-то ожидать хорошее. Есть причины по котороым у вас такое старое ядро? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
calculator Опубликовано 2 марта, 2009 · Жалоба nuclearcat Причина только то, что при тестировании старшие ядра показали ощутимо худшую производительность. Но 2.6.18 до сих пор поддерживается. У меня конкретно 2.6.18-53.1.19.el5. Вот наверно по current_fs_time, думаю подкрутить noatime для fs. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
nuclearcat Опубликовано 2 марта, 2009 · Жалоба т.е. echo скажем 2>/proc/irq/номер/smp_affinity не работает? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
calculator Опубликовано 2 марта, 2009 (изменено) · Жалоба nuclearcat Сейчас нет. В том смысле что туда пишет, но толку никакого. Вот вынес nginx с 1 процессора, теперь там только проценты от softirq. Пиковая нагрузка в цифрах. Завтра попытаюсь уговорить товарища поставить noatime, интересно посмотреть какие после этого цифры будут. Изменено 2 марта, 2009 пользователем calculator Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Dark_Angel Опубликовано 3 марта, 2009 · Жалоба 2calculator: noatime дает прирост 20-30% на операциях постоянной записи на HDD. Если у Вас только чтение, то это ничего не даст. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
calculator Опубликовано 3 марта, 2009 · Жалоба Dark_Angel Там очень много логов пишется. В пиках больше 4ГБ за 15 минут интервал получается. Думаю должно ощутимо помочь, тем более оно опять же hpet дергает. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Dark_Angel Опубликовано 3 марта, 2009 (изменено) · Жалоба 2calculator: Ну тут важно определить, что пораждает softirq. Если это винт, то да, это поможет, т.к. логи это много мелких обращений к винту. Но если нет, то это ничего не даст. Насчет SMP affinity: 2.6.20 - отлично все работает. По вопросу: Надо убрать сетевые карты с одного процессора. Это однозначно. Надо включить NAPI. Это однозначно. 25К прерываний - это много, надо уменьшать, иначе машина будет задыхаться. Изменено 3 марта, 2009 пользователем Dark_Angel Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
calculator Опубликовано 3 марта, 2009 (изменено) · Жалоба Dark_Angel Ну тут важно определить, что пораждает softirq Как можно это сделать? Я как-то вычитал что softirq бывают 6 _типов_. Как определить в % сколько от кого? Насчет SMP affinity: 2.6.20 - отлично все работает. Всмысле патч для bnx2 работает? Надо включить NAPI В bnx2 я не нашел NAPI :-( Но судя по тому что при пиковых нагрузках и 60к пакетах висят даже не 25к а 20к прирываний, что-то там есть. Логи дергаются часто, есть даже цифры на сколько часто за 1 минуту: # inotifywatch -e modify access.log Establishing watches... Finished establishing watches, now collecting statistics. total modify filename 487848 487848 access.log Но опять же интересно если там часть softirq, то сколько это в процентах от общего числа. Изменено 3 марта, 2009 пользователем calculator Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Dark_Angel Опубликовано 3 марта, 2009 (изменено) · Жалоба 2calculator: На сколько я знаю, это можно посмотреть профайлером. Софт irq - это фактически не обработанные до конца хардовые прерывания. Это если грубоговоря. Я не знаю, насчет Broadcom и настроек драйверов, но Вам явно надо крутить их. Я знаю, что у Интела в этом плане куча наработок, именно под hard load. 60K пакетов - это еще даже не хард лоад. Вам стоит уточнить у ребят, кто работал с этими сетевыми, как быть в данной ситуации. Где крутить настройки драйверов, попробовать поменять параметры очереди и помогают ли они для данной сетевой. Был бы у Вас Интел, я бы рассказал, что к чему. Я считаю, что в данном случае у Вас банальная перегрузка системы прерываниями от сетевой карты ( сетевых карт ). noatime в данном случае особой роли не сыграет, 8.3 K модификаций в секукнду, конечно много, но горлышко не тут. Кстати, на сколько я знаю, можно попросить логи писать порциями из буфера. Тогда удается свести это число к 10-20 модификаций в секунду, в самом плохом случае, но это тема для другого разговора. Про патч: 2.6.20 - без всяких патчей, стандартное федоровское ядро. Я более чем убежден, что если я его заменю на более свежее, то аффинити всеравно будет работать. Не буду ничего утверждать, но мне кажется, что Вы где-то ошибаетесь при конфигурировании аффинити в новых ядрах, из-за чего оно у Вас и не работает. UPD. На первых страницах сабжа, уважаемый Ivan Rostovikov делится рассказами про 400 kpps на Broadcom сетевых. Вы бы к нему обратились за помощью, как и что настроить. Изменено 3 марта, 2009 пользователем Dark_Angel Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
yun Опубликовано 3 марта, 2009 · Жалоба Дистрибутив: Centos5 Ядро: 2.6.18-92.1.22.el5 Сетевая карта: 01:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) 01:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) драйвера: igb-1.3.8.6 cобраны с использованием стандартного спека из архива. загрузка командой: modprobe igb IntMode=3 Смотрим dmesg: Intel(R) Gigabit Ethernet Network Driver - version 1.3.8.6 Copyright (c) 2007-2008 Intel Corporation. PCI: Enabling device 0000:01:00.0 (0000 -> 0003) ACPI: PCI Interrupt 0000:01:00.0[A] -> GSI 16 (level, low) -> IRQ 169 PCI: Setting latency timer of device 0000:01:00.0 to 64 igb: 0000:01:00.0: igb_validate_option: Interrupt Mode set to 3 igb: eth0: igb_probe: Intel(R) Gigabit Ethernet Network Connection igb: eth0: igb_probe: (PCIe:2.5Gb/s:Width x4) 00:1b:21:2e:9c:a4 igb: eth0: igb_probe: Using MSI-X interrupts. 4 rx queue(s), 1 tx queue(s) PCI: Enabling device 0000:01:00.1 (0000 -> 0003) ACPI: PCI Interrupt 0000:01:00.1[B] -> GSI 17 (level, low) -> IRQ 193 PCI: Setting latency timer of device 0000:01:00.1 to 64 igb: eth1: igb_probe: Intel(R) Gigabit Ethernet Network Connection igb: eth1: igb_probe: (PCIe:2.5Gb/s:Width x4) 00:1b:21:2e:9c:a5 igb: eth1: igb_probe: Using MSI-X interrupts. 1 rx queue(s), 1 tx queue(s) Прерывания: fgrep eth /proc/interrupts 106: 25 10 0 644 PCI-MSI-X eth0-Q0 114: 25 644 0 10 PCI-MSI-X eth0-Q1 122: 25 0 654 0 PCI-MSI-X eth0-Q2 130: 25 0 0 654 PCI-MSI-X eth0-Q3 138: 1 0 0 0 PCI-MSI-X eth0 146: 23 0 654 0 PCI-MSI-X eth1-Q0 154: 1 0 0 0 PCI-MSI-X eth1 Почему у перавого порта 4 rx очередеи и одна tx, а у второго по одной? ps: прерывания при загрузке модуля без доп. параметров 62: 8 0 0 0 PCI-MSI-X eth0-Q0 170: 1 0 0 0 PCI-MSI-X eth0 178: 6 0 0 0 PCI-MSI-X eth1-Q0 186: 1 0 0 0 PCI-MSI-X eth1 Может параметр воспринимается только первым портом а второй использует режим по умолчанию? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
martin74 Опубликовано 3 марта, 2009 · Жалоба почему может? так оно и есть... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
calculator Опубликовано 3 марта, 2009 · Жалоба На сколько я знаю, это можно посмотреть профайлером. Конкретный пример очень бы кстати. Не буду ничего утверждать, но мне кажется, что Вы где-то ошибаетесь при конфигурировании аффинити в новых ядрах, из-за чего оно у Вас и не работает. Там сложно где-то ошибиться. На первых страницах сабжа, уважаемый Ivan Rostovikov делится рассказами про 400 kpps на Broadcom сетевых. pktgen'ом мы на эту машину натравливали ~650k - жила нормально(слабый генератор просто больше не мог). Тут же вопрос что нужно не отработать или отроутить пакеты. Их нужно приложению скормить, а это вроде как тяжелее... По параметрам для bnx2 там замечено только: parm: disable_msi:Disable Message Signaled Interrupt (MSI) (int) Сервера DELL, у них вроде адекватная поддержка по общению так. Попробую завтра именно по этой сетевой пообщаться, может что интересного там можно подкрутить. yun Попробуйте в /etc/modprobe.conf соотв. options указать. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
yun Опубликовано 3 марта, 2009 · Жалоба Указывал в /etc/modprobe.conf - эффекта ноль Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Dark_Angel Опубликовано 3 марта, 2009 · Жалоба Конкретный пример очень бы кстати. Я бы и рад, но у меня профайлер, там где есть что смотреть, не работает, я писал выше в этой теме. В других местах показывать нечего. Там сложно где-то ошибиться. Понимаю Ваше возмущение, но у меня на 2.6.20, на 2.6.25 нормально работает affinity, так что дело тут явно не в ядрах, а в Ваших действиях. pktgen'ом мы на эту машину натравливали ~650k - жила нормально(слабый генератор просто больше не мог). Тут же вопрос что нужно не отработать или отроутить пакеты. Их нужно приложению скормить, а это вроде как тяжелее... Ничего не смогу сказать про данный тест, потому как нет примеров. Из того, что Вы предоставили, я делаю вывод, что проблема в сетевых картах. 25К прерываний - много. Надо сделать меньше прерываний. Проблемы скармливания приложению я не вижу. От скармливания больше прерываний на сетевой карте не становится. По поводу disable MSI, так его лучше не делать, если он включен и работает, но по Вашим данным я этого не вижу. 2yun: Там через запятую принимаются параметры для первого и второго интерфейса. Например modprobe igb IntMode=3,3 Но вообще как-то странно. Неужели, если дать драйверу параметр режима работы (1, 3, статика ), он включает дополнительные очереди? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
cant Опубликовано 3 марта, 2009 · Жалоба По прирываниям для eth0, eth1 CPU0 тикает. Пробовал их разнести по разным процессорам, но там похоже без патча не обойтись. Отключение MSI не помогает - BIOS с последней прошивкой упорно ставит сетевые да еще и megasas на 1 прирывание. И честно говоря патчить пока страшно, тем более что он не под мое ядро(2.6.18).На интерфейсах(они в бондинге) есть дропы, но их небольшой процент. Причина только то, что при тестировании старшие ядра показали ощутимо худшую производительность. Но 2.6.18 до сих пор поддерживается. У меня конкретно 2.6.18-53.1.19.el5. Насчет SMP affinity: 2.6.20 - отлично все работает. ... вот засада. На bmx2 мне тоже предстоит linux-router собрать. теперь даже не знаю 2.6.18 или старше ставить. К сожалению я пока не совсем в теме, но странно, ведь пишут что, в 2.6.18 SMP-affinity для bmx2 должно стопудово работать после отключения MSI https://bugzilla.redhat.com/show_bug.cgi?id=432451 Я правильно понимаю, что bmx2 (будь хоть с MSI) будет генерить только одно прерывание(tx+rx) ? И кроме как irqbalance его никак иначе нельзя размазать на несколько ядер ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
yun Опубликовано 3 марта, 2009 (изменено) · Жалоба 2yun: Там через запятую принимаются параметры для первого и второго интерфейса.Например modprobe igb IntMode=3,3 Но вообще как-то странно. Неужели, если дать драйверу параметр режима работы (1, 3, статика ), он включает дополнительные очереди? Да, по-дефолту очереди всего две.Кстати судя по исходникам на данном чипе должно быть 8 очередей, но почему-то тока на rx 4, а на tx 1 даже при MSI-MQ. Карта осталась на работе, но возможно что для 2-х портов надо будет указать не IntMode=3,3 а IntMode=3,3,3,3 (один параметр для одного направления (tx либо rx) одного порта), но к сожалению в документации буквально 3 слова без подробностей. Изменено 3 марта, 2009 пользователем yun Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
calculator Опубликовано 3 марта, 2009 (изменено) · Жалоба Dark_Angel Все же хочу прояснить. affinity работает именно с bnx2 драйвером? cant Скорее всего при отключеном MSI оно работает, но я не мог попробовать - у меня все на 1 прирывании. Возможно это _фича_ моей матплаты. Изменено 3 марта, 2009 пользователем calculator Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Dark_Angel Опубликовано 3 марта, 2009 · Жалоба 2yun: В доке интела четко написано, что параметры указываются для устройств, а не для интерфейсов или очередей. Другой вопрос соответствует ли это реальности. 2calculator: К сожалению, у меня нет таких сетевух, соответственно, что такое bnx2 драйвер, не знаю. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SSTS Опубликовано 4 марта, 2009 (изменено) · Жалоба Dark_AngelВсе же хочу прояснить. affinity работает именно с bnx2 драйвером? cant Скорее всего при отключеном MSI оно работает, но я не мог попробовать - у меня все на 1 прирывании. Возможно это _фича_ моей матплаты. DELL PowerEdge 1950 dmesg Broadcom NetXtreme II Gigabit Ethernet Driver bnx2 v1.5.8.1 (May 7, 2007) ACPI: PCI Interrupt 0000:05:00.0[A] -> GSI 16 (level, low) -> IRQ 16 eth1: Broadcom NetXtreme II BCM5708 1000Base-T (B2) PCI-X 64-bit 133MHz found at mem f8000000, IRQ 16, node addr 0019b9e09cf0 lspci 05:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12) cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 0: 4258 129 103 3563 3747 3704 3675 3695 IO-APIC-edge timer 1: 0 0 0 0 1 0 1 0 IO-APIC-edge i8042 8: 2 2 0 1 2 0 0 0 IO-APIC-edge rtc 9: 0 0 0 0 0 0 0 0 IO-APIC-fasteoi acpi 12: 1 1 0 0 0 1 0 1 IO-APIC-edge i8042 14: 9 6 5 9 10 12 12 11 IO-APIC-edge ide0 17: 1826227 712006 437407 1817138 1821025 1827378 1824792 1827646 IO-APIC-fasteoi megasas 18: 1220731 683744 516871 1229552 1225973 1219423 1221904 1219444 IO-APIC-fasteoi megasas 19: 0 0 0 0 0 0 0 0 IO-APIC-fasteoi libata 20: 133 11 4 134 133 135 134 131 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb2, uhci_hcd:usb4 21: 554 56 44 549 558 547 554 552 IO-APIC-fasteoi uhci_hcd:usb3 212: 22318117 3715726058 22228828 22344487 22290311 22064286 22459284 22264387 PCI-MSI-edge eth1 213: 38858983 38802674 3869402169 38832296 38886691 39112399 38717588 38912323 PCI-MSI-edge eth0 eth1 висит на CPU1 uname -a Linux biling 2.6.21.5 #22 SMP Tue Dec 16 14:22:55 EET 2008 i686 Intel® Xeon® CPU E5320 @ 1.86GHz GenuineIntel GNU/Linux smp_affinity включаю так echo "02" >/proc/irq/212/smp_affinity Могу выслать есле надо конфиг ядра Изменено 4 марта, 2009 пользователем SSTS Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
yun Опубликовано 4 марта, 2009 · Жалоба Действительно, помогло modprobe igb IntMode=3,3 # dmesg Intel(R) Gigabit Ethernet Network Driver - version 1.3.8.6 Copyright (c) 2007-2008 Intel Corporation. PCI: Enabling device 0000:01:00.0 (0000 -> 0003) ACPI: PCI Interrupt 0000:01:00.0[A] -> GSI 16 (level, low) -> IRQ 169 PCI: Setting latency timer of device 0000:01:00.0 to 64 igb: 0000:01:00.0: igb_validate_option: Interrupt Mode set to 3 igb: eth0: igb_probe: Intel(R) Gigabit Ethernet Network Connection igb: eth0: igb_probe: (PCIe:2.5Gb/s:Width x4) 00:1b:21:2e:9c:a4 igb: eth0: igb_probe: Using MSI-X interrupts. 4 rx queue(s), 1 tx queue(s) PCI: Enabling device 0000:01:00.1 (0000 -> 0003) ACPI: PCI Interrupt 0000:01:00.1[B] -> GSI 17 (level, low) -> IRQ 193 PCI: Setting latency timer of device 0000:01:00.1 to 64 igb: 0000:01:00.1: igb_validate_option: Interrupt Mode set to 3 igb: eth1: igb_probe: Intel(R) Gigabit Ethernet Network Connection igb: eth1: igb_probe: (PCIe:2.5Gb/s:Width x4) 00:1b:21:2e:9c:a5 igb: eth1: igb_probe: Using MSI-X interrupts. 4 rx queue(s), 1 tx queue(s) # cat /proc/interrupts | grep eth 140: 23 63 0 0 PCI-MSI-X eth0-Q0 148: 23 0 0 63 PCI-MSI-X eth0-Q1 156: 23 43 20 0 PCI-MSI-X eth0-Q2 164: 23 0 0 63 PCI-MSI-X eth0-Q3 172: 2 0 0 0 PCI-MSI-X eth0 180: 21 67 0 0 PCI-MSI-X eth1-Q0 188: 21 0 67 0 PCI-MSI-X eth1-Q1 196: 21 20 0 47 PCI-MSI-X eth1-Q2 204: 21 0 67 0 PCI-MSI-X eth1-Q3 212: 1 0 0 0 PCI-MSI-X eth1 Но почему tx по одной очереди? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Dark_Angel Опубликовано 4 марта, 2009 · Жалоба 2yun: А сколько должно быть по даташиту? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
yun Опубликовано 4 марта, 2009 · Жалоба Цитата из исходников: #define IGB_MAX_RX_QUEUES (hw->mac.type > e1000_82575 ? 8 : 4) #define IGB_MAX_TX_QUEUES (hw->mac.type > e1000_82575 ? 8 : 4) Судя по этому коду - 8 на rx и 8 на tx. А по факту получается 4 на rx и 1 на tx. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...