Re[2]: Асинхронный файловый ввод-вывод
От: chaotic-kotik  
Дата: 16.06.16 14:03
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Нативный AIO, он правда является настоящим асинхронным дисковым вводом-выводом, а посиксный лишь эмулирует его, раскидывая запросы по некоторому количеству внутренних потоков. Во всяком случае, так оно было, когда я последний раз на него смотрел.


Ничего не изменилось.

Pzz>Во-вторых, асинхронный дисковый ввод-вывод имеет смысл только если удастся накидать много запросов, чтобы система могла их отсортировать в удобном для диска порядке, чтобы системе было из чего выбирать. Но это имеет смысл только если система очень хорошо понимает, как работает данный конкретный физический диск (что совсем нетривиально, потому что логическая геометрия диска, как она видна системе, весьма отдаленно соотносится с его реальной физической геометрией). Кроме того, работа в режиме "прочитаем 100 мегабайт из первого файла, потом из второго, потом из третьего" дает в итоге гораздо большую производительность, чем одновременное чтение из каждого файла понемногу.


Pzz>В общем, надо экспериментировать, дает ли асинхронный ввод-вывод какой-либо выигрыш в вашей конкретной задаче, или наоборот, проигрывает, или получаются близкие результаты. Причем у скедулера ввода-вывода есть свои ручки для настройки, экспериментировать надо, крутя эти ручки. И для SSD ответ будет совершенно другим, чем для механического диска.


Я делаю оптимизацию под SSD + есть кое какие требования, которые проще всего реализовать через O_DIRECT+асинхронность.

Pzz>Это соображение, кстати, к венде тоже относится. Причем может оказаться, что ответ на вопрос о выборе между синхронным и асинхронным вводом-выводом будет разный, в зависимости от системы.


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

Pzz>В третьих, у нативного AIO интерфейс такой, что, на первый взгляд, его невозможно совместить в одном потоке с poll/select/eventfd. Потому что один поток может ждать либо io_getevents(), либо poll(), но не одновременно. Но если некоторое время подумать головой, и потом встать на уши, то совместить удается. Если кому интересно, могу отдельным письмом рассказать, как это сделать.


Мне интересно, т.к. подозреваю что буду писать свой велосипед. Нельзя просто в тему запостить?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.