There's relationship between memory, cores/threads, and chunk size. If
we're running t threads and the tables are about s GB/chunk for Source,
f GB/chunk for ForcedSource, and e GB/chunk for ObjectExtra) are each
about g GB/chunk, we would have at most 3*tsfe gigabytes of memory
locked, with each thread running a join between the three tables on a
different chunk (which shouldn't happen), but does give us a point at
which more memory for locking tables is pointless.
At a minimum, we will want to be able to lock at least 2 copies of each
table in memory, and we'd be much happier with a couple more. The more
threads we run, probably the more copies we will want, but I'm not sure
what the exact relation is going to be, but less than 2 copies will
likely slow things down with memory contention issues. The number of
threads we run is going to be a function of the number of cores. The
amount of memory on a worker that should be reserved for locking is not
really know, but Andy H thinks half or a bit more than half is a good
estimate and I've got no reason to disagree.
I put together a quick spreadsheet (which is attached) and at 20k
chunks, we will need 810 GB of memory for locking, which means the
machines would need something like 1400GB or RAM. Using 200k chunks, we
only need 81GB for locking, so we would do ok with 160GB of RAM and
probably be pretty happy with 250GB of RAM. The downside is the czars
get to do 10 times as much book keeping (which is only maybe about
10-20% of what they spend their time doing) so adding another czar or
two might be needed.
-John
########################################################################
Use REPLY-ALL to reply to list
To unsubscribe from the QSERV-L list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=QSERV-L&A=1
|