А это – красавец Таганрог!
Если не хватит слайда – возьми этот!
Пирс Хаб IO петабайт Инетра оптимизация ТВ Приставка Клиент Сергей Нечаев Руководитель проектов, компания «Инетра» Специально для отдела МО ВВС ИВМиМГ СО РАН и Летней школы по параллельному программированию Виджеты iOS
ОТКЛЧТ МБЛН ТЛФН ПЖЛСТ
Давайте знакомиться!
A long time ago in a galaxy far, far away
Последние 5 лет Программист/архитектор Биллинг (тарификатор) Ведущий инженер Коллцентр (отчетность) Руководитель проектов Пирс (все про все)
О вас
Рекламная пауза
Компания «Инетра»
Наши продукты
Омск ТомскНижневартовск Новосибирск БийскБарнаулКемерово Владивосток Файлообменная сеть «Пирс» Здесь будет ваш город
На пользователей онлайн вам понадобится... IPMI; 16GB RAM; 8 3 Gbit/s network; 4 HDD; 2 независимых блока питания. 8*5000 Bogomips
Приставка «ПирсТВ» Чипсет Sigma Designs Мб оперативнои ̆ памяти 2 x 256 Мб системнои ̆ памяти ~332 Bogomips
Клиент Windows, Linux, Mac OS X ? bogomips ? окружение
Телевиджеты Управление пультом Ограниченный API
IOS
Они все такие разные и все-таки они вместе...
А требования – одинаковые! Быстрота Удобство Автообновление
Теперь ввод-вывод
Среди всех преждевременных бед оптимизация занимает почетное второе место, можете убедиться сами...
Чеклист Надо ли вообще эту задачу решать? Надо ли ее решать именно таким способом? Границы задачи и изменений Что мы можем сделать: что-то подкрутить или все переделать? Куда нужно приложить усилия: оценка алгоритмов и профилирование
От чего зависит время работы программы Cores/nodes bound CPU bound Cache bound Memory bound IO bound
Оптимизация IO Уменьшение объема выводимых данных Уменьшение количества системных вызовов Использование неблокирующих операций Уменьшение количества потоков Буферизация и двойная буферизация Мультиплексирование AIO
Бонус 1: когда же чертовы данные запишутся на диск?
Буфер приложения Жесткий диск Cache buffer OS Буфер ФС Дисковый кэш write(fd, buffer,size); fsync(fd);
Бонус 2: когда же чертовы данные будут доставлены получателю
Буфер приложения Буфер ОС Буфер приложения write(fd, buffer,size); Подтверждени е сеть read(fd, buffer,size);
This is Petabyte!!!
Бонус 2: Борьба с verlihub, 2009г Как мы сделали петабайт! Раунд 1: poll -> epoll Раунд 2: Итератор + epoll Раунд 3: accept в отдельном потоке. Раунд 4: Параметры стека протокола TCP/IP Раунд 5: Таймеры Раунд 6: Хэш без коллизий Раунд 7: Таймер "кто успел, тот и съел" Раунд N: пользовательский буфер же!
ПЖЛСТ ВПРС
Рекламная пауза!
Спасибо за внимание! удачи на школе!