1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- 01-scaling-across-cores
- Introduction
- ------------
- The general issue is how to insure that the resolver scales.
- Currently resolvers are CPU bound, and it seems likely that both
- instructions-per-cycle and CPU frequency will not increase radically,
- scaling will need to be across multiple cores.
- How can we best scale a recursive resolver across multiple cores?
- Some possible solutions:
- a. Multiple processes with independent caches
- b. Multiple processes with shared cache
- c. A mix of independent/shared cache
- d. Thread variations of the above
- All of these may be complicated by NUMA architectures (with
- faster/slower access to specific RAM).
- How does resolution look like:
- Receive the query. @# <------------------------\
- | |
- | |
- v |
- Parse it, etc. $ |
- | |
- | |
- v |
- Look into the cache. $# |
- Cry <---- No <---------- Is it there? -----------> Yes ---------\ |
- | ^ | |
- Prepare upstream query $ | | |
- | | | |
- v | | |
- Send an upstream query (#) | | |
- | | | |
- | | | |
- v | | |
- Wait for answer @(#) | | |
- | | | |
- v | | |
- Parse $ | | |
- | | | |
- v | | |
- Is it enough? $ ----> No ---------/ | |
- | | |
- Yes | |
- | | |
- \-----------------------> Build answer $ <----------------------/ |
- | |
- | |
- v |
- Send answer # -----------------------------/
- Legend:
- * $ - CPU intensive
- * @ - Waiting for external event
- * # - Possible interaction with other tasks
|