среда, 27 июля 2016 г.

Оптимизация записи на диск (экспериментально)

FlylinkDC++ при закачке файла с большого кол-ва источников (10-50 ) начинает активно пожирать CPU на ожиданиях в критической секции объекта SharedFileHandle. Это происходит т.к. несколько ниток пытаются писать на диск (файл .dctmp) полученные из сети блоки а т.к. запись синхронная, то пока пишет один поток - другие крутятся в ожидании.
Попробовал перевести эту часть на Memory-Mapped Files - блоки асинхронно сбрасывается на диск не вешая в ожидания соседние потоки.
Просьба активных пользователей протестировать новую бетку (build-19853 или выше ) и отписать о результатах.
Пока эта функция включается автоматически, при условии что размер файла не выше 2 гиг полезный.
График загрузки CPU и ожиданий при закачке тествого файла размером 1.5 гиг 
1. До изменений:














 2. После включения Memory-Mapped Files:


Комментариев нет: