[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: Kudos to all who contributed to MDB



Brent Bice wrote:
     I've started testing an LDAP server here using MDB and ran across a
few caveats that might be of use to others looking into using it.  But
first off, let me say a hearty THANKS to anyone who's contributed to it.
In this first OpenLDAP server I've converted over to MDB it's
*dramatically* faster and it's definitely nice to not worry about having
to setup script/s to occasionally (carefully) commit/flush DB logs, etc.

     One caveat that might be worth mentioning in release notes
somewhere...  Not all implementations of memory mapped I/O are created
equal.  I ran into this a long time back when I wrote a multi-threaded
quicksort program for a friend to had to sort text files bigger than 10
gigs and didn't want to wait for the unix sort command. :-)  The program
I banged together for him used memory mapped I/O and one of the things I
found was that while Solaris would let me memory map a file bigger than
I had physical or virtual memory for, linux wouldn't.  It appeared that
some versions of the 2.x kernels wouldn't let me memory-map a file
bigger than the total *virtual* memory size, and I think MDB is running
into the same limitation.  On a SLES11 system, for instance with the
2.6.32.12 kernel, I can't specify a maxsize bigger than the total of my
physical memory and swap space.  So just something to keep in mind if
you're using MDB on the 2.x kernels - you may need a big swap area even
though the memory mapped I/O routines in the kernel seem to be smart
enough to avoid swapping like mad.

Some Linux distros also ship with a default VM ulimit that will get in your way, but Linux kernel "overcommit" settings have been around for a long time. I don't think what you saw was particular to the 2.6.32 kernel, most likely related to your distro's default config.

     On a newish ubuntu system with a 3.5 kernel this doesn't seem to be
an issue - tell OpenLDAP to use whatever maxsize you want and it just
works.  :-)

     I'd also only use MDB on a 64 bit linux system. One of the other
headaches I remember running into with memory mapped I/O was adding in
support for 64 bit I/O on 32 bit systems.  Best to avoid that whole mess
and just use a 64 bit OS in the first place.

We definitely don't recommend using 32 bit servers with LMDB.

     Lastly... At the risk of making Howard and Quanah cringe... :-)  The
OpenLDAP DB I've been testing this with is the back-end to an email
tracking tool I setup several years ago.  More as an excuse to
edjimicate myself on the java API for LDAP than anything else, I wrote a
quick bit of java that watches postfix and sendmail logs and writes
pertinent bits of info into an LDAP database, and a few PHP scripts to
then query that database for things like to/from addresses, queue IDs,
and message IDs.  'Makes it easy for junior admins to quickly search
through gigabytes of logs to see what path an email took to get from
point A to point B, who all received it (after it went through one or
more list servers and a few aliases got de-ref'd, etc).

     Yeah, it's an utter abuse of LDAP which is supposed to be
write-rarely and read-mostly, especially as our postfix relays handle
anywhere from 1 to 10 messages per second on average. :-)  But what the
heck, it works fine and was a fun weekend project.  It's also served as
a way to stress-test new versions of OpenLDAP before I deploy them
elsewhere. :-)

     Anyway, thanks again to everyone who contributed to MDB. It's lots
faster than BerkeleyDB in all of my testing so far. 'Looking forward to
gradually shifting more of my LDAP servers over to it.

You're welcome.

--
  -- Howard Chu
  CTO, Symas Corp.           http://www.symas.com
  Director, Highland Sun     http://highlandsun.com/hyc/
  Chief Architect, OpenLDAP  http://www.openldap.org/project/