<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>keeping simple &#187; real-time</title>
	<atom:link href="http://www.yodaiken.com/category/software-engineering/real-time/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.yodaiken.com</link>
	<description>Systems software technology and business</description>
	<lastBuildDate>Sun, 01 Jan 2012 18:30:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Industrial robots state of the art</title>
		<link>http://www.yodaiken.com/2011/03/industrial-robots-state-of-the-art/</link>
		<comments>http://www.yodaiken.com/2011/03/industrial-robots-state-of-the-art/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 02:34:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[embedded systems]]></category>
		<category><![CDATA[real-time]]></category>
		<category><![CDATA[nuclear]]></category>
		<category><![CDATA[robotics]]></category>
		<category><![CDATA[TEPCO]]></category>

		<guid isPermaLink="false">http://www.yodaiken.com/?p=1148</guid>
		<description><![CDATA[During the BP Macondo leak I was struck by the enormous level of skill needed by the robot submarine operators and wondered at the apparently low level of automation available to them. But the absence of robotic equipment in the &#8230; <a href="http://www.yodaiken.com/2011/03/industrial-robots-state-of-the-art/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>During the BP Macondo leak I was struck by the enormous level of skill needed by the robot submarine operators and wondered at the apparently low level of automation available to them. But the absence of robotic equipment in the TEPCO Fukushima Daiichi facility is really even more comprehensive and more puzzling &#8211; there&#8217;s no mile of seawater to make things really challenging.  An <a href="http://news.cnet.com/8301-17938_105-20044970-1.html" onclick="pageTracker._trackPageview('/outgoing/news.cnet.com/8301-17938_105-20044970-1.html?referer=');">article </a>in CNET asks the same question.  It&#8217;s quite puzzling. And kind of a sobering reminder of consequences of Dilbert boss impulses to turn useful R&amp;D projects into PR stunts.</p>
<p>It&#8217;s not like I didn&#8217;t see doomed robotics projects in the US National Labs.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yodaiken.com/2011/03/industrial-robots-state-of-the-art/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shocking advances in Operating Systems</title>
		<link>http://www.yodaiken.com/2010/10/shocking-advances-in-operating-systems/</link>
		<comments>http://www.yodaiken.com/2010/10/shocking-advances-in-operating-systems/#comments</comments>
		<pubDate>Fri, 22 Oct 2010 03:38:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[operating systems]]></category>
		<category><![CDATA[real-time]]></category>
		<category><![CDATA[breakthrough]]></category>
		<category><![CDATA[operating system]]></category>

		<guid isPermaLink="false">http://www.yodaiken.com/?p=1065</guid>
		<description><![CDATA[And here I was complaining about the lack of progress in OS development &#8220;This will blow away any RTOS,&#8221; said Cauchy. &#8220;We speed up execution by doing things like vector interrupts, I/O memory mapping, and turning off timers.&#8221; By Gad!]]></description>
			<content:encoded><![CDATA[<p>And here I was complaining about the lack of progress in OS development</p>
<blockquote><p>&#8220;This will blow away any RTOS,&#8221; said Cauchy. &#8220;We speed up execution by doing things like vector interrupts, I/O memory mapping, and turning off timers.&#8221;</p></blockquote>
<p>By Gad!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yodaiken.com/2010/10/shocking-advances-in-operating-systems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More petty</title>
		<link>http://www.yodaiken.com/2009/11/more-petty/</link>
		<comments>http://www.yodaiken.com/2009/11/more-petty/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 17:05:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[intellectual property]]></category>
		<category><![CDATA[real-time]]></category>
		<category><![CDATA[rtlinux]]></category>
		<category><![CDATA[software business]]></category>
		<category><![CDATA[ALMA]]></category>
		<category><![CDATA[Chile]]></category>
		<category><![CDATA[software copying]]></category>
		<category><![CDATA[telescope]]></category>

		<guid isPermaLink="false">http://www.yodaiken.com/?p=572</guid>
		<description><![CDATA[The ALMA team has released ACS 8.0 on Red Hat 4.4, downgrading the Linux version from the foreseen 5.2 version. This choice, with the consequent back-porting of the code to the older OS version, had to be taken because of &#8230; <a href="http://www.yodaiken.com/2009/11/more-petty/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>The ALMA team has released ACS 8.0 on Red Hat 4.4, downgrading the Linux version from the foreseen 5.2 version. This choice, with the consequent back-porting of the code to the older OS version, had to be taken because of major problems encountered by the Control and Correlator teams in porting RTAI real time code to Red Hat 5.2. As soon as these problems will be solved, ACS 8.0 will be released also for Red Hat 5.2. <a href="http://www.google.com/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;ved=0CAcQFjAA&amp;url=https%3A%2F%2Fwebsqa.hq.eso.org%2Fsdd%2Fpub%2FPipeline%2FReports%2FSDD_Oct-Dec08.doc&amp;ei=HI_9SpbdAc6InQeGvJWXCw&amp;usg=AFQjCNFfAMfxhMlKJRbhs6geWvr9SgJsew&amp;sig2=DK_4yIJoxU42B3l_Y08gsQ" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.google.com/url?sa=t_amp_source=web_amp_ct=res_amp_cd=1_amp_ved=0CAcQFjAA_amp_url=https_3A_2F_2Fwebsqa.hq.eso.org_2Fsdd_2Fpub_2FPipeline_2FReports_2FSDD_Oct-Dec08.doc_amp_ei=HI_9SpbdAc6InQeGvJWXCw_amp_usg=AFQjCNFfAMfxhMlKJRbhs6geWvr9SgJsew_amp_sig2=DK_4yIJoxU42B3l_Y08gsQ&amp;referer=');">Report</a></p></blockquote>
<p>These folks deliberately chose to base their work on aÂ  version ofÂ  software we developed that had somehow been transformed to have none of our copyright notices, ignored our complaints about their lack of interest in scientific integrity, and refused to even discuss a commercial solution with the inventors, and have by now invested untold amounts of public money trying to keep the mess working.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yodaiken.com/2009/11/more-petty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Marine One Blueprints via Pirates Bay</title>
		<link>http://www.yodaiken.com/2009/03/marine-one-blueprints-via-pirates-bay/</link>
		<comments>http://www.yodaiken.com/2009/03/marine-one-blueprints-via-pirates-bay/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 05:32:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[communications]]></category>
		<category><![CDATA[real-time]]></category>
		<category><![CDATA[security+fault-tolerance]]></category>
		<category><![CDATA[software security]]></category>
		<category><![CDATA[computer security]]></category>

		<guid isPermaLink="false">http://www.yodaiken.com/?p=240</guid>
		<description><![CDATA[Goodness. The US blueprints for Marine1 show up in Iran. &#8220;What appears to be a defense contractor in Bethesda, Md., had a file-sharing program on one of their systems that also contained highly sensitive blueprints for Marine One,&#8221; Boback said. &#8230; <a href="http://www.yodaiken.com/2009/03/marine-one-blueprints-via-pirates-bay/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Goodness. The US blueprints for Marine1 <a title="MSNBC story" href="http://www.msnbc.msn.com/id/29447088/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.msnbc.msn.com/id/29447088/?referer=');">show up</a> in Iran.</p>
<blockquote><p>&#8220;What appears to be a defense contractor in Bethesda, Md., had a file-sharing program on one of their systems that also contained highly sensitive blueprints for Marine One,&#8221; Boback said.</p>
<p class="textBodyBlack">Tiversa also found sensitive financial information about the cost of the helicopter on that same computer, WPXI-TV reported.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.yodaiken.com/2009/03/marine-one-blueprints-via-pirates-bay/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Are threads evil? (updated)</title>
		<link>http://www.yodaiken.com/2009/02/are-threads-evil/</link>
		<comments>http://www.yodaiken.com/2009/02/are-threads-evil/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 19:18:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[embedded systems]]></category>
		<category><![CDATA[operating systems]]></category>
		<category><![CDATA[real-time]]></category>
		<category><![CDATA[rtlinux]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[formal methods]]></category>
		<category><![CDATA[parallelism]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[threads]]></category>

		<guid isPermaLink="false">http://www.yodaiken.com/?p=220</guid>
		<description><![CDATA[This paper by Prof. Edward Lee explains something of why &#8220;threads&#8221; are such a painful abstraction.  As Prof. Lee notes, threads intrinsically create non-determinism and resource conflicts which we then attempt to &#8220;prune&#8221; via synchronization and complex tools. In an &#8230; <a href="http://www.yodaiken.com/2009/02/are-threads-evil/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This <a title="evil threads" href="http://www.yodaiken.com/references/threadsareevil.pdf" target="_blank">paper </a>by Prof. Edward Lee explains something of why &#8220;threads&#8221; are such a painful abstraction.  As Prof. Lee notes, threads intrinsically create non-determinism and resource conflicts which we then attempt to &#8220;prune&#8221; via synchronization and complex tools. In an <a href="http://www.yodaiken.com/papers/sync.pdf">earlier note</a>, I argued that we should design real-time multi-threaded applications to minimize the need for synchronization, but Prof. Lee goes further to point out that the thread model itself encourages a disorganized program structure.  Along those lines, one of the basic difficulties in real-time application design is non-deterministic resource allocation. How can we ever be sure that, for example, a multi-threaded app where threads can allocate memory has sufficient memory for critical threads to proceed?</p>
<p>I&#8217;m not a fan of the &#8220;algebraic&#8221; <a title="Tagged Signal Model" href="http://www.eecs.berkeley.edu/Pubs/TechRpts/2005/EECS-2005-31.pdf" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.eecs.berkeley.edu/Pubs/TechRpts/2005/EECS-2005-31.pdf?referer=');">tagged model</a> that Lee suggests as an alternative &#8211; too much of the flavor of &#8220;formal methods&#8221; via the denotational semantics base.  In fact, Liu&#8217;s thesis, referenced here, struggles mightly with the unsatisfactory nature of the mathematical framework to get somewhere. Do we really have to create lemmas about posets to describe 2 simple processes? It seems to me that the confusion of the underlying mathematical basis has to be resolved before we can figure this out. Or maybe not.</p>
<p>Consider a really dumb system that keeps a &#8220;gain&#8221; variable, outputs a single analog voltage, and inputs both an input signal and &#8220;messages&#8221; that tell it what to do. The input events can be thought of as samples of the analog signals on the &#8220;pins&#8221;.</p>
<p>Inputs are maps: Pins -&gt; Signals  where each input represents one unit of time and the set Pins contains &#8220;Vin&#8221; and some unknown number of pins (which may not be actual physical pins) comprising the message port.</p>
<p>Given a sequence of inputs, w, we suppose we have a function LastGain(w) that extracts the value of gain we were told to set in the most recent message and SinceLastCommand(w) that counts samples (time units) since the last command message.  Let&#8217;s be more specific on the &#8220;Vin&#8221;</p>
<p>LastVin(wa) = a(Vin).</p>
<p>StableVin(wa) = (1+ StableVin(w))*[a(Vin) ==Â  LastVin(w)]Â  where [exp] is 1 if exp is true and 0 otherwise</p>
<p>StableVin(emptysequence)=0</p>
<p>Then we can require that Dev(w)= g*v if</p>
<p>StableVin(w)&gt;= t1 and v=LastVin(w)</p>
<p>and g=LastCommand(w) and SinceLastCommand(w) &gt;= t2</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yodaiken.com/2009/02/are-threads-evil/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Happy new year and validation</title>
		<link>http://www.yodaiken.com/2007/12/happy-new-year-and-validation/</link>
		<comments>http://www.yodaiken.com/2007/12/happy-new-year-and-validation/#comments</comments>
		<pubDate>Fri, 28 Dec 2007 21:38:24 +0000</pubDate>
		<dc:creator>yodaiken</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[operating systems]]></category>
		<category><![CDATA[real-time]]></category>
		<category><![CDATA[security+fault-tolerance]]></category>
		<category><![CDATA[software security]]></category>

		<guid isPermaLink="false">http://yodaiken.com/?p=127</guid>
		<description><![CDATA[Updated below! Years ago I proposed the following code snippet as a minimal standard for a useful verification method. Still not quite there. /* you are not expected to understand this */ if(save()){ load_memory_management(); /* map in new current */ &#8230; <a href="http://www.yodaiken.com/2007/12/happy-new-year-and-validation/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Updated below!</p>
<p>Years ago I proposed the following code snippet as a minimal standard for a useful verification method. Still not quite there.</p>
<pre>/* you are not expected to understand this */</pre>
<pre>if(save()){</pre>
<pre>          load_memory_management(); /* map in new current */</pre>
<pre>          return;</pre>
<pre>}else {</pre>
<pre>         current = new;</pre>
<pre>        resume();</pre>
<pre>        panic("RESUME RETURNED! KERNEL BROKENn");</pre>
<pre>}</pre>
<p>Not so complicated,  but if you can&#8217;t do this, you cannot handle operating systems at all- or any threading.</p>
<p>In response to the comment. This is a paraphrase of Dennis Ritchie&#8217;sÂ  Unix switch code and comment.Â  &#8220;Save&#8221; saves the registers and the return address for &#8220;current&#8221; and always returns 0. &#8220;Resume&#8221; restores the saved registers and return address for current (by doing so, changes stacks) and returns 1 &#8211; to that saved return address which is the test of the &#8220;if&#8221;. So the &#8220;if&#8221; statement is always evaluated as false when saving and is always evaluated as true when resuming and &#8220;resume&#8221; never returns to the else.Â  I always took Ritchie&#8217;s comment to be a warning that the code and the previous comments were not easy to understand. The state change here is basic thread switching but it is slippery.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yodaiken.com/2007/12/happy-new-year-and-validation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>formal methods considered harmful and more on soft real-time</title>
		<link>http://www.yodaiken.com/2007/12/formal-methods-considered-harmful-and-more-on-soft-real-time/</link>
		<comments>http://www.yodaiken.com/2007/12/formal-methods-considered-harmful-and-more-on-soft-real-time/#comments</comments>
		<pubDate>Sat, 15 Dec 2007 18:31:14 +0000</pubDate>
		<dc:creator>yodaiken</dc:creator>
				<category><![CDATA[data center]]></category>
		<category><![CDATA[operating systems]]></category>
		<category><![CDATA[real-time]]></category>
		<category><![CDATA[security+fault-tolerance]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[software security]]></category>

		<guid isPermaLink="false">http://yodaiken.com/?p=124</guid>
		<description><![CDATA[[fixed a couple of typos, Dec. 20 2007] John Regehr writes: On the other hand, there is plenty of useful work to be done on supporting time sensitive applications (I&#8217;ll just avoid saying &#8220;soft real-time&#8221;) even when no guarantees are &#8230; <a href="http://www.yodaiken.com/2007/12/formal-methods-considered-harmful-and-more-on-soft-real-time/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>[fixed a couple of typos, Dec. 20 2007]</p>
<p>John Regehr writes:</p>
<blockquote><p>On the other hand, there is plenty of useful work to be done on supporting time sensitive applications (I&#8217;ll just avoid saying &#8220;soft real-time&#8221;) even when no guarantees are made.  Let&#8217;s take the example of an OS that disables interrupts when any process is executing inside the kernel.  This is not hypothetical, I was recently talking to people designing such an OS because they are formally verifying it; they did not believe they were capable of verifying an OS that accepts interrupts more liberally.  Anyway, needless to say the average-case response time to interrupts of this OS will suck.  Now if we have some breakthrough in verification that permits interrupts to be accepted most places in this kernel, average case responsiveness will improve though worst-case may<br />
not.  Is this useless?  Of course not, if it makes it possible to watch videos or listen to music or similar, on this OS.  For applications of this kind a mathematical guarantee is simply overkill and what we really care about is more like &#8220;works almost all of the time in practice, given actual workloads.&#8221;</p></blockquote>
<p>This is perfectly reasonable, in fact, there are many interesting properties of operating systems that are not real-time properties at all if we define real-time properly so that it does not end up meaning &#8220;any performance properties.&#8221; What&#8217;s unreasonable is this idea that crippling a piece of software to make it possible to &#8220;prove&#8221; that it &#8220;works&#8221; gains much of anything. That story about the drunk looking for his keys under the light-post is supposed to be a joke, not a design methodology. It&#8217;s fine to argue that by simplifying a system one can validate it while not losing too much performance or functionality for the purpose &#8211; but all too often the second part of the argument is omitted. What is the point of a system that is provably &#8220;correct&#8221; at a performance level that assures it cannot be used for its ostensible purpose? Worse, this methodology is often used in order to make it possible to apply &#8220;mathematical&#8221; methods which have not been ever shown to be more reliable than testing  or code reviews or even good luck charms (the claim that &#8220;formally validated code is better than other code is, at best, unproven).</p>
<p>The phrase &#8220;<em>mathematical guarantee</em> &#8221; is worth some deeper analysis.</p>
<ul>
<li><strong>Mathematical</strong>. The types of &#8220;hard specifications&#8221; that I am advocating do not need to be overly &#8220;mathematical&#8221; and certainly don&#8217;t need to be &#8220;formal&#8221; to be useful. On the contrary. The &#8220;formal methods&#8221; advocates have made a fetish of formalization to the detriment of useful engineering specification and that causes people to shy away from attempting to be more precise.  What we want from a specification, at minimal, is that it should be falsifiable.  Perhaps an incremental approach to adding fast paths to operating system services to reduce interrupt latencies can make the system described above &#8220;more responsive&#8221; for &#8220;standard workload&#8221;. If so, we should be able to characterize &#8220;more responsive&#8221; in some falsifiable way.  If the specification is just &#8220;there is no wall-clock observable delay on the echoing of typed characters while stress program S runs in the background and a tester types a file in the ed program&#8221; or that  &#8220;programs A,B, and C start within 5 seconds of double clicking the icon&#8221; then it is at least a falsifiable specification and is a concrete goal for the software developer.   In any case, we can see that &#8220;average&#8221; is not what is needed, since  &#8220;average&#8221; implies that if the system runs for 1 hour, a 5 minute total stop can be amortized away by 55 minutes of high speed operation. Perhaps what we want is as simple as &#8220;the video player on an otherwise unloaded system will not stop more than 10 seconds cumulatively over a one hour period where stops are delays in frame display that are over 1/60th of a second.&#8221; But this &#8220;soft&#8221; real-time requirement carries a real-time property with it &#8211; as argued previously.</li>
<li><strong>Guarantee</strong>. There is a difference between a <em>design guarantee</em> and an <em>evaluation guarantee</em>. A TCP/IP network stack is designed to produce an in-order, reliable, stream of data between sender and receiver.   But it is possible that in some situations, under some loads and with some definition of &#8220;reliable&#8221;, a simple datagram stack can produce the same property. The TCP/IP stack is designed to guarantee a property that the simpler stack may be shown to have in some circumstances. An evaluation guaranty is an attempt to show that a system has some property. One of the most useful ideas in Common Criteria is the evaluation assurance level (EAL) which is supposed to indicate the reliability of such a guaranty. One might find &#8220;we ran it a couple of times and it looked good&#8221; to be less or more reassuring than &#8220;we produced a 300 page document that strenuously exercised the symbol production features of LaTex&#8221; but these are both &#8220;evaluation guarantees&#8221;. Note that design guarantees should be backed up by evaluation guarantees that the design is correct and implemented correctly.</li>
</ul>
<p>&#8220;Real-time software&#8221; normally refers to software that offers design guarantees on latency and scheduling times, data rates, or other time sensitive operations. Validating that the design succeeds requires some combination of testing, mathematical proof, and design and code review.  But we may also be able to validate real-time properties of code that has no design real-time properties at all.  One could take an instance of  a LAMP stack (Linux + Apache + MySQL + PHP) and subject it to extensive testing on a particular hardware platform and observe that in practice it satisfies a real-time specification. Suppose our measurements show that all pages of a certain limited complexity will be &#8220;served&#8221; within 1 second over a 1GB network that is reserved for the LAMP system and where requests are at a rate bounded by <em>R</em> and there are no more than 30 seconds cumulative failure on this property over 1 hour. That&#8217;s a falsifiable, concrete, real-time specification &#8211; mathematical, even [this is in response to a note from B., a very knowledgeable system designer who may or may not be quotable].</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yodaiken.com/2007/12/formal-methods-considered-harmful-and-more-on-soft-real-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Soft real-time and QOS (revised)</title>
		<link>http://www.yodaiken.com/2007/11/soft-real-time-and-qos-revised/</link>
		<comments>http://www.yodaiken.com/2007/11/soft-real-time-and-qos-revised/#comments</comments>
		<pubDate>Tue, 20 Nov 2007 16:41:53 +0000</pubDate>
		<dc:creator>yodaiken</dc:creator>
				<category><![CDATA[operating systems]]></category>
		<category><![CDATA[real-time]]></category>
		<category><![CDATA[rtlinux]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://yodaiken.com/?p=121</guid>
		<description><![CDATA[[ revised version of an older post] &#8220;Soft real-time&#8221; is a perfect example of the &#8220;soft design&#8221; noted in an earlier post. There are perfectly good ways of characterizing quality of service (QOS) assurances precisely. Doug Jenson proposes one possible &#8230; <a href="http://www.yodaiken.com/2007/11/soft-real-time-and-qos-revised/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>[ revised version of an <a href="http://yodaiken.com/w/2006/09/soft-real-time-and-soft-design-strategies-versus-qos/" onclick="pageTracker._trackPageview('/outgoing/yodaiken.com/w/2006/09/soft-real-time-and-soft-design-strategies-versus-qos/?referer=');">older post</a>]</p>
<p>&#8220;Soft real-time&#8221; is a perfect example of the &#8220;soft design&#8221;  noted  in an <a href="http://www.yodaiken.com/w/2006/08/programming-design-style/" title="previous article">earlier post.</a> There are perfectly good ways of characterizing quality of service (QOS) assurances precisely. Doug Jenson proposes one possible definition:</p>
<blockquote><p><em> The general case of a deadline (which is a soft deadline) has utility measured in terms of lateness (completion time minus deadline), tardiness (positive lateness), or earliness (negative lateness). Larger positive values of lateness or tardiness represent lower utility, and consequently larger positive values of earliness represent greater utility.</em></p></blockquote>
<p>That is, he says a real-time system will have a function</p>
<p align="center"><em> 0 =&lt; Utility(Error) =&lt; 1</em></p>
<p>where,  <em>Error &gt; 0</em> for a late computation and <em>Error &lt; 0</em> for an early computation.  A hard real-time system will have <em>Utility(Error)=0</em> whenever <em>|Error|</em> is greater than some acceptable  limit. That&#8217;s a good start,  and there are other obvious ways to quantify. In practice, utility functions may require history: dropping the fourth frame of video during a 1 second interval is different than dropping the first frame during that period. We might specify 75 frames/second which means about 13 milliseconds a frame for flicker free video. Then we could say that the average is<strong> x</strong> frames per second and there are no outliers more than <strong>n</strong> standard deviations from the mean.  Or we could require that over any interval of time <strong>t seconds</strong> there will be at most <strong>n</strong> delays of more than <strong>E</strong> milliseconds. There will be a big difference between requirements for editing (which may permit no frame delays more than 100 microseconds) and consumer viewing which will be a moving target but may allow dropping frames that are more than 2 milliseconds late, but not permit more than 1 frame to be dropped every 2 seconds or something like that.  Note that one of the distinguishing characteristics of any type of real-time system is that timing is not subject to amortization.  Being 10 seconds early and then 10 seconds late, does not mean that the system is perfectly on time.</p>
<p>In practice,  we rarely see quantitative specifications of real-time behavior in &#8220;soft real-time&#8221; systems probably because such specifications would reveal the engineering flaw in most soft-real-time systems.  In order to make any QOS assurances you need to be able to make <strong>hard assurances</strong> and as soon as specifications are written down in any detail at all,  this inconvenient problem becomes all too clear. If our specification is that over a one second period, no more than 2 frames will be more than 100 microseconds late, then if the first two frames come in 110 microseconds after deadline, the all of the remaining frames in the second must be under 100 microseconds late.  The distinguishing characteristic of &#8220;soft&#8221; real-time, in practice, is that a soft-real-time system can tolerate some timing errors before falling back on a more rigid timing requirement. Here&#8217;s a summary.</p>
<blockquote><p><em>A hard real-time system has firm worst case timing properties that must always be met to avoid failure </em></p>
<p><em>A soft real-time system is a hard real-time system with some recoverable error modes</em></p></blockquote>
<p>But if we accept the above definition, then designing &#8220;soft real-time&#8221; systems will be seen to be more demanding than designing hard real-time systems.  Specifications like &#8220;seems peppy&#8221; will no longer be acceptable and the types of sloppy mechanisms that can be shown to reduce the tail of distributions in some circumstances will be less appealing.</p>
<p><center></p>
<p align="left">&nbsp;</p>
<p></center><font size="-3"><br />
</font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yodaiken.com/2007/11/soft-real-time-and-qos-revised/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenBSD developer notes king&#8217;s clothing is &#8220;virtual&#8221;</title>
		<link>http://www.yodaiken.com/2007/10/openbsd-developer-notes-kings-clothing-is-virtual/</link>
		<comments>http://www.yodaiken.com/2007/10/openbsd-developer-notes-kings-clothing-is-virtual/#comments</comments>
		<pubDate>Thu, 25 Oct 2007 16:33:58 +0000</pubDate>
		<dc:creator>yodaiken</dc:creator>
				<category><![CDATA[data center]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[operating systems]]></category>
		<category><![CDATA[real-time]]></category>
		<category><![CDATA[security+fault-tolerance]]></category>
		<category><![CDATA[software business]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[software security]]></category>

		<guid isPermaLink="false">http://yodaiken.com/?p=117</guid>
		<description><![CDATA[Theo de Raadt explains why virtualization does not improve security. How about this: to improve security, you have to have a secure design, a marketing buzzword won&#8217;t do the trick. Anyone who has seriously looked that the current generation x86 &#8230; <a href="http://www.yodaiken.com/2007/10/openbsd-developer-notes-kings-clothing-is-virtual/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Theo de Raadt <a href="http://kerneltrap.org/OpenBSD/Virtualization_Security" onclick="pageTracker._trackPageview('/outgoing/kerneltrap.org/OpenBSD/Virtualization_Security?referer=');">explains why</a> virtualization does not improve security.  How about this: to improve security, you have to have a secure design, a marketing buzzword won&#8217;t do the trick.  Anyone who has seriously looked that the current generation x86 virtualization hardware knows that it does not provide clean separation or levels of security. It is possible, with great care, to use it in a way that improves some types of security, but mostly it seems like a way of justifying the use of SUV monster servers.</p>
<p>If you look at Xen code, for example, you can see that it copies huge chunks of Linux. The argument seems to be that if Linux does not have security and fails to efficiently allocate resources, Linux+ModifiedLinux will do a better job, somehow.  There&#8217;s no reason to believe this will happen and many reasons to believe that it will, in fact, make security more elusive.  That&#8217;s not to either argue against virtualization as a useful technique: our RTMS uses a type of virtualization and we have a lot of customers who love VMWare, but the hype-ervisor is disconnected from reality.  The delusion that making arbitrary divisions in software can reduce complexity is a persistent one, but it has no basis.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yodaiken.com/2007/10/openbsd-developer-notes-kings-clothing-is-virtual/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Distributed shared memory from first principles</title>
		<link>http://www.yodaiken.com/2007/10/distributed-shared-memory-from-first-principles/</link>
		<comments>http://www.yodaiken.com/2007/10/distributed-shared-memory-from-first-principles/#comments</comments>
		<pubDate>Sun, 14 Oct 2007 05:49:27 +0000</pubDate>
		<dc:creator>yodaiken</dc:creator>
				<category><![CDATA[data center]]></category>
		<category><![CDATA[operating systems]]></category>
		<category><![CDATA[real-time]]></category>
		<category><![CDATA[security+fault-tolerance]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://yodaiken.com/?p=114</guid>
		<description><![CDATA[[Update 10/16] What is the fundamental performance limiting factor that has dominated that last 30 years of computer architecture? The obvious answer is the disparity between processor and memory/storage speed. We connect processors to cache, to more cache, to even &#8230; <a href="http://www.yodaiken.com/2007/10/distributed-shared-memory-from-first-principles/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>[Update 10/16]</p>
<p>What is the fundamental performance limiting factor that has dominated that last 30 years of computer architecture?  The obvious answer is the disparity between processor and memory/storage speed. We connect processors to cache, to more cache, to even more cache, to some bus, to memory, to disk/network, suffering costs at each step as we try to keep the damn processor busy.  My guess is that memory locality is totally different now than it was back when virtual memory systems were first designed &#8211; much less pronounced.  My short review of the literature shows little research on, for example, memory locality of databases or operating systems since the 1980s. (Is that wrong?)  But we do know enough to understand why the entire concept of distributed shared memory is wrong although there needs to be a catchy name for this category of error.  The error is to see that some feature of computer hardware makes some type of software engineering difficult and then provide a software mechanism that makes that type of engineering <strong>impossible</strong>.  The complexity of the memory hierarchy and the complexity of making locality work pose enormous challenges for software designers. The purpose of distributed shared memory is to make it impossible for software designers to control the cache performance of their programs by hiding caching behavior under a non-deterministic opaque layer.</p>
<p>(see comment by John Regehr)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yodaiken.com/2007/10/distributed-shared-memory-from-first-principles/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

