![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| box |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
всем привет!
запускаю в бесконечном цыкле блокировку/разблокировку из одного треада другого, тобиш поидее на максимальной скорости для данной платформы
так максимальное количество блокировок/разблокировок всего навсего до 300 в сек, с чем это связанно и как с этим бороться ? |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Связано это с тем, что мьютексы работют в режиме ядра. А переход из пользовательского режима в ядерный -- это очень дорогая операция. Бороться можно по-разному. Например, использовать спинлок для быстрых операций. Мьютексы (и другие ядерные блокировки, да и не ядерные) следует использовать как можно реже. Желательно, чтобы у тебя было одно место для синхронизации. Если требуется блокировок много и часто -- это 100% проблема архитектуры приложения! Это сообщение отредактировал(а) Cheloveck - 26.10.2013, 00:26 -------------------- ![]() |
|||
|
||||
| tzirechnoy |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 2 Всего: 16 |
А у меня -- 140000 передач в секунду. Вообще -- что за манера -- выкидывать безсвязные куски кода?
Казалось бы, у вас проблема в скорости -- ну, сделайте пример, замерьте скорость -- нет -- появятся две безсвязные строчки, в которых ещё из семи имён три -- неясно что, и которые в принцыпе не будут что-нибудь делать без симметричного ответчика.
Компилировал и запускал:
(до ^C после запуска подождал большэ 5 секунд -- чтобы четвёртая секунда вся записалась.) В файле t1.txt должно быть что-то вида:
Система -- Debian/stable, gcc -- Debian 4.7.2-5, ABI amd64, AMD Athlon II X4 651 Quad-Core Processor 3 GHz, памяти хватает, ничего не делает. |
||||||
|
|||||||
| box |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
140к тоже мало , ибо при поступлении каждого пакета должен генериться запуск нужных треадов для их обработки
это получается что выше 140к пакетов в сек мы не прыгнем |
|||
|
||||
| box |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
кстати у меня результат намного выше с вашим примером , хотя цель была другая , у вас реализованна конкурентная блокировка а мне надо из одного процесса запускать другой с максимальным кол-вом обращений в сек (в идеале надо 15 млн что соотвествало бы 10G ethernet):
1813133 10878804 65241088 на двухголовом ксеоне 2х6 ядер и фряха 10-я Это сообщение отредактировал(а) box - 26.10.2013, 05:22 |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
Это далеко не факт. Всё зависит от реализации. Любые блокировки это дорого, поэтому нужно задачи решать без оных. Тем более когда важна производительность. |
|||
|
||||
| box |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
и как вы предлагаете защитить контейнер типа unordered_map
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
никак не предлагаю. Если ты еще не понял, то использование общего контейнера является узким местом и от этого надо отказываться. Как? Я уже писал в твоей предыдущей теме.
|
|||
|
||||
| box |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
скиньте пожалуйста ссыдку на пример использования spin_lock
|
|||
|
||||
| tzirechnoy |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 2 Всего: 16 |
Нельзя просто так взять и обработать 10G Ethernet. Если серьёзно -- то 10G сейчас не будет выбирать полную полосу дажэ просто на прерываниях. Не, ну если задаться цэлью -- то наверное ужэ можно поставить спортивный рекорд (считать надо), а чтобы в жызни работало -- не будет. Соответственно, о переключении в userspace на каждый пакет можно забыть, о такой дорогой операцыи как рождение трэда -- тем более. То есть только поллинг, только обработка большой пачки пакетов за фиксированное (небольшое) число сисколлов.
Ну, у меня и комп -- рабочий десктоп, ему почти пять лет по-моему. |
||||
|
|||||
| box |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
между прочим у нетмап скорость доступа к юзер спейсу состовляет всего 65 тактов процессора , тобиш он способен уже при одном ядре и 900 мгц выдавать нагора 15млн пакетов в сек (проверял на игбшной гиговой карте в один поток и частоте 2.4 ггц при загрузке треада всего в 20.0 генерит 1.5 млн пакетов в сек на легке) так же обстоят дела и с захватом пакетов , там используется мемори мапинг и прямой доступ к сетевому интерфейсу а в режиме зеро копи вообще творит чудеса , берем из rxring пакет , анализируем и меняем местами индексы rxring и txring и пакет уходит по назначению либо в стек либо в сеть , так что остается только найти способ многопоточной обработки всего что попало в юзер спейс с минимальными потерями на блокировках
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
всё давно уже найдено: в Windows это IO Completion port, в unix мире не уверен, но насколько слышал это epoll. Никто не работает с сетью посредством самостоятельной диспетчеризации соединений между потоками т.к. это не лучший способ реализации, мягко гояоря.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |