From selivanov.dmitriy at gmail.com  Sun Jul  9 12:12:29 2017
From: selivanov.dmitriy at gmail.com (Dmitriy Selivanov)
Date: Sun, 9 Jul 2017 14:12:29 +0400
Subject: [Rd] Issue with memory deallocation/fragmentation on systems
	which use glibc
In-Reply-To: <CAJdZCv1acw4A1VOHgT7DWO3hp5XqLmwt5kmFHq6Kq-bQ8DGhXg@mail.gmail.com>
References: <CAJdZCv1acw4A1VOHgT7DWO3hp5XqLmwt5kmFHq6Kq-bQ8DGhXg@mail.gmail.com>
Message-ID: <CAJdZCv2wTRetp1ponmxKLfXARQmoPZVLTcbPc6E2mz9nfEFCWA@mail.gmail.com>

Dear R-devel mailing list and especially R-core, is there any chance to
receive feedback on issue I described in previous emails? I would consider
such behaviour as a bug.

As a work-around I've created small "clean-up" function:

malloc_trim_finalizer = function(e) {
  res = NULL
  if(R.version$os == "linux-gnu") {
    flog.debug("Calling malloc_trim(0L) to trigger glibc to release
memory\n")
    res = malloc_trim(0L)
  }
  res
}

And at the end of each function which produce a lot of intermediate small
objects I provide it to reg.finalizer():
some_function = function(...) {
  # do some useful work
  result = TRUE
  # register finalizer
  e = environment()
  reg.finalizer(e, malloc_trim_finalizer)
  return(result)
}

2017-06-22 11:12 GMT+04:00 Dmitriy Selivanov <selivanov.dmitriy at gmail.com>:

> A few additional details. According to Linux Programmer's Manual
>
>    1. http://man7.org/linux/man-pages/man3/mallopt.3.html
>    2. http://man7.org/linux/man-pages/man3/malloc_trim.3.html
>
> And if I understood everything correctly `free` could trigger
> `malloc_trim` based on value of several environment variables -
> MALLOC_TOP_PAD_ and MALLOC_TRIM_THRESHOLD_. However setting them as low as
> 1 or 0 doesn't have any effect (but as I wrote in previous email manual
> call of `malloc_trim` helps to release memory).
>



-- 
Regards
Dmitriy Selivanov

	[[alternative HTML version deleted]]



[Rd] Issue with memory deallocation/fragmentation on systems which use glibc
Dmitriy Selivanov