• About Jakob Engblom and this blog
Observations from Uppsala Computer Simulation, Virtual Platforms, Embedded Programming, Multicore and More (by Jakob Engblom)

Category Archives: Programming

Wind River Blog: Starting & Configuring Simics

2013 June 15 08:28 / Leave a Comment / Jakob

There is a new post at my Wind River blog, about how Simics sessions are started and the mechanics of system setups in Simics. It also has a link to a Youtube video demonstrating various ways of starting Simics simulation sessions.

Read More →

Tweet
Posted in: programming, virtual machines, Wind River Blog / Tagged: Simics, video

Nudge Theory and Graphical User Interfaces

2013 May 30 21:27 / Leave a Comment / Jakob

Nudge theory is an intriguing fairly new take on how to manage societies and modulate the behavior of people to make them behave in a “better” way. My layman’s interpretation of the idea is that instead of threating punishment and setting up rules, you try to encourage desired behavior with rewards and discourage undesired behavior by making it require an effort. When working with the new Test Runner view in the Simics 4.8 GUI, I realized that we had invented exactly such a nudge.

Read More →

Tweet
Posted in: programming / Tagged: BBC, nudge theory, Simics, Simics 4.8

Wind River Blog and Movie: Demo of Simics Debugging

2013 January 9 22:40 / 5 Comments / Jakob

Last year, I did a Simics webinar which included a two-part demo of how to use Simics to debug an endianness bug in a networked system as it migrates from big-endian to a little-endian system. Along the way, I also showed off various Simics features like reverse execution and checkpointing and scripted execution.

The demo is now online at the Wind River Youtube channel, and the setup is explained in a blog post at the Wind River company blog which is worth reading before watching the video.

Tweet
Posted in: programming, virtual platforms, Wind River Blog / Tagged: debugging, demo, endianness, networking, reverse debugging, Simics, video

Programming like Lego

2013 January 6 22:58 / Leave a Comment / Jakob

LEGOs seem to be a favorite analogy for people bemoaning the state of software development today. “If only it would be as simple as putting Legos together” is a common enough statement, along with various proposals to make software that is Lego-like. Sometime, I wonder if people making these statements have actually tried to build anything non-trivial from Lego recently. Here, I will look a bit closer at the Lego-programming analogy. There is indeed quite a lot to it, but it is not all about child-level simplicity. I think there are some good lessons that can be learnt from analogizing Lego and programming.

Read More →

Tweet
Posted in: programming / Tagged: lego

Wind River Blog: Debugging Simics using Simics

2012 December 6 13:04 / 2 Comments / Jakob

There is a new post at my Wind River blog, telling the story of how some of the Simics developers used Simics itself to debug an intermittent Simics program crash caused by a timing-sensitive race condition.

Running Simics on itself is pretty cool, and shows the power of the simulator and its applicability even to really complex software.

Tweet
Posted in: multicore debug, programming, virtual platforms / Tagged: Debug, race condition, reverse debugging, Simics

Logging (Some More Thoughts)

2012 October 28 23:38 / 1 Comment / Jakob

Logging as as debug method is not new, and I have been writing about it to and from over the past few years myself.  At the S4D conference, tracing and logging keeps coming up as a topic (see my reports from 2009, 2010  and 2012 ).  I recently found an interesting piece on logging from the IT world in the ACM Queue (“Advances and Challenges in Log Analysis“, Adam Oliner, ACM Queue December 2011).  Here, I want to address some of my current thoughts on the topic.

Read More →

Tweet
Posted in: embedded software, embedded systeme, programming / Tagged: ACM Queue, Adam Oliner, debugging, logging, tracing

Reverse Execution History Updates

2012 September 29 21:33 / 1 Comment / Jakob

After some discussions at the S4D conference last week, I have some additional updates to the history and technologies of reverse execution. I have found one new commercial product at a much earlier point in time, and an interesting note on memory consistency.

Read More →

Tweet
Posted in: embedded systeme, history of computing, programming / Tagged: CTS, Lauterbach, reverse debugging, reverse execution

Wind River Blog: Exposing OS Kernel Races with Landslide

2012 September 26 21:18 / Leave a Comment / Jakob

There is a new blog post on my Wind River blog, about the Landslide system from CMU. It is a pretty impressive Master’s Thesis project that used the control that Simics has over interrupts to systematically try different OS kernel thread interleavings to find concurrency bugs. The blog is an interview with Ben Blum, the student who did the work. Ben is now a PhD student, and I bet that he will continue to generate cool stuff in the future.

Tweet
Posted in: parallel computing, programming, Wind River Blog / Tagged: Ben Blum, debugging, Landslide, operating systems, Simics

SiCS Multicore Day 2012

2012 September 16 22:12 / 4 Comments / Jakob

The 2012 edition of the SiCS Multicore Day was fun, like they have always been in the past. I missed it in 2010 and 2011, but could make it back this year. It was interesting to see that the points where keynote speakers disagreed was similar to previous years, albeit with some new twists. There was also a trend in architecture, moving crypto operations into the core processor ISA, that indicates another angle on the hardware accelerator space.

Read More →

Tweet
Posted in: computer architecture, conferences, embedded software, multicore computer architecture, multicore debug, multicore software, parallel computing, programming / Tagged: Erik Hagersten, heterogeneous, homogeneous, James Larus, Rich Hetherington, SiCS Multicore days, Stephen Hill

Paper & Talk at S4D 2012: Reverse Debug

2012 September 10 11:03 / Leave a Comment / Jakob

I am going to the S4D conference for the third year in a row. This year, I have a paper on reverse debugging, reviewing the technology, products, and history of the idea. I will probably write a longer blog post after the conference, interesting things tend to come up.

Tweet
Posted in: appearances, articles, conferences, embedded systeme, programming / Tagged: reverse debugging, reverse execution, S4D

Negative Results

2012 September 2 20:48 / 1 Comment / Jakob

In the past year, I have started listening to various podcast from the “Skeptic” community. Although much of the discussion tends to center on medicine (because of the sadly enormous market for quackery) and natural science (because the sad fight over evolution), it has made me think and reflect more about the nature of science and publishing. Indeed, it would have been great if this kind of material would have been easily found back when I was doing my PhD.

Read More →

Tweet
Posted in: general research, programming / Tagged: Chris French, Ed Yong, rant, science, scientific method, skepticism

Speaking at Embedded Conference Scandinavia

2012 August 29 12:58 / Leave a Comment / Jakob

I am going to be talking about how to transport bugs with virtual platform checkpoints, in the Software Tools track at the Embedded Conference Scandinavia, on October 3, 2012, in Stockholm (Sweden). The ECS is a nice event, and there are several tracks to choose from both on October 2 and October 3. In addition to the tracks, Jan Bosch from Chalmers is going to present a keynote that I am sure will be very entertaining (see my notes from a presentation he did in Göteborg last year).

 

Tweet
Posted in: appearances, embedded software, embedded systeme, programming, virtual platforms / Tagged: bug, bug transportation, debugging, Simics

Speaking at SiCS Multicore Day 2012

2012 August 16 11:43 / Leave a Comment / Jakob

I am scheduled to talk at the SiCS multicore day 2012 (like I did back in 2009 and 2008). The event takes palce on September 13, at SiCS in Kista. My topic will be on System-Level Debug – how we can make debuggers that work for big systems.

This year, the multicore day is part of a bigger Software Week event, which also covers cloud and internet of things. See you there!

Tweet
Posted in: appearances, embedded systeme, programming / Tagged: debugging, SiCS Multicore days, system-level debug

Building a Spy-Proof OS?

2012 June 16 09:16 / 2 Comments / Jakob

I am not in the computer security business really, but I find the topic very interesting. The recent wide coverage and analysis of the Flame malware has been fascinating to follow. It is incredibly scary to see a “well-resourced (probably Western) nation-state” develop this kind of spyware, following on the confirmation that Stuxnet was made in the US (and Israel).

In any case, regardless of the resources behind the creation of such malware, one wonders if it could not be a bit more contained with a different way to structure our operating systems. In particular, Flame’s use of microphones, webcams, bluetooth, and screenshots to spy on users should be containable. Basically, wouldn’t cell-phone style sandboxing and capabilities settings make sense for a desktop OS too?

Read More →

Tweet
Posted in: desktop software, programming, security / Tagged: capabilities, Flame, MILS, mobile phones, operating systems, Stuxnet

Wind River Blog: Code Coverage over a Back Door

2012 April 22 12:40 / 2 Comments / Jakob

There is a new post at my Wind River blog, about how the LDRA code coverage tools have been brought to work on Simics using a simulation-only “back door “.

The most interesting part of this is how a simulator can provide an easy way to get information out of target software, without all the software and driver overhead associated with doing the same on a real target. In this case, all that is needed is a single memory-mapped location that can written to be software – which can be put into user-mode-accessible locations if necessary.

Read More →

Tweet
Posted in: programming, virtual platforms, Wind River Blog

Back to Bare Metal

2012 March 30 22:10 / 1 Comment / Jakob

Once upon a time, all programming was bare metal programming. You coded to the processor core, you took care of memory, and no operating system got in your way. Over time, as computer programmers, users, and designers got more sophisticated and as more clock cycles and memory bytes became available, more and more layers were added between the programmer and the computer. However, I have recently spotted what might seem like a trend away from ever-thicker software stacks, in the interest of performance and, in particular, latency.

Read More →

Tweet
Posted in: computer architecture, embedded software, multicore software, programming / Tagged: Communications of the ACM, ethernet, Luigi Rizzo, NetMap, networking

David Ungar: It is Good to be Wrong

2012 February 12 23:31 / 7 Comments / Jakob

I was recently pointed to a 2011 SPLASH presentation by David Ungar, an IBM researcher working on parallel programming for manycore systems. In particular, in a project called Renaissance, run together with the Vrije Universiteit Brussels in Belgium (VUB) and Portland State University in the US. The title of the presentation is “Everything You Know (about Parallel Programming) Is Wrong! A Wild Screed about the Future“, and it has provoked some discussion among people I know about just how wrong is wrong.

Read More →

Tweet
Posted in: computer architecture, multicore debug, multicore software, programming / Tagged: David Ungar, manycore, Portland State, Renaissance, Smalltalk, Squeak, Vrije Universiteit Brussels

Reverse History Part Three – Products

2012 January 8 21:51 / 4 Comments / Jakob

In this final part of my series on the history of reverse debugging I will look at the products that launched around the mid-2000s and that finally made reverse debugging available in a commercially packaged product and not just research prototypes. Part one of this series provided a background on the technology and part two discussed various research papers on the topic going back to the early 1970s. The first commercial product featuring reverse debugging was launched in 2003, and then there have been a steady trickle of new products up until today.

Post updated 2012-09-28 with a revised history.

Read More →

Tweet
Posted in: history of computing, programming / Tagged: debugging, gdb, Green Hills, Lauterbach, Multi, reverse debugging, reverse execution, Simics, TotalView, UndoDB, VMWare

Reverse History Part Two – Research

2012 January 8 21:42 / 2 Comments / Jakob

This is the second post in my series on the history of reverse execution, covering various early research papers. It is clear that reverse debugging has been considered a good idea for a very long time. Sadly though, not a practical one (at the time). The idea is too obvious to be considered new. Here are some papers that I have found dating from the time before “practical” reverse debug which for me starts in 2003 (as well as a couple of later entrants).

Read More →

Tweet
Posted in: history of computing, programming / Tagged: Bil Lewis, Bryce Cogswell, Channing Brown, Daniel Jacobowitz, George Dunlap, John Mellor-Crummey, Mark Russinovich, Marvin Zelkowitz, Mireille Ducasse, Murasa Bazrai, omniscient debugger, Paul Brook, Peter Chen, qemu, reverse debugging, reverse execution, ReVirt, Samuel King, Stuart Feldman, Sukru Cinar, Tankgut Akgul, Thomas LeBlanc, TTVM, Vincent Mooney

Reverse History Part One

2012 January 8 20:40 / 4 Comments / Jakob

For some reason, when I think of reverse execution and debugging, the sound track that goes through my head is a UK novelty hit from 1987, “Star Trekkin” by the Firm. It contains the memorable line “we’re only going forward ’cause we can’t find reverse“. To me, that sums up the history of reverse debugging nicely. The only reason we are not all using it every day is that practical reverse debugging has not been available until quite recently.  However, in the past ten years, I think we can say that software development has indeed found reverse.  It took a while to get there, however. This is the first of a series of blog posts that will try to cover some of the history of reverse debugging. The text turned out to be so long that I had to break it up to make each post usefully short. Part two is about research, and part three about products.
Read More →

Tweet
Posted in: history of computing, programming / Tagged: Checkpointing, record-replay, replay, reverse debugging, reverse execution

Keynote on System-Level Debug

2012 January 1 22:12 / 2 Comments / Jakob

I have now posted the slides from my keynote talk at the S4D 2011 conference to the presentations list on my regular home page. The topic of that talk was “System-Level Debug”, something which has started to interest me in recent years.

Read More →

Tweet
Posted in: appearances, conferences, embedded software, embedded systeme, programming

Debug, Design, and Microsoft Data

2011 November 19 17:38 / 1 Comment / Jakob

It used to be that Microsoft was the big, boring, evil company that nobody felt was very inspiring. Today, with competition from Google and Apple as well as a strong internal research department, Microsoft feels very different. There are really interesting and innovative ideas and paper coming out of Microsoft today.  It seems that their investments in research and software engineering are generating very sophisticated software tools (and good software products).

I have recently seen a number of examples of what Microsoft does with the user feedback data they collect from their massive installed base. I am not talking about Google-style personal information collection, but rather anonymous collection of user interface and error data in a way that is more designed to built better products than targeting ads.

Read More →

Tweet
Posted in: programming / Tagged: Communications of the ACM, debugging, Kinshuman Kinshumann, Microsoft, Steven Sinofsky, Windows, Windows 8, Windows Explorer

DV* 30 Years

2011 November 13 22:32 / Leave a Comment / Jakob

On the very binary date of 11-11-11, my alma mater, the computer science (DV, for datavetenskap) education at Uppsala University celebrated its thirty years’ anniversary. It was a great classic student party in the evening with a nice mix of old alumni and fresh-faced students. Lots of singing and some nice skits on stage. Great fun, and my voice has still not recovered. It also got me thinking about it is that we really do as computer scientists.

Read More →

Tweet
Posted in: history of computing, off-topic, programming / Tagged: DVL, DVP, Uppsala University

Jan Bosch: Software Provocateur

2011 October 29 20:09 / 1 Comment / Jakob

Last week, I had the honor of presenting at and attending the talks of the Lindholmen Software Development Day. The first keynote speaker was Professor Jan Bosch from Chalmers, who did his best to provoke, prod, and shock the audience into action to change how they do software. While I might not agree with everything he said, overall it was very enjoyable and insightful talk.

Read More →

Tweet
Posted in: business issues, programming / Tagged: Jan Bosch, Lindholmen Software Development Day, software

GPGPU for Instruction-Set Simulation – Maybe, Maybe not

2011 October 8 21:17 / Leave a Comment / Jakob

I just read a quite interesting article by Christian Pinto et al, “GPGPU-Accelerated Parallel and Fast Simulation of Thousand-core Platforms“, published at the CCGRID 2011 conference. It discusses some work in using a GPGPU to run simulations of massively parallel computers, using the parallelism of the GPU to speed the simulation. Intriguing concept, but the execution is not without its flaws and it is unclear at least from the paper just how well this generalizes, scales, or compares to parallel simulation on a general-purpose multicore machine.

Read More →

Tweet
Posted in: articles, computer architecture, computer simulation technology, multicore software, parallel computing, programming / Tagged: CCGrid, cycle accuracy, GPGPU, GPU, simulation

The Adversarial Approach to Compilation

2011 October 2 21:07 / 3 Comments / Jakob

Paul Henning-Kamp has written a series of columns for the ACM Queue and Communications of the ACM. He is  pointed, always controversial, and often quite funny. One recent column was called “The Most Expensive One-Byte Mistake“, which discusses the bad design decision of using null-terminated strings (with the associated buffer overrun risks that would have been easily avoided with a length+data-style string format). Well worth a read. A key part of the article is the dual observation that compilers are starting to try to solve the efficiency problems of null-terminated strings – and that such heavily optimizing compilers quite often very hard to use.

Read More →

Tweet
Posted in: programming / Tagged: ACM Queue, Communications of the ACM

EETimes Articles on Simics

2011 September 23 21:26 / Leave a Comment / Jakob

I just had two articles published the Embedded Design part of the EETimes.

First, “Rethink your project planning with a virtual platform“, which talks about how virtual platforms can change your entire project planning. Essentially, by reducing project friction and risks related to hardware availability, software integration, and show-stopper bugs, you can make projects work much better.

Then we have “Transporting bugs with virtual checkpoints“, which is a shorter, popular science, version of the paper I published last year at S4D. This describes how you can use checkpointing in a virtual platform to communicate bugs across time, space, and teams.

Tweet
Posted in: articles, programming, virtual platforms / Tagged: EETimes, Simics

Wind River Blog: Stop, Think, and Tie Your Shoes Right

2011 September 21 20:09 / Leave a Comment / Jakob

There is a new post at my Wind River blog, which could seem to be about shoes but which is really about process improvement. In particular, the need for companies to let their employees take a step or two back and look at what they are doing and what they could do better.

It is way too common to be so busy running around being inefficient that there is no time to think about how to become more efficient. Change also requires some discipline to actually keep pushing at habits until they change for the better.

All of this can be illustrated by tying shoes.

Tweet
Posted in: business issues, programming, virtual platforms, Wind River Blog

My Bug Doesn’t Work!

2011 September 14 05:27 / 7 Comments / Jakob

Every once in a while I need to build demo setups to show debugging in action. As I have blogged before, finding a good bug when you need one isn’t always easy.  The solution is to try to invent artificial bugs, and I was very happy when I managed to stage a buffer overrun in a VxWorks program.

It is pretty very nice demo in which you first start a period program A, which prints the value of an incrementing counter every target second.  You then run a supposedly unrelated program B, resulting in the values that program A prints to become corrupted.  Perfect to show off reverse execution and data breakpoints in reverse as you go from the point where the corrupted value is printed to the piece of code that overwrote the variable.

But then I ported the demo to a new platform… and the bug didn’t work anymore. My bug had caught a bug and was now not working, or at least not they way I expected it to. What had happened?
Read More →

Tweet
Posted in: embedded software, programming / Tagged: bugs, compilers, demo, VxWorks

Wind River Blog: How to Get Virtual

2011 August 2 14:10 / Leave a Comment / Jakob

There is a new post at my Wind River blog, about how you build virtual platforms with Simics. The post is more about the methodology than the nature of models, cycle accuracy, endianness, and all the other details of virtual platform modeling. I have written about modeling methodology on this blog too, and in particular I would recommend looking at “Two perspectives on modeling“.

Tweet
Posted in: computer simulation technology, programming, virtual platforms, Wind River Blog / Tagged: development methodology, Functional models, Modeling, Simics

Post Navigation

1 2 3 4 Next »

Recent Posts

  • Military Science Fiction – The Books Blur Together
  • Wind River Blog: Starting & Configuring Simics
  • Wind River Blog:
  • Nudge Theory and Graphical User Interfaces
  • Wind River Blog: Collaborating with Recording Checkpoints
  • Wind River Blog: Simics 4.8 is Here
  • A Few Electrons too Many
  • Wind River Blog: Visuality NQ CIFS Server on Simics
  • Everything in the Cloud?
  • Wind River Blog: TCF and Simics
  • Off-Topic: Moving Bad Piggies Save Games
  • Two Cores, Four Cores, Eight Cores – Mobile Variety
  • Bliss: Failing to Pivot for Ideology
  • Wind River Blog and Movie: Demo of Simics Debugging
  • Simulation vs Reality in Schlock Mercenary

Categories

  • appearances (30)
  • articles (21)
  • blogging (10)
  • books (7)
  • business issues (31)
  • computer architecture (35)
  • conferences (34)
  • EDA (50)
    • ESL (35)
  • embedded (78)
    • embedded software (57)
    • embedded systeme (50)
  • general research (6)
  • history (32)
    • general history (7)
    • history of computing (26)
  • off-topic (94)
    • biking (5)
    • board games (1)
    • computer games (3)
    • desktop software (35)
    • food and drink (1)
    • funny (12)
    • gadgets (24)
    • Politics (3)
    • popular culture (5)
    • trains (5)
    • transportation (10)
    • travel (10)
    • websites (3)
  • parallel computing (92)
    • multicore computer architecture (51)
    • multicore debug (22)
    • multicore software (65)
  • programming (109)
  • review (8)
  • security (19)
  • teaching (7)
  • testing (9)
  • uncategorized (12)
  • virtual things (131)
    • computer simulation technology (68)
    • virtual machines (18)
    • virtual platforms (99)
    • virtualization (14)
  • Wind River Blog (43)

Tags

ARM blog commentary Cadence Checkpointing clock-cycle models Communications of the ACM computer architecture conference cycle accuracy debugging Domain-specific languages eclipse embedded freescale G900 heterogeneous homogeneous IBM Intel iPod lego linux mobile phones multicore off-topic office 2007 operating systems p4080 podcast commentary power architecture rant research reverse debugging reverse execution S4D SiCS Multicore days Simics simulation software tools Sun SystemC video virtualization Vista Windows

1

  • F-Secure Blog

Blogs and news

  • Andras Vajda's blog (on multicore)
  • Embedded in Academia (John Regehr)
  • Grant Martin
  • Jack Ganssle
  • My Wind River Blog
  • Security Now podcast
  • Secworks (Joachim Strömbergson)
  • Simon Kågström
  • Synopsys View from the Top
  • Worse Than Failure

Archives

  • June 2013 (3)
  • May 2013 (4)
  • April 2013 (1)
  • March 2013 (4)
  • February 2013 (1)
  • January 2013 (3)
  • December 2012 (2)
  • November 2012 (2)
  • October 2012 (1)
  • September 2012 (6)
  • August 2012 (4)
  • July 2012 (4)
  • June 2012 (3)
  • May 2012 (4)
  • April 2012 (2)
  • March 2012 (3)
  • February 2012 (1)
  • January 2012 (6)
  • December 2011 (2)
  • November 2011 (3)
  • October 2011 (4)
  • September 2011 (5)
  • August 2011 (4)
  • July 2011 (3)
  • June 2011 (4)
  • May 2011 (7)
  • April 2011 (1)
  • March 2011 (3)
  • February 2011 (5)
  • January 2011 (1)
  • December 2010 (4)
  • November 2010 (3)
  • October 2010 (5)
  • September 2010 (5)
  • August 2010 (5)
  • July 2010 (6)
  • June 2010 (5)
  • May 2010 (3)
  • April 2010 (4)
  • March 2010 (3)
  • February 2010 (4)
  • January 2010 (7)
  • December 2009 (6)
  • November 2009 (6)
  • October 2009 (7)
  • September 2009 (6)
  • August 2009 (7)
  • July 2009 (11)
  • June 2009 (5)
  • May 2009 (10)
  • April 2009 (7)
  • March 2009 (8)
  • February 2009 (9)
  • January 2009 (12)
  • December 2008 (8)
  • November 2008 (9)
  • October 2008 (9)
  • September 2008 (10)
  • August 2008 (13)
  • July 2008 (12)
  • June 2008 (8)
  • May 2008 (9)
  • April 2008 (10)
  • March 2008 (7)
  • February 2008 (8)
  • January 2008 (5)
  • December 2007 (5)
  • November 2007 (7)
  • October 2007 (7)
  • September 2007 (12)
  • August 2007 (9)
  • July 2007 (2)
© Copyright 2013 - Observations from Uppsala
Infinity Theme by DesignCoral / WordPress