Developing #211
Исследование работы с Root файлами
Status: | Открыта | Start date: | 07/11/2018 | |
---|---|---|---|---|
Priority: | Низкий | Due date: | ||
Assignee: | Mikhail Kozlov | % Done: | 0% | |
Category: | - | |||
Target version: | DevPlan |
Description
На данный момент наиболее нагруженной частью процедур реконструкции является I/O. Я замечал, что когда переходишь между машинами с HDD и SSD на одних и тех же задачах получаешь ускорение просто на порядки.
Есть подозрение, что чтение из файла в память происходит по-событийно. Для нас это очень плохо - у нас много маленьких событий.
Root - бинарный формат, поэтому нет никаих проблем с тем, чтобы проецировать большие куски бинарного файла в память: https://eax.me/linux-file-mapping/, https://habr.com/post/55716/. И потом уже их читать не нагружая IO диска. Тоже самое с записью.
В связи с этим предлагается разобраться как работает чтение/запись и root файлов: https://root.cern.ch/root/html534/guides/users-guide/InputOutput.html
Есть ли готовые механизмы работы с большими рут файлами (а они скорее всего есть, просто не прокинуты в FairRoot):
https://root.cern.ch/root/html520/TTreeCache.html
https://root-forum.cern.ch/t/ttree-and-default-cache-size/9411
https://root.cern.ch/doc/v608/classTMemFile.html
https://root.cern.ch/doc/master/classTMapFile.html
https://root.cern.ch/doc/master/classTTreeCloner.html
Предлагается сделать такое исследование, рассказать коллегам про ROOT IO и какие фишки можно использовать, но не используются по умолчанию в FairRoot IO)
Тестирование всего можно делать просто в отдельном макросе, который читает большой рут файл с небольшими entry и считает к примеру сумму какого нибудь атрибута.