![]() |
|
Модераторы: xvr |
![]()
|
|
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
Всем привет,
Изучаю, как можно было бы занять процессор полезной работой в то немаленькое число тактов, в которое он "занят" ожиданием появления результата на контроллере шины IDE. В стандарте Linux существует пакет POSIX AIO (asyncronious i/o), в котором есть функции aio_read и aio_write. Особенность в том, что возврат из них происходит сразу же после вызова, без ожидания результата операции, отложенная обработка которого может быть осуществлена по сигналу. На этот счёт вопрос : достижимо ли хоть какое-то ускорение работы приложения при использовании асинхронного вывода вместо обычного? Из тех тестов, что я провёл следует, что нет, не достижимо. Но, во-первых, я мог где-то и наляпать -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
Именно так. Тупо создаётся новый поток. Только в Linux'е. В других ОС, к примеру FreeBSD, на сколько знаю - сделано всё как надо... |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
GrayCardinal, спасибо за ответ! = Хм, интересно, выходит, на разных системах разная реализация POSIX AIO API? В таком случае, я попробую поставить к себе в VMWARE какой-нибудь FreeBSD и провести тесты там... -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
Ещё хочу добавить, что в NetBSD, OpenBSD aio_ отсутствует...
http://nixdoc.net/man-pages/FreeBSD/?cmst=...sss=&cmss=2 (или я плохо смотрел ? ) Это сообщение отредактировал(а) GrayCardinal - 24.1.2008, 20:06 |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
Я бы сказал, что приведённая Вами ссылка - вообще единственное место, где упоминается aio безотносительно выбора системы на левом фрейме Ну, на SuSE, кстати, libaio ставится отдельно. -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
Добавлено @ 21:17
да пример сервер + система логирования Это сообщение отредактировал(а) MAKCim - 24.1.2008, 21:24 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
MAKCim, у меня тоже есть повод для оптимизма : я получил ускорение для Windows - мне это удобнее всего
-------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
marcusmae,
вопрос то в чем? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
MAKCim, вопрос в том, что асинхронный вывод под OpenSuSE работает медленнее обычного вывода с блокировкой.
Вот код с использованием aio_write :
А вот обычный вывод :
-------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
marcusmae,
естественно, асинхронный I/O не в любом случае дает преимущества он оправдан, когда приходится читать или писать большие объемы данных, и этот процесс не должен снижать интерактивность больший выигрыш можно получить на MP-системе -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
Сколько? У меня разом пишется 200мб на фоне ёмких вычислений. То есть, выводы не накладываются др на друга. Да и под виндовс ускоряется.
на многоядерной то есть? Это сообщение отредактировал(а) marcusmae - 24.1.2008, 22:52 -------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
на любой MP в том числе многоядерной
ну 200МБ это достаточно много а как ты скорость замерял? Это сообщение отредактировал(а) MAKCim - 24.1.2008, 23:04 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
На стороне теста (fortran) :
не самый лучший способ для экстремального тайминга : у этой функции не очень хорошее разрешение. Но значительные различия она улавливает. А многоядерность - всё же странное решение проблемы. Освобождая от тормозов, связанных с выводом одно ядро, это счастье просто прибывает другому ядру. Это сообщение отредактировал(а) marcusmae - 24.1.2008, 23:37 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
GrayCardinal, я включил PCBSD. Вижу, поставить на него компиляторы Intel - целая проблема. Хотя, возможно, имея средство двоичной совместимости, можно попытаться запустить там уже готовые бинарники...
-------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
marcusmae,
разница в том, что уведомление о завершении операции асинхронного I/O приходит после физической записи данных на устройство если же использовать обычные операции write()/read() (без O_SYNC), то они возвращают управление после отправки пакета bio планировщику I/O, т. е до физической записи на устройство поэтому время работы асинхронных функций при таком способе измерения времени больше тем более у тебя в примере используется ofstream :: write(), который так же как и fwrite() буферизируем, т. е возврат управления может происходить еще раньше (нет обращения к ядру, а данные записываются в user-level буфер) я такого не говорил читай внимательнее MP - это способ повысить общее быстродействие приложения, использующее операции асинхронного I/O -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |