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

Re: (ITS#8430) Improved handling for large number of databases



On 30. mai 2016 13:51, Hallvard Breien Furuseth wrote:
> Copied from a private mail:
>> Maybe a good way in between could be to memcpy txn->mt_env->me_dbflags.
>> (...) memcpy uses SSE instructions for x86_64.
>
> Yes. If we make MDB_txn.mt_dbflags an uint16_t*, we can memcpy to it.
> That costs <maxdbs> bytes/txn + one more reserved env flag bit in
> PERSISTENT_FLAGS: Reserve DB_UNUSED, and keep it always set in
> me_dbflags so the memcpy will set it in mt_dbflags.

Oops, that was too clever.  Then a bunch of code which assumes a DBI
is valid if various txn flags are set, must also check DB_UNUSED.
Or invert that to DB_USED which might be easier - (flags & DB_DIRTY)
becomes F_ISSET(flags, DB_DIRTY|DB_USED) which checks if both are set.

Maybe the simple solution using 2*<maxdbs> bytes/txn would be better.

-- 
Hallvard