I think when I speak of scalability we shouldn't make the assumption that "requests [are coming from] only a few users". That said, it's great to know session handling is being optimized. I think smart session handling and smart cache handling will greatly improve performance.
On Mar 14, 11:19 pm, Massimo Di Pierro <massimo.dipie...@gmail.com> wrote: > This also explains why the problem occurred with Apache ab but not for > (usually) people using web2py in production. In production you do not > have thousand of session files because many of the requests from from > the same few users. > > There are exceptions. Apps that have many semi-static pages or are > probed by ab or are subject to DoD attacks. those apps may have > suffered from the problem that is now fixed. > > Massimo > > On Mar 14, 11:12 pm, Massimo Di Pierro <massimo.dipie...@gmail.com> > wrote: > > > I think also address the scalability problem that has occasionally > > been reported using ab tests. > > > Apache ab sends many uncorrelated requests and each of them results > > (resulted) in a new session file saved. Eventually the more tests you > > run the more files you have. The more files in the same folder you > > have, the slower the file system becomes, the longer it takes web2py > > to save a session, the longer the thread runs, the less requests/ > > second you can process, the sooner you reach the max number of threads > > and requests will be dropped. > > > The latest fix should address the issue since only REAL sessions will > > not result in file system access. > > > It should also considerably speed up GAE since less datastore write > > access. > > > There may be room for further improvement but I believe this is a big > > improvement already. > > > Please report any data you may have. > > > Massimo > > > On Mar 14, 10:40 pm, Massimo Di Pierro <massimo.dipie...@gmail.com> > > wrote: > > > > At PyCon some people have suggested that they would like the ability > > > to switch off some web2py functionality to make it faster. I never > > > thought of this being an issue because I do not think web2py does much > > > outside models/views and controllers. > > > > I run a lot of tests today using a barebone > > > > def index(): return 'hello world' > > > > controller (no view, no model) and I discovered, to my surprise that > > > even in this simple case, web2py spends huge amount of time saving > > > sessions even if not used (~40ms/request on my laptop). This is also a > > > problem because if you have many passive visitors web2py creates a lot > > > of empty session files that fills the sessions folder and slow down > > > the file system even more. > > > > I made some changes so that sessions are no longer saved if not > > > modified or empty. For my simple code, the running time went down to > > > 4ms/request. That is 10x than before. That is only 5x the bare Rocket > > > or Tornado speed (considering it is still checking for session, doing > > > routing, parsing input and performing a lot of checks, and a lot of > > > other stuff). > > > > I do not think it should break anything and you should feel it > > > snappier immediately. Give it a try and let me know. > > > > Try run ab -n 1000 with both web2py 1.93.1 and trunk for your app. Let > > > me know what you get. > > > > Enjoy! > > > > Massimo > >