<?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>John Ford</title>
	<atom:link href="http://blog.johnford.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.johnford.org</link>
	<description>the things that I remembered to write about</description>
	<lastBuildDate>Thu, 09 Feb 2012 22:50:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Using Mock to build Firefox on Linux</title>
		<link>http://blog.johnford.org/using-mock-to-build-firefox-on-linux/</link>
		<comments>http://blog.johnford.org/using-mock-to-build-firefox-on-linux/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 22:36:28 +0000</pubDate>
		<dc:creator>John Ford</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.johnford.org/?p=393</guid>
		<description><![CDATA[We currently have two different Linux build machine configurations. One does our 32bit desktop and Android builds, the other does our 64bit desktop builds. This isn&#8217;t very efficient because we have to segregate these two types of machine in their &#8230; <a href="http://blog.johnford.org/using-mock-to-build-firefox-on-linux/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We currently have two different Linux build machine configurations. One does our 32bit desktop and Android builds, the other does our 64bit desktop builds. This isn&#8217;t very efficient because we have to segregate these two types of machine in their own pools.  If we have a burst of mobile builds, we end up with a pool of overloaded 32bit machines while our 64bit machines sit idle.  We also have one build environment in which <em>all</em> linux based builds need to be done.  With boot2gecko and other projects coming online, we need to ensure that we are able to scale to serve these projects while allowing us to manage our build slaves in a sustainable way.</p>
<p>I have been working on a proof of concept for adapting Fedora&#8217;s Mock utility to build Firefox, Firefox for Mobile and other projects like boot2gecko in their own sandboxed build environment. Mock is what the Fedora project uses to build every single RPM included in their distribution. Mock separates our build host from our build environment, allows us to scale build hosts any way we desire, allows us to be more efficient and agile, improves security, improves the developer workflow and enables community engagement.</p>
<h2>Mock&#8217;s Architecture Simplified</h2>
<p>When Mock is used, yum and rpm populate the basic sandbox. Each time a command is run, Mock changes the root directory (chroot) to this sandboxed build environment. Mock then drops privileges as requested and runs the command in the sandbox. To speed up the creation of these sandboxes, Mock instructs yum to locally cache the rpm files it downloads. Mock also creates a tarball containing the sandbox after installing the base packages to further speed up sandbox creation. In all, it takes Mock approximately one minute on my local Fusion VM to initialize a build environment once the caches are warmed.</p>
<h2>Build Environment Isolation</h2>
<p>The host operating system is responsible for providing the kernel, the tools to drive Mock and Mock itself. Because each build environment is built on demand, the libraries that the host operating system provides aren&#8217;t important or used. This means that we can take security patches on the build host OS without risking our build environments. We are also able to bring up new fast hardware which may not support our build environment&#8217;s OS natively.  Mock uses the <a href="http://www.kernel.org/doc/man-pages/online/pages/man2/chroot.2.html">chroot system call</a>. This call has been around for quite some time and its abilities and flaws are well known. Chroot works on virtual machines which means we can use Mock even if we decide to scale to virtualized hardware.</p>
<h2>Efficiency and Agility</h2>
<p>Having no build dependencies installed on the build hosts, other than Mock itself, allows us to use the same configuration on our test and build machines. The test machines could even benefit from having Mock by allowing us to run tests against Gnome 2 and Gnome 3 on the same pool of slaves.</p>
<p>A common scenario that I&#8217;ve dealt with having to update a library which we link to Firefox. Lets say this we are using libfoo version 1 in Firefox 10. To support a developer landing a change to Firefox 11 that requires libfoo version 2, we currently need to figure out if Firefox 10 can maintain binary compatibility when built with libfoo version 2 or figure out how to install version 2 in a separate location and have only Firefox 11 and newer use libfoo version 2.  Using Mock, we would create a new build environment that only has libfoo version 2.  Because libfoo version 1 is unavailable to Firefox 11 builds and libfoo version 2 is unavailable to Firefox 10, we don&#8217;t risk depending on a new version of libfoo in Firefox 10 and we don&#8217;t risk silently falling back to using libfoo version 1 on Firefox 11.</p>
<p>Mobile moves quickly, often needing a completely unique build environment. When we split each mobile project out to its own Mock build environment, we are able to set up new environments significantly quicker because we are able to limit the scope of changes and no longer risk breaking Firefox by changing anything related to mobile. We can also allow mobile projects to use much newer Fedora software in their build environment while still running the more stable CentOS on our build hosts.  This means we enable mobile developers to use modern software while avoiding rebuilding a slew of packages in an alternate location.</p>
<h2>Security</h2>
<p>I understand that chroots are not a perfect sandboxing tool. I think we need to make sure that we don&#8217;t make perfect the enemy of good. We currently have no real sandboxing on our build slaves. Mock will enable us to run all developer submitted commands in an unprivileged chroot that is rebuilt for every build. Mock allows us to keep our system software updated on the build host to lessen our exposure to security vulnerabilities.</p>
<p>A special case in our infrastructure is Try. Each Try build is currently able to modify the system in ways that we might not want it to.  As a result, we currently have a completely separate pool of machines which run our Try builds.  Mock allows us to sandbox all developer submitted code into a disposable sandbox. Because all of the developer submitted code is limited to the sandbox, we can start looking at merging the Try and production pools.  The failure mode here is that the developer is able to exploit a kernel bug to gain root permissions in their sandbox.  Once a user has root in the sandbox they would be able to chroot back out of the sandbox.  This will be important when we discuss merging our Try and production pools.</p>
<h2>Correctness</h2>
<p>Each build environment will install the exact set of packages required for the build.  When a new dependency is required, we will explicitly add it to the list of dependencies. This means we won&#8217;t be surprised when Firefox starts depending on another library or tool.  We are also able to easily move actively developed branches of Firefox forward without taking risky changes to the build environment of shipping versions of Firefox. This is  increasingly important with the ESR (Extended Support Release)/ release.  Using Mock, we can continue to build in the exact same environment we use today for the rest of the ESR release even though we are building a 10 month newer version of Firefox with different dependencies on the same build host.  Having a single pool of slaves that can do <em>all</em> of our Linux based builds without having to figure out alternate install locations for each dependency is a major scalability win in my books.</p>
<h2>Developer workflow improvements</h2>
<p>Upgrading a library on our build slaves is currently a pain for developers and releng alike. Setting up a local copy of our Linux build machines is a pain. Mock makes this easier by allowing developers to use their existing machines to <em>exactly</em> replicate our official build environments.  Setting up a copy of our build environment on their machine would becomes trivially easy.  Developers could test their code changes in an exact match of our production build environment. Furthermore, with a tool like mozharness, a developer would be able to test an entire build using the exact same bits we use in production with the exact same commands and flow control.</p>
<p>Mock allows us to engage the community more effectively. Community members are able to work on our build machine configuration without impediment and would have access to the exact tools and packages that we use to build Firefox and Mobile.  When a community member finds or fixes a bug in our configuration or wants to upgrade a dependency, they are able to do so and submit patches for review.  This is a lot easier than our current process of signing out a slave for them, adding them to our vpn, letting them do their work followed by removing them from our vpn, reimaging the slave and setting it up again to be in production.  Project like SeaMonkey will be able to match official Firefox build environments with a lot less work required.</p>
<h2>Conclusion</h2>
<p>Mock is a very useful tool. Using it enables us to handle developer requests quicker, engage the community, improve developer workflow, improve security and reduce risk of breaking shipping versions of Firefox when moving development versions forward.  There are some changes that I&#8217;d like to make to the proof of concept before calling mock_mozilla complete, mainly how the driver script (mock_mozilla.py) parses the command line arguments and how build environment locking works.</p>
<p>If you&#8217;d like to take a look at the code for yourself, please feel free to check it out on github! <a href="https://github.com/jhford/mock_mozilla">https://github.com/jhford/mock_mozilla</a>.</p>
<h2>Demonstrations</h2>
<p>Before you start running code in a Mock sandbox, you need to intialize it.  Initializing cleans out the old contents and sets up the base packages specified in the sandbox config file.</p>
<pre>~/software/mock_mozilla $ mock_mozilla -r mozilla-f15-x86_64 --init
INFO: mock_mozilla.py version 1.1.17 starting...
INFO: State Changed: init plugins
INFO: selinux disabled
INFO: State Changed: start
INFO: State Changed: lock buildroot
INFO: State Changed: clean
INFO: State Changed: unlock buildroot
INFO: State Changed: init
INFO: State Changed: lock buildroot
INFO: Mock Version: 1.1.17
INFO: Mock Version: 1.1.17
INFO: Mock Version: 1.1.17
INFO: calling preinit hooks
INFO: enabled root cache
INFO: State Changed: unpacking root cache
INFO: enabled yum cache
INFO: State Changed: cleaning yum metadata
INFO: enabled ccache
INFO: State Changed: running yum
INFO: State Changed: unlock buildroot
INFO: State Changed: end</pre>
<p>Mock uses yum to install packages into the sandbox, but that doesn&#8217;t mean that we are limited to using yum and rpm to populate tools.</p>
<pre>~/software/mock_mozilla $ mock_mozilla -r mozilla-f15-x86_64 --shell "zip --version"
INFO: mock_mozilla.py version 1.1.17 starting...
INFO: State Changed: init plugins
INFO: selinux disabled
INFO: State Changed: start
INFO: State Changed: lock buildroot
INFO: State Changed: shell
/bin/sh: zip: command not found
INFO: State Changed: unlock buildroot
~/software/mock_mozilla $ mock_mozilla -r mozilla-f15-x86_64 --install zip
INFO: mock_mozilla.py version 1.1.17 starting...
INFO: State Changed: init plugins
INFO: selinux disabled
INFO: State Changed: start
INFO: Mock Version: 1.1.17
INFO: Mock Version: 1.1.17
INFO: Mock Version: 1.1.17
INFO: State Changed: lock buildroot
INFO: installing package(s): zip

================================================================================
 Package        Arch              Version               Repository         Size
================================================================================
Installing:
 zip            x86_64            3.0-3.fc15            fedora            251 k

Transaction Summary
================================================================================
Install       1 Package(s)

Total size: 251 k
Installed size: 770 k

Installed:
  zip.x86_64 0:3.0-3.fc15                                                      

INFO: State Changed: unlock buildroot
INFO: State Changed: end
~/software/mock_mozilla $ mock_mozilla -r mozilla-f15-x86_64 --shell "zip --version"
INFO: mock_mozilla.py version 1.1.17 starting...
INFO: State Changed: init plugins
INFO: selinux disabled
INFO: State Changed: start
INFO: State Changed: lock buildroot
INFO: State Changed: shell
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
This is Zip 3.0 (July 5th 2008), by Info-ZIP.
Currently maintained by E. Gordon.  Please send bug reports to
the authors using the web page at www.info-zip.org; see README for details.

Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip,
as of above date; see http://www.info-zip.org/ for other sites.

Compiled with gcc 4.6.0 20110205 (Red Hat 4.6.0-0.6) for Unix (Linux ELF) on Feb  8 2011.

Zip special compilation options:
     USE_EF_UT_TIME       (store Universal Time)
     SYMLINK_SUPPORT      (symbolic links supported)
     LARGE_FILE_SUPPORT   (can read and write large files on file system)
     ZIP64_SUPPORT        (use Zip64 to store large files in archives)
     UNICODE_SUPPORT      (store and read UTF-8 Unicode paths)
     STORE_UNIX_UIDs_GIDs (store UID/GID sizes/values using new extra field)
     UIDGID_NOT_16BIT     (old Unix 16-bit UID/GID extra field not used)
     [encryption, version 2.91 of 05 Jan 2007] (modified for Zip 3)

Encryption notice:
     The encryption code of this program is not copyrighted and is
     put in the public domain.  It was originally written in Europe
     and, to the best of our knowledge, can be freely distributed
     in both source and object forms from any country, including
     the USA under License Exception TSU of the U.S. Export
     Administration Regulations (section 740.13(e)) of 6 June 2002.

Zip environment options:
             ZIP:  [none]
          ZIPOPT:  [none]
INFO: State Changed: unlock buildroot</pre>
<p>Mock allows us to run developer submitted code as an unprivileged user to isolate their code and files from the rest of the machine.</p>
<pre>~/software/mock_mozilla $ mock_mozilla -r mozilla-f15-x86_64 --shell "whoami"
INFO: mock_mozilla.py version 1.1.17 starting...
INFO: State Changed: init plugins
INFO: selinux disabled
INFO: State Changed: start
INFO: State Changed: lock buildroot
INFO: State Changed: shell
root
INFO: State Changed: unlock buildroot
~/software/mock_mozilla $ mock_mozilla -r mozilla-f15-x86_64 --unpriv --shell "whoami"
INFO: mock_mozilla.py version 1.1.17 starting...
INFO: State Changed: init plugins
INFO: selinux disabled
INFO: State Changed: start
INFO: State Changed: lock buildroot
INFO: State Changed: shell
mock_mozilla
INFO: State Changed: unlock buildroot</pre>
<p>Putting all of the above together, I have written a <a href="https://github.com/jhford/mock_mozilla/blob/mozilla-changes/poc.sh">proof of concept script </a> and recorded a screencast of it building Firefox in a Mock sandbox.  I&#8217;ve cut the middle bit out because this takes a while on my Macbook-based VM.</p>
<p><video controls="controls"><br />
<source src="http://johnford.org/wp-content/mock.webm" type="video/webm;" /><br />
<a href="http://johnford.info/wp-content/mock.webm">Download in WebM (Firefox can play this!)</a><br />
</video></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.johnford.org/using-mock-to-build-firefox-on-linux/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
<enclosure url="http://johnford.org/wp-content/mock.webm" length="2228224" type="video/webm" />
<enclosure url="http://johnford.info/wp-content/mock.webm" length="2228224" type="video/webm" />
		</item>
		<item>
		<title>New OS X 10.7 build machine configuration almost ready &#8212; Are you able to help test the builds?</title>
		<link>http://blog.johnford.org/new-os-x-10-7-build-machine-configuration-almost-ready-are-you-able-to-help-test-the-builds/</link>
		<comments>http://blog.johnford.org/new-os-x-10-7-build-machine-configuration-almost-ready-are-you-able-to-help-test-the-builds/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 21:48:15 +0000</pubDate>
		<dc:creator>John Ford</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Other]]></category>

		<guid isPermaLink="false">http://blog.johnford.org/?p=389</guid>
		<description><![CDATA[We are working on replacing our old Mac build slaves.  As shown in a previous blog post, our current Mac builders are very slow.  I am working on creating a OS X 10.7 builder configuration in bug 720470 and its &#8230; <a href="http://blog.johnford.org/new-os-x-10-7-build-machine-configuration-almost-ready-are-you-able-to-help-test-the-builds/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We are working on replacing our old Mac build slaves.  As shown in a previous <a title="Evaluating new Mac Mini builders, SSDs and -j settings" href="http://blog.johnford.org/new-mac-builders-ssds-j-settings/">blog post</a>, our current Mac builders are <em>very</em> slow.  I am working on creating a OS X 10.7 builder configuration in <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=720470">bug 720470</a> and its gotten to the point where I need help verifying that these builds are valid and correct.  I&#8217;ve posted the complete output of two builds done on this new reference machine to my personal server (i.e. this site):</p>
<ul>
<li>Nightly build: <a href="http://johnford.org/files/2012-02-02-03-02-01-mozilla-central/">http://johnford.org/files/2012-02-02-03-02-01-mozilla-central/</a></li>
<li>Debug build: <a href="http://johnford.org/files/mozilla-central-macosx64lion-debug/">http://johnford.org/files/mozilla-central-macosx64lion-debug/</a></li>
</ul>
<p>The keen eye will notice that there are no links to shark builds.  As it happens, shark support on 10.7 is something we still need to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=723301">figure out</a>.  Once I have 10 more machines in our data center to test with, I am going to start producing these builds in a production environment for general consumption.  Soon after, we will want to start switching over to this new builder.  I&#8217;ll set these machines to build mozilla-central and project branches first and as we gain confidence, I&#8217;ll request approval to move Aurora and possibly Beta to these new machines.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.johnford.org/new-os-x-10-7-build-machine-configuration-almost-ready-are-you-able-to-help-test-the-builds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writting a native rm program for Windows</title>
		<link>http://blog.johnford.org/writting-a-native-rm-program-for-windows/</link>
		<comments>http://blog.johnford.org/writting-a-native-rm-program-for-windows/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 17:13:26 +0000</pubDate>
		<dc:creator>John Ford</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.johnford.org/?p=380</guid>
		<description><![CDATA[Our Windows build machines use msys to emulate a posix environment.  Msys is great tool, providing a lot of common posix utilities, like cp, mv, rm.  Sadly there are bugs in the posix emulation.  For us, this manifests in the &#8230; <a href="http://blog.johnford.org/writting-a-native-rm-program-for-windows/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Our Windows build machines use msys to emulate a posix environment.  Msys is great tool, providing a lot of common posix utilities, like cp, mv, rm.  Sadly there are bugs in the posix emulation.  For us, this manifests in the rm program being unable to delete certain files.</p>
<p><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=583129">Bug 583129</a> is about using native Windows tools for file removals.  In that bug, we&#8217;ve looked at a combination of the rmdir and attrib Windows tools.  The problem is that rmdir doesn&#8217;t like to delete files if they have the read-only or system attribute.  To fix that, we need to run attrib to remove those attributes then rmdir to delete them.  Running rmdir is fast but attrib is very slow.</p>
<p>Last year, I spent a bit of time writing a native windows version of rm.  I am by no means a Windows developer, so I spent a couple hours learning the basics of the Windows API.  The API is quite different to what I&#8217;m used to, but the documentation seems to have been written quite well for my purposes.  I was able to get the basics working pretty quickly.  Yesterday, I decided to finish up the program by adding directory deletion, recursive deletes and a command line parser.</p>
<p>I present to you winrm.  The code is available in my <a href="http://hg.mozilla.org/users/jford_mozilla.com/jhford-native-rm/">Mozilla user repo</a>.  This tool works similarly to the standard posix rm utility.  For simplicity&#8217;s sake, only single character options are supported.  These options can be joined, like &#8220;-rf&#8221;, or specified individually, like &#8220;-r -f&#8221;.  The &#8220;&#8211;&#8221; option is also supported, signalling the program to treat all following arguments as files to be deleted.  Because of how the option parser works, files are deleted in reverse order to how they are on the command line.</p>
<pre>jhford@JHFORD-VM ~/mozilla/jhford-native-rm
$ touch a b c d e

jhford@JHFORD-VM ~/mozilla/jhford-native-rm
$ winrm -v -- a b c d e
deleting "e"
deleted "e"
deleting "d"
deleted "d"
deleting "c"
deleted "c"
deleting "b"
deleted "b"
deleting "a"
deleted "a"</pre>
<p>Because my program is written in standard Windows API and is a much simpler program, it is also much faster than the msys rm program.  To test this, I timed deletion of a mozilla-central clone using both mine and msys&#8217; rm.  My program took 37s where the msys program took 113s.</p>
<p>If you know the Windows API and have the cycles, please let me know if you find any glaring errors with my program.   If you want to test the program without having to build it, I&#8217;ve uploaded a copy here <a href="http://blog.johnford.org/wp-content/uploads/2012/02/winrm-0.1.exe">winrm-0.1</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.johnford.org/writting-a-native-rm-program-for-windows/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Evaluating new Mac Mini builders, SSDs and -j settings</title>
		<link>http://blog.johnford.org/new-mac-builders-ssds-j-settings/</link>
		<comments>http://blog.johnford.org/new-mac-builders-ssds-j-settings/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 00:20:11 +0000</pubDate>
		<dc:creator>John Ford</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://blog.johnford.info/?p=350</guid>
		<description><![CDATA[We build Firefox a lot[1].  We build every time someone pushes to try.  We build every time someone pushes to mozilla-central, a project branch or an integration branch.  We build every night on many branches.  We build every time we &#8230; <a href="http://blog.johnford.org/new-mac-builders-ssds-j-settings/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We build Firefox a lot[1].  We build every time someone pushes to try.  We build every time someone pushes to mozilla-central, a project branch or an integration branch.  We build every night on many branches.  We build every time we want to ship an update.</p>
<p>Each of those builds is done on Windows, Linux, Mac OS and Android.  In the most simple sense, the time it takes to get results from any of these platforms is comprised of:</p>
<ul>
<li>Time from push to build start</li>
<li>Time from build start to build completion</li>
<li>Time from build completion to test start</li>
<li>Time from test start to test completion</li>
</ul>
<p>What I am looking at here is the time from build start to build completion for Mac OS builds.  The overall end-to-end time is the time from push to the last test completion.  Currently, our Mac OS builds are by far the slowest.  If we are able to speed up the mac build times, we should see improvements in overall end-to-end times.</p>
<p>We also want to have release builds to be as fast as possible.  During a release, every minute we can save in the build is a minute more we can spend qualifying the product.  During a chemspill release, every minute saved in the build is a minute sooner that we can protect our users.</p>
<p>For a multitude of reasons, we currently have some pretty slow Mac build hardware. We are building on 5 year old 1.83Ghz Mac Minis [2].  It&#8217;s definitely time to upgrade.</p>
<p>I have evaluated the build times of four different specs of Mac Mini that are available today.  Because these machines only run 10.7, we can&#8217;t start using them straight away.  We need to<a title="Bug 715397" href="https://bugzilla.mozilla.org/show_bug.cgi?id=715397" target="_blank"> figure out how to build 10.5 compatible builds on 10.7</a> before we are able to use this hardware.</p>
<p>The specifications are:</p>
<ul>
<li>Mac Mini 5,3 &#8211; Quad i7 2.0GHz with 256GB SSD and 8GB ram</li>
<li>Mac Mini 5,2 &#8211; Dual i7 2.7GHz with 256GB SSD and 8GB ram</li>
<li>Mac Mini 5,2 &#8211; Dual i7 2.7GHz with 750GB 7200rpm and 8GB ram</li>
<li>Mac Mini 5,1 &#8211; Dual i5 2.3GHz with 500GB 5400rpm and 8GB ram</li>
</ul>
<p>Both the Quad i7 and Dual i5 have Intel Integrated as their only video chip, whereas both Dual i7 machines have a Radeon 6630M.  This shouldn&#8217;t make any difference to building Firefox, but I do want to note this as a difference.</p>
<p>Because I don&#8217;t have access to actual pricing, I am unable to do a complete and accurate analysis of cost.  All of my information uses wall clock timing and are scratch builds without rebooting.  Since we have a limited number of configuration options, we have to figure out which configuration is best for us, not how to pick each component for maximum performance.</p>
<h1>Value of solid state disks</h1>
<p>One of the biggest decisions we need to make is whether to buy solid state drives or magnetic platter hard drives.  There are a lot of things that factor into this decision.  Having a faster disk means faster I/O.  I did this test using Dual Core machines, because that&#8217;s what was available to me.</p>
<p><a href="http://blog.johnford.info/wp-content/uploads/2012/01/time-reduction-of-ssd-over-7200rpm-hd.png"><img class="aligncenter size-full wp-image-358" title="time-reduction-of-ssd-over-7200rpm-hd" src="http://blog.johnford.info/wp-content/uploads/2012/01/time-reduction-of-ssd-over-7200rpm-hd.png" alt="" width="757" height="568" /></a>As shown in the graph above, the total time saved on a Dual i7 2.7GHz machine is just over 8 minutes, an 11% improvement.  With Quad i7s it is more likely that we become I/O starved.  It might be worthwhile to test a Quad i7 with a magnetic disk to see if we get a larger improvement there.</p>
<p>Interestingly, the portions of the build that take the least amount of time overall show the biggest improvement from using an SSD.  Nothing at all is slower on SSD than on magnetic disk.  I have another graph which shows this information as percentage of reduction <a href="http://blog.johnford.info/wp-content/uploads/2012/01/percentage-reduction-in-time-of-ssd-over-7200rpm-hd.png" target="_blank">here</a>.</p>
<h1>Parallelism in the build system</h1>
<p>One of the main things we want to learn from this experiment is whether to buy dual or quad core machines.  One major way we exploit parallelism in the build system is through the use of GNU Make&#8217;s -j option.  In order to figure out which -j setting to use for the evaluation builds, I tested each machine using -j2, -j4, -j8, -j12 and -j16.  The following graph is a plot of the build time against the -j setting used for each specification we are evaluating.</p>
<p><a href="http://blog.johnford.info/wp-content/uploads/2012/01/build-time-vs-j-setting.png"><img class="aligncenter size-full wp-image-362" title="build-time-vs-j-setting" src="http://blog.johnford.info/wp-content/uploads/2012/01/build-time-vs-j-setting.png" alt="" width="1185" height="717" /></a> The best setting for the Quad-i7 is -j12 and the best setting for all dual core chips is -j4.  The advantage of -j12 over -j8 for the Quad-i7 is less than one minute.  This graph shows that for the compile step, the Quad-i7 is always the fastest and the Dual-i5 is always the slowest.  Each machine exhibited roughly the same trend of dropping significantly until an ideal setting was reached.  Any setting above the ideal setting caused times to increase.  I did find that it is better to set the -j setting too high than it is to set it too low.</p>
<p>Interestingly, as the -j setting increases, the time advantage the Dual-i7 machine with SSD has over the otherwise identical machine with 7200rpm harddrive increases.  This suggests that as we increase parallelism in the build system, we will need faster I/O to supply the processors with data.</p>
<h1>Comparing to existing hardware</h1>
<p>It is also worth comparing each of the machine specifications at their optimal -j setting to what we have now.  The data source for the existing hardware is our Buildbot Status DB.  I am using a nearly identical mozconfig file to our nightly builds to make this comparison valid.  The only settings changed were the make -j flag and a couple of Mac OS target settings to allow me to build on 10.7.  The builds on the old hardware are also done on 10.6 instead of 10.7, so this is not an exact comparison.</p>
<p>There isn&#8217;t an easy way to map all of the steps that my test builds do to the steps that our production builds do, so I selected the two longest steps of every Mac OS build.</p>
<p><a href="http://blog.johnford.info/wp-content/uploads/2012/01/build-and-symbol-generation-time.png"><img class="aligncenter size-full wp-image-364" title="build and symbol generation time" src="http://blog.johnford.info/wp-content/uploads/2012/01/build-and-symbol-generation-time.png" alt="" width="769" height="577" /></a>This graph shows the absolute times for each specification.  You&#8217;ll notice that the symbols generation is slower on the Quad-i7 than on either Dual-i7 machine.  Symbol generation is not a parallelized process, which explains why higher clock rate dual core machines are faster than the quad core.  Symbols is a much smaller portion of the overall build time than the build.</p>
<p>It is clear that no matter what we do, new hardware is a giant step in the right direction.  The question is by how much we want to improve the situation.</p>
<p><a href="http://blog.johnford.info/wp-content/uploads/2012/01/build-and-symbol-generation.png"><img class="aligncenter size-full wp-image-367" title="build-and-symbol-generation" src="http://blog.johnford.info/wp-content/uploads/2012/01/build-and-symbol-generation.png" alt="" width="830" height="577" /></a>This graph shows the time it takes each of the new machine specs to build and generate symbols as a percentage of time on the current machines.  The Quad-i7 is clearly the fastest of the new machine configurations.</p>
<h1>Cost</h1>
<p>While I don&#8217;t know what our actual pricing might be, I do know what each of these configurations costs retail.  Below is a graph of how much each minute of time saved from the compile step costs.  In case we get discounts, I have included the costs adjusted for 5%, 10% and 15% discounts.</p>
<p><a href="http://blog.johnford.info/wp-content/uploads/2012/01/cost-of-each-minute-saved.png"><img class="aligncenter size-full wp-image-368" title="cost-of-each-minute-saved" src="http://blog.johnford.info/wp-content/uploads/2012/01/cost-of-each-minute-saved.png" alt="" width="793" height="577" /></a>The order of absolute number of minutes saved is Quad-i7, Dual-i7-SSD, Dual-i7-HD then Dual-i5-HD.  This graph does not take into account the cost of racking, networking, powering and cooling.  It also doesn&#8217;t take into account the throughput advantages of fast machines or wait time improvements of many slow machines.  This is for one single build, not counting any wait time.</p>
<h1>Conclusions</h1>
<p>The information above shows that the Quad Core i7 is faster than the all the dual core machines.  I think we should buy the Quad i7 with SSD, as evaluated.  We have work underway to improve the parallelism in the build system, which favours buying quad core.  The quad core is also the overall fastest machine by 10 to 20 minutes.  If we decide not to get the quad core, I think we should get the Dual i7 2.7GHz machine with a 7200rpm hard drive as the SSD adds significant cost in this configuration for minimal performance gain on dual core machines.</p>
<p>If you are a developer and understand Mac OS and want faster build times, please help fix <a title="Bug 715397" href="https://bugzilla.mozilla.org/show_bug.cgi?id=715397" target="_blank">bug 715397</a> so we can start making use of whatever faster build machines we end up buying.</p>
<h1>Further Tests</h1>
<p>There are a couple other tests that I think would give us useful information.  I don&#8217;t have time to test these right now, but I am interested in the results</p>
<ol>
<li>Using a Mac Pro and DistCC to optimize compile times</li>
<li>Use a mix of SSD and HD for OS, repo and objdir</li>
<li>16GB of memory in quad core minis</li>
<li>quad core minis with hard drives</li>
<li>effects on incremental builds</li>
</ol>
<p>Code and data available on <a href="https://github.com/jhford/mozilla-build-benchmarks">GitHub</a>.</p>
<p>[1] Yesterday, we built it nearly 2400 times<br />
[2] http://support.apple.com/kb/sp7 + ram upgrade</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.johnford.org/new-mac-builders-ssds-j-settings/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Using OpenVPN to tunnel all traffic through my home server</title>
		<link>http://blog.johnford.org/openvpn-tunnel-to-home-server/</link>
		<comments>http://blog.johnford.org/openvpn-tunnel-to-home-server/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 07:25:09 +0000</pubDate>
		<dc:creator>John Ford</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.johnford.info/?p=339</guid>
		<description><![CDATA[I want to be able to send all my internet traffic to the Linux machine I have running in my apartment and I am not a networking expert. My motivation for this post is threefold; document my process for future &#8230; <a href="http://blog.johnford.org/openvpn-tunnel-to-home-server/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I want to be able to send all my internet traffic to the Linux machine I have running in my apartment and I am not a networking expert.  My motivation for this post is threefold; document my process for future reference, share my info and see if people have suggestions for how to do this better.  I am not going to go through every option, just what I did and what worked for me.</p>
<p>The next step was to figure out what I needed to do.  I decided on using openvpn because I already use it for work and because it&#8217;s open source.  I found the <a href="http://openvpn.net/index.php/open-source/documentation/howto.html">how-to document</a> on the openvpn site to be really useful.  I am using Fedora, so I skipped the section on installing openvpn from source and ran &#8220;<code>sudo yum install openvpn</code>&#8220;.  My next step was to copy the pki support files into a directory by running &#8220;<code>cp -r /usr/share/openvpn/easy-rsa/2.0/* .</code>&#8220;.  I then followed the <a href="http://openvpn.net/index.php/open-source/documentation/howto.html#pki">directions</a> for generating the pki infrastructure.</p>
<p>For this to work you need an open port on your server.  I used the openvpn standard of 1194.  I tested that the port was open with netcat by running &#8220;<code>nc -l 1194</code>&#8221; on my server and &#8220;<code>nc server.name 1194</code>&#8220;.  Writing on either terminal will show the output on the other on EOL.</p>
<p>At this point, I needed to set up the server configuration.  I copied the sample config file to my directory by running &#8220;<code>cp cp /usr/share/doc/openvpn-2.1.4/sample-config-files/server.conf server.conf</code>&#8220;.  I found that the sample server config file seemed to work great for me with the following changes:
<pre>
diff -U0 sample-config-files/server.conf config/server.conf
--- sample-config-files/server.conf	2011-12-12 21:43:31.000000000 -0800
+++ config/server.conf	2011-12-12 22:16:46.000000000 -0800
@@ -196,0 +197,2 @@
+push "dhcp-option DNS 0.0.0.0"
+push "dhcp-option DNS 0.0.0.0"
@@ -204 +206 @@
-;client-to-client
+client-to-client
</pre>
<p>The first change pushes DNS servers to my client (fake ips, obviously) and the second change is to allow different clients to talk to each other.  I am not sure how useful the inter-client link will end up being.</p>
<p>I am using the Viscosity client because that&#8217;s the only sane way to do this on OS X and Windows.  Sending all traffic over the vpn link is the default behaviour for Network Manager (Linux).  I started with the sample by running &#8220;<code>cp /usr/share/doc/openvpn-2.1.4/sample-config-files/client.conf .</code>&#8220;.  My changes where pretty basic:
<pre>
diff -U0 sample-client.conf client.conf
--- sample-client.conf	2011-12-12 22:43:11.000000000 -0800
+++ client.conf	2011-12-12 21:49:17.000000000 -0800
@@ -42 +42 @@
-remote my-server-1 1194
+remote server.name 1194
@@ -89,2 +89,2 @@
-cert client.crt
-key client.key
+cert laptop.crt
+key laptop.key</pre>
<p>At this point, the client side configuration was ready to transfer, so I tarred up the needed files with:
<pre>
mkdir ovpn-configs
cp keys/ca.crt keys/laptop.crt keys/laptop.key client.conf ovpn-configs/
tar jcf laptop-openvpn-config.tar.bz2 ovpn-configs</pre>
<p>and used scp to transfer the files over to my laptop.</p>
<p>Once on my laptop, I untarred the files and imported the configuration into Viscosity.  I did this by:
<ul>
<li>clicking on Viscosity menu icon then selecting preferences</li>
<li>clicking on plus arrow with down, selecting &#8220;import connection&#8221; then selecting &#8220;from file&#8221;</li>
<li>selected the client.conf file from the tarball</li>
</ul>
<p>Next, I configured all my traffic to go over vpn.  I selected the &#8220;client&#8221; configuration from the list of configurations and pressed the &#8220;edit&#8221; button.  In the sheet, I navigated to the &#8220;networking&#8221; tab and checked the box for &#8220;send all traffic over VPN connection&#8221;.  My client side configuration was complete.</p>
<p>At this stage, I tested that my machine was able to connect to my openvpn server.  I gathered the various files needed for the openvpn server into a single directory:
<pre>
mkdir ~/openvpn-server/
cp keys/* ~/openvpn-server #lazy
cp server.conf ~/openvpn-server</pre>
<p>and started the server with &#8220;<code>cd ~/openvpn-server &#038;&#038; sudo openvpn server.conf</code>&#8220;.  I connected using viscosity to the server.  The client connected properly, but I was unable to resolve anything on dns or reach anything other than my openvpn server.  Reading the openvpn howto suggested setting up a NAT.  I did some searching and found a <a href="http://www.revsys.com/writings/quicktips/nat.html">page</a> with information on setting up the NAT.  I did:
<pre>
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT</pre>
<p>At this point, everything worked!  I ran traceroute, and the first hop was my vpn server&#8217;s vpn address (10.8.0.1).  I also used some websites to check my public IP and it was showing as my server&#8217;s IP.</p>
<p>I hope this is useful to others.  If I&#8217;ve done something really dumb, I&#8217;d appreciate any suggestions for how to do it better!  I have left out information about how to start the openvpn service on boot.  This isn&#8217;t really important to me right now but if I ever bother with it, I&#8217;ll update this blog post.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.johnford.org/openvpn-tunnel-to-home-server/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A *useful* IRC channel for discussions about Release Engineering and its systems</title>
		<link>http://blog.johnford.org/a-useful-irc-channel-for-discussions-about-release-engineering-and-its-systems/</link>
		<comments>http://blog.johnford.org/a-useful-irc-channel-for-discussions-about-release-engineering-and-its-systems/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 23:25:32 +0000</pubDate>
		<dc:creator>John Ford</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://blog.johnford.info/?p=334</guid>
		<description><![CDATA[At some point or another, I am sure that every code contributor has had a question about Release Engineering or the systems we run. The best place for this should have been #build. Instead, these discussions end up happening in &#8230; <a href="http://blog.johnford.org/a-useful-irc-channel-for-discussions-about-release-engineering-and-its-systems/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>At some point or another, I am sure that every code contributor has had a question about Release Engineering or the systems we run.  The best place for this should have been #build.  Instead, these discussions end up happening in various other channels because of the barrage of alerts from nagios.  To put some approximate numbers on it, in 5 months, we had 69,000 messages in #build.  Of these, 42,000 were messages from or to nagios.  This makes it very difficult to have a conversation in #build.</p>
<p>To fix this, we have created #buildduty.  This channel is specifically for nagios alerts and buildduty queries.  The work to switch nagios to point to #buildduty is being tracked by <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=700817">bug 700817</a>.  Once this is done, #build should become a useful collaboration point for all things Release Engineering.<!-- Numbers:<br />
[jhford@johnford log]$ grep "] <nagios-sjc1> &#8221; \#build_* | wc -l<br />
41241<br />
[jhford@johnford log]$ grep &#8220;] <.*> &#8221; \#build_* | wc -l<br />
67758<br />
[jhford@johnford log]$ grep &#8220;] \* &#8221; \#build_* | wc -l<br />
1037<br />
grep &#8220;\] <.*> &#8221; \#build_* | grep -v &#8220;] <nagios-.*> &#8221; | grep &#8220;nagios.sjc1:&#8221; | wc -l<br />
625<br />
&#8211;></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.johnford.org/a-useful-irc-channel-for-discussions-about-release-engineering-and-its-systems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac OS X 10.7 Lion testing machines now online</title>
		<link>http://blog.johnford.org/mac-os-x-10-7-lion-testing-machines-now-online/</link>
		<comments>http://blog.johnford.org/mac-os-x-10-7-lion-testing-machines-now-online/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 22:35:16 +0000</pubDate>
		<dc:creator>John Ford</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://blog.johnford.info/?p=326</guid>
		<description><![CDATA[As of this morning, we now have tests running on Mac OS X 10.7. These machines are running the same spec hardware as our new Rev4 Mac OS X 10.6 machines. There are some consistent oranges as mentioned here. Sadly, &#8230; <a href="http://blog.johnford.org/mac-os-x-10-7-lion-testing-machines-now-online/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As of this morning, we now have tests running on Mac OS X 10.7.  These machines are running the same spec hardware as our new Rev4 Mac OS X 10.6 machines.  There are some consistent oranges as mentioned <a href="http://groups.google.com/group/mozilla.dev.platform/browse_thread/thread/3d244243668fd7ad/b78803b0e82017a1" title="dev-platform thread">here</a>.  Sadly, the list of failing tests was moderated and never acted on.  The list can be found <a href='http://blog.johnford.info/wp-content/uploads/2011/11/lion-failures.txt'>here</a>.</p>
<p>Until <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=700429" title="bug 700429">bug 700429</a> is resolved, all of these tests are hidden on all trees.  Once that bug is resolved, we will begin to show the green tests.  In the meantime, please feel free to check out how things look using noignore and jobname on tbpl.  I have been using &#8220;<a href="https://tbpl.mozilla.org/?noignore=1&#038;jobname=lion">https://tbpl.mozilla.org/?noignore=1&#038;jobname=lion</a>&#8220;.</p>
<p><a href="http://blog.johnford.info/wp-content/uploads/2011/11/Screen-shot-2011-11-07-at-2.31.44-PM.png"><img src="http://blog.johnford.info/wp-content/uploads/2011/11/Screen-shot-2011-11-07-at-2.31.44-PM.png" alt="results from a standard lion push" title="Sample TBPL push result" width="456" height="56" class="aligncenter size-full wp-image-330" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.johnford.org/mac-os-x-10-7-lion-testing-machines-now-online/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Screenshots on OS X timeouts</title>
		<link>http://blog.johnford.org/screenshots-on-os-x-timeouts/</link>
		<comments>http://blog.johnford.org/screenshots-on-os-x-timeouts/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 17:20:50 +0000</pubDate>
		<dc:creator>John Ford</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.johnford.info/?p=319</guid>
		<description><![CDATA[As of the mozilla-inbound merge this morning, any time automation.py based tests timeout or crash, a screenshot will be base64 encoded and dumped into the test log on OS X. We&#8217;ve had this support for a while on Linux and &#8230; <a href="http://blog.johnford.org/screenshots-on-os-x-timeouts/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As of the mozilla-inbound merge this morning, any time automation.py based tests timeout or crash, a screenshot will be base64 encoded and dumped into the test log on OS X.  We&#8217;ve had this support for a while on Linux and I have matched the output format.  In case you aren&#8217;t familiar with this, your logs will print out something that looks like:</p>
<pre>8217 ERROR TEST-UNEXPECTED-FAIL | /tests/toolkit/content/tests/widgets/test_videocontrols.html | Test timed out.
args: ['/usr/sbin/screencapture', '-C', '-x', '-t', 'png', '/var/folders/Hs/HsDn6a9SG8idoIya6p9mtE+++TI/-Tmp-/mozilla-test-fail_k9Dpdz']
SCREENSHOT: data:image/png;base64,iVBORw0.....</pre>
<p>If you want to see this image, copy everything from &#8216;data:image&#8217;, inclusive, to the end of line and paste it into your browser&#8217;s awesome bar.</p>
<p>In case you want to see what this looks like in the wild, <a href="https://tbpl.mozilla.org/php/getParsedLog.php?id=7171207&#038;full=1&#038;branch=mozilla-inbound#error0" title="sample log with screenshot">here</a> is a sample log with a screenshot.</p>
<p>I am working on getting this enabled on windows as well.  My automation.py.in changes should easily support the win32 screenshot utility written by Ted in <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=414049" title="bug 414049">bug 414049</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.johnford.org/screenshots-on-os-x-timeouts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Disabling PGO for the majority of Firefox Builds.</title>
		<link>http://blog.johnford.org/disabling-pgo-for-the-majority-of-firefox-builds/</link>
		<comments>http://blog.johnford.org/disabling-pgo-for-the-majority-of-firefox-builds/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 17:34:30 +0000</pubDate>
		<dc:creator>John Ford</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.johnford.info/?p=308</guid>
		<description><![CDATA[This project has been discussed in a dev.planning thread, with the work being tracked in bug 658313.  We are going to be turning off PGO for incremental builds on all branches[1] on Wednesday, October 5, 2011.  In the exceedingly rare &#8230; <a href="http://blog.johnford.org/disabling-pgo-for-the-majority-of-firefox-builds/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This project has been discussed in <a title="a dev.planning thread" href="http://groups.google.com/group/mozilla.dev.planning/browse_thread/thread/39f384e288c6ddc2/4762a40a95ee6494?lnk=gst&amp;q=PGO+Build+Proposal#4762a40a95ee6494" target="_blank">a dev.planning thread</a>, with the work being tracked in <a title="bug 658313" href="https://bugzilla.mozilla.org/show_bug.cgi?id=658313" target="_blank">bug 658313</a>.  We are going to be turning off PGO for incremental builds on all branches[1] on Wednesday, October 5, 2011.  In the exceedingly rare chance that you don&#8217;t read every single bug comment and dev.planning thread post, here is what will change:</p>
<ul>
<li>Builds triggered as part of a push will not have PGO enabled on any platform</li>
<li>We will be producing builds every four hours with PGO enabled on Windows and Linux for the following branches:</li>
<ul>
<li>Mozilla-Inbound</li>
<li>Mozilla-Central</li>
<li>Mozilla-Aurora</li>
<li>Mozilla-Beta</li>
</ul>
<li>All nightlies produced for platforms we ship PGO enabled (linux, windows) will have PGO on for the nightly build</li>
<li>Platforms that we ship with PGO enabled will have their PGO talos results report to the current graphserver branch.  This includes nightlies and the new 4-hourly builds</li>
<li>Platforms that we ship with PGO enabled will have their non-PGO talos results to a &#8216;-Non-PGO&#8217; suffixed branch, e.g. Firefox-Non-PGO</li>
<li>Platforms that we <strong>do not</strong> ship with PGO enabled will report both per-push builds and nightlies  to the current graphserver branch</li>
<li><a title="tbpl" href="https://tbpl.mozilla.org/" target="_blank">TBPL</a> was modified in <a title="bug 670037" href="https://bugzilla.mozilla.org/show_bug.cgi?id=670037" target="_blank">bug 670037</a> to make PGO builds special.  The deployment of these changes is being tracked in <a title="bug 691550" href="https://bugzilla.mozilla.org/show_bug.cgi?id=691550" target="_blank">bug 691550</a>.  If this TBPL change isn&#8217;t deployed before we start generating PGO builds, you might see duplicate build and test entries</li>
<li>Yes, we plan to teach try chooser how to optionally do PGO.  For now, please include &#8216;mk_add_options MOZ_PGO=1&#8242;  in your PGO platform&#8217;s mozconfig-extra-$platform file if you wish to have PGO enabled for try.  Your results will be on the Try branch  in graphserver.  This work is being tracked in <a title="bug 691673" href="https://bugzilla.mozilla.org/show_bug.cgi?id=691673" target="_blank">bug 691673</a></li>
<li>Yes, we plan to optimize scheduling so that we only do a build if there has been a push in the previous four hours.  This might allow us to add PGO builds on more branches and is tracked in <a title="bug 691675" href="https://bugzilla.mozilla.org/show_bug.cgi?id=691675" target="_blank">bug 691675</a></li>
</ul>
<p>The motivation for this project is to get results to developers quicker.  It is felt that this reduction in PGO coverage is a safe optimization because there have been very few PGO related bugs found so far.</p>
<p>If you have any concerns, please contact me.  I am jhford in #build on irc.mozilla.org</p>
<p>[1] Well, all active development branches.  We are leaving PGO on for Win32 on branches older than Firefox 5, like mozilla-1.9.2</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.johnford.org/disabling-pgo-for-the-majority-of-firefox-builds/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>New hardware for testing Mac OS X 10.6</title>
		<link>http://blog.johnford.org/new-hardware-for-testing-mac-os-x-10-6/</link>
		<comments>http://blog.johnford.org/new-hardware-for-testing-mac-os-x-10-6/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 17:33:00 +0000</pubDate>
		<dc:creator>John Ford</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.johnford.info/?p=313</guid>
		<description><![CDATA[A while ago, we decided that we needed to expand our pool of machines to test Firefox on.  We are just about done getting the new 10.6 machines ready for production!  The machines we will be enabling are MacMini4,1 spec. &#8230; <a href="http://blog.johnford.org/new-hardware-for-testing-mac-os-x-10-6/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A while ago, we decided that we needed to expand our pool of machines to test Firefox on.  We are just about done getting the new 10.6 machines ready for production!  The machines we will be enabling are MacMini4,1 spec.  Internally, we are calling them &#8216;Rev4&#8242; minis.</p>
<p>We won&#8217;t have all 80 of these minis ready for production right away, so we&#8217;ll start with ten.  Once we have 80 rev4 minis in production and every test suite is running reliably green on them, we will turn off the rev3 10.6 minis so they can be moved to other pools.  If there are suites that are orange, we will hide those results while we look into the failures.</p>
<p>In order to differentiate the talos results from these two different spec machines, we are creating a new platform on the graphserver.  When looking for data on graphserver, the platforms drop down will have two Mac OS X 10.6 options:</p>
<ul>
<li>MacOSX 10.6.2 (rev3)</li>
<li>MacOSX 10.6 (rev4)</li>
</ul>
<div>You should treat the &#8216;MacOSX 10.6.2 (rev3)&#8217; results as authoritative for the time being.  If you find any issues with the Rev4 machines that you feel should block us from turning off the Rev3 10.6 machines, please file a bug and have it block <a title="bug 683734" href="https://bugzilla.mozilla.org/show_bug.cgi?id=683734">bug 683734</a>.</div>
<div>Results should start showing up on TBPL some time after the changes are deployed on Wednesday, October 4, 2011.</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.johnford.org/new-hardware-for-testing-mac-os-x-10-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

