130 likes | 324 Views
(New) Root Memory checker. Marian Ivanov. Outlook. Motivation New memory checker Implementation User interface Examples AliRoot observations. Motivation. The AliRoot use to much memory Memory checker needed
E N D
(New) Root Memory checker Marian Ivanov
Outlook • Motivation • New memory checker • Implementation • User interface • Examples • AliRoot observations
Motivation • The AliRoot use to much memory • Memory checker needed • Valgrind and vtune – too slow – difficult to run realistic simulation reconstruction ( factor 50 slow down) • We need some automatic procedure to check the quality of code – Optimally done during the nightly builds + Sending message to the top violators • Number of new – deletes • Total and current allocated space – development in time • Selective queries – per libraries – per functions
Implementation – Classes - Information • TinfoStamp • memory alocation information – TotalCount, CurrentCount, TotalSize, CurrentSize • Code ID, StampNumber • TcodeInfo • Code information – address of the code • TinfoStamps – current, last, max memory stamp, max alloc count • Integrated from all called function • TstackInfo • Array of code information – stack • TinfoStamps – current, last, max memory stamp, max alloc count
Containers • MemStatManager • std vector of CodeInfos • std vector of StackInfos • std vector of StampInfos – (evolving in time) • Information dumped to the output tree • 1. On demand • 2. Automatic dump after reaching the predefined size
Principles • Hook for alloc and free • Possibility to enable and disable • Alloc hook: • Get the stack trace • Register the new stack trace if not registered yet • Register memory for given stack (increase counters) • Free hook • Unregister memory for stack created given pointer (decrease counters)
User interface – acquiring data • Start • TMemStatDraw draw(100000,1000); • User specify the auto stamp size - Allocated size, Number of allocation • Make stamps – (inside the code - macro) • draw.AddStamp("Start"); • funF(); • draw.AddStamp("funF"); • Destructor • Close the file with stamps
User interface – quering of information • Initialization from file - TMemStatDraw draw("memstat.root") • Select code information • draw.SelectCode("testMemstat","fun",TMemStatDraw::kOR) • draw.SortCode(TMemStatDraw::kAllocSize,TMemStatDraw::kCurrent); • draw.PrintCode(10,10) • Select stack information • draw.SelectStack(TMemStatDraw::kOR) • draw.SortStack(TMemStatDraw::kAllocSize,TMemStatDraw::kCurrent); • draw.PrintStack(10,10)
AliRoot example (print) draw.Print("stackdeep 20");
Drawing draw.Draw("stackdeep 20"); A lot of space for improvement
Future plans • The code committed in AliRoot • The system dependent function in separate class TMemStatDepend • e.g Backtrace information • Not (yet) implemented on all platforms • GUI – Not working yet – Space for optimization • Not critical part • Integration to the AliRoot ? • Problems with platforms • My local version of AliSysInfo::AddStamp call memory checker