We now stand at the cusp of wide-scale popular deployment of multicore processors into the realm of retail computing. Yes, chips are out there now but with each successive generation of PC’s deployed the percentage of multicore capable chips increases.
We are also, of course, seeing the advancement of high end 32 and 64 bit embedded processors stepping deep into multicore. 2 core Broadcom MIPS has been around forever… 8 core Freescale P4080’s on the horizon… specialty 16 core Cavium processors have been popular in many customer designs. Intel even unveiled an 80 core prototype system at a conference.
One of the most popular usages envisioned for multicore processors is usage as a virutalization host. Not a bad idea for the right use cases. There are, however, some natural limitations to the number of use cases that can be sustained by simple virtualization alone. In telecom, for example, simply encapsulating formerly isolated applications in a virutal container and then consolidating them onto a multicore virutalization host can dramatically complicate failure planning. The fault domain will suddenly encompass many formerly unrelated functions.
I’m very much pro-virtualization but there are some use cases that have been popularized by the enterprise usage of virtualization that likely won’t translate into telecom.
But this blog post was about multicore, wasn’t it? Back to multicore.
I’ve seen a prevalent meme circle the trade-show world that multicore will be best exploited by creative stacking of our existing product building blocks in ever more dramatic ways. Reconfigure ye’ole RTOS to be a hypervisor. Stack Linux on top, on the side, inside, alongside, or outside. Or get a whole new hypervisor. Repeat the stacking drill. Make Linux the hypervisor. Stack yet again. Before long we’ll have a hyper-hypervisor and we’ll need these kids with cup stacking skills like these to make it work.
I’m making fun, of course. There really are use cases for this stacking mania. My concern is that when you look at enterprise computing they are taking a very different approach to using multicore. Since the popular adoption of Linux has brought enterprise and embedded closer together what they do is increasingly relevant to what we ought to do.
The real action mid-term is going to be at the application level, not in the OS stacking games. It what goes in the cups, not how you stack them, that will matter the most.
“This (move to multicore) presages a change where the industry at large, the whole concept of applications, will ultimately have to be restructured in order to think about how to take advantage of these machines, because they won’t just get faster every year. They’ll get more powerful, but in fact only if you’re able to master these problems of concurrency and complexity.” - Craig Mundie, Microsoft. Quoted from All About Microsoft
Yep… concurrency and complexity. No surprise there. Concurrency has always been hard and there are some natural limitations to the complexity of an application. Past a certain point and one just can’t hold it in your head.
Does there need to be a radical simplification of the methods the average developer uses to exploit concurrent execution?
Debugging is at least twice as hard as writing the program in the first place. So if your code is as clever as you can possibly make it, then by definition you’re not smart enough to debug it. — Brian Kernighan
Yeah, probably so. Odds are the training and experience that is most typical amongst engineers (C and POSIX threads) won’t cut it in the new “guess we’ll have to live with multicore processors” era. I’ve heard as much from customers I’ve been in conversation with.
I’m starting this exploration of what potential techniques and technologies exist to help developers cope with concurrency and complexity to educate myself. I’m not a big believer in futurist prognosticating on what will be in 10 years. I’m a little more pragmatic and would rather look at what those in parallel fields who are solving problems like mine are doing right now. Learn fast from those one step ahead.
I think the fields to keep your eyes on when it comes to exploiting multicore will be realtime financial modeling and web-scale computing. They’ve got the biggest payoff for getting it right and the biggest challenges to solve, respectively. Both fields are also leading adopters of open source technology and sponsor contributors.
We’ll touch on cloud computing next time but for now let’s get started with some of the presentations from the recent Google sponsored Seattle Scalability Conference.
Transactional Memory (TM) was one of the interesting techniques reviewed. Pick up the presentation from the conference link above and follow along with the video from presenter Vijay Menon.
There are some open source implementations of Softer Transactional Memory (STM) available, too: See Rochester’s STM implementation for C++.
I’m also actively trolling for papers to read. Here’s a stash.
Thanks for joining me on this self-educational journey. If you want to help please drop some comments in.
Brad