Thread (15 messages) flat view 15 messages, 4 authors, 2016-06-15

Re: [PATCH 1/6] Add memory pool library

From: Ramkumar Ramachandra <hidden>
Date: 2016-06-15 22:48:55

Hi Jonathan,

Jonathan Nieder wrote:
 The memory pool library is distinguished from the existing specialized
 allocators in alloc.c by using a contiguous block for all allocations.
 This means that on one hand, long-lived pointers have to be written as
 offsets, since the base address changes as the pool grows, but on the
 other hand, the entire pool can be easily written to the file system.
 This allows the memory pool to persist between runs of an application.

 For svn-fe, such a facility is useful because each svn revision can
 copy trees and files from any previous revision.  Therefore the
 relevant information for all revisions has to persist somehow to
 support incremental runs.

 The current implementation is backed by the file system using mmap().

Thanks for the explanations, David.
Thanks. Added to commit message: should be fine the next time I post the series.
Whitespace damaged.
Fixed in b180ad7 (pushed few seconds ago).
Probably an ignorant question, but why?  I do not think the win32 mmap
emulation in git currently supports sysconf().
I'm not sure why the pool capacity should be dependent on the page size.
       ..._pool.file = open(..., O_RDWR);
Fixed in b180ad7 (pushed few seconds ago).
This is the first use of MAP_SHARED in git.  I wouldn’t be surprised if
the win32 mmap emulation does not support it.
You're right; I just checked. compat/mmap.c:7 clearly specifies that
only MAP_PRIVATE is supported.
	if (start != NULL || !(flags & MAP_PRIVATE))
		die("Invalid usage of mmap when built with NO_MMAP");

What can we do about this? Should we attempt to implement MAP_SHARED?
Necessary?  (Maybe yes: we are about to truncate the file, so the
fsync() may be intended to force the data to be committed before
the metadata.)  Portable?  (I suspect the fsync() should go after
the munmap().)
You want to flush changes *after* unmapping the pages of memory from
the file? I can't find any notes on portability relating to this- can
you clarify?
Because of these portability concerns, I’d rather use the old version
until the incremental parser is ready.
Rolling back that many changes can be more painful than actually
fixing these few concerns (especially large number of change after
`dirents` was merged in). It means more delay in getting the exporter
merged.

-- Ram
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help