On 4 Jul 2013, at 14:21, Sanne Grinovero <sa...@infinispan.org> wrote:
> On 4 July 2013 13:56, Manik Surtani <msurt...@redhat.com> wrote: >> Interesting and convoluted thread. I'll try and summarise my thoughts on >> one email: >> >> * I agree with Sanne that a cheat sheet will be extremely useful. Sanne, >> feel like kicking this off with your use case as described here, on the >> wiki? I like your ideas but just ranting about them won't help anybody. ;) >> Maybe then others can follow your template for more use cases, such as the >> one Erik has detailed. > > +1 and sorry for the rant. But still even after all my whining nobody > explained why we want to prioritise synchronous cachestore :-) > My point is not being against doing it, but to identify eagerly what > else is needed to accomodate such a use case: having the CacheStore > implementation is not enough to make such a configuration usable. Again, start a wiki page with your use case. We'll add more use cases and flesh out details. This is useful information for the community anyway, pointing to valid configuration, architecture, workarounds, etc. > >> * An SPI redesign has been on the cards for a while. I believe Mircea is >> working on this, a part of this redesign will involve directly involving >> cache stores in JTA transactions where possible (e.g., JDBC cache stores). >> I recommend kicking off a separate thread to discuss that SPI. Galder, I >> think you can consider he JSR 107 CacheLoader/Writer interfaces as stable by >> now. >> >> * I agree with Galder as well, that we do need a filesystem-based cache >> store that performs decently well OOTB when used both synchronously and >> asynchronously, regardless of the outcome of any use case analysis. Sanne, >> I don't think Cassandra is the right answer here - too much >> setup/maintenance. Maybe Karsten's FCS impl for smaller caches and then >> LevelDB/JNI is a valid combination. > > I wasn't serious on Cassandra being the ultimate solution, as I said I > just sketched an example use case. > >> >> * Sanne, re: mmapped files, yes, very nice, but I'm holding back on that for >> a number of reasons (see an earlier thread on the subject), one of them >> being some rework in JGroups to be able to pass handles to direct buffers >> from the network stack to Infinispan. > > I thought we had agreed to hold back until the mayor version change.. > !? That's the better solution, would be sad to waste time on temporary > compromises. Sadly, not with this major version change. The roadmap of Infinispan 6.0 is far too tight to accommodate re-achitecting lots of core bits. Also baselining on JDK 7 is out for now. (Before that last comment sparks off a tangent, see [1] and [2]). - M [1] http://infinispan-developer-list.980875.n3.nabble.com/infinispan-dev-Baselining-on-Java-7-td4027201.html [2] http://infinispan-developer-list.980875.n3.nabble.com/infinispan-dev-Zero-copy-buffer-transfers-td4027206.html > > Sanne > >> >> - M >> >> On 3 Jul 2013, at 15:26, Sanne Grinovero <sa...@infinispan.org> wrote: >> >>> Hi Galder, >>> you make many interesting points but I am not interested in discussing >>> my specific design ideas in detail, I just sketched that quickly as an >>> example of requirements description. >>> My intervention in this thread is all about demanding what the use >>> case is for such a synchronous cachestore. >>> >>> It is my understanding that lots of people are currently discussing >>> how to best make a synchronous cachestore mostly efficient, but I yet >>> have to see what the requirements are. My use case - although >>> expecting an asynchronous one - is just an example of how I would like >>> to see the general architecture described first before we waste time >>> on a useless component. >>> >>> I am not stating that nobody wants a strictly synchronous CacheStore, >>> but I would like to challenge the arguments who made someone (who?) >>> ask for this, as I believe there are many other things that would need >>> to be addressed. >>> >>> Therefore, my suggestion for describing the main use cases we expect >>> to support is not off-topic at all, it's the first thing any engineer >>> would have requested, and I would not spend a minute more of our >>> engineers in coding without a clear description of the expected >>> architecture, expected reliability, expected operations to be used. >>> >>> Sanne >>> >>> On 3 July 2013 14:59, Galder Zamarreño <gal...@redhat.com> wrote: >>>> Sanne, let me comment on some of the points you raised that didn't comment >>>> on in an earlier comment... >>>> >>>> On Jul 2, 2013, at 2:47 PM, Sanne Grinovero <sa...@infinispan.org> wrote: >>>> >>>>> It would be nice to have a deck of "cheat sheets" on the expected use >>>>> cases and guarantees: to me it looks like everyone is trying to solve >>>>> a different problem / having a different problem in mind. >>>>> >>>>> My own take on it: >>>>> >>>>> Scenario #1 >>>>> I'll primarily use Infinispan with DIST, and I don't care much for >>>>> other options. Reliability is guaranteed via numOwners>1, NOT by >>>>> persisting to disk: if a node fails, I kill the VM (the machine, not >>>>> the Java process) and start new ones to compensate: I'm assuming cloud >>>>> nodes, so it's likely that when a failed node is gone, the disk is >>>>> gone as well, with all the carefully stored data. >>>>> I will use Infinispan primarily to absorb write spikes - so a "synch >>>>> flush" is no good for me - and to boost read performance by as much >>>>> memory I can throw at it. >>>>> CacheStore is used for two reasons: >>>>> - overflow (LIRS+passivation) for then the memory is not enough >>>>> - clean shutdown: you can think of it as a way to be able to upgrade >>>>> some component in the system (Infinispan or my own); I would expect >>>>> some kind of "JMX flush" operation to do a clean shutdown without data >>>>> loss. >>>> >>>> ^ Should this really be implemented at the Infinispan level? In the >>>> AS/EAP/Wildfly case, they take care that all transactions have finished >>>> before shutting down, and Infinispan benefits from that. >>>> >>>>> Given such a scenario, I am not interested at all in synchronous >>>>> storage. Before we commit into a design which is basically assuming >>>>> the need for synchronous storage guarantees, I'd like to understand >>>>> what kind of use case it's aiming to solve. >>>> >>>> Sanne, any **strict** synchronous storage guarantees (e.g. to force or to >>>> not) will be configurable and most likely they'll be disabled, just like >>>> Level DB JNI, or Karsten's file cache store by default. A case where >>>> someone might want to enable this is when it just has a local cache and >>>> wants to persist data for recovery. Of course, the whole node and the disk >>>> could die…, but this is not so far fetched IMO. >>>> >>>> The whole discussion about **strict** synchronous storage guarantees in >>>> this thread is to make sure we're comparing apples with apples. IOW, it >>>> doesn't make sense to compare performance when each has different >>>> **strict** synchronous storage guarantee settings. >>>> >>>>> It would be great to document each such use case and put down a table >>>>> of things which can be expected, which features should not be expected >>>>> (be very explicit on the limitations), and how basic operations are >>>>> expected to be performed in the scenario: like how do you do a rolling >>>>> upgrade in Scenario 1# ? How do you do a backup? And of course some >>>>> configurations & code examples. >>>> >>>> ^ Hmmm, these operations are not really specific to the file cache store >>>> per-se. They are valid points, for sure, but out of the scope of this IMO. >>>> >>>>> Only then we would be able to pick a design (or multiple ones); for my >>>>> use case the proposal from Karsten seems excellent, so I'm wondering >>>>> why I should be looking for alternatives, and wondering why everyone >>>>> is still wasting time on different discussions :-D >>>>> >>>>> I'm pretty sure there is people looking forward for a synch-CacheStore >>>>> too: if you could nail down such a scenario however I'm pretty sure >>>>> that some other considerations would not be taken into account (like >>>>> consistency of data when reactivating a dormant node), so I suspect >>>>> that just implementing such a component would actually not make any >>>>> new architecture possible, as you would get blocked by other problems >>>>> which need to be solved too.. better define all expectations asap! >>>>> >>>>> To me this thread smells of needing the off-heap Direct Memory buffers >>>>> which I suggested [long time ago] to efficiently offload internal >>>>> buffers, >>>> >>>> ^ Hmmm, if we have a file based cache store is to provide data survival >>>> beyond shutting down a machine or it crashing it (assuming no disk >>>> failure). So, I can't see how this off-heap memory buffers help here? >>>> Unless you've got it mapped to a file or something else? >>>> >>>>> but failing to recognise this we're pushing responsibility to >>>>> an epic level complex CacheStore.. guys let's not forget that a mayor >>>>> bottleneck of CacheStores today is the SPI it has to implement, we >>>>> identified several limitations in the contract in the past which >>>>> prevent a superior efficiency: we're working towards a mayor release >>>>> now so I'd rather focus on the API changes which will make it possible >>>>> to get decent performance even without changing any storage engine.. >>>> >>>> If you haven't already done so, the place to suggest/comment on this is >>>> for sure [1]. >>>> >>>> [1] https://community.jboss.org/wiki/CacheLoaderAndCacheStoreSPIRedesign >>>> >>>>> I'm pretty sure Cassandra (to pick one) doesn't scale too bad. >>>> >>>> ^ Requires a separate process and much more complex to set up. Not really >>>> what we're looking for a simple local cache store that you can use for >>>> example for passivation EJB3 SFSBs or HTTP sessions. >>>> >>>>> >>>>> Cheers, >>>>> Sanne >>>>> >>>>> >>>>> >>>>> On 2 July 2013 10:09, Radim Vansa <rva...@redhat.com> wrote: >>>>>> Hi, >>>>>> >>>>>> I've written down this proposal for the implementation of new cache >>>>>> store. >>>>>> >>>>>> https://community.jboss.org/wiki/BrnoCacheStoreDesignProposal >>>>>> >>>>>> WDYT? >>>>>> >>>>>> Radim >>>>>> >>>>>> ----- Original Message ----- >>>>>> | From: "Radim Vansa" <rva...@redhat.com> >>>>>> | To: "infinispan -Dev List" <infinispan-dev@lists.jboss.org> >>>>>> | Sent: Thursday, June 27, 2013 2:37:43 PM >>>>>> | Subject: Re: [infinispan-dev] Cachestores performance >>>>>> | >>>>>> | >>>>>> | >>>>>> | ----- Original Message ----- >>>>>> | | From: "Galder Zamarreño" <gal...@redhat.com> >>>>>> | | To: "infinispan -Dev List" <infinispan-dev@lists.jboss.org> >>>>>> | | Sent: Thursday, June 27, 2013 1:52:11 PM >>>>>> | | Subject: Re: [infinispan-dev] Cachestores performance >>>>>> | | >>>>>> | | > As for Karsten's FCS implementation, I too have issues with the >>>>>> key set >>>>>> | | > and >>>>>> | | > value offsets being solely in memory. However I think that could >>>>>> be >>>>>> | | > improved by storing only a certain number of keys/offsets in >>>>>> memory, and >>>>>> | | > flushing the rest to disk again into an index file. >>>>>> | | >>>>>> | | ^ Karsten's implementation makes this relatively easy to achieve >>>>>> because it >>>>>> | | already keeps this mapping in a LinkedHashMap (with a given max >>>>>> entries >>>>>> | | limit [1]) assuming removeEldestEntry() is overriden to flush to >>>>>> disk older >>>>>> | | entries. Some extra logic would be needed to bring back data from >>>>>> the disk >>>>>> | | too… but your suggestion below is also quite interesting... >>>>>> | >>>>>> | I certainly wouldn't call this easy task, because the most problematic >>>>>> part >>>>>> | is what we will do when the whole entry (both key and value) are gone >>>>>> from >>>>>> | memory and we want to read them - that requires keeping some searchable >>>>>> | structure on-disk. And that's the hard stuff. >>>>>> | >>>>>> | | >>>>>> | | > I believe LevelDB follows a similar design, but I think Karsten's >>>>>> FCS >>>>>> | | > will >>>>>> | | > perform better than LevelDB since it doesn't attempt to maintain a >>>>>> sorted >>>>>> | | > structure on disk. >>>>>> | | >>>>>> | | ^ In-memory, the structure can optionally be ordered if it's bound >>>>>> [1], >>>>>> | | otherwise it's just a normal map. How would be store it at the disk >>>>>> level? >>>>>> | | B+ tree with hashes of keys and then linked lists? >>>>>> | >>>>>> | Before choosing "I love B#@& trees, let's use B#@& trees!", I'd find >>>>>> out what >>>>>> | requirements do we have for the structure. I believe that the index >>>>>> itself >>>>>> | should not be considered persistent, as it can be rebuilt when >>>>>> preloading >>>>>> | the data (sequentially reading the data is fast, therefore we can >>>>>> afford do >>>>>> | this indexing preload), the reason of the index being on-disk is that >>>>>> we >>>>>> | don't have enough memory to store all keys, or even key hashes. >>>>>> Therefore it >>>>>> | does not have to be updated synchronously with the writes. It should be >>>>>> | mostly read-optimized then, because that's the thing where we need >>>>>> | synchronous access to this structure. >>>>>> | >>>>>> | | >>>>>> | | > One approach to maintaining keys and offsets in memory could be a >>>>>> | | > WeakReference that points to the key stored in the in-memory >>>>>> | | > DataContainer. Once evicted from the DC, then the CacheStore impl >>>>>> would >>>>>> | | > need to fetch the key again from the index file before looking up >>>>>> the >>>>>> | | > value in the actual store. >>>>>> | | >>>>>> | | ^ Hmmm, interesting idea… has the potential to safe the memory space >>>>>> by not >>>>>> | | having to keep that extra data structure in the cache store. >>>>>> | >>>>>> | You mean to mix the DataContainer with xCacheEntry implementation and >>>>>> the >>>>>> | cache store implementation? Is that possible from design perspective? >>>>>> | Speaking about different kind of references, we may even optimize >>>>>> | not-well-tuned eviction by SoftReferences, so that even if the entry >>>>>> was >>>>>> | evicted from main DataContainer, we'd keep the value referenced from >>>>>> the >>>>>> | cache-store (and this does not have to be loaded from disk if >>>>>> referenced >>>>>> | before garbage collection). But such thought may be premature >>>>>> optimization. >>>>>> | For having eviction managed in relation with GC we should rather >>>>>> combine >>>>>> | this with PhantomReferences, where entries would be written to cache >>>>>> upon >>>>>> | finalization. >>>>>> | >>>>>> | | >>>>>> | | > This way we have hot items always in memory, semi-hot items with >>>>>> offsets >>>>>> | | > in >>>>>> | | > memory and values on disk, and cold items needing to be read off >>>>>> disk >>>>>> | | > entirely (both offset and value). Also for write-through and >>>>>> | | > write-behind, as long as the item is hot or warm (key and offset in >>>>>> | | > memory), writing will be pretty fast. >>>>>> | | >>>>>> | | My worry about Karsten's impl is writing actually. If you look at >>>>>> the last >>>>>> | | performance numbers in [2], where we see the performance difference >>>>>> of >>>>>> | | force=true and force=false in Karsten's cache store compared with >>>>>> LevelDB >>>>>> | | JNI, you see that force=false is fastest, then JNI LevelDB, and the >>>>>> | | force=true. Me wonders what kind of write guarantees LevelDB JNI >>>>>> provides >>>>>> | | (and the JAVA version)... >>>>>> | >>>>>> | Just for clarification: the fast implementation is without force at >>>>>> all, the >>>>>> | slower is with force(false). Force(true) means updating metadata (such >>>>>> as >>>>>> | access times?) which is not required for cache-store. >>>>>> | But the numbers suggest that the random access with syncing is really >>>>>> not a >>>>>> | good option, and that we should rather use the temporary append-only >>>>>> log, >>>>>> | which would be persisted into structured DB by different thread (as >>>>>> LevelDB >>>>>> | does, I suppose). >>>>>> | >>>>>> | Thinking about all the levels and cache structures optimizing the read >>>>>> | access, I can see four levels of search structures: key + value (usual >>>>>> | DataContainer), key + offset, hash + offset, all on disk. The "hash + >>>>>> | offset" may seem superflous but for some use-cases with big keys it >>>>>> may be >>>>>> | worth sparing a few disk look-ups. >>>>>> | >>>>>> | Radim >>>>>> | >>>>>> | | > >>>>>> | | > On 27 Jun 2013, at 10:33, Radim Vansa <rva...@redhat.com> wrote: >>>>>> | | > >>>>>> | | >> Oops, by the cache store I mean the previously-superfast >>>>>> | | >> KarstenFileCacheStore implementation. >>>>>> | | >> >>>>>> | | >> ----- Original Message ----- >>>>>> | | >> | From: "Radim Vansa" <rva...@redhat.com> >>>>>> | | >> | To: "infinispan -Dev List" <infinispan-dev@lists.jboss.org> >>>>>> | | >> | Sent: Thursday, June 27, 2013 11:30:53 AM >>>>>> | | >> | Subject: Re: [infinispan-dev] Cachestores performance >>>>>> | | >> | >>>>>> | | >> | I have added FileChannel.force(false) flushes after all write >>>>>> | | >> | operations >>>>>> | | >> | in >>>>>> | | >> | the cache store, and now the comparison is also updated with >>>>>> these >>>>>> | | >> | values. >>>>>> | | >> | >>>>>> | | >> | Radim >>>>>> | | >> | >>>>>> | | >> | ----- Original Message ----- >>>>>> | | >> | | From: "Radim Vansa" <rva...@redhat.com> >>>>>> | | >> | | To: "infinispan -Dev List" <infinispan-dev@lists.jboss.org> >>>>>> | | >> | | Sent: Thursday, June 27, 2013 8:54:25 AM >>>>>> | | >> | | Subject: Re: [infinispan-dev] Cachestores performance >>>>>> | | >> | | >>>>>> | | >> | | Yep, write-through. LevelDB JAVA used FileChannelTable >>>>>> | | >> | | implementation >>>>>> | | >> | | (-Dleveldb.mmap), because Mmaping is not implemented very >>>>>> well and >>>>>> | | >> | | causes >>>>>> | | >> | | JVM crashes (I believe it's because of calling non-public API >>>>>> via >>>>>> | | >> | | reflection >>>>>> | | >> | | - I've found post from the Oracle JVM guys discouraging the >>>>>> | | >> | | particular >>>>>> | | >> | | trick >>>>>> | | >> | | it uses). After writing the record to the log, it calls >>>>>> | | >> | | FileChannel.force(true), therefore, it should be really on >>>>>> the disc >>>>>> | | >> | | by >>>>>> | | >> | | that >>>>>> | | >> | | moment. >>>>>> | | >> | | I have not looked into the JNI implementation but I expect >>>>>> the same. >>>>>> | | >> | | >>>>>> | | >> | | By the way, I have updated [1] with numbers when running on >>>>>> more >>>>>> | | >> | | data >>>>>> | | >> | | (2 GB >>>>>> | | >> | | instead of 100 MB). I won't retype it here, so look there. The >>>>>> | | >> | | performance >>>>>> | | >> | | is much lower. >>>>>> | | >> | | I may try also increase JVM heap size and try with a bit more >>>>>> data >>>>>> | | >> | | yet. >>>>>> | | >> | | >>>>>> | | >> | | Radim >>>>>> | | >> | | >>>>>> | | >> | | [1] https://community.jboss.org/wiki/FileCacheStoreRedesign >>>>>> | | >> | | >>>>>> | | >> | | ----- Original Message ----- >>>>>> | | >> | | | From: "Erik Salter" <an1...@hotmail.com> >>>>>> | | >> | | | To: "infinispan -Dev List" <infinispan-dev@lists.jboss.org> >>>>>> | | >> | | | Sent: Wednesday, June 26, 2013 7:40:19 PM >>>>>> | | >> | | | Subject: Re: [infinispan-dev] Cachestores performance >>>>>> | | >> | | | >>>>>> | | >> | | | These were write-through cache stores, right? And with >>>>>> LevelDB, >>>>>> | | >> | | | this was >>>>>> | | >> | | | through to the database file itself? >>>>>> | | >> | | | >>>>>> | | >> | | | Erik >>>>>> | | >> | | | >>>>>> | | >> | | | -----Original Message----- >>>>>> | | >> | | | From: infinispan-dev-boun...@lists.jboss.org >>>>>> | | >> | | | [mailto:infinispan-dev-boun...@lists.jboss.org] On Behalf >>>>>> Of Radim >>>>>> | | >> | | | Vansa >>>>>> | | >> | | | Sent: Wednesday, June 26, 2013 11:24 AM >>>>>> | | >> | | | To: infinispan -Dev List >>>>>> | | >> | | | Subject: [infinispan-dev] Cachestores performance >>>>>> | | >> | | | >>>>>> | | >> | | | Hi all, >>>>>> | | >> | | | >>>>>> | | >> | | | according to [1] I've created the comparison of performance >>>>>> in >>>>>> | | >> | | | stress-tests. >>>>>> | | >> | | | >>>>>> | | >> | | | All setups used local-cache, benchmark was executed via >>>>>> Radargun >>>>>> | | >> | | | (actually >>>>>> | | >> | | | version not merged into master yet [2]). I've used 4 nodes >>>>>> just to >>>>>> | | >> | | | get >>>>>> | | >> | | | more >>>>>> | | >> | | | data - each slave was absolutely independent of the others. >>>>>> | | >> | | | >>>>>> | | >> | | | First test was preloading performance - the cache started >>>>>> and >>>>>> | | >> | | | tried >>>>>> | | >> | | | to >>>>>> | | >> | | | load >>>>>> | | >> | | | 1GB of data from harddrive. Without cachestore the startup >>>>>> takes >>>>>> | | >> | | | about 2 >>>>>> | | >> | | | - >>>>>> | | >> | | | 4 >>>>>> | | >> | | | seconds, average numbers for the cachestores are below: >>>>>> | | >> | | | >>>>>> | | >> | | | FileCacheStore: 9.8 s >>>>>> | | >> | | | KarstenFileCacheStore: 14 s >>>>>> | | >> | | | LevelDB-JAVA impl.: 12.3 s >>>>>> | | >> | | | LevelDB-JNI impl.: 12.9 s >>>>>> | | >> | | | >>>>>> | | >> | | | IMO nothing special, all times seem affordable. We don't >>>>>> benchmark >>>>>> | | >> | | | exactly >>>>>> | | >> | | | storing the data into the cachestore, here FileCacheStore >>>>>> took >>>>>> | | >> | | | about >>>>>> | | >> | | | 44 >>>>>> | | >> | | | minutes, while Karsten about 38 seconds, LevelDB-JAVA 4 >>>>>> minutes >>>>>> | | >> | | | and >>>>>> | | >> | | | LevelDB-JNI 96 seconds. The units are right, it's minutes >>>>>> compared >>>>>> | | >> | | | to >>>>>> | | >> | | | seconds. But we all know that FileCacheStore is bloody slow. >>>>>> | | >> | | | >>>>>> | | >> | | | Second test is stress test (5 minutes, preceded by 2 minute >>>>>> | | >> | | | warmup) >>>>>> | | >> | | | where >>>>>> | | >> | | | each of 10 threads works on 10k entries with 1kB values >>>>>> (~100 MB >>>>>> | | >> | | | in >>>>>> | | >> | | | total). >>>>>> | | >> | | | 20 % writes, 80 % reads, as usual. No eviction is >>>>>> configured, >>>>>> | | >> | | | therefore >>>>>> | | >> | | | the >>>>>> | | >> | | | cache-store works as a persistent storage only for case of >>>>>> crash. >>>>>> | | >> | | | >>>>>> | | >> | | | FileCacheStore: 3.1M reads/s 112 writes/s // on >>>>>> one >>>>>> | | >> | | | node >>>>>> | | >> | | | the >>>>>> | | >> | | | performance was only 2.96M reads/s 75 writes/s >>>>>> | | >> | | | KarstenFileCacheStore: 9.2M reads/s 226k writes/s // >>>>>> yikes! >>>>>> | | >> | | | LevelDB-JAVA impl.: 3.9M reads/s 5100 writes/s >>>>>> | | >> | | | LevelDB-JNI impl.: 6.6M reads/s 14k writes/s // on >>>>>> one >>>>>> | | >> | | | node >>>>>> | | >> | | | the >>>>>> | | >> | | | performance was 3.9M/8.3k - about half of the others >>>>>> | | >> | | | Without cache store: 15.5M reads/s 4.4M writes/s >>>>>> | | >> | | | >>>>>> | | >> | | | Karsten implementation pretty rules here for two reasons. >>>>>> First of >>>>>> | | >> | | | all, >>>>>> | | >> | | | it >>>>>> | | >> | | | does not flush the data (it calls only >>>>>> RandomAccessFile.write()). >>>>>> | | >> | | | Other >>>>>> | | >> | | | cheat is that it stores in-memory the keys and offsets of >>>>>> data >>>>>> | | >> | | | values in >>>>>> | | >> | | | the >>>>>> | | >> | | | database file. Therefore, it's definitely the best choice >>>>>> for this >>>>>> | | >> | | | scenario, >>>>>> | | >> | | | but it does not allow to scale the cache-store, especially >>>>>> in >>>>>> | | >> | | | cases >>>>>> | | >> | | | where >>>>>> | | >> | | | the keys are big and values small. However, this >>>>>> performance boost >>>>>> | | >> | | | is >>>>>> | | >> | | | definitely worth checking - I could think of caching the >>>>>> disk >>>>>> | | >> | | | offsets in >>>>>> | | >> | | | memory and querying persistent index only in case of missing >>>>>> | | >> | | | record, >>>>>> | | >> | | | with >>>>>> | | >> | | | part of the persistent index flushed asynchronously (the >>>>>> index can >>>>>> | | >> | | | be >>>>>> | | >> | | | always >>>>>> | | >> | | | rebuilt during the preloading for case of crash). >>>>>> | | >> | | | >>>>>> | | >> | | | The third test should have tested the scenario with more >>>>>> data to >>>>>> | | >> | | | be >>>>>> | | >> | | | stored >>>>>> | | >> | | | than memory - therefore, the stressors operated on 100k >>>>>> entries >>>>>> | | >> | | | (~100 MB >>>>>> | | >> | | | of >>>>>> | | >> | | | data) but eviction was set to 10k entries (9216 entries >>>>>> ended up >>>>>> | | >> | | | in >>>>>> | | >> | | | memory >>>>>> | | >> | | | after the test has ended). >>>>>> | | >> | | | >>>>>> | | >> | | | FileCacheStore: 750 reads/s 285 writes/s >>>>>> // >>>>>> | | >> | | | one >>>>>> | | >> | | | node >>>>>> | | >> | | | had >>>>>> | | >> | | | only 524 reads and 213 writes per second >>>>>> | | >> | | | KarstenFileCacheStore: 458k reads/s 137k writes/s >>>>>> | | >> | | | LevelDB-JAVA impl.: 21k reads/s 9k writes/s >>>>>> // a >>>>>> | | >> | | | bit >>>>>> | | >> | | | varying >>>>>> | | >> | | | performance >>>>>> | | >> | | | LevelDB-JNI impl.: 13k-46k reads/s 6.6k-15.2k writes/s >>>>>> // >>>>>> | | >> | | | the >>>>>> | | >> | | | performance varied a lot! >>>>>> | | >> | | | >>>>>> | | >> | | | 100 MB of data is not much, but it takes so long to push it >>>>>> into >>>>>> | | >> | | | FileCacheStore that I won't use more unless we exclude this >>>>>> loser >>>>>> | | >> | | | from >>>>>> | | >> | | | the >>>>>> | | >> | | | comparison :) >>>>>> | | >> | | | >>>>>> | | >> | | | Radim >>>>>> | | >> | | | >>>>>> | | >> | | | [1] https://community.jboss.org/wiki/FileCacheStoreRedesign >>>>>> | | >> | | | [2] https://github.com/rvansa/radargun/tree/t_keygen >>>>>> | | >> | | | >>>>>> | | >> | | | ----------------------------------------------------------- >>>>>> | | >> | | | Radim Vansa >>>>>> | | >> | | | Quality Assurance Engineer >>>>>> | | >> | | | JBoss Datagrid >>>>>> | | >> | | | tel. +420532294559 ext. 62559 >>>>>> | | >> | | | >>>>>> | | >> | | | Red Hat Czech, s.r.o. >>>>>> | | >> | | | Brno, Purkyňova 99/71, PSČ 612 45 >>>>>> | | >> | | | Czech Republic >>>>>> | | >> | | | >>>>>> | | >> | | | >>>>>> | | >> | | | _______________________________________________ >>>>>> | | >> | | | infinispan-dev mailing list >>>>>> | | >> | | | infinispan-dev@lists.jboss.org >>>>>> | | >> | | | https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>>>> | | >> | | | >>>>>> | | >> | | | >>>>>> | | >> | | | _______________________________________________ >>>>>> | | >> | | | infinispan-dev mailing list >>>>>> | | >> | | | infinispan-dev@lists.jboss.org >>>>>> | | >> | | | https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>>>> | | >> | | >>>>>> | | >> | | _______________________________________________ >>>>>> | | >> | | infinispan-dev mailing list >>>>>> | | >> | | infinispan-dev@lists.jboss.org >>>>>> | | >> | | https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>>>> | | >> | >>>>>> | | >> | _______________________________________________ >>>>>> | | >> | infinispan-dev mailing list >>>>>> | | >> | infinispan-dev@lists.jboss.org >>>>>> | | >> | https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>>>> | | >> >>>>>> | | >> _______________________________________________ >>>>>> | | >> infinispan-dev mailing list >>>>>> | | >> infinispan-dev@lists.jboss.org >>>>>> | | >> https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>>>> | | > >>>>>> | | > -- >>>>>> | | > Manik Surtani >>>>>> | | > ma...@jboss.org >>>>>> | | > twitter.com/maniksurtani >>>>>> | | > >>>>>> | | > Platform Architect, JBoss Data Grid >>>>>> | | > http://red.ht/data-grid >>>>>> | | > >>>>>> | | > >>>>>> | | > _______________________________________________ >>>>>> | | > infinispan-dev mailing list >>>>>> | | > infinispan-dev@lists.jboss.org >>>>>> | | > https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>>>> | | >>>>>> | | >>>>>> | | -- >>>>>> | | Galder Zamarreño >>>>>> | | gal...@redhat.com >>>>>> | | twitter.com/galderz >>>>>> | | >>>>>> | | Project Lead, Escalante >>>>>> | | http://escalante.io >>>>>> | | >>>>>> | | Engineer, Infinispan >>>>>> | | http://infinispan.org >>>>>> | | >>>>>> | | >>>>>> | | _______________________________________________ >>>>>> | | infinispan-dev mailing list >>>>>> | | infinispan-dev@lists.jboss.org >>>>>> | | https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>>>> | >>>>>> | _______________________________________________ >>>>>> | infinispan-dev mailing list >>>>>> | infinispan-dev@lists.jboss.org >>>>>> | https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>>>> >>>>>> _______________________________________________ >>>>>> infinispan-dev mailing list >>>>>> infinispan-dev@lists.jboss.org >>>>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>>> >>>>> _______________________________________________ >>>>> infinispan-dev mailing list >>>>> infinispan-dev@lists.jboss.org >>>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>> >>>> >>>> -- >>>> Galder Zamarreño >>>> gal...@redhat.com >>>> twitter.com/galderz >>>> >>>> Project Lead, Escalante >>>> http://escalante.io >>>> >>>> Engineer, Infinispan >>>> http://infinispan.org >>>> >>>> >>>> _______________________________________________ >>>> infinispan-dev mailing list >>>> infinispan-dev@lists.jboss.org >>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >>> >>> _______________________________________________ >>> infinispan-dev mailing list >>> infinispan-dev@lists.jboss.org >>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >> >> -- >> Manik Surtani >> ma...@jboss.org >> twitter.com/maniksurtani >> >> Platform Architect, JBoss Data Grid >> http://red.ht/data-grid >> >> >> _______________________________________________ >> infinispan-dev mailing list >> infinispan-dev@lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/infinispan-dev > > _______________________________________________ > infinispan-dev mailing list > infinispan-dev@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/infinispan-dev -- Manik Surtani ma...@jboss.org twitter.com/maniksurtani Platform Architect, JBoss Data Grid http://red.ht/data-grid _______________________________________________ infinispan-dev mailing list infinispan-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/infinispan-dev