[Ovmsdev] Memory leak

Michael Balzer dexter at expeedo.de
Mon Apr 23 14:19:25 HKT 2018


Mark,

I separated it out of modularity concerns (ovms.h = tools, ovms_extram.h = apps) and thought it may also gain some compile speed when we add more std headers to
_extram.h.

Currently that speed gain is near null, because it's included now by _utils.h, but that include can possibly be replaced by a forward declaration of extram::string.

But I don't object if you think it's better to have this in one place.

Regards,
Michael


Am 23.04.2018 um 04:07 schrieb Mark Webb-Johnson:
> Michael,
>
> Do we need ovms_extram.h? Can we just put the namespace directly into ovms.h (where all the other external ram allocation stuff is)?
>
> Regards, Mark
>
>> On 22 Apr 2018, at 10:28 PM, Michael Balzer <dexter at expeedo.de> wrote:
>>
>> I could reproduce the situation, it was caused by a combination of…
>>
>> (a) the modem being captured in an endless reconnect retry loop
>> (b) the notifications, still being allocated from internal RAM, adding up while server.v2 waits for the connection
>>
>> I have pushed a solution for (b) and an attempt for (a) -- couldn't test that yet.
>>
>> The effect of (a) is the modem only answers "ERROR" to the +CGDATA="PPP" command. I have tried different commands to reset the internal state, but it was stuck,
>> only a power cycle could solve this. I have added an automatic power cycle for this situation, but it didn't occur again yet.
>>
>> The solution for (b) is to move the notifications buffer to external RAM. As that went without any problems, I also moved the command and server communication
>> buffers to external RAM, which also went without problems.
>>
>> In action:
>>
>> … (sending 15 battery data notifications) …
>> I (645344) ovms-server-v2: Send MP-0 h70,1,RT-BAT-C,14,86400,2,1,4105,4105,4105,10,15,15,15,0
>> OVMS# mo m
>> Free 8-bit 57692/281968, 32-bit 8052/24308, SPIRAM 4124384/4194252
>> --Task--     Total DRAM D/IRAM   IRAM SPIRAM   +/- DRAM D/IRAM   IRAM SPIRAM
>> OVMS Events       53012  49124      0  12604         +0     +0     +0  +1768
>> … (receiving 15 acks) …
>> I (648804) ovms-server-v2: Incoming Msg: MP-0 h70
>> OVMS# mo m
>> Free 8-bit 57692/281968, 32-bit 8052/24308, SPIRAM 4125488/4194252
>> --Task--     Total DRAM D/IRAM   IRAM SPIRAM   +/- DRAM D/IRAM   IRAM SPIRAM
>> OVMS Events       53012  49124      0  10836         +0     +0     +0  -1768
>>
>>
>> I have added a C++11 allocator template "ExtRamAllocator" for this, which can be used for all allocator-aware standard classes. "ovms_extram.h" provides a
>> namespace "extram" for std type instances using the allocator. It now has "string" and "ostringstream", please add further types as needed.
>>
>> @Steve: I would like to keep the allocation/task ownership info for now, I think it's worth the overhead.
>>
>> Regards,
>> Michael
>>
>> -- 
>> Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
>> Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
>>
>>
>> _______________________________________________
>> OvmsDev mailing list
>> OvmsDev at lists.openvehicles.com
>> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
> _______________________________________________
> OvmsDev mailing list
> OvmsDev at lists.openvehicles.com
> http://lists.openvehicles.com/mailman/listinfo/ovmsdev

-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26




More information about the OvmsDev mailing list