On 30.04.2012 19:24, Vladimir 'φ-coder/phcoder' Serbinenko wrote: > On 30.04.2012 17:26, Bean wrote: >> Hi, >> >> While testing network function in efi mode, I've found several memory >> leak related to fragmentation, but there is still some memory problem >> that's very tricky to locate. For example, you can run testspeed on a >> large file several times in a row and it could show the memory error. >> Since network condition are very difficult to reproduce, I have to >> look at the source of this issue, memory allocation. Currently it has >> mm_debug option that could print out file and line number of each >> memory call, but it's quite useless since we can't find the relevant >> informaton with full screen of prints. >> Here are some of my ideas for enhanced memory protection support: >> >> 1, when we allocate memory, we append some information at the end of >> the buffer, which include filename, lineno of caller, and tag to >> indicate what is used for and some padding to detect memory overwrite >> problem. >> >> 2. add a command to print the current memory list with extended >> information, this can be used to find memory leaks. >> >> 3. it's also a good idea to run the memory check in automated test to >> locate potential issue. > This is pretty easy to do leveraging some of the code I did for POSIX > support. But: > - Due to additional time and space required it should be done only when > mm-debug is enabled. > - The additional data has to be stored before rather than after the > range since we store all the info before. > - Integrating with automated tests isn't that easy since some memory is > intentionally never freed i.a. disk cache or otherwise in use (i.a. > terminal). We need exceptions for those. > I have half-working patch, just needs few fixes. > > Patch attached. It still has a bug since printing the report to terminal may change allocations and so iterator may become invalid. That's another reason why terminal should be excluded altogether from memory tracking. -- Regards Vladimir 'φ-coder/phcoder' Serbinenko