Gubbi said:
I'm sorry, but you are completely wrong.
Most webpages today are generated dynamically. Generally there are two ways of doing things: 2-tier systems (frontend+DBMS) or 3-tier systems (frontend-application server- DBMS). Popular frameworks/programming languages for the front end include PHP, .NET and Java, for the application server tier: .NET and Java. The DBMS can be anything: Oracle, MsSQL, PostGres, MySQL etc etc.
The frontend often has 150 threads to serve requests, the application server layer can have any number of threads (1 to umpteen hundred) , the DBMS often have at least 32 threads.
All are CPU intensive, and often all of this is residing on the same 1, 2 or 4 CPU box.
I can't agree with any of this, and I will explain why.
The bottleneck with web servers, database servers is not the CPU, it is the hard drive. Efforts in improving web or database server performance is based on boosting storage performance. This can be done a number of ways -
1) Using server clusters (load balancing server farms, not HPC clusters) where you duplicate identical servers complete with hard drives and content, and put a router between the Internet annd the servers and have it allocate server connection requests in a round robin fashon. Here you parallelize the the entire server.
2) Using RAID or SANs where you parallelize the storage with special hardware and arrays of hard drives.
3) Using the CPU to try to maximise performance by queueing, caching, and buffering data in RAM.
Cell is designed to parallelize CPU tasks. Web servers and database servers require parallelized storage not parallelized CPU tasks, and so Cell does nothing to improve web server/database server performance.
The applications you quote that run on web or database servers do not involve any intensive processing (floating point performance is unimportant), and the nature of the work required of the CPU is the same - for example a database server will read data out of a hard drive and cache and index it to try to improve speed. As for dynamic web content from databases, PHP, Java etc. the processing required is hardly CPU intensive - data streams are read from storage, and a simple translation transforms this by inserting text data from database, PHP or Java application. The main demand on the CPU is still queueing, cacheing, and buffering data in RAM, and this is not the task that Cell was designed for.
Another important thing going against Cell is that server applications require heavy multi-threading. The majority of server applications function by having a server daemon process like inetd handle the establishment of connections and then spawn off separate server threads for each connection, thus allowing multiple connections on a single server port. Java and PHP applications also spawn off a large number threads. The problem with Cell is that doing a context change on SPEs is expensive, and so this computing workload will be done on the PPE. It is maybe possible to rewrite some applications so the PPE will manage the multi-tasking, and hand off some of the work to SPEs in a manner that resembles multi-tasking on the PPE, but why bother? That requires a complete rewrite of the server application and it is unlikely that anybody will bother.
The bottom line, is that in a webserver or a database server, the SPEs will be underutilized, and Cell will perform no better than an x86 with similar cache and similar in order architecture. It is therefore better to go for a conventional CPU with more cache, out and of order execution (and an SMP architecture or multiple cores if a heavily loaded J2EE server is required).
gzip compression of the output is trivial in comparison to the generation of the pages.
This is just plain wrong. There is an overhead in in terms of memory and resources in running Apache, a J2EE, JSP, or PHP or database server, but the generation of web pages themselves is much less CPU intensive than encrypting or compressing a file of similar size.
As for your list of possible applications of CELL in a server environment:
1.) Using CELL to only do encryption is insanely un-economic. Modern CPUs easily systain >100Mbit 3des encryption bandwidth, that means less than 3 4-way boxes will do >1Gbit/s. If you need more than that there are NICs with encryption support that is much cheaper than dishing out for a CELL server
2.) People who think face-recognition will be everywhere has seen Minority Report to many damn times. There may be demand for servers to do these tasks, but demand will be small, and regular server CPUs won't be that far behind CELL in data processing performance.
3.) MoM workloads seem particularly unfit for CELL, huge datasets that are not easily partitioned into chunks that fit in LS.
1) I am talking about applications like telephone carriers tunneling thousands of VOIP calls through a backbone connection, or a neighbourhood watch website streaming out live mpeg encoded data from a number of CCTV cameras. One Cell server blade will handle the output for hundreds of VOIP channels, or many CCTV cameras.
2) I am talking about police database servers that match suspects with photo or fingerprint records, and intelligent computerised telephone answering and response machines that can recieve voice input or recognise individuals from voice prints. These are all applications that are being actively developed at the moment. Who knows, in future you may be able to do a Google search for people on the Internet by uploading a photo.
3) I don't understand what you are saying. I am talking about multi-player games for which the local compute intensive parts run on PS3 clients, with group interaction AI stuff running on a Cell SMP server or cluster on a website, and with high level communication protocol over the Internet between the two. The huge dataset doesn't have to fit into the LS, only the chunk that the SPE is processing, the same as any game running on the PS3.