From anil@recoil.org Mon Sep 02 14:13:35 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VGTwl-0004l1-IW (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 02 Sep 2013 14:13:35 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1519251
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:37389
	helo=dark.recoil.org)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1VGTwk-0005Vs-9E (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 02 Sep 2013 14:13:35 +0100
Received: (qmail 15588 invoked by uid 634); 2 Sep 2013 13:13:34 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from no-dns-yet.demon.co.uk (HELO [192.168.14.19]) (62.49.66.12)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Mon, 02 Sep 2013 14:13:33 +0100
From: Anil Madhavapeddy <anil@recoil.org>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Subject: Fwd: [Xen-API] Introducing Open Source XenRT
Date: Mon, 2 Sep 2013 14:13:30 +0100
References: <D43103802360B147A3BAB085E3D078C125C1B3@AMSPEX01CL01.citrite.net>
To: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
Message-Id: <017572F9-F535-4136-945E-B1A821591637@recoil.org>
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 02 Sep 2013 13:13:35 -0000
Status: O
Content-Length: 3027
Lines: 75

This is the core engine that has driven all Xen testing for the last =
decade. Well worth investigating when our Mirage unit tests need more =
rigorous stress testing!

-anil

Begin forwarded message:

> From: Alex Brett <Alex.Brett@citrix.com>
> Subject: [Xen-API] Introducing Open Source XenRT
> Date: 2 September 2013 13:49:00 BST
> To: "xen-api@lists.xen.org" <xen-api@lists.xen.org>
>=20
> As a follow up activity to the open sourcing of XenServer, Citrix is =
pleased to announce the open sourcing of its automated test platform, =
XenRT.
>=20
> XenRT ("Xen Regression Test") is a test automation framework, written =
in Python, providing abstractions for the various components under test =
(pool, host, VM, storage, network etc). The library code which makes up =
these abstractions simplifies the process of writing tests, allowing =
quite complex operations to be performed in a single method call.
>=20
> In a full deployment, XenRT handles all aspects of the testing process =
- it will schedule a test job onto a host, bootstrap it (via DHCP/PXE), =
install the build to be tested, carry out the testing, and collect all =
necessary logs for troubleshooting, without any user interaction =
required.
>=20
> In addition to basic functional, regression, and stress testing, XenRT =
has suites of tests that are used for testing performance, scalability, =
and interoperability.
>=20
> Within Citrix, XenRT is used with a distributed lab comprised of an =
extremely wide range of hardware, and is developed and maintained by a =
team of some 25 developers. Tests are also written and executed directly =
by the wider XenServer engineering team, in a true "Test-as-a-Service" =
platform - see =
http://blogs.citrix.com/2013/08/30/xenserver-automated-testing-and-lab-orc=
hestration-introducing-xenrt/ for more information.
>=20
> XenRT has been open sourced to leverage Citrix's experience and =
resources in test automation to help improve the quality of open source =
Xen and XenServer releases, to benefit the entire community.
>=20
> To get started with XenRT, follow the links below to the code and a =
README document (which contains getting started instructions - further =
documentation will follow in the near future). For discussion a mailing =
list has been created - information about this can be found at =
https://lists.xenserver.org/sympa/info/xenrt-users
>=20
>=20
> README document:
> http://downloadns.citrix.com.edgesuite.net/akdlm/8169/README
>=20
> Main XenRT tarball:
> http://downloadns.citrix.com.edgesuite.net/akdlm/8168/xenrt.tgz
>=20
> Third party test resource tarball:
> http://downloadns.citrix.com.edgesuite.net/akdlm/8169/tests.tgz
>=20
> Source for third party resources (not required for normal operation):
> http://downloadns.citrix.com.edgesuite.net/akdlm/8169/tests-source.tgz
>=20
> Kind Regards,
> Alex Brett
>=20
>=20
> _______________________________________________
> Xen-api mailing list
> Xen-api@lists.xen.org
> http://lists.xen.org/cgi-bin/mailman/listinfo/xen-api
>=20



From lars.kurth.xen@gmail.com Mon Sep 02 15:10:28 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VGUpo-00079Y-0w (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Mon, 02 Sep 2013 15:10:28 +0100
X-Cam-SpamDetails: score -0.6 from SpamAssassin-3.3.2-1519251 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.214.53 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (lars.kurth.xen[at]gmail.com)
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-bk0-f53.google.com ([209.85.214.53]:39591)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VGUpn-0007LA-0b (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Mon, 02 Sep 2013 15:10:28 +0100
Received: by mail-bk0-f53.google.com with SMTP id d7so1603706bkh.40
	for <cl-mirage@lists.cam.ac.uk>; Mon, 02 Sep 2013 07:10:26 -0700 (PDT)
X-Received: by 10.204.121.201 with SMTP id i9mr17616531bkr.13.1378131026772;
	Mon, 02 Sep 2013 07:10:26 -0700 (PDT)
Received: from [172.16.26.11] ([90.212.146.115])
	by mx.google.com with ESMTPSA id pw1sm1702803bkb.8.1969.12.31.16.00.00
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Mon, 02 Sep 2013 07:10:26 -0700 (PDT)
Sender: Lars Kurth <lars.kurth.xen@gmail.com>
Message-ID: <52249C4F.8090800@xen.org>
Date: Mon, 02 Sep 2013 15:10:23 +0100
From: Lars Kurth <lars.kurth@xen.org>
User-Agent: Mozilla/5.0 (Windows NT 6.1;
	rv:17.0) Gecko/20130801 Thunderbird/17.0.8
MIME-Version: 1.0
To: cl-mirage@lists.cam.ac.uk
Subject: Re: Fwd: [Xen-API] Introducing Open Source XenRT
References: <D43103802360B147A3BAB085E3D078C125C1B3@AMSPEX01CL01.citrite.net>
	<017572F9-F535-4136-945E-B1A821591637@recoil.org>
In-Reply-To: <017572F9-F535-4136-945E-B1A821591637@recoil.org>
Content-Type: multipart/alternative;
	boundary="------------070007030309010108000209"
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
Reply-To: lars.kurth@xen.org
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 02 Sep 2013 14:10:28 -0000
Status: O
Content-Length: 9417
Lines: 160

This is a multi-part message in MIME format.
--------------070007030309010108000209
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

For your information: XenRT is also very likely to become the test 
(as-a-service) framework for the Xen Project overall. See minutes of the 
last Advisory Board Meeting 
(http://wiki.xenproject.org/wiki/AB_Meeting/August_2013_Minutes). Next 
steps will be for the Test Framework Committee to have its first 
meeting, decide whether XenRT is suitable for Hypervisor testing 
(besides XenServer testing) and figure out how to move forward with 
implementation.
Lars

On 02/09/2013 14:13, Anil Madhavapeddy wrote:
> This is the core engine that has driven all Xen testing for the last decade. Well worth investigating when our Mirage unit tests need more rigorous stress testing!
>
> -anil
>
> Begin forwarded message:
>
>> From: Alex Brett <Alex.Brett@citrix.com>
>> Subject: [Xen-API] Introducing Open Source XenRT
>> Date: 2 September 2013 13:49:00 BST
>> To: "xen-api@lists.xen.org" <xen-api@lists.xen.org>
>>
>> As a follow up activity to the open sourcing of XenServer, Citrix is pleased to announce the open sourcing of its automated test platform, XenRT.
>>
>> XenRT ("Xen Regression Test") is a test automation framework, written in Python, providing abstractions for the various components under test (pool, host, VM, storage, network etc). The library code which makes up these abstractions simplifies the process of writing tests, allowing quite complex operations to be performed in a single method call.
>>
>> In a full deployment, XenRT handles all aspects of the testing process - it will schedule a test job onto a host, bootstrap it (via DHCP/PXE), install the build to be tested, carry out the testing, and collect all necessary logs for troubleshooting, without any user interaction required.
>>
>> In addition to basic functional, regression, and stress testing, XenRT has suites of tests that are used for testing performance, scalability, and interoperability.
>>
>> Within Citrix, XenRT is used with a distributed lab comprised of an extremely wide range of hardware, and is developed and maintained by a team of some 25 developers. Tests are also written and executed directly by the wider XenServer engineering team, in a true "Test-as-a-Service" platform - see http://blogs.citrix.com/2013/08/30/xenserver-automated-testing-and-lab-orchestration-introducing-xenrt/ for more information.
>>
>> XenRT has been open sourced to leverage Citrix's experience and resources in test automation to help improve the quality of open source Xen and XenServer releases, to benefit the entire community.
>>
>> To get started with XenRT, follow the links below to the code and a README document (which contains getting started instructions - further documentation will follow in the near future). For discussion a mailing list has been created - information about this can be found at https://lists.xenserver.org/sympa/info/xenrt-users
>>
>>
>> README document:
>> http://downloadns.citrix.com.edgesuite.net/akdlm/8169/README
>>
>> Main XenRT tarball:
>> http://downloadns.citrix.com.edgesuite.net/akdlm/8168/xenrt.tgz
>>
>> Third party test resource tarball:
>> http://downloadns.citrix.com.edgesuite.net/akdlm/8169/tests.tgz
>>
>> Source for third party resources (not required for normal operation):
>> http://downloadns.citrix.com.edgesuite.net/akdlm/8169/tests-source.tgz
>>
>> Kind Regards,
>> Alex Brett
>>
>>
>> _______________________________________________
>> Xen-api mailing list
>> Xen-api@lists.xen.org
>> http://lists.xen.org/cgi-bin/mailman/listinfo/xen-api
>>
>


--------------070007030309010108000209
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">For your information: XenRT is also
      very likely to become the test (as-a-service) framework for the
      Xen Project overall. See minutes of the last Advisory Board
      Meeting (<a
        href="http://wiki.xenproject.org/wiki/AB_Meeting/August_2013_Minutes">http://wiki.xenproject.org/wiki/AB_Meeting/August_2013_Minutes</a>).
      Next steps will be for the <span style="color: rgb(0, 0, 0);
        font-family: Arial, sans-serif; font-size: 15px; font-style:
        normal; font-variant: normal; font-weight: normal;
        letter-spacing: normal; line-height: 22.859375px; orphans: auto;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: auto; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); display: inline !important; float: none;">Test Framework
        Committee</span> to have its first meeting, decide whether XenRT
      is suitable for Hypervisor testing (besides XenServer testing) and
      figure out how to move forward with implementation.&nbsp; <br>
      Lars<br>
      <br>
      On 02/09/2013 14:13, Anil Madhavapeddy wrote:<br>
    </div>
    <blockquote
      cite="mid:017572F9-F535-4136-945E-B1A821591637@recoil.org"
      type="cite">
      <pre wrap="">This is the core engine that has driven all Xen testing for the last decade. Well worth investigating when our Mirage unit tests need more rigorous stress testing!

-anil

Begin forwarded message:

</pre>
      <blockquote type="cite">
        <pre wrap="">From: Alex Brett <a class="moz-txt-link-rfc2396E" href="mailto:Alex.Brett@citrix.com">&lt;Alex.Brett@citrix.com&gt;</a>
Subject: [Xen-API] Introducing Open Source XenRT
Date: 2 September 2013 13:49:00 BST
To: <a class="moz-txt-link-rfc2396E" href="mailto:xen-api@lists.xen.org">"xen-api@lists.xen.org"</a> <a class="moz-txt-link-rfc2396E" href="mailto:xen-api@lists.xen.org">&lt;xen-api@lists.xen.org&gt;</a>

As a follow up activity to the open sourcing of XenServer, Citrix is pleased to announce the open sourcing of its automated test platform, XenRT.

XenRT ("Xen Regression Test") is a test automation framework, written in Python, providing abstractions for the various components under test (pool, host, VM, storage, network etc). The library code which makes up these abstractions simplifies the process of writing tests, allowing quite complex operations to be performed in a single method call.

In a full deployment, XenRT handles all aspects of the testing process - it will schedule a test job onto a host, bootstrap it (via DHCP/PXE), install the build to be tested, carry out the testing, and collect all necessary logs for troubleshooting, without any user interaction required.

In addition to basic functional, regression, and stress testing, XenRT has suites of tests that are used for testing performance, scalability, and interoperability.

Within Citrix, XenRT is used with a distributed lab comprised of an extremely wide range of hardware, and is developed and maintained by a team of some 25 developers. Tests are also written and executed directly by the wider XenServer engineering team, in a true "Test-as-a-Service" platform - see <a class="moz-txt-link-freetext" href="http://blogs.citrix.com/2013/08/30/xenserver-automated-testing-and-lab-orchestration-introducing-xenrt/">http://blogs.citrix.com/2013/08/30/xenserver-automated-testing-and-lab-orchestration-introducing-xenrt/</a> for more information.

XenRT has been open sourced to leverage Citrix's experience and resources in test automation to help improve the quality of open source Xen and XenServer releases, to benefit the entire community.

To get started with XenRT, follow the links below to the code and a README document (which contains getting started instructions - further documentation will follow in the near future). For discussion a mailing list has been created - information about this can be found at <a class="moz-txt-link-freetext" href="https://lists.xenserver.org/sympa/info/xenrt-users">https://lists.xenserver.org/sympa/info/xenrt-users</a>


README document:
<a class="moz-txt-link-freetext" href="http://downloadns.citrix.com.edgesuite.net/akdlm/8169/README">http://downloadns.citrix.com.edgesuite.net/akdlm/8169/README</a>

Main XenRT tarball:
<a class="moz-txt-link-freetext" href="http://downloadns.citrix.com.edgesuite.net/akdlm/8168/xenrt.tgz">http://downloadns.citrix.com.edgesuite.net/akdlm/8168/xenrt.tgz</a>

Third party test resource tarball:
<a class="moz-txt-link-freetext" href="http://downloadns.citrix.com.edgesuite.net/akdlm/8169/tests.tgz">http://downloadns.citrix.com.edgesuite.net/akdlm/8169/tests.tgz</a>

Source for third party resources (not required for normal operation):
<a class="moz-txt-link-freetext" href="http://downloadns.citrix.com.edgesuite.net/akdlm/8169/tests-source.tgz">http://downloadns.citrix.com.edgesuite.net/akdlm/8169/tests-source.tgz</a>

Kind Regards,
Alex Brett


_______________________________________________
Xen-api mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Xen-api@lists.xen.org">Xen-api@lists.xen.org</a>
<a class="moz-txt-link-freetext" href="http://lists.xen.org/cgi-bin/mailman/listinfo/xen-api">http://lists.xen.org/cgi-bin/mailman/listinfo/xen-api</a>

</pre>
      </blockquote>
      <pre wrap="">

</pre>
    </blockquote>
    <br>
  </body>
</html>

--------------070007030309010108000209--


From anil@recoil.org Mon Sep 02 15:16:12 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VGUvM-0007SY-6A (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 02 Sep 2013 15:16:12 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1519251
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:12215
	helo=dark.recoil.org)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1VGUvL-0001N4-16 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 02 Sep 2013 15:16:12 +0100
Received: (qmail 29906 invoked by uid 634); 2 Sep 2013 14:16:11 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from no-dns-yet.demon.co.uk (HELO [192.168.14.19]) (62.49.66.12)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Mon, 02 Sep 2013 15:16:10 +0100
Content-Type: text/plain; charset=iso-8859-1
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: [Xen-API] Introducing Open Source XenRT
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <52249C4F.8090800@xen.org>
Date: Mon, 2 Sep 2013 15:16:05 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <92F70E12-3593-4B2A-84C9-853A26291345@recoil.org>
References: <D43103802360B147A3BAB085E3D078C125C1B3@AMSPEX01CL01.citrite.net>
	<017572F9-F535-4136-945E-B1A821591637@recoil.org>
	<52249C4F.8090800@xen.org>
To: lars.kurth@xen.org
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 02 Sep 2013 14:16:12 -0000
Status: O
Content-Length: 4494
Lines: 126

That's very useful indeed.  I can confirm from past experience with =
XenRT that it will definitely be suitable for the bulk of Mirage =
testing. I'd be surprised if XenRT isn't suitable for use with the OSS =
hypervisor (since it's always had OSS tests, followed by XenServer tests =
since 2006-2007 or so).

What's the best way to get involved with the conversation about the =
test-as-a-service platform?  That's definitely the right direction to go =
for us, since we don't have the resources to manage our own XenRT =
installation, but can definitely submit test cases and triage the =
results.

cheers,
Anil=20

On 2 Sep 2013, at 15:10, Lars Kurth <lars.kurth@xen.org> wrote:

> For your information: XenRT is also very likely to become the test =
(as-a-service) framework for the Xen Project overall. See minutes of the =
last Advisory Board Meeting =
(http://wiki.xenproject.org/wiki/AB_Meeting/August_2013_Minutes). Next =
steps will be for the Test Framework Committee to have its first =
meeting, decide whether XenRT is suitable for Hypervisor testing =
(besides XenServer testing) and figure out how to move forward with =
implementation. =20
> Lars
>=20
> On 02/09/2013 14:13, Anil Madhavapeddy wrote:
>> This is the core engine that has driven all Xen testing for the last =
decade. Well worth investigating when our Mirage unit tests need more =
rigorous stress testing!
>>=20
>> -anil
>>=20
>> Begin forwarded message:
>>=20
>>=20
>>> From: Alex Brett <Alex.Brett@citrix.com>
>>>=20
>>> Subject: [Xen-API] Introducing Open Source XenRT
>>> Date: 2 September 2013 13:49:00 BST
>>> To:=20
>>> "xen-api@lists.xen.org" <xen-api@lists.xen.org>
>>>=20
>>>=20
>>> As a follow up activity to the open sourcing of XenServer, Citrix is =
pleased to announce the open sourcing of its automated test platform, =
XenRT.
>>>=20
>>> XenRT ("Xen Regression Test") is a test automation framework, =
written in Python, providing abstractions for the various components =
under test (pool, host, VM, storage, network etc). The library code =
which makes up these abstractions simplifies the process of writing =
tests, allowing quite complex operations to be performed in a single =
method call.
>>>=20
>>> In a full deployment, XenRT handles all aspects of the testing =
process - it will schedule a test job onto a host, bootstrap it (via =
DHCP/PXE), install the build to be tested, carry out the testing, and =
collect all necessary logs for troubleshooting, without any user =
interaction required.
>>>=20
>>> In addition to basic functional, regression, and stress testing, =
XenRT has suites of tests that are used for testing performance, =
scalability, and interoperability.
>>>=20
>>> Within Citrix, XenRT is used with a distributed lab comprised of an =
extremely wide range of hardware, and is developed and maintained by a =
team of some 25 developers. Tests are also written and executed directly =
by the wider XenServer engineering team, in a true "Test-as-a-Service" =
platform - see=20
>>> =
http://blogs.citrix.com/2013/08/30/xenserver-automated-testing-and-lab-orc=
hestration-introducing-xenrt/
>>>  for more information.
>>>=20
>>> XenRT has been open sourced to leverage Citrix's experience and =
resources in test automation to help improve the quality of open source =
Xen and XenServer releases, to benefit the entire community.
>>>=20
>>> To get started with XenRT, follow the links below to the code and a =
README document (which contains getting started instructions - further =
documentation will follow in the near future). For discussion a mailing =
list has been created - information about this can be found at=20
>>> https://lists.xenserver.org/sympa/info/xenrt-users
>>>=20
>>>=20
>>>=20
>>> README document:
>>>=20
>>> http://downloadns.citrix.com.edgesuite.net/akdlm/8169/README
>>>=20
>>>=20
>>> Main XenRT tarball:
>>>=20
>>> http://downloadns.citrix.com.edgesuite.net/akdlm/8168/xenrt.tgz
>>>=20
>>>=20
>>> Third party test resource tarball:
>>>=20
>>> http://downloadns.citrix.com.edgesuite.net/akdlm/8169/tests.tgz
>>>=20
>>>=20
>>> Source for third party resources (not required for normal =
operation):
>>>=20
>>> =
http://downloadns.citrix.com.edgesuite.net/akdlm/8169/tests-source.tgz
>>>=20
>>>=20
>>> Kind Regards,
>>> Alex Brett
>>>=20
>>>=20
>>> _______________________________________________
>>> Xen-api mailing list
>>>=20
>>> Xen-api@lists.xen.org
>>> http://lists.xen.org/cgi-bin/mailman/listinfo/xen-api
>>>=20
>>>=20
>>>=20
>>=20
>=20



From lars.kurth.xen@gmail.com Mon Sep 02 16:11:43 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VGVn5-0001jS-C1 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Mon, 02 Sep 2013 16:11:43 +0100
X-Cam-SpamDetails: score -0.6 from SpamAssassin-3.3.2-1519251 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.214.52 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (lars.kurth.xen[at]gmail.com)
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-bk0-f52.google.com ([209.85.214.52]:52929)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1VGVn4-0007mH-hv (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Mon, 02 Sep 2013 16:11:43 +0100
Received: by mail-bk0-f52.google.com with SMTP id e11so1688157bkh.11
	for <cl-mirage@lists.cam.ac.uk>; Mon, 02 Sep 2013 08:11:42 -0700 (PDT)
X-Received: by 10.205.22.138 with SMTP id qw10mr2038023bkb.29.1378134702166;
	Mon, 02 Sep 2013 08:11:42 -0700 (PDT)
Received: from [172.16.26.11] ([90.212.146.115])
	by mx.google.com with ESMTPSA id h7sm2964499bki.9.1969.12.31.16.00.00
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Mon, 02 Sep 2013 08:11:37 -0700 (PDT)
Sender: Lars Kurth <lars.kurth.xen@gmail.com>
Message-ID: <5224AAA7.7050807@xen.org>
Date: Mon, 02 Sep 2013 16:11:35 +0100
From: Lars Kurth <lars.kurth@xen.org>
User-Agent: Mozilla/5.0 (Windows NT 6.1;
	rv:17.0) Gecko/20130801 Thunderbird/17.0.8
MIME-Version: 1.0
To: Anil Madhavapeddy <anil@recoil.org>
Subject: Re: [Xen-API] Introducing Open Source XenRT
References: <D43103802360B147A3BAB085E3D078C125C1B3@AMSPEX01CL01.citrite.net>
	<017572F9-F535-4136-945E-B1A821591637@recoil.org>
	<52249C4F.8090800@xen.org>
	<92F70E12-3593-4B2A-84C9-853A26291345@recoil.org>
In-Reply-To: <92F70E12-3593-4B2A-84C9-853A26291345@recoil.org>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
Reply-To: lars.kurth@xen.org
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 02 Sep 2013 15:11:43 -0000
Status: O
Content-Length: 4882
Lines: 89

Anil,
I am still trying to figure out the exact time-line, but assuming that 
everything goes OK. I would expect a discussion session at the Xen 
Project Dev Summit in Edinburgh to gather community feedback. The 
vendors in the Advisory Board (who would fund the test infrastructure) 
will have quite a bit of influence over the final shape of the system 
(where hosted, what hardware, etc.), but they already made clear that 
anybody in the community must be able to add test cases.
Lars

On 02/09/2013 15:16, Anil Madhavapeddy wrote:
> That's very useful indeed.  I can confirm from past experience with XenRT that it will definitely be suitable for the bulk of Mirage testing. I'd be surprised if XenRT isn't suitable for use with the OSS hypervisor (since it's always had OSS tests, followed by XenServer tests since 2006-2007 or so).
>
> What's the best way to get involved with the conversation about the test-as-a-service platform?  That's definitely the right direction to go for us, since we don't have the resources to manage our own XenRT installation, but can definitely submit test cases and triage the results.
>
> cheers,
> Anil
>
> On 2 Sep 2013, at 15:10, Lars Kurth <lars.kurth@xen.org> wrote:
>
>> For your information: XenRT is also very likely to become the test (as-a-service) framework for the Xen Project overall. See minutes of the last Advisory Board Meeting (http://wiki.xenproject.org/wiki/AB_Meeting/August_2013_Minutes). Next steps will be for the Test Framework Committee to have its first meeting, decide whether XenRT is suitable for Hypervisor testing (besides XenServer testing) and figure out how to move forward with implementation.
>> Lars
>>
>> On 02/09/2013 14:13, Anil Madhavapeddy wrote:
>>> This is the core engine that has driven all Xen testing for the last decade. Well worth investigating when our Mirage unit tests need more rigorous stress testing!
>>>
>>> -anil
>>>
>>> Begin forwarded message:
>>>
>>>
>>>> From: Alex Brett <Alex.Brett@citrix.com>
>>>>
>>>> Subject: [Xen-API] Introducing Open Source XenRT
>>>> Date: 2 September 2013 13:49:00 BST
>>>> To:
>>>> "xen-api@lists.xen.org" <xen-api@lists.xen.org>
>>>>
>>>>
>>>> As a follow up activity to the open sourcing of XenServer, Citrix is pleased to announce the open sourcing of its automated test platform, XenRT.
>>>>
>>>> XenRT ("Xen Regression Test") is a test automation framework, written in Python, providing abstractions for the various components under test (pool, host, VM, storage, network etc). The library code which makes up these abstractions simplifies the process of writing tests, allowing quite complex operations to be performed in a single method call.
>>>>
>>>> In a full deployment, XenRT handles all aspects of the testing process - it will schedule a test job onto a host, bootstrap it (via DHCP/PXE), install the build to be tested, carry out the testing, and collect all necessary logs for troubleshooting, without any user interaction required.
>>>>
>>>> In addition to basic functional, regression, and stress testing, XenRT has suites of tests that are used for testing performance, scalability, and interoperability.
>>>>
>>>> Within Citrix, XenRT is used with a distributed lab comprised of an extremely wide range of hardware, and is developed and maintained by a team of some 25 developers. Tests are also written and executed directly by the wider XenServer engineering team, in a true "Test-as-a-Service" platform - see
>>>> http://blogs.citrix.com/2013/08/30/xenserver-automated-testing-and-lab-orchestration-introducing-xenrt/
>>>>   for more information.
>>>>
>>>> XenRT has been open sourced to leverage Citrix's experience and resources in test automation to help improve the quality of open source Xen and XenServer releases, to benefit the entire community.
>>>>
>>>> To get started with XenRT, follow the links below to the code and a README document (which contains getting started instructions - further documentation will follow in the near future). For discussion a mailing list has been created - information about this can be found at
>>>> https://lists.xenserver.org/sympa/info/xenrt-users
>>>>
>>>>
>>>>
>>>> README document:
>>>>
>>>> http://downloadns.citrix.com.edgesuite.net/akdlm/8169/README
>>>>
>>>>
>>>> Main XenRT tarball:
>>>>
>>>> http://downloadns.citrix.com.edgesuite.net/akdlm/8168/xenrt.tgz
>>>>
>>>>
>>>> Third party test resource tarball:
>>>>
>>>> http://downloadns.citrix.com.edgesuite.net/akdlm/8169/tests.tgz
>>>>
>>>>
>>>> Source for third party resources (not required for normal operation):
>>>>
>>>> http://downloadns.citrix.com.edgesuite.net/akdlm/8169/tests-source.tgz
>>>>
>>>>
>>>> Kind Regards,
>>>> Alex Brett
>>>>
>>>>
>>>> _______________________________________________
>>>> Xen-api mailing list
>>>>
>>>> Xen-api@lists.xen.org
>>>> http://lists.xen.org/cgi-bin/mailman/listinfo/xen-api



From anil@recoil.org Mon Sep 02 16:18:08 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VGVtI-0001wq-Ja (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 02 Sep 2013 16:18:08 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1519251
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:34020
	helo=dark.recoil.org)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1VGVtH-0000Jt-2U (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 02 Sep 2013 16:18:08 +0100
Received: (qmail 1941 invoked by uid 634); 2 Sep 2013 15:18:07 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from no-dns-yet.demon.co.uk (HELO [192.168.14.19]) (62.49.66.12)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Mon, 02 Sep 2013 16:18:06 +0100
Content-Type: text/plain; charset=iso-8859-1
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: [Xen-API] Introducing Open Source XenRT
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <5224AAA7.7050807@xen.org>
Date: Mon, 2 Sep 2013 16:18:04 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <F5613A65-0088-4746-9D1E-6BAC882120FA@recoil.org>
References: <D43103802360B147A3BAB085E3D078C125C1B3@AMSPEX01CL01.citrite.net>
	<017572F9-F535-4136-945E-B1A821591637@recoil.org>
	<52249C4F.8090800@xen.org>
	<92F70E12-3593-4B2A-84C9-853A26291345@recoil.org>
	<5224AAA7.7050807@xen.org>
To: lars.kurth@xen.org
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 02 Sep 2013 15:18:08 -0000
Status: O
Content-Length: 5595
Lines: 146

Lars,

This sounds ideal -- given we're gunning for a Oct 22nd release, we =
don't have time to integrate with XenRT before then anyway.  We can look =
at a hosted-XenRT as a longer term, more sustainable testing path, and =
continue with ad-hoc testing for our first release (which will the first =
of many, and doesn't need to be perfect!).

-anil

On 2 Sep 2013, at 16:11, Lars Kurth <lars.kurth@xen.org> wrote:

> Anil,
> I am still trying to figure out the exact time-line, but assuming that =
everything goes OK. I would expect a discussion session at the Xen =
Project Dev Summit in Edinburgh to gather community feedback. The =
vendors in the Advisory Board (who would fund the test infrastructure) =
will have quite a bit of influence over the final shape of the system =
(where hosted, what hardware, etc.), but they already made clear that =
anybody in the community must be able to add test cases.
> Lars
>=20
> On 02/09/2013 15:16, Anil Madhavapeddy wrote:
>> That's very useful indeed.  I can confirm from past experience with =
XenRT that it will definitely be suitable for the bulk of Mirage =
testing. I'd be surprised if XenRT isn't suitable for use with the OSS =
hypervisor (since it's always had OSS tests, followed by XenServer tests =
since 2006-2007 or so).
>>=20
>> What's the best way to get involved with the conversation about the =
test-as-a-service platform?  That's definitely the right direction to go =
for us, since we don't have the resources to manage our own XenRT =
installation, but can definitely submit test cases and triage the =
results.
>>=20
>> cheers,
>> Anil
>>=20
>> On 2 Sep 2013, at 15:10, Lars Kurth <lars.kurth@xen.org> wrote:
>>=20
>>> For your information: XenRT is also very likely to become the test =
(as-a-service) framework for the Xen Project overall. See minutes of the =
last Advisory Board Meeting =
(http://wiki.xenproject.org/wiki/AB_Meeting/August_2013_Minutes). Next =
steps will be for the Test Framework Committee to have its first =
meeting, decide whether XenRT is suitable for Hypervisor testing =
(besides XenServer testing) and figure out how to move forward with =
implementation.
>>> Lars
>>>=20
>>> On 02/09/2013 14:13, Anil Madhavapeddy wrote:
>>>> This is the core engine that has driven all Xen testing for the =
last decade. Well worth investigating when our Mirage unit tests need =
more rigorous stress testing!
>>>>=20
>>>> -anil
>>>>=20
>>>> Begin forwarded message:
>>>>=20
>>>>=20
>>>>> From: Alex Brett <Alex.Brett@citrix.com>
>>>>>=20
>>>>> Subject: [Xen-API] Introducing Open Source XenRT
>>>>> Date: 2 September 2013 13:49:00 BST
>>>>> To:
>>>>> "xen-api@lists.xen.org" <xen-api@lists.xen.org>
>>>>>=20
>>>>>=20
>>>>> As a follow up activity to the open sourcing of XenServer, Citrix =
is pleased to announce the open sourcing of its automated test platform, =
XenRT.
>>>>>=20
>>>>> XenRT ("Xen Regression Test") is a test automation framework, =
written in Python, providing abstractions for the various components =
under test (pool, host, VM, storage, network etc). The library code =
which makes up these abstractions simplifies the process of writing =
tests, allowing quite complex operations to be performed in a single =
method call.
>>>>>=20
>>>>> In a full deployment, XenRT handles all aspects of the testing =
process - it will schedule a test job onto a host, bootstrap it (via =
DHCP/PXE), install the build to be tested, carry out the testing, and =
collect all necessary logs for troubleshooting, without any user =
interaction required.
>>>>>=20
>>>>> In addition to basic functional, regression, and stress testing, =
XenRT has suites of tests that are used for testing performance, =
scalability, and interoperability.
>>>>>=20
>>>>> Within Citrix, XenRT is used with a distributed lab comprised of =
an extremely wide range of hardware, and is developed and maintained by =
a team of some 25 developers. Tests are also written and executed =
directly by the wider XenServer engineering team, in a true =
"Test-as-a-Service" platform - see
>>>>> =
http://blogs.citrix.com/2013/08/30/xenserver-automated-testing-and-lab-orc=
hestration-introducing-xenrt/
>>>>>  for more information.
>>>>>=20
>>>>> XenRT has been open sourced to leverage Citrix's experience and =
resources in test automation to help improve the quality of open source =
Xen and XenServer releases, to benefit the entire community.
>>>>>=20
>>>>> To get started with XenRT, follow the links below to the code and =
a README document (which contains getting started instructions - further =
documentation will follow in the near future). For discussion a mailing =
list has been created - information about this can be found at
>>>>> https://lists.xenserver.org/sympa/info/xenrt-users
>>>>>=20
>>>>>=20
>>>>>=20
>>>>> README document:
>>>>>=20
>>>>> http://downloadns.citrix.com.edgesuite.net/akdlm/8169/README
>>>>>=20
>>>>>=20
>>>>> Main XenRT tarball:
>>>>>=20
>>>>> http://downloadns.citrix.com.edgesuite.net/akdlm/8168/xenrt.tgz
>>>>>=20
>>>>>=20
>>>>> Third party test resource tarball:
>>>>>=20
>>>>> http://downloadns.citrix.com.edgesuite.net/akdlm/8169/tests.tgz
>>>>>=20
>>>>>=20
>>>>> Source for third party resources (not required for normal =
operation):
>>>>>=20
>>>>> =
http://downloadns.citrix.com.edgesuite.net/akdlm/8169/tests-source.tgz
>>>>>=20
>>>>>=20
>>>>> Kind Regards,
>>>>> Alex Brett
>>>>>=20
>>>>>=20
>>>>> _______________________________________________
>>>>> Xen-api mailing list
>>>>>=20
>>>>> Xen-api@lists.xen.org
>>>>> http://lists.xen.org/cgi-bin/mailman/listinfo/xen-api
>=20
>=20



From amc79@cam.ac.uk Tue Sep 03 14:40:04 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VGqpw-00015V-Fq (Exim 4.70)
	(return-path <amc79@cam.ac.uk>); Tue, 03 Sep 2013 14:40:04 +0100
X-Cam-AntiVirus: no malware found
X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/
Received: from dhcp-172-17-152-179.eduroam.lapwing.private.cam.ac.uk
	([172.17.152.179]:50272)
	by ppsw-52.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.158]:587)
	with esmtpsa (PLAIN:amc79) (TLSv1:AES128-SHA:128)
	id 1VGqpw-00073o-EJ (Exim 4.80_167-5a66dd3)
	(return-path <amc79@cam.ac.uk>); Tue, 03 Sep 2013 14:40:04 +0100
From: Amir Chaudhry <amc79@cam.ac.uk>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
Subject: RESCHEDULED OCaml Labs Meeting - Tuesday 17th September at 4pm in the
	Computer Lab
Message-Id: <BAA6EB31-9893-4DF2-9863-B6D6941B4154@cam.ac.uk>
Date: Tue, 3 Sep 2013 14:40:04 +0100
To: "cl-ocamllabs@lists.cam.ac.uk" <cl-ocamllabs@lists.cam.ac.uk>,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
X-Mailer: Apple Mail (2.1508)
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 03 Sep 2013 13:40:04 -0000
Status: O
Content-Length: 489
Lines: 22

Dear all,

The rescheduled OCaml Labs meeting will take place on the 17th of =
September at 4pm in the Lab (Room FW26).

An agenda will be sent in advance of the meeting, which will cover the =
topics we are presenting at the OCaml Workshop in Boston.

Please do let me know if you will be attending.

-- Details --
OCaml Labs Meeting
17th September 2013
4pm =96 5pm
Room FW26 - Cambridge Computer Laboratory
William Gates Building
JJ Thomson Avenue
Cambridge CB3 0FD

Best wishes,
Amir=


From scott.dj@gmail.com Tue Sep 03 15:38:42 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VGrkg-0005c5-07 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Tue, 03 Sep 2013 15:38:42 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1519366 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.220.41 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (scott.dj[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-pa0-f41.google.com ([209.85.220.41]:52158)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VGrkf-0004kP-15 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Tue, 03 Sep 2013 15:38:41 +0100
Received: by mail-pa0-f41.google.com with SMTP id bj1so6538026pad.0
	for <cl-mirage@lists.cam.ac.uk>; Tue, 03 Sep 2013 07:38:40 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.66.162.167 with SMTP id yb7mr32874760pab.16.1378219120280;
	Tue, 03 Sep 2013 07:38:40 -0700 (PDT)
Received: by 10.70.56.36 with HTTP; Tue, 3 Sep 2013 07:38:40 -0700 (PDT)
Date: Tue, 3 Sep 2013 15:38:40 +0100
Message-ID: <CAG_esB14VaESwegzTi9vcwfH3jvhtC12qrB_XACwukiz4Ahvvg@mail.gmail.com>
Subject: mirage weekly call today (tuesday) 4pm BST
From: David Scott <scott.dj@gmail.com>
To: Mirage List <cl-mirage@lists.cam.ac.uk>
Content-Type: multipart/alternative; boundary=047d7bacbe7016492004e57ba56c
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 03 Sep 2013 14:38:42 -0000
Status: O
Content-Length: 1707
Lines: 47

--047d7bacbe7016492004e57ba56c
Content-Type: text/plain; charset=ISO-8859-1

Fellow Mirage hackers, now that Autumn is here (but Mirage still isn't),
join me on the Mirage weekly call today (tuesday) at 4pm BST!

1.  Please join my meeting.
https://www1.gotomeeting.com/join/591890401

2.  Use your microphone and speakers (VoIP) - a headset is recommended.
 Or, call in using your telephone.

United Kingdom (toll-free): 0 808 168 0209 United Kingdom: +44 (0) 207 151
1817

United States (toll-free): 1 877 309 2070 United States: +1 (626) 521-0017

Access Code: 591-890-401
Audio PIN: Shown after joining the meeting

Meeting ID: 591-890-401

-- 
Dave Scott

--047d7bacbe7016492004e57ba56c
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>Fellow Mirage hackers, now that Autumn is here (but M=
irage still isn&#39;t), join me on the Mirage weekly call today (tuesday) a=
t 4pm BST!</div><div><br></div><div>1. =A0Please join my meeting.</div><div=
>
<a href=3D"https://www1.gotomeeting.com/join/591890401">https://www1.gotome=
eting.com/join/591890401</a></div><div><br></div><div>2. =A0Use your microp=
hone and speakers (VoIP) - a headset is recommended. =A0Or, call in using y=
our telephone.</div>
<div><br></div><div>United Kingdom (toll-free): 0 808 168 0209 United Kingd=
om: +44 (0) 207 151 1817</div><div><br></div><div>United States (toll-free)=
: 1 877 309 2070 United States: +1 (626) 521-0017</div><div><br></div><div>
Access Code: 591-890-401</div><div>Audio PIN: Shown after joining the meeti=
ng</div><div><br></div><div>Meeting ID: 591-890-401</div><div><br></div>-- =
<br>Dave Scott
</div>

--047d7bacbe7016492004e57ba56c--


From amc79@cam.ac.uk Tue Sep 03 17:00:36 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VGt1w-0001s5-2J (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <amc79@cam.ac.uk>); Tue, 03 Sep 2013 17:00:36 +0100
X-Cam-AntiVirus: no malware found
X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/
Received: from dhcp-172-17-152-179.eduroam.lapwing.private.cam.ac.uk
	([172.17.152.179]:54376)
	by ppsw-42.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.159]:587)
	with esmtpsa (PLAIN:amc79) (TLSv1:AES128-SHA:128)
	id 1VGt1w-0000c1-6Y (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <amc79@cam.ac.uk>); Tue, 03 Sep 2013 17:00:36 +0100
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Notes on Mirage meeting - 03 Sep
From: Amir Chaudhry <amc79@cam.ac.uk>
In-Reply-To: <4AF38AA2-7AA6-4DCF-8366-69FD7AF29DD6@cam.ac.uk>
Date: Tue, 3 Sep 2013 17:00:36 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <A6FDF2B2-AE49-4AE9-9F4F-F6C8562A3534@cam.ac.uk>
References: <4AF38AA2-7AA6-4DCF-8366-69FD7AF29DD6@cam.ac.uk>
To: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-Mailer: Apple Mail (2.1508)
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 03 Sep 2013 16:00:36 -0000
Status: O
Content-Length: 2818
Lines: 73

Hi folks,

My brief notes from this meeting (please add stuff I missed).

- Going through checklist on issue =
(https://github.com/mirage/mirage/issues/102)

- Mirari combinator stuff is a blocker - Anil will work on this for next =
Tuesday=20

- Anil/Thomas also looking at using opam2web and using opam remotes to =
provide overview of all the libs (this is the trove stuff mentioned last =
week).

- Dimos looking into networking stuff and trying to hunt down a bug.  =
Need an event channel ninja to help with this kind of debugging. Maybe =
Dimos, Anil, Balraj and Thomas can have a chat on Friday?

- Mort's done a bunch of stuff on Installation (work through big backlog =
of emails)

- There's a memory leak on mirage site but it reboots every couple of =
days (in 100s of ms) so not prioritised chasing it down. Anil chatting =
to others about testing for memory leaks but this is on the back burner =
for now.

- Anil/Mort (and others) also looking into moving blogs onto Mirage.  =
Anil and Mort also keen to have DNS servers running.

- Overall, looking in good shape to release DP1 after next week's call =
(perhaps even before)

Amir



On 27 Aug 2013, at 17:59, Amir Chaudhry <amc79@cam.ac.uk> wrote:

> Hi folks these are my brief notes on what we spoke about at today's =
Mirage meeting. =20
> Please add in any further details as you remember them.  i.e Dimos, it =
would be worth you adding a little more info about your testing.
>=20
> - Get a release out the door.  Anil pointed people to a GitHub Issue =
which check-lists all the things for DP1 and DP2. Mort has added to this =
with a list of repos we should review.  Issue is at: =
https://github.com/mirage/mirage/issues/102
>=20
> - Spent some time looking through the check-list and discussing items. =
  Lots has been done and there's quite a bit to do but it's tractable. =
Anil working on trove to pull together info/updates from repos.
>=20
> - Dimos went through the xen-server script and improved it.  Hasn't =
committed it yet.  Dimos can lead with lead w XenServer RT
>=20
> - Dimos also did some network tests - developed something in TCP.  Not =
committed anywhere yet? (dimos is fairly new to github)
>=20
> - Might be worth us having one machine to mess with. Use it to =
automate mirage-www. Need a spare test machine to install XenServer on.  =
Might use Bytemark machines for those?
>=20
> - Mirage 1.0 release date.  Amir spoke to Lars and proposed a date of =
22nd October. Picking a firm date far enough in advance allows Xen =
Project to get press resources and trigger the whole announcement =
machine. However, once date is picked it cannot be changed (think =
'juggernaut').  XenSummit is on 24th Oct so 22nd would work well.  Means =
getting DP1 out soon and DP2 out about a month later.
>=20
> Best wishes,
> Amir



From pgj@caesar.elte.hu Tue Sep 03 18:37:14 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VGuXS-0004hn-EX (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <pgj@caesar.elte.hu>); Tue, 03 Sep 2013 18:37:14 +0100
X-Cam-SpamDetails: score -3.1 from SpamAssassin-3.3.2-1519366 
	* -2.4 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [157.181.1.138 listed in list.dnswl.dnsbl.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mx3.mail.elte.hu ([157.181.1.138]:47152)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1VGuXR-0004fs-D5 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <pgj@caesar.elte.hu>); Tue, 03 Sep 2013 18:37:14 +0100
Received: from login01.caesar.elte.hu ([157.181.151.130])
	by mx3.mail.elte.hu with esmtp (Exim) id 1VGuXM-0003Ae-Db
	from <pgj@caesar.elte.hu>
	for <cl-mirage@lists.cam.ac.uk>; Tue, 03 Sep 2013 19:37:12 +0200
Received: (Authenticated sender: pgj)
	by login01.caesar.elte.hu with local (Exim 4.72)
	(envelope-from <pgj@caesar.elte.hu>) id 1VGuXM-0000PM-8C
	for cl-mirage@lists.cam.ac.uk; Tue, 03 Sep 2013 19:37:08 +0200
Date: Tue, 3 Sep 2013 19:37:08 +0200
From: PALI Gabor Janos <pgj@elte.hu>
To: cl-mirage@lists.cam.ac.uk
Subject: Mirage/kFreeBSD Compiler Patches
Message-ID: <20130903173708.GA2976@caesar.elte.hu>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.5.20 (2009-06-14)
Sender: Pali Gabor Janos <pgj@login01.caesar.elte.hu>
X-ELTE-SpamScore: -2.0
X-ELTE-SpamLevel: 
X-ELTE-SpamCheck: no
X-ELTE-SpamVersion: ELTE 3.0 
X-ELTE-SpamCheck-Details: score=-2.0 required=5.9 tests=BAYES_00 autolearn=no
	SpamAssassin version=3.3.1
	-2.0 BAYES_00               BODY: Bayes spam probability is 0 to 1%
	[score: 0.0000]
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 03 Sep 2013 17:37:14 -0000
Status: O
Content-Length: 4127
Lines: 89

Hi there,

Anil requested me to show the OCaml compiler patches I am currently relying
on for the kFreeBSD backend -- in the hope that they could be merged into the
upstream and therefore making the work with this backend easier.  I have
recently updated the backend to use the 4.01.0beta1 version of the OCaml
compiler (and run-time system).

The patches are as follows, including some commentary:

Patch: https://github.com/pgj/ocaml/commit/e63fdcbad6b403a52a7458e849136b08f97bb3d3.patch
Synopsis: Add support for explicitly disabling PIC code generation to
          OCAMLPARAM.

Description:
The FreeBSD kernel does not support loading modules that contain symbols with
certain ELF relocation types that would allow the OCaml compiler to emit
position-independent code, e.g. R_X86_64_GOTPCREL, R_X86_32, and
R_X86_64_PLT32.  Hence this must be disabled with the -fno-PIC flag when
targeting applications for the Mirage/kFreeBSD backend.

However, this is turned on by default, so it would be required to modify all
the build files for all the dependant OPAM packages to include this setting.
Fortunately, OCaml 4.01 introduces a new environment variable, OCAMLPARAM,
whose value is parsed for environment compiler settings, and therefore it
makes possible to turn PIC generation off, independently of what was
requested at invocation.

Here, this feature has been extended with an additional option, "nopic" which
turns PIC generation off by default on amd64 (and arm) platforms.

Mergeable: Probably yes, harmless by default.  Albeit it may change the
default behavior of emitting PIC on arm.  (The arm port does not seem to
have PIC on by default, but supports it.)


Patch: https://github.com/pgj/ocaml/commit/2e155b0c4e551f3cfb31aedbe44b4304ad2e4ccf.patch
Synopis: Allow extra libraries to be cleaned/installed separately.

Description:
This is only a minor technical addition to the compiler's Makefile which
makes possible to reinstall the standard compiler libraries without reinstall
all the compiler files.

This is used with the previous patch primarily, when the compiler libraries
have to be built without PIC.  However, for the Mirage/kFreeBSD
(cross-)compiler, first I build and install the regular compiler to have all
the dynamically-linked version of those libraries and a working version of
Camlp4.  Technically, in this order:

- Build & install the compiler, with PIC, Camlp4, and shared libraries.
- Rebuild & reinstall the stdlib without PIC.
- Rebuild & reinstall the "otherlibs" (bigarray, str, etc.) without PIC.
- Remove the module for Dynlink to disable building packages with shared
  libraries (as some build systems check for this).

This procedure is required because some of packages have certain implicit
expectations from the installed compiler, such as presence of shared
libraries (even if the package itself will not use them at the end).

Mergeable: Yes.


Patch: https://github.com/pgj/ocaml/commit/26196344b32a1bb243b0e8986e5c0c82b05cc262.patch
Synopsis: Add fixed-point arithmetic support for doubles, unroll
          floating-point primops.

Description:
This change introduces another OCAMLPARAM option, "fixedpt" which can tell
the OCaml compiler to generate (64-bit) floating-point constants with
fixed-point representation.  The value of "fixedpt" can tell how many bits are
reserved for the fractional part.  This is not used when building the
cross-compiler, it is only used when the building a Mirage applications.  That
is, the compiler itself always uses the standard OCaml run-time and
floating-point numbers, while the built kernel modules always use their
fixed-point counterparts.

Note that, in order to let these approaches to share the same API, I also had
to "unroll" the primitive floating-point operations into regular C function
calls in the native code generator.  This will probably make the
floating-point-based computations slower and, due to that the fixed-point
numbers currently store the fractional part in 16 bits, leads to loss in
precision.

Mergeable: No.  At least not this version.


Feel free to ask if I was unclear regarding something... :-)


From jdy22@cam.ac.uk Wed Sep 04 11:04:26 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VH9wo-0000It-Tc (Exim 4.70)
	(return-path <jdy22@cam.ac.uk>); Wed, 04 Sep 2013 11:04:26 +0100
X-Cam-AntiVirus: no malware found
X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/
Received: from mail-we0-f173.google.com ([74.125.82.173]:47971)
	by ppsw-33.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.157]:587)
	with esmtpsa (PLAIN:jdy22) (TLSv1:RC4-SHA:128)
	id 1VH9wo-0006Aq-im (Exim 4.80_167-5a66dd3)
	(return-path <jdy22@cam.ac.uk>); Wed, 04 Sep 2013 11:04:26 +0100
Received: by mail-we0-f173.google.com with SMTP id x55so79728wes.18
	for <multiple recipients>; Wed, 04 Sep 2013 03:04:26 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=mime-version:date:message-id:subject:from:to:cc:content-type;
	bh=xxrN+9Lpl6ju/JIrkPqfKkRgY+myx6QzK55hXTcoAss=;
	b=M5KN1GfjWzq85sCEyEkhrXV18MnbjLLeUVG7Dr3vwWfqxzxTenkjGE+8nK0Xr/czLo
	IkGGjf8XQklGk12oitlrtarz2akA2uoOFUAQ9Em9RYK8njLlMSMcwodst5yC6NCO6RE5
	UHuxEcjLVEBo+U4kyGQXQ4W5keGhKqLSgsuqEQOX8qN6kdh5mP80dVrvEx16Myrspa4W
	fglQPLn9VBzh432Q02MKAGN3WzhTBvkskdcnGyNgsMBJff49F26IMVXzaK/ld9i9u62n
	XRf3V9W/yoCjaq1OtK8225kH0UNLfBYHPVBftbfdluqEaMb4j4oT0WDaB7J5KSErVZgl
	1DDw==
MIME-Version: 1.0
X-Received: by 10.181.12.75 with SMTP id eo11mr1444232wid.24.1378289066707;
	Wed, 04 Sep 2013 03:04:26 -0700 (PDT)
Received: by 10.216.20.79 with HTTP; Wed, 4 Sep 2013 03:04:26 -0700 (PDT)
Date: Wed, 4 Sep 2013 11:04:26 +0100
Message-ID: <CAAxsn=F-shyH01Pn4n17DnK68P2J5Usq2__p5jF-DFy-G0amiw@mail.gmail.com>
Subject: OCaml compiler hacking session
From: Jeremy Yallop <jdy22@cam.ac.uk>
To: Leo White <lpw25@cam.ac.uk>
Content-Type: text/plain; charset=UTF-8
Cc: cl-cprg-announce@lists.cam.ac.uk,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 04 Sep 2013 10:04:27 -0000
Status: O
Content-Length: 1177
Lines: 30

We're organising a second OCaml compiler-hacking session!  Note the
change of venue: this time we're going to be at Makespace on Mill
Lane.

If you're planning to come along, it'd be helpful if you could
indicate interest via Doodle:

   http://doodle.com/k6y2tiihkrb5vuw4

Where: Makespace Cambridge, 16 Mill Lane, Cambridge, CB2 1RX.
       Directions: http://makespace.org/space/

When: 6pm, Wednesday 18th September

Who: anyone interested in improving OCaml.  Knowledge of OCaml
programming will obviously be helpful, but prior experience of working
on OCaml internals isn't necessary.

What: fixing bugs, implementing new features, learning about OCaml internals

We're defining "compiler" pretty broadly, to include anything that's
part of the standard distribution, which means at least the standard
library, runtime, tools (ocamldep, ocamllex, ocamlyacc, etc.), camlp4,
ocamlbuild, the documentation, and the compiler itself.  We'll have
suggestions for mini-projects for various levels of experience, but
feel free to come along and work on whatever you fancy.

We'll also be ordering pizza, so if you want to be counted for food
you should aim to arrive by 6.30pm.


From Richard.Mortier@nottingham.ac.uk Wed Sep 04 17:28:01 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VHFw1-0002Zs-Jz (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Wed, 04 Sep 2013 17:28:01 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1519602 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine01-20433-7.icritical.com ([151.236.209.33]:57495)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with smtp id 1VHFw1-0005uF-gh (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Wed, 04 Sep 2013 17:28:01 +0100
Received: (qmail 22881 invoked from network); 4 Sep 2013 16:27:58 -0000
Received: from localhost (127.0.0.1)
	by engine01-20433-7.icritical.com with SMTP; 4 Sep 2013 16:27:58 -0000
Received: from engine01-20433-7.icritical.com ([127.0.0.1])
	by localhost (engine01-20433-7.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 22589-10 for <cl-mirage@lists.cam.ac.uk>;
	Wed,  4 Sep 2013 17:27:55 +0100 (BST)
Received: (qmail 22071 invoked by uid 599); 4 Sep 2013 16:26:39 -0000
Received: from unknown (HELO smtp4.nottingham.ac.uk) (128.243.220.65)
	by engine01-20433-7.icritical.com (qpsmtpd/0.28) with ESMTP;
	Wed, 04 Sep 2013 17:26:39 +0100
Received: from uiwexhub01.ad.nottingham.ac.uk ([128.243.15.133])
	by smtp4.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Richard.Mortier@nottingham.ac.uk>)
	id 1VHFuk-0007HS-Kd
	for cl-mirage@lists.cam.ac.uk; Wed, 04 Sep 2013 17:26:42 +0100
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Phiho Hoang <hohoangphi@gmail.com>
Date: Wed, 4 Sep 2013 17:26:42 +0100
Subject: Re: Building mirage-www
Thread-Topic: Building mirage-www
Thread-Index: Ac6pi4n8/URyyQBnRjWGNACzwLEHUA==
Message-ID: <08041231-A249-4557-A806-260490B8DDAB@nottingham.ac.uk>
References: <CALZQg1b36OjX5cA28XAfJHGauNBQQkw9Swe+SQt-AGcknF7=9Q@mail.gmail.com>
	<612DC5B7-C3DB-4690-9728-A786E9903239@nottingham.ac.uk>
	<CALZQg1YvFtHGhOJrinV-Lg-f2TXeqTUNnfj5s__GrdG-vTRN9Q@mail.gmail.com>
	<0AD4BE76-6E71-423C-A091-267D2EA579C7@nottingham.ac.uk>
	<CALZQg1b7syokUncFhZ99OKhocMP-qd6jPYz+oZTGpSQ54Q2iXw@mail.gmail.com>
	<D58F317F-A283-414F-A1E4-D95D6FAB6CEA@nottingham.ac.uk>
	<CALZQg1aYxeAUKj3Aj9bguu_Z0waRJFF_Vgr6xJ8YPrrC632mmw@mail.gmail.com>
	<BF407EC3-E650-4D92-AB76-90581438C02E@nottingham.ac.uk>
	<CALZQg1Yc11dNC9FyndLEFomn5NvDCDYCkOKbp4y83jB0iR2q8Q@mail.gmail.com>
	<0DE626C6-2E27-4552-BD8E-566F140BF876@nottingham.ac.uk>
	<CALZQg1boC3q-TzSxcaMDtftbdAHrccir6Ov3r6VnAZvG6Di0tg@mail.gmail.com>
	<E5086844-DE7A-4BC2-B782-DEBE4AF6ED03@recoil.org>
	<CALZQg1b1FWqTLqR2+K-FO_7rNwTyQ36uW7e7ftanOjvH3N8=pQ@mail.gmail.com>
	<0CF4BE5B-43DF-4B8A-B5EC-0D5CC1B2CF44@nottingham.ac.uk>
	<CALZQg1Y7iOVOYXP6-iFwYfOcXtWx-5u-4xYAUYmUOgLQndcY0A@mail.gmail.com>
In-Reply-To: <CALZQg1Y7iOVOYXP6-iFwYfOcXtWx-5u-4xYAUYmUOgLQndcY0A@mail.gmail.com>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine01-20433-7.icritical.com
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	Anil Madhavapeddy <anil@recoil.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 04 Sep 2013 16:28:01 -0000
Status: O
Content-Length: 2110
Lines: 61

hi phiho; apologies for delay replying, i had a large email backlog post-ho=
lidays...

On 18 Aug 2013, at 19:29, Phiho Hoang wrote:

...
> This step was successful, ending with:
>=20
> 5569986 Aug 18 13:03 src/_build/main.xen
>=20
> Is this the xen virtual machine for 'mirage-www'?

yes.

> What do I need to test this VM?

a machine running xen -- i use a ubuntu 13.04 VM running on virtualbox but =
ymmv.

> I just installed XenServer 6,2 as a Hyper-V VM, can it be used to run mir=
age-www's main.xen?

yes -- use xl -- there should be some information=20

> Do I need a XenServer running directly on the hardware to test Mirage's U=
nikernels?

no, a linux vm running xen will do.

> I watched the OSCON 2013 screen cast with envy. It took only a few minute=
s to build everything and having the website up and running.

it is worth noting that the screencast contained several segments that were=
 rather sped up  as watching ocaml build and opam install packages isn't re=
ally *that* interesting :) =20

> It is much appreciated if some kind soul would share a Linux VM (with Xen=
 installed) that I can use to build a simple 'Hello Mirage' unikernel and r=
un it.
> I've been trying to install Xen 4.2 on Ubuntu 13.04 without success

what have you tried -- using apt-get to install the xen package worked just=
 fine for me...

--=20
Cheers,

R.




This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From lars.kurth.xen@gmail.com Wed Sep 04 18:08:26 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VHGZ8-0004X7-Jd (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Wed, 04 Sep 2013 18:08:26 +0100
X-Cam-SpamDetails: score -0.6 from SpamAssassin-3.3.2-1519602 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [74.125.82.49 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (lars.kurth.xen[at]gmail.com)
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wg0-f49.google.com ([74.125.82.49]:39074)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1VHGZ8-0001fX-g9 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Wed, 04 Sep 2013 18:08:26 +0100
Received: by mail-wg0-f49.google.com with SMTP id l18so657004wgh.16
	for <cl-mirage@lists.cam.ac.uk>; Wed, 04 Sep 2013 10:08:25 -0700 (PDT)
X-Received: by 10.180.20.15 with SMTP id j15mr3021140wie.0.1378314505791;
	Wed, 04 Sep 2013 10:08:25 -0700 (PDT)
Received: from [172.16.25.10] ([185.25.64.249])
	by mx.google.com with ESMTPSA id i3sm5486487wiw.7.1969.12.31.16.00.00
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Wed, 04 Sep 2013 10:08:24 -0700 (PDT)
Sender: Lars Kurth <lars.kurth.xen@gmail.com>
Message-ID: <52276903.90702@xen.org>
Date: Wed, 04 Sep 2013 18:08:19 +0100
From: Lars Kurth <lars.kurth@xen.org>
User-Agent: Mozilla/5.0 (Windows NT 6.1;
	rv:17.0) Gecko/20130801 Thunderbird/17.0.8
MIME-Version: 1.0
To: "xen-devel@lists.xen.org" <xen-devel@lists.xen.org>, 
	"xen-api@lists.xen.org" <xen-api@lists.xen.org>,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
Subject: Xen Project Developer Meeting, October 23, 13:00-16:00, Edinburgh
	International Conference Centre (@LinuxCon)
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
Reply-To: lars.kurth@xen.org
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 04 Sep 2013 17:08:26 -0000
Status: O
Content-Length: 794
Lines: 21

Hi everybody,

as announced earlier, please find the details for the Xen Project 
Developer Meeting at http://wiki.xenproject.org/wiki/Developer_Meeting_XS13

Please sign up with your name at 
http://wiki.xenproject.org/wiki/Developer_Meeting_XS13#Confirmed_Attendees
Please add any topics that you want to discuss to 
http://wiki.xenproject.org/wiki/Developer_Meeting_XS13#Topics_to_Discuss_at_the_Developer_Meeting
I have 30 spaces, but can scale up a little if needed.

If you do not have write access to the wiki, please fill out 
http://xenproject.org/component/content/article/100-misc/145-request-to-be-made-a-wiki-editor.html, 
such that we cann add you. You will need to have an account for the wiki 
though.

Coffee and snacks will be provided. Lunch will not be!

Best Regards
Lars


From lars.kurth.xen@gmail.com Thu Sep 05 11:07:40 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VHWTU-0005Qk-E7 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Thu, 05 Sep 2013 11:07:40 +0100
X-Cam-SpamDetails: score -0.6 from SpamAssassin-3.3.2-1519943 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.214.44 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (lars.kurth.xen[at]gmail.com)
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-bk0-f44.google.com ([209.85.214.44]:49193)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VHWTT-0007fM-2k (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Thu, 05 Sep 2013 11:07:40 +0100
Received: by mail-bk0-f44.google.com with SMTP id mz10so651741bkb.17
	for <cl-mirage@lists.cam.ac.uk>; Thu, 05 Sep 2013 03:07:39 -0700 (PDT)
X-Received: by 10.205.65.17 with SMTP id xk17mr6241748bkb.19.1378375659492;
	Thu, 05 Sep 2013 03:07:39 -0700 (PDT)
Received: from [172.16.26.11] (97e16f50.skybroadband.com. [151.225.111.80])
	by mx.google.com with ESMTPSA id jt14sm7660922bkb.0.1969.12.31.16.00.00
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Thu, 05 Sep 2013 03:07:38 -0700 (PDT)
Sender: Lars Kurth <lars.kurth.xen@gmail.com>
Message-ID: <522857E9.1000406@xen.org>
Date: Thu, 05 Sep 2013 11:07:37 +0100
From: Lars Kurth <lars.kurth@xen.org>
User-Agent: Mozilla/5.0 (Windows NT 6.1;
	rv:17.0) Gecko/20130801 Thunderbird/17.0.8
MIME-Version: 1.0
To: "xen-devel@lists.xen.org" <xen-devel@lists.xen.org>, 
	"xen-api@lists.xen.org" <xen-api@lists.xen.org>,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
Subject: Xen Project Developer Summit Time-Line and Update
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
Reply-To: lars.kurth@xen.org
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 05 Sep 2013 10:07:40 -0000
Status: O
Content-Length: 608
Lines: 18

Hi all,

a quick update on the Xen Project Developer Summit time-line.

#1: The CfP will close on Friday
#2: The Program Management Committee is in place (announcement to follow)
#3: I intent to publish the schedule by next Friday (the 13th). Failing 
the final program, I will publish highlights on Friday and the full 
program the following week
#4: Registration has been open since 
http://events.linuxfoundation.org/events/xen-project-developer-summit/ 
went live : go to attend > register
#5: All other information, such as hotel information, etc. can be found 
on the event website

Best Regards
Lars


From anil@recoil.org Thu Sep 05 11:59:14 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VHXHO-0007Y2-3H (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 05 Sep 2013 11:59:14 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1519943
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:27911
	helo=dark.recoil.org)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1VHXHM-0007xT-9D (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 05 Sep 2013 11:59:14 +0100
Received: (qmail 880 invoked by uid 634); 5 Sep 2013 10:59:12 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from volstagg-0.srg.cl.cam.ac.uk (HELO clink.office) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Thu, 05 Sep 2013 11:59:11 +0100
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: Mirage/kFreeBSD Compiler Patches
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <20130903173708.GA2976@caesar.elte.hu>
Date: Thu, 5 Sep 2013 11:59:11 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <B8DAA9A3-8B4B-4C47-98F1-26F629F84318@recoil.org>
References: <20130903173708.GA2976@caesar.elte.hu>
To: PALI Gabor Janos <pgj@elte.hu>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: cl-mirage@lists.cam.ac.uk
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 05 Sep 2013 10:59:14 -0000
Status: O
Content-Length: 5551
Lines: 163

On 3 Sep 2013, at 18:37, PALI Gabor Janos <pgj@elte.hu> wrote:

> Hi there,
>=20
> Anil requested me to show the OCaml compiler patches I am currently =
relying
> on for the kFreeBSD backend -- in the hope that they could be merged =
into the
> upstream and therefore making the work with this backend easier.  I =
have
> recently updated the backend to use the 4.01.0beta1 version of the =
OCaml
> compiler (and run-time system).

Thanks for breaking these up Gabor!  I expect that a number of the =
patches
are generally relevant to other backends in the future, as we move to =
establish
the differences between many of the backends.

>=20
> The patches are as follows, including some commentary:
>=20
> Patch: =
https://github.com/pgj/ocaml/commit/e63fdcbad6b403a52a7458e849136b08f97bb3=
d3.patch
> Synopsis: Add support for explicitly disabling PIC code generation to
>          OCAMLPARAM.
>=20
> Description:
> The FreeBSD kernel does not support loading modules that contain =
symbols with
> certain ELF relocation types that would allow the OCaml compiler to =
emit
> position-independent code, e.g. R_X86_64_GOTPCREL, R_X86_32, and
> R_X86_64_PLT32.  Hence this must be disabled with the -fno-PIC flag =
when
> targeting applications for the Mirage/kFreeBSD backend.
>=20
> However, this is turned on by default, so it would be required to =
modify all
> the build files for all the dependant OPAM packages to include this =
setting.
> Fortunately, OCaml 4.01 introduces a new environment variable, =
OCAMLPARAM,
> whose value is parsed for environment compiler settings, and therefore =
it
> makes possible to turn PIC generation off, independently of what was
> requested at invocation.
>=20
> Here, this feature has been extended with an additional option, =
"nopic" which
> turns PIC generation off by default on amd64 (and arm) platforms.
>=20
> Mergeable: Probably yes, harmless by default.  Albeit it may change =
the
> default behavior of emitting PIC on arm.  (The arm port does not seem =
to
> have PIC on by default, but supports it.)

It's probably best to disable this by default in ARM.  How about =
modifying
the Clflags to be either `True|`False|`Default, and then using that to =
decide
what the architecture-specific backend should be?

I expect that PIC code is a lot more expensive on ARM than it is on =
AMD64,
although it's worth verifying this with an upstream patch submission.

>=20
> Patch: =
https://github.com/pgj/ocaml/commit/2e155b0c4e551f3cfb31aedbe44b4304ad2e4c=
cf.patch
> Synopis: Allow extra libraries to be cleaned/installed separately.
>=20
> Description:
> This is only a minor technical addition to the compiler's Makefile =
which
> makes possible to reinstall the standard compiler libraries without =
reinstall
> all the compiler files.
>=20
> This is used with the previous patch primarily, when the compiler =
libraries
> have to be built without PIC.  However, for the Mirage/kFreeBSD
> (cross-)compiler, first I build and install the regular compiler to =
have all
> the dynamically-linked version of those libraries and a working =
version of
> Camlp4.  Technically, in this order:
>=20
> - Build & install the compiler, with PIC, Camlp4, and shared =
libraries.
> - Rebuild & reinstall the stdlib without PIC.
> - Rebuild & reinstall the "otherlibs" (bigarray, str, etc.) without =
PIC.
> - Remove the module for Dynlink to disable building packages with =
shared
>  libraries (as some build systems check for this).
>=20
> This procedure is required because some of packages have certain =
implicit
> expectations from the installed compiler, such as presence of shared
> libraries (even if the package itself will not use them at the end).
>=20
> Mergeable: Yes.

This one probably won't get merged, since 4.02 is moving out all the =
otherlibs
into separate packages that are outside the core distro.  This is good =
news for
your port anyway!  I'll dig out the Mantis upstream issue for this.

> Patch: =
https://github.com/pgj/ocaml/commit/26196344b32a1bb243b0e8986e5c0c82b05cc2=
62.patch
> Synopsis: Add fixed-point arithmetic support for doubles, unroll
>          floating-point primops.
>=20
> Description:
> This change introduces another OCAMLPARAM option, "fixedpt" which can =
tell
> the OCaml compiler to generate (64-bit) floating-point constants with
> fixed-point representation.  The value of "fixedpt" can tell how many =
bits are
> reserved for the fractional part.  This is not used when building the
> cross-compiler, it is only used when the building a Mirage =
applications.  That
> is, the compiler itself always uses the standard OCaml run-time and
> floating-point numbers, while the built kernel modules always use =
their
> fixed-point counterparts.
>=20
> Note that, in order to let these approaches to share the same API, I =
also had
> to "unroll" the primitive floating-point operations into regular C =
function
> calls in the native code generator.  This will probably make the
> floating-point-based computations slower and, due to that the =
fixed-point
> numbers currently store the fractional part in 16 bits, leads to loss =
in
> precision.
>=20
> Mergeable: No.  At least not this version.
>=20

Looks good -- I agree with your assessment that this isn't mergeable =
until
we precisely define what sort of impact this will have, but the strategy =
of
"carefully avoid floating point or else crash" seems to be working well =
enough
for now.

Do you want to submit the nopic one upstream for now and start some =
discussion
going on that?

cheers
Anil=


From hohoangphi@gmail.com Thu Sep 05 16:24:58 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VHbQY-0002yK-9q (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Thu, 05 Sep 2013 16:24:58 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1519943 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.214.179 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (hohoangphi[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-ob0-f179.google.com ([209.85.214.179]:39713)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1VHbQX-00069Z-7k (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Thu, 05 Sep 2013 16:24:58 +0100
Received: by mail-ob0-f179.google.com with SMTP id fb19so2084383obc.24
	for <cl-mirage@lists.cam.ac.uk>; Thu, 05 Sep 2013 08:24:56 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.60.45.196 with SMTP id p4mr718639oem.81.1378394696498; Thu,
	05 Sep 2013 08:24:56 -0700 (PDT)
Received: by 10.76.177.202 with HTTP; Thu, 5 Sep 2013 08:24:56 -0700 (PDT)
In-Reply-To: <08041231-A249-4557-A806-260490B8DDAB@nottingham.ac.uk>
References: <CALZQg1b36OjX5cA28XAfJHGauNBQQkw9Swe+SQt-AGcknF7=9Q@mail.gmail.com>
	<612DC5B7-C3DB-4690-9728-A786E9903239@nottingham.ac.uk>
	<CALZQg1YvFtHGhOJrinV-Lg-f2TXeqTUNnfj5s__GrdG-vTRN9Q@mail.gmail.com>
	<0AD4BE76-6E71-423C-A091-267D2EA579C7@nottingham.ac.uk>
	<CALZQg1b7syokUncFhZ99OKhocMP-qd6jPYz+oZTGpSQ54Q2iXw@mail.gmail.com>
	<D58F317F-A283-414F-A1E4-D95D6FAB6CEA@nottingham.ac.uk>
	<CALZQg1aYxeAUKj3Aj9bguu_Z0waRJFF_Vgr6xJ8YPrrC632mmw@mail.gmail.com>
	<BF407EC3-E650-4D92-AB76-90581438C02E@nottingham.ac.uk>
	<CALZQg1Yc11dNC9FyndLEFomn5NvDCDYCkOKbp4y83jB0iR2q8Q@mail.gmail.com>
	<0DE626C6-2E27-4552-BD8E-566F140BF876@nottingham.ac.uk>
	<CALZQg1boC3q-TzSxcaMDtftbdAHrccir6Ov3r6VnAZvG6Di0tg@mail.gmail.com>
	<E5086844-DE7A-4BC2-B782-DEBE4AF6ED03@recoil.org>
	<CALZQg1b1FWqTLqR2+K-FO_7rNwTyQ36uW7e7ftanOjvH3N8=pQ@mail.gmail.com>
	<0CF4BE5B-43DF-4B8A-B5EC-0D5CC1B2CF44@nottingham.ac.uk>
	<CALZQg1Y7iOVOYXP6-iFwYfOcXtWx-5u-4xYAUYmUOgLQndcY0A@mail.gmail.com>
	<08041231-A249-4557-A806-260490B8DDAB@nottingham.ac.uk>
Date: Thu, 5 Sep 2013 11:24:56 -0400
Message-ID: <CALZQg1aEAkV37EoQTCbL6r3RodjN4m8jUEUREAP6Jn2SzEJzBA@mail.gmail.com>
Subject: Re: Building mirage-www
From: Phiho Hoang <hohoangphi@gmail.com>
To: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
Content-Type: multipart/alternative; boundary=001a11c2529e3ec47c04e5a486cc
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	Anil Madhavapeddy <anil@recoil.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 05 Sep 2013 15:24:58 -0000
Status: O
Content-Length: 8332
Lines: 229

--001a11c2529e3ec47c04e5a486cc
Content-Type: text/plain; charset=ISO-8859-1

Hi Richard,

Many thanks for your advice.

>> It is much appreciated if some kind soul would share a Linux VM (with
Xen installed) that I can use to build a simple 'Hello Mirage' unikernel
and run it.
>> I've been trying to install Xen 4.2 on Ubuntu 13.04 without success

> what have you tried -- using apt-get to install the xen package worked
just fine for me...

I am trying once more to install xen on Ubuntu 13.04 VM (under OVB),
following the instructions here:

https://wiki.openstack.org/wiki/XenServer/Install/XcpXapiOnPrecise

and there was a little hiccup ('/etc/init.d/xend' does not exist) here:

sed -i "s/\\\$XEND status && return 1/return 0/" /etc/init.d/xend


However, after rebooting, 'xen' and 'xcp' daemons seem to be running.

Regards,

PhiHo



On Wed, Sep 4, 2013 at 12:26 PM, Richard Mortier <
Richard.Mortier@nottingham.ac.uk> wrote:

> hi phiho; apologies for delay replying, i had a large email backlog
> post-holidays...
>
> On 18 Aug 2013, at 19:29, Phiho Hoang wrote:
>
> ...
> > This step was successful, ending with:
> >
> > 5569986 Aug 18 13:03 src/_build/main.xen
> >
> > Is this the xen virtual machine for 'mirage-www'?
>
> yes.
>
> > What do I need to test this VM?
>
> a machine running xen -- i use a ubuntu 13.04 VM running on virtualbox but
> ymmv.
>
> > I just installed XenServer 6,2 as a Hyper-V VM, can it be used to run
> mirage-www's main.xen?
>
> yes -- use xl -- there should be some information
>
> > Do I need a XenServer running directly on the hardware to test Mirage's
> Unikernels?
>
> no, a linux vm running xen will do.
>
> > I watched the OSCON 2013 screen cast with envy. It took only a few
> minutes to build everything and having the website up and running.
>
> it is worth noting that the screencast contained several segments that
> were rather sped up  as watching ocaml build and opam install packages
> isn't really *that* interesting :)
>
> > It is much appreciated if some kind soul would share a Linux VM (with
> Xen installed) that I can use to build a simple 'Hello Mirage' unikernel
> and run it.
> > I've been trying to install Xen 4.2 on Ubuntu 13.04 without success
>
> what have you tried -- using apt-get to install the xen package worked
> just fine for me...
>
> --
> Cheers,
>
> R.
>
>
>
>
> This message and any attachment are intended solely for the addressee and
> may contain confidential information. If you have received this message in
> error, please send it back to me, and immediately delete it.   Please do
> not use, copy or disclose the information contained in this message or in
> any attachment.  Any views or opinions expressed by the author of this
> email do not necessarily reflect the views of the University of Nottingham.
>
> This message has been checked for viruses but the contents of an attachment
> may still contain software viruses which could damage your computer
> system, you are advised to perform your own checks. Email communications
> with the University of Nottingham may be monitored as permitted by UK
> legislation.
>
>
>
>
>

--001a11c2529e3ec47c04e5a486cc
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi Richard,<div><br></div><div>Many thanks for your advice=
.</div><div><br></div><div><div style=3D"font-family:arial,sans-serif;font-=
size:13px">&gt;&gt; It is much appreciated if some kind soul would share a =
Linux VM (with Xen installed) that I can use to build a simple &#39;Hello M=
irage&#39; unikernel and run it.<br>


&gt;&gt; I&#39;ve been trying to install Xen 4.2 on Ubuntu 13.04 without su=
ccess<br><br></div><span style=3D"font-family:arial,sans-serif;font-size:13=
px">&gt; what have you tried -- using apt-get to install the xen package wo=
rked just fine for me...</span><div style=3D"font-family:arial,sans-serif;f=
ont-size:13px">


<br></div><div style=3D"font-family:arial,sans-serif;font-size:13px">I am t=
rying once more to install xen on Ubuntu 13.04 VM (under OVB), following th=
e instructions here:</div><div style=3D"font-family:arial,sans-serif;font-s=
ize:13px">


<br></div><div style=3D"font-family:arial,sans-serif;font-size:13px"></div>=
</div><div><a href=3D"https://wiki.openstack.org/wiki/XenServer/Install/Xcp=
XapiOnPrecise" target=3D"_blank">https://wiki.openstack.org/wiki/XenServer/=
Install/XcpXapiOnPrecise</a><br>


</div><div><br></div><div>and there was a little hiccup (&#39;/etc/init.d/x=
end&#39; does not exist) here:<br></div><div><br></div><div><pre style=3D"p=
adding:9.5px;font-family:Monaco,Menlo,Consolas,&#39;Courier New&#39;,monosp=
ace;font-size:13px;color:rgb(51,51,51);border-top-left-radius:4px;border-to=
p-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius=
:4px;margin-top:0px;margin-bottom:10px;line-height:20px;word-break:break-al=
l;word-wrap:break-word;white-space:pre-wrap;background-color:rgb(245,245,24=
5);border:1px solid rgba(0,0,0,0.14902)">
sed -i &quot;s/\\\$XEND status &amp;&amp; return 1/return 0/&quot; /etc/ini=
t.d/xend</pre></div><div><br></div><div>However, after rebooting, &#39;xen&=
#39; and &#39;xcp&#39; daemons seem to be running.</div><div><br></div>
<div>Regards,</div><div><br></div><div>PhiHo</div><div><br></div>
</div><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On Wed,=
 Sep 4, 2013 at 12:26 PM, Richard Mortier <span dir=3D"ltr">&lt;<a href=3D"=
mailto:Richard.Mortier@nottingham.ac.uk" target=3D"_blank">Richard.Mortier@=
nottingham.ac.uk</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">hi phiho; apologies for delay replying, i ha=
d a large email backlog post-holidays...<br>
<br>
On 18 Aug 2013, at 19:29, Phiho Hoang wrote:<br>
<br>
...<br>
<div class=3D"im">&gt; This step was successful, ending with:<br>
&gt;<br>
&gt; 5569986 Aug 18 13:03 src/_build/main.xen<br>
&gt;<br>
&gt; Is this the xen virtual machine for &#39;mirage-www&#39;?<br>
<br>
</div>yes.<br>
<div class=3D"im"><br>
&gt; What do I need to test this VM?<br>
<br>
</div>a machine running xen -- i use a ubuntu 13.04 VM running on virtualbo=
x but ymmv.<br>
<div class=3D"im"><br>
&gt; I just installed XenServer 6,2 as a Hyper-V VM, can it be used to run =
mirage-www&#39;s main.xen?<br>
<br>
</div>yes -- use xl -- there should be some information<br>
<div class=3D"im"><br>
&gt; Do I need a XenServer running directly on the hardware to test Mirage&=
#39;s Unikernels?<br>
<br>
</div>no, a linux vm running xen will do.<br>
<div class=3D"im"><br>
&gt; I watched the OSCON 2013 screen cast with envy. It took only a few min=
utes to build everything and having the website up and running.<br>
<br>
</div>it is worth noting that the screencast contained several segments tha=
t were rather sped up =A0as watching ocaml build and opam install packages =
isn&#39;t really *that* interesting :)<br>
<div class=3D"im"><br>
&gt; It is much appreciated if some kind soul would share a Linux VM (with =
Xen installed) that I can use to build a simple &#39;Hello Mirage&#39; unik=
ernel and run it.<br>
&gt; I&#39;ve been trying to install Xen 4.2 on Ubuntu 13.04 without succes=
s<br>
<br>
</div>what have you tried -- using apt-get to install the xen package worke=
d just fine for me...<br>
<div class=3D"HOEnZb"><div class=3D"h5"><br>
--<br>
Cheers,<br>
<br>
R.<br>
<br>
<br>
<br>
<br>
This message and any attachment are intended solely for the addressee and m=
ay contain confidential information. If you have received this message in e=
rror, please send it back to me, and immediately delete it. =A0 Please do n=
ot use, copy or disclose the information contained in this message or in an=
y attachment. =A0Any views or opinions expressed by the author of this emai=
l do not necessarily reflect the views of the University of Nottingham.<br>

<br>
This message has been checked for viruses but the contents of an attachment=
<br>
may still contain software viruses which could damage your computer system,=
 you are advised to perform your own checks. Email communications with the =
University of Nottingham may be monitored as permitted by UK legislation.<b=
r>

<br>
<br>
<br>
<br>
</div></div></blockquote></div><br></div>

--001a11c2529e3ec47c04e5a486cc--


From pgj@caesar.elte.hu Thu Sep 05 16:37:21 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VHbcX-0003L0-3I (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <pgj@caesar.elte.hu>); Thu, 05 Sep 2013 16:37:21 +0100
X-Cam-SpamDetails: score -3.1 from SpamAssassin-3.3.2-1519943 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [157.181.151.9 listed in list.dnswl.dnsbl.ja.net]
	* -2.4 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mx2.mail.elte.hu ([157.181.151.9]:38351)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1VHbcW-0007Rq-Dm (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <pgj@caesar.elte.hu>); Thu, 05 Sep 2013 16:37:21 +0100
Received: from login01.caesar.elte.hu ([157.181.151.130])
	by mx2.mail.elte.hu with esmtp (Exim) id 1VHbcR-0004hH-O9
	from <pgj@caesar.elte.hu>; Thu, 05 Sep 2013 17:37:19 +0200
Received: (Authenticated sender: pgj)
	by login01.caesar.elte.hu with local (Exim 4.72)
	(envelope-from <pgj@caesar.elte.hu>)
	id 1VHbcQ-0001pU-Fr; Thu, 05 Sep 2013 17:37:14 +0200
Date: Thu, 5 Sep 2013 17:37:14 +0200
From: PALI Gabor Janos <pgj@elte.hu>
To: Anil Madhavapeddy <anil@recoil.org>
Subject: Re: Mirage/kFreeBSD Compiler Patches
Message-ID: <20130905153714.GA1041@caesar.elte.hu>
References: <20130903173708.GA2976@caesar.elte.hu>
	<B8DAA9A3-8B4B-4C47-98F1-26F629F84318@recoil.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <B8DAA9A3-8B4B-4C47-98F1-26F629F84318@recoil.org>
User-Agent: Mutt/1.5.20 (2009-06-14)
Sender: Pali Gabor Janos <pgj@login01.caesar.elte.hu>
X-ELTE-SpamScore: -2.0
X-ELTE-SpamLevel: 
X-ELTE-SpamCheck: no
X-ELTE-SpamVersion: ELTE 3.0 
X-ELTE-SpamCheck-Details: score=-2.0 required=5.9 tests=AWL,
	BAYES_00 autolearn=no SpamAssassin version=3.3.1
	-2.0 BAYES_00               BODY: Bayes spam probability is 0 to 1%
	[score: 0.0000]
	0.0 AWL AWL: From: address is in the auto white-list
Cc: cl-mirage@lists.cam.ac.uk
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 05 Sep 2013 15:37:21 -0000
Status: O
Content-Length: 3774
Lines: 86

On Thu, Sep 05, 2013 at 11:59:11AM +0100, Anil Madhavapeddy wrote:
> Thanks for breaking these up Gabor!

Thanks for the comments.

> I expect that a number of the patches
> are generally relevant to other backends in the future, as we move to establish
> the differences between many of the backends.

Yes, that is likely.  However, let me note that I have some further minor
modifications in the run-time system as well.  I did not include them here though,
because they are currently part of the mirage-kfreebsd package -- due to the
previously mentioned API compatibility, they work with the compiler-generated
code fine, but care should be taken when moving to a newer version of the
run-time bits.

For example, I have recently been bitten by a one-line change which works fine
in user space but the kernel (asmrun/amd64.S):

/* Call a C function from OCaml */

FUNCTION(G(caml_c_call))
CFI_STARTPROC
LBL(caml_c_call):
    /* Record lowest stack address and return address */
        popq    %r12; CFI_ADJUST(-8)
        STORE_VAR(%r12, caml_last_return_address)
        STORE_VAR(%rsp, caml_bottom_of_stack)
        subq    $8, %rsp; CFI_ADJUST(8) /* equivalent to pushq %r12 */
...

Actually, `pushq %r12` cannot be replaced with `subq $8, %rsp` here as the
assumption in the comment does not hold inside the kernel.  This is because the
standard AMD64 ABI for C calls (use of red zones) is not respected in the
FreeBSD kernel (neither in Linux too, I think).

> > Patch: https://github.com/pgj/ocaml/commit/e63fdcbad6b403a52a7458e849136b08f97bb3d3.patch
> > Synopsis: Add support for explicitly disabling PIC code generation to
> >          OCAMLPARAM.
[..]
> It's probably best to disable this by default in ARM.  How about modifying
> the Clflags to be either `True|`False|`Default, and then using that to decide
> what the architecture-specific backend should be?
> 
> I expect that PIC code is a lot more expensive on ARM than it is on AMD64,
> although it's worth verifying this with an upstream patch submission.

Yes, PIC is turned off by default on ARM.  Hence I extended this patch with
another one to retain the original semantics:

https://github.com/pgj/ocaml/commit/acb827c29187de3fafd17561e6e53606de33a94a.patch

> > Patch: https://github.com/pgj/ocaml/commit/2e155b0c4e551f3cfb31aedbe44b4304ad2e4ccf.patch
> > Synopis: Allow extra libraries to be cleaned/installed separately.
[..]
> This one probably won't get merged, since 4.02 is moving out all the otherlibs
> into separate packages that are outside the core distro.  This is good news for
> your port anyway!  I'll dig out the Mantis upstream issue for this.

Excellent.

> > Patch: https://github.com/pgj/ocaml/commit/26196344b32a1bb243b0e8986e5c0c82b05cc262.patch
> > Synopsis: Add fixed-point arithmetic support for doubles, unroll
> >          floating-point primops.
[..]
> Looks good -- I agree with your assessment that this isn't mergeable until
> we precisely define what sort of impact this will have, but the strategy of
> "carefully avoid floating point or else crash" seems to be working well enough
> for now.

If you think it may be worth to add this to upstream, I could implement a
dedicated flag, something like `-ffixedpt=N`.  And depending on its value, the
native code generator could emit inline primops for the fixed-point arithmetic
to avoid the C function calls, while the non-primitive functions could be
incorporated in the run-time system as well.

> Do you want to submit the nopic one upstream for now and start some discussion
> going on that?

Sure.   What about submitting

https://github.com/pgj/ocaml/commit/acb827c29187de3fafd17561e6e53606de33a94a.patch
https://github.com/pgj/ocaml/commit/e63fdcbad6b403a52a7458e849136b08f97bb3d3.patch

as a single patch?


From pgj@caesar.elte.hu Thu Sep 05 18:39:30 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VHdWk-0005Wl-DE (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <pgj@caesar.elte.hu>); Thu, 05 Sep 2013 18:39:30 +0100
X-Cam-SpamDetails: score -3.1 from SpamAssassin-3.3.2-1519943 
	* -2.4 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [157.181.1.138 listed in list.dnswl.dnsbl.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mx3.mail.elte.hu ([157.181.1.138]:36007)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1VHdWj-0006Fw-8M (Exim 4.80_167-5a66dd3)
	(return-path <pgj@caesar.elte.hu>); Thu, 05 Sep 2013 18:39:30 +0100
Received: from login01.caesar.elte.hu ([157.181.151.130])
	by mx3.mail.elte.hu with esmtp (Exim) id 1VHdWf-0003yz-5i
	from <pgj@caesar.elte.hu>; Thu, 05 Sep 2013 19:39:28 +0200
Received: (Authenticated sender: pgj)
	by login01.caesar.elte.hu with local (Exim 4.72)
	(envelope-from <pgj@caesar.elte.hu>)
	id 1VHdWe-0006Jm-W3; Thu, 05 Sep 2013 19:39:25 +0200
Date: Thu, 5 Sep 2013 19:39:24 +0200
From: PALI Gabor Janos <pgj@elte.hu>
To: cl-mirage@lists.cam.ac.uk, opam-devel@lists.ocaml.org
Subject: Globally-installed OPAM Packages?
Message-ID: <20130905173924.GA15650@caesar.elte.hu>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.5.20 (2009-06-14)
Sender: Pali Gabor Janos <pgj@login01.caesar.elte.hu>
X-ELTE-SpamScore: -2.0
X-ELTE-SpamLevel: 
X-ELTE-SpamCheck: no
X-ELTE-SpamVersion: ELTE 3.0 
X-ELTE-SpamCheck-Details: score=-2.0 required=5.9 tests=AWL,
	BAYES_00 autolearn=no SpamAssassin version=3.3.1
	-2.0 BAYES_00               BODY: Bayes spam probability is 0 to 1%
	[score: 0.0000]
	0.0 AWL AWL: From: address is in the auto white-list
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 05 Sep 2013 17:39:30 -0000
Status: O
Content-Length: 1883
Lines: 36

[cross-posting for both Mirage and OPAM developers]
Hi there,

I am working on a FreeBSD/amd64 kernel module backend for Mirage, which
requires a dedicated cross-compiler due to some special requirements on the
generated code.  One of the consequences of those requirements that the
compiler cannot create ELF binaries for some of the dependent packages or
the unit tests fail.  This is fine, as binaries are usually not needed,
only the libraries.

Hence I have started to submit changes to the package maintainers, like
in case of dyntype [1].  However, Anil suggested to generalize this into
the concept of "no executables" which is basically an environment variable
which, when set, implies disabling building binaries for the given package.
This could be then set for the Mirage/kFreeBSD cross-compiler so no binaries
are built in that case.

However, there are some packages, for it would need binaries still in order
to be able to work.  An example of this is mirari [2], the Mirage build tool.
Anil recommended to use mirari of the host system instead, but the problem
is that mirari (and executables for OPAM packages, in general, I think) can
only be installed per toolchain.  That is, even if I install mirari with the
standard compiler, it becomes hidden once I switch back to the Mirage/kFreeBSD
cross-compiler to build the rest of the packages.

Apparently a host mirari cannot be installed on the system globally, unless
it is compiled from the sources manually, probably.  (Mirari is not available
as a binary package on FreeBSD unlike the OCaml compiler or OPAM.)  I cannot
build and install mirari to some global location either, as other packages,
e.g. mirage-www, depend on it as a package.

Are there any (non-hackish) solutions for this issue in the OPAM world? 

[1] https://github.com/mirage/dyntype/pull/4
[2] http://opam.ocamlpro.com/pkg/mirari.0.9.7.html


From Richard.Mortier@nottingham.ac.uk Thu Sep 05 23:33:55 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VHi7f-0000tc-E0 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Thu, 05 Sep 2013 23:33:55 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1519943 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine01-20433-7.icritical.com ([151.236.209.33]:58645)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VHi7e-0005xu-Fa (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Thu, 05 Sep 2013 23:33:55 +0100
Received: (qmail 19744 invoked from network); 5 Sep 2013 22:33:49 -0000
Received: from localhost (127.0.0.1)
	by engine01-20433-7.icritical.com with SMTP; 5 Sep 2013 22:33:49 -0000
Received: from engine01-20433-7.icritical.com ([127.0.0.1])
	by localhost (engine01-20433-7.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 19179-06 for <cl-mirage@lists.cam.ac.uk>;
	Thu,  5 Sep 2013 23:33:48 +0100 (BST)
Received: (qmail 19736 invoked by uid 599); 5 Sep 2013 22:33:48 -0000
Received: from unknown (HELO smtp3.nottingham.ac.uk) (128.243.44.55)
	by engine01-20433-7.icritical.com (qpsmtpd/0.28) with ESMTP;
	Thu, 05 Sep 2013 23:33:48 +0100
Received: from uiwexhub02.ad.nottingham.ac.uk ([128.243.15.132])
	by smtp3.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Richard.Mortier@nottingham.ac.uk>)
	id 1VHi7b-00023E-Pm
	for cl-mirage@lists.cam.ac.uk; Thu, 05 Sep 2013 23:33:51 +0100
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Phiho Hoang <hohoangphi@gmail.com>
Date: Thu, 5 Sep 2013 23:33:50 +0100
Subject: Re: Building mirage-www
Thread-Topic: Building mirage-www
Thread-Index: Ac6qh/4208WkNR5WTTOH/cAO3ay3zg==
Message-ID: <BECD3E0B-03BA-4C9B-91A4-DCDCAA533873@nottingham.ac.uk>
References: <CALZQg1b36OjX5cA28XAfJHGauNBQQkw9Swe+SQt-AGcknF7=9Q@mail.gmail.com>
	<612DC5B7-C3DB-4690-9728-A786E9903239@nottingham.ac.uk>
	<CALZQg1YvFtHGhOJrinV-Lg-f2TXeqTUNnfj5s__GrdG-vTRN9Q@mail.gmail.com>
	<0AD4BE76-6E71-423C-A091-267D2EA579C7@nottingham.ac.uk>
	<CALZQg1b7syokUncFhZ99OKhocMP-qd6jPYz+oZTGpSQ54Q2iXw@mail.gmail.com>
	<D58F317F-A283-414F-A1E4-D95D6FAB6CEA@nottingham.ac.uk>
	<CALZQg1aYxeAUKj3Aj9bguu_Z0waRJFF_Vgr6xJ8YPrrC632mmw@mail.gmail.com>
	<BF407EC3-E650-4D92-AB76-90581438C02E@nottingham.ac.uk>
	<CALZQg1Yc11dNC9FyndLEFomn5NvDCDYCkOKbp4y83jB0iR2q8Q@mail.gmail.com>
	<0DE626C6-2E27-4552-BD8E-566F140BF876@nottingham.ac.uk>
	<CALZQg1boC3q-TzSxcaMDtftbdAHrccir6Ov3r6VnAZvG6Di0tg@mail.gmail.com>
	<E5086844-DE7A-4BC2-B782-DEBE4AF6ED03@recoil.org>
	<CALZQg1b1FWqTLqR2+K-FO_7rNwTyQ36uW7e7ftanOjvH3N8=pQ@mail.gmail.com>
	<0CF4BE5B-43DF-4B8A-B5EC-0D5CC1B2CF44@nottingham.ac.uk>
	<CALZQg1Y7iOVOYXP6-iFwYfOcXtWx-5u-4xYAUYmUOgLQndcY0A@mail.gmail.com>
	<08041231-A249-4557-A806-260490B8DDAB@nottingham.ac.uk>
	<CALZQg1aEAkV37EoQTCbL6r3RodjN4m8jUEUREAP6Jn2SzEJzBA@mail.gmail.com>
In-Reply-To: <CALZQg1aEAkV37EoQTCbL6r3RodjN4m8jUEUREAP6Jn2SzEJzBA@mail.gmail.com>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine01-20433-7.icritical.com
Cc: Anil, "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	Madhavapeddy <anil@recoil.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 05 Sep 2013 22:33:55 -0000
Status: O
Content-Length: 1094
Lines: 30


On 5 Sep 2013, at 17:24, Phiho Hoang wrote:

>=20
> However, after rebooting, 'xen' and 'xcp' daemons seem to be running.

great! the page i couldn't recall at the time is

<http://openmirage.org/wiki/xen-boot>

...which has some info about booting a mirage  VM on xen (specifically, usi=
ng xl locally and then on EC2).

--=20
Cheers,

R.




This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From thomas.gazagnaire@gmail.com Fri Sep 06 11:12:01 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VHt1F-0006es-Nv (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Fri, 06 Sep 2013 11:12:01 +0100
X-Cam-SpamDetails: score -0.6 from SpamAssassin-3.3.2-1520253 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.212.177 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (thomas.gazagnaire[at]gmail.com)
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f177.google.com ([209.85.212.177]:50025)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1VHt1F-00040t-Do (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Fri, 06 Sep 2013 11:12:01 +0100
Received: by mail-wi0-f177.google.com with SMTP id cb5so658363wib.4
	for <cl-mirage@lists.cam.ac.uk>; Fri, 06 Sep 2013 03:12:01 -0700 (PDT)
X-Received: by 10.180.90.69 with SMTP id bu5mr1330912wib.1.1378462321051;
	Fri, 06 Sep 2013 03:12:01 -0700 (PDT)
Received: from [192.168.15.127] ([62.49.66.12])
	by mx.google.com with ESMTPSA id jf2sm2602583wic.2.1969.12.31.16.00.00
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Fri, 06 Sep 2013 03:12:00 -0700 (PDT)
Sender: Thomas Gazagnaire <thomas.gazagnaire@gmail.com>
Subject: Re: Globally-installed OPAM Packages?
Mime-Version: 1.0 (Apple Message framework v1085)
Content-Type: text/plain; charset=us-ascii
From: Thomas Gazagnaire <thomas@ocamlpro.com>
In-Reply-To: <20130905173924.GA15650@caesar.elte.hu>
Date: Fri, 6 Sep 2013 11:11:58 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <FD964E23-B031-4520-8FAA-4C53E59614DD@ocamlpro.com>
References: <20130905173924.GA15650@caesar.elte.hu>
To: PALI Gabor Janos <pgj@elte.hu>
X-Mailer: Apple Mail (2.1085)
Cc: opam-devel@lists.ocaml.org, cl-mirage@lists.cam.ac.uk
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Fri, 06 Sep 2013 10:12:01 -0000
Status: O
Content-Length: 1259
Lines: 35

Hi,

> Are there any (non-hackish) solutions for this issue in the OPAM =
world?=20

Unfortunately not really, so I'm very interested to get your use-cases =
and your feedback on this.

If what you need is just to not generate binaries and you never need to =
link your libraries, I guess you can go with a simple scheme where you =
install host and target library and binaries in different OPAM switches, =
configure OPAM to use the target env by default and add the host bin =
directory to your PATH (and path your target compiler to never generate =
binaries).

    opam switch host -alias-of system
    opam install PKG1 .... PKGn --switch=3Dhost # host libraries and =
binaries

    opam switch target -alias-of <your patched compiler name>
    eval `opam config env`
    export PATH=3D$(opam config var bin --switch=3Dhost):$PATH
    opam install PKG1 ... PKGn  # target libraries

I guess it would be annoying as you had to duplicate every package =
installation on the two switches (using `opam install PKG --switch=3Dhost =
&& opam install PKG).

Less hackish solution require to have a whole build system chain (ie. =
ocamlopt + ocamlfind) which manage cross-compilation well, and I'm =
afraid we don't have that yet out-of-the box.

Best,
Thomas=


From hohoangphi@gmail.com Fri Sep 06 12:31:17 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VHuFx-0001RO-Ae (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Fri, 06 Sep 2013 12:31:17 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1520253 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.214.170 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (hohoangphi[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-ob0-f170.google.com ([209.85.214.170]:37607)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1VHuFw-0003Tb-fw (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Fri, 06 Sep 2013 12:31:17 +0100
Received: by mail-ob0-f170.google.com with SMTP id eh20so3353772obb.29
	for <cl-mirage@lists.cam.ac.uk>; Fri, 06 Sep 2013 04:31:15 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.182.101.165 with SMTP id fh5mr1531499obb.58.1378467074993;
	Fri, 06 Sep 2013 04:31:14 -0700 (PDT)
Received: by 10.76.177.202 with HTTP; Fri, 6 Sep 2013 04:31:14 -0700 (PDT)
Date: Fri, 6 Sep 2013 07:31:14 -0400
Message-ID: <CALZQg1ayimHpJN+Ht5X58_yEA=ce3sbKPh_O4HhPOpOarmSnOw@mail.gmail.com>
Subject: Mirage Hello World (Re: Building mirage-www)
From: Phiho Hoang <hohoangphi@gmail.com>
To: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
Content-Type: multipart/mixed; boundary=e89a8f6436d256f2d004e5b56067
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	Anil Madhavapeddy <anil@recoil.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Fri, 06 Sep 2013 11:31:17 -0000
Status: O
Content-Length: 158901
Lines: 2105

--e89a8f6436d256f2d004e5b56067
Content-Type: multipart/alternative; boundary=e89a8f6436d256f2cb04e5b56065

--e89a8f6436d256f2cb04e5b56065
Content-Type: text/plain; charset=ISO-8859-1

Hi Richard,

> http://openmirage.org/wiki/xen-boot
> ...which has some info about booting a mirage  VM on xen (specifically,
using xl locally and then on EC2).

Thanks for the tip, I will try it out after finishing the first steps.

I followed the First Steps from "Hello Mirage World":
http://openmirage.org/wiki/hello-world

$ make build-basic

completed successfully but NO greetings were received from:

$ make run-basic.

Please find attached the screen shots.

IIRC, Mirage somehow depends on RWO?

(My new VM with 'xen' and 'xcp' does not have packages from RWO (I lost the
link to the page with instructions on installing them)

Did I miss something else?

Thank you for your help.

Regards,

PhiHo

--e89a8f6436d256f2cb04e5b56065
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi Richard,<div><br></div><div>&gt;=A0<a href=3D"http://op=
enmirage.org/wiki/xen-boot" target=3D"_blank" style=3D"font-family:arial,sa=
ns-serif;font-size:13px">http://openmirage.org/wiki/xen-boot</a><br style=
=3D"font-family:arial,sans-serif;font-size:13px">
<span style=3D"font-family:arial,sans-serif;font-size:13px">&gt; ...which h=
as some info about booting a mirage =A0VM on xen (specifically, using xl lo=
cally and then on EC2).</span><br><div class=3D"" style=3D"font-family:aria=
l,sans-serif;font-size:13px">
</div></div><div><span style=3D"font-family:arial,sans-serif;font-size:13px=
"><br></span></div><div><span style=3D"font-family:arial,sans-serif;font-si=
ze:13px">Thanks for the tip, I will try it out after finishing the first st=
eps.</span></div>
<div class=3D"gmail_extra"><br></div><div class=3D"gmail_extra">I followed =
the First Steps from &quot;Hello Mirage World&quot;:</div><div class=3D"gma=
il_extra"><a href=3D"http://openmirage.org/wiki/hello-world">http://openmir=
age.org/wiki/hello-world</a><br>
</div><div class=3D"gmail_extra"><br></div><div class=3D"gmail_extra">$ mak=
e build-basic</div><div class=3D"gmail_extra"><br></div><div class=3D"gmail=
_extra">completed successfully but NO greetings were received from:</div><d=
iv class=3D"gmail_extra">
<br></div><div class=3D"gmail_extra">$ make run-basic.</div><div class=3D"g=
mail_extra"><br></div><div class=3D"gmail_extra">Please find attached the s=
creen shots.</div><div class=3D"gmail_extra"><br></div><div class=3D"gmail_=
extra">
IIRC, Mirage somehow depends on RWO?</div><div class=3D"gmail_extra"><br></=
div><div class=3D"gmail_extra">(My new VM with &#39;xen&#39; and &#39;xcp&#=
39; does not have packages from RWO (I lost the link to the page with instr=
uctions on installing them)</div>
<div class=3D"gmail_extra"><br></div><div class=3D"gmail_extra">Did I miss =
something else?</div><div class=3D"gmail_extra"><br></div><div class=3D"gma=
il_extra">Thank you for your help.</div><div class=3D"gmail_extra"><br></di=
v><div class=3D"gmail_extra">
Regards,</div><div class=3D"gmail_extra"><br></div><div class=3D"gmail_extr=
a">PhiHo</div><div class=3D"gmail_extra"><br></div></div>

--e89a8f6436d256f2cb04e5b56065--
--e89a8f6436d256f2d004e5b56067
Content-Type: image/jpeg; name="HelloMirage.jpg"
Content-Disposition: attachment; filename="HelloMirage.jpg"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hl9bha230

/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcG
BwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwM
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAKIBIADASIA
AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD4h+GX
wa8V/GjUriy8J+H9V8RXlpF580Gn27TyRx527yq87ckDPTJHqK7T/hg740f9Eu8cf+Cib/4mvpL/
AIIG/wDJynjD/sWW/wDSqCv1crqpUIyjzM8/EYyVOfKkfgj/AMMG/Gj/AKJd44/8FE3/AMTR/wAM
HfGjP/JLvHH/AIKJv/ia/aH9oj9qPR/2dUtI7zTrvV726srjVGt4tU0rSY7Swt57S2mu5bvVLuzs
0RbjULCEIZ/Nd7uPZG4WRk5/9nb9urw5+0R4/Hhq30bVtD1K70iXXdKkm1TRtYsdbsobhLa5ltrv
Sb69tz5M8sMbq8iNulwobZJs6HgGqftmnyt2vbS9r2vtezTtvZmf12q1zcp+P3/DBvxo/wCiXeOP
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
r+Mf21/iF46+I+keLr698OReI9FZzBfWHhTSdPecNGIWjuBb2yLdRmJfL8ucSJsLLjazAyWv7bvx
A07xjo2uWkvg+wu/D6XK2EFp4K0W3sbdrhUSeT7IloLdpXSNFMrRl9qKN2ABXklFNabBvudn42+P
fiP4g/DzRvCupNof9ieH7ie6sIrTQLCylhkmOZczQwpK4Y4+V3K/KmANq44yiiiyWwBRRRQAUUUU
AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABX2/8A
8G3v/KbX4Cf9hW9/9Nl3XxBX2/8A8G3v/KbX4Cf9hW9/9Nl3QB/Y7XEftF/8kg1L/rtaf+lUVdvX
EftF/wDJINS/67Wn/pVFTjuiZ/Cz8/P+Cp//ACYH8Rv+vS3/APSuCtr/AINfP+TBPF//AGUC8/8A
TdptYv8AwVP/AOTA/iN/16W//pXBW1/wa+f8mCeL/wDsoF5/6btNrpxXxI4su/hv1P0gooorlO8K
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP56/
+CBv/JynjD/sWW/9KoK4v/g7H8U3PgnxL+zdqtnFp011YyeI5Y0v9Pt9QtmP/Eq+/BOjxSD/AGXR
h7V2n/BA3/k5Txhzn/imW/8ASqCpf+DkH4F6T+0h8Zv2cvCWr+J5fCEV7Y+MLqHUhpn2+GJ7e302
4ImUSxssflxSZdPMYEKBG2cjrvahzbW/zPMnb62r/wBaH413/wC258QtS+N0PxFmuvCzeL4bZrQX
g8H6OsUisGUs9uLUQSSbWK+a6GTbhd2AAKNr+114807T/CttZajpGmL4KvptR0eTT/D+n2c1tLMS
Zd0kUCvLG4O1o5WaNlAUqVAFesfAX9mf4ceJfiV4SvbDWpvG3gXxJeX/AIf1B/EWjT6JdaLdx2bT
x3Iis7ybzEC4dSJGyY5FeH7m/wA4+JPwQ8C+Cz4N1vTvG/iTV/AviiW7t59QfwvFbapZyWsirJss
zetHKpEkTITcoTuYMqFeePS6h/S669t003o73TPTfWT/AOH6fPZq2+naxyfxU+OGtfGJLIatZeEL
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
p4v1O28D3GuWhlbcPBGix2t00u7e9xbLaCC4clmO+aN2BwQQQCPOKKOt/X8d/v6h0t8vkjvfjr+0
p4r/AGkNUt77xY3h24vrbOLnTvDWm6TNMCqIBK9pbxNMFWNQvmFtoGFxk54KiiiyWwXYUqsVORwR
yCO1JRQm07oDvda/ad8eeIfjVbfES88SXk3jK0aExakUjDARRiNVKBfLZSg2spUrIGfeG3tm9f8A
7WHivUPGOh679g+HltqPh55JbP7H4A0G0gLOoUmWCKzWKcjAKecj7G+ZNrc15pRRH3bOOlhWVrfL
5dj1HUP2xvHeo/F+x8eed4WtfFFgLlVurLwjpFpFc/aEkSc3EEVssNyXWWQEzI5IY81W1/8Aau8Y
eJvFWh6reDwi/wDwjaTJp+nJ4P0iLR4DMCJXOnLaizeRuMu8LOdkfP7tNvm9FKKUfh0G23e/U9X8
Y/tr/ELx18R9I8XX174ci8R6KzmC+sPCmk6e84aMQtHcC3tkW6jMS+X5c4kTYWXG1mBktf23fiBp
3jHRtctJfB9hd+H0uVsILTwVotvY27XCok8n2RLQW7SukaKZWjL7UUbsACvJKKa02Dfc7Pxt8e/E
fxB+HmjeFdSbQ/7E8P3E91YRWmgWFlLDJMcy5mhhSVwxx8ruV+VMAbVxxlFFFktgCiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK+0P+DeXxAnhb
/gsr8DtQkgnuVtdSvX8mDb5kp/s27AVdzKuST3IHvXxfX2B/wQN/5S8/BT/sJ3X/AKQXVAH9dn/D
T8P/AEJ/i7/vrT//AJKrl/jJ+0HB4l8AXFh/wjXiSx+1XVpGJ7g2ZijJuYsbtlwzdeOFPWs+uc+K
v/IoD/r/ALH/ANK4acd0TP4WfOH/AAVP/wCTA/iN/wBelv8A+lcFbX/Br5/yYJ4v/wCygXn/AKbt
NrF/4Kn/APJgfxG/69Lf/wBK4K2v+DXz/kwTxf8A9lAvP/TdptdOK+JHFl38N+p+kFFFFcp3hRRR
QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB/PX/wQ
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
iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK+wP8AggdFPL/wV0+D
P2a2nvZkv72RbeBQ0s23TbttqAkZY44GeTXx/X2//wAG3v8Aym1+An/YVvf/AE2XdAH9PX/CQ69/
0T/x7/4Lk/8AjlY3jvUNZ1XQEhl8G+LtNi+22jvc3tmkUEQW5iY7m3nHTA45JAr2v4x/tVaH+z14
4htPG0FzoHhe+017qy8TSZlsZbuISvNYOEBeOfyY1kiBB8/MiJ86BXq+L/G2ofEf9l5tc1Pw7qXh
S51KaGVNL1FlN5bwfbkEBmVeI5HiEbtFkmNnKEkqTTjuiZ/Cz4g/4Kn/APJgfxG/69Lf/wBK4K2v
+DXz/kwTxf8A9lAvP/TdptYv/BU//kwP4jf9elv/AOlcFbX/AAa+f8mCeL/+ygXn/pu02unFfEji
y7+G/U/SCiiiuU7wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
KACiiigAooooA/nr/wCCBv8Aycp4w/7Flv8A0qgruv8Aguw/i7wh8ev2efG/hP4X/ET4nTeE7XxT
GYPCSSCXTZruDT4IppZFs7pVGwzlFaMbmTOSEZT4l/wR7/aE8G/s4/G/xPq/jXXLfQdOvNDNnBNL
HJJ5kpuInChUVm+6jHOMcdeRX6G/8PT/AIA/9FG0/wD8Abv/AONV207OlytnlYhSVfnUbo/APUdB
/awtfiLZ63oPwN8baJb6JNePo9inwfsxBZrchUdpIYdLitppzFHGjTmAMQnAQfKMGL4VftVpovhz
Tm+Bniuew8J3FzdabbXHwZt54o5LgETeYr6eRMDnhZd6qUjKgFEK/wBDX/D0/wCAP/RRtP8A/AG7
/wDjVH/D0/4A/wDRRtP/APAG7/8AjVQsNBKykafW6r+wfgDqlh+2JrHxNsPGU/wX8UnxLpscsMV8
nwTs42dZI1ibzVXTQsxEaBVMgYoMhSu45xrH4bftbaXp/hi1tPg78QbKHwddXF5pX2X4UrA0T3AY
TrIyWIaeKRWKvFMXjZcKVKgAf0L/APD0/wCAP/RRtP8A/AG7/wDjVH/D0/4A/wDRRtP/APAG7/8A
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
59v3x8IrbTG8beNb618Uazqmq6ld2k+q+H7/AFiG9HhCb7FCFtEhiLC23oFlZNzB3kZ1JVgauN25
eTdvTS333v5aJ2Zg42hGXVrXrr118rpebTa0O9rB+J/xM0T4NfD3V/FXiS9/s7QtCtnvL258mSYx
Rr1xHGrO7dgqKWYkAAkgV5549m+P1j4w1e98L23wf1TQBN9n0vRtUudRsLx4vJU/a59QjjmRWE29
fsq2ZBQK32kHK1y3x8ttW+LHxH+Dnwq1ie3vL2S4i8a+MLjTrWSCwlg0poXjjVWkdo0m1J7VkR3f
MdvMCxxkpPmaXVtfc7tvz5Ypya3tpvdI5VHWT0tf/geTb91X6+Wp9EQyieFXXO1wGGVIOD7HkVme
MvGFp4E0B9SvYtUnt45I4ymnaZc6jcEu6ouIbeOSQgFgWYLhVyzEKCR8A/FKx8X3fw6+Jvjuz+KX
xO0nxJo/xpg8N6I1p4gm+w6Tp9xqljZSwCyctazrsuZWXz4pNjbdm0DB0PjXrfiD9nXV/jn4N8Oe
NPHz6Lo1x8PdX0ttU8TX2qX2mPqGsm1vIory4le58iWO1TMbSMuZZcYVytTQqe1pRqtW5lF/+BKE
l+EvvT6WvosO3JxT2k4/NT5H+OvofoHRXxPJ4rj8K+Lv2tfiJ4w8Y/FBtJ+HWrvYaXY6P4gmjj0W
3fw9p0krW1q8q2jTGScujXKtHE43jy90jN5H4g+NfxL/AGc9c+MPh+LWbjwjFB4S8L6kwm+IWoeP
m8JpfaxLZ3epfatTiR4JEs2MhiBkgXyEkyQWypVLcqe8opr5xc0n8lv33SWolQbu10dv/JoxuvnJ
fLzsn+mlFfnh+0d4v1b9in49+M7f4b/EDxv4gm0X4E+IPFqeH/EHiu98RxWd9DdWS2+ost3LLISy
CXCljGBFJ5arvk3ehfsm+DPi34U8cab4isdZ8KavoPiPwVPewaZf/GTWPFY8V3m62ktdRia701RY
QYlkWVrNGixcxYgOxMarVKS2afytKpH8XTduuq0+LlUqVo3fXb7ov/29eW+q0v8AZtYA+J+hn4oH
wZ9u/wCKlGljWjZ+TJ/x6eb5Pmb9uz/Wcbd27vjHNeCftI6P8ZviX8MvD6XGk6DpOo2WuyXmr+E/
CXxHvbG98VaVHaSfurXVfsllNBcLcPFJ5Q8uNxEFe4RJHx8p/GP9oO4k+Kfw71LwZq/jTw58OPGX
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
L+GF7d2UVz/wjlpcXTSWSnIBnhu7m4ureRwN/lzMrbWRggR1J85oo5Xu3/Wv+fW5V1rppb8dP8vL
fcKKKKskKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACv1f/4M2/8AlLhqP/ZP9U/9KbGvygr9X/8Agzb/AOUu
Go/9k/1T/wBKbGgD+p2vMf2qP+RN0j/sKr/6Tz16dXmP7VH/ACJukf8AYVX/ANJ56un8aMq/8OXo
z8yv+C6H/Jltn/2Mtp/6JuK9j/4NfP8AkwPxd/2UC8/9N2m145/wXP8A+TLrP/sZrT/0TcV7H/wa
+f8AJgni7/soF7/6btNrXE/Gc+A/hH6QUUUVznaFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH4Z/8G+5z4V+KH/X3p3/AKBcV8b/APBx3/ymL+C3
/YsaH/6e9Qr7I/4N9/8AkVPih/196d/6BcV8Kf8AB05r134W/wCCl/w/1Owl8i+07wDp11by7Q3l
yJqupsrYIIOCAcEEV6VGoqahUlsmn9zPIqwc604Ldpr8DyHwb4b/AOF+/HH9pDxP47+H+pfGBvCW
oqLXUdS1DV2/swHV47QRPLbToPJS1eaTY3IW1yrIivnT8YfsdS+Cv2p/BTeCfgLruoadZ+INS0O+
soU1+fyo7LUlhi1OSaC4SaK58iSKUsjxwgsjCJVIz8T/ABV+KesfGjx1feJNeOmPq+pP5lzJYaVa
6bFM/dzDbRxxb2PLMFyxJJJJJrna8vC/ulSutYKz/vbb/j5676I9eunUlVaek3p/d32+9fdtqfX3
w7/ZC12b/gpPqvg3xb8HvF/iXSNX1O/uXsdRtdWivE0xrt0XUo5kZZW5AVZ5fNiLP8yuSKX4X/AX
SvH/AO0ne6RrPwF1fwW3hXQJ76fwa9nrmraxrSNNHHbSJYfarW6nuQswaQxXFvAUiaUIgUxv8gUU
UY+zhGD1srfg0n6rfrqvudV883NaXaf4p/c7W9Pnf7w1L9hXTdD/AOCgvhTwxZ/BjxVrng7xf4et
dTvdGurLUbWbSA6ql1NF5F1PJAYZgE2z3FysTy7Jd7AKPPPh98NtU1P9s7wtoml/sza9oOpaVJFJ
feHJT4he8t7NrlPK1OXZNFdRTRq65mRo4GYKwhj+6flKiroP2c1J62bf4uy+SaXyvo7Wzqx54uO1
0l+Cu/na/wDTv9H634O8cfsuf8FILIy2fjXwPqM3jJpdMubz7XZXt3ZS3zw+ak0hEsscib1Mm5vM
BfJbJryr9qD/AJOW+If/AGM2pf8ApVLWF8NPiNqnwk8c6d4j0X+zhqulSedatfabbajDG+CAxguI
5ImIzlSyHawDDBAIo+KPEt74z8TajrGpTfadR1W6lvLqbYqebLI5d22qAoyxJwAAM8Cso03GFKF7
8ikr+vJb/wBJd/Nm0pXnUna3Ny/hzX/9K0PcP2BfFnjCw1T4keH/AARq/iCy8QeKPB11bWFhpF7L
BdatcRzQSCKJI2DSy+StxtRcsQXCglsH2b/hBPF/xe+Lvwr8G/E3QPiL8Tb7wB8Orm+1nwsslzqe
q6NLLf3fk+bYG6trh2EUuml7eOeGXyhCd2yPafhqitZO6+78Oe3/AKW/uMeXS3nf7+VP8I/fvfY+
3PFnwD07RP29vh/o/wAPfgpqt4g0TTtQ1nw20Guwalo8r3TLLfXNtDevd6bKgMTohu5UVGgkZiZd
q53hT9lLVPDX7T3xttvGfwP8UeLrbRtL1bxFpdtq8Os28xWO6cW1wZYpEkmhlKsGdyxkVH2uj/vB
8aUVMk2tN7TX/gez/wC3dLfppa42T1/uf+S7/wDgWt/16/Zj/smWUnjrT9ai+DWoPqWv/DuHxPoH
w+A1ZbPXb83SW8y25Mv26WOO2Y3hijuDIcD5/L+WvMv+Cgfw20j4T+L/AATpmn/DcfDLUL7wtbav
q+lSXd7Pcx3dxJLvjkFzNIY1QIAkeFdFO2Qu4LV4r4J8Y3fgDxRaaxYw6VPd2TFo49S0y21O1YlS
p329zHJDIME4DoQDgjkA1e+KPxX134y+KP7X1+5tp7pLeO0hjtbKCxtLSGNdqRQ28CJDDGOTtjRR
lmbGWJJUV2uXT3m/l71l525lv/KvRKndfFr7qXzXLr8+Vv8A7efqeh/sKfCO2+MHxvktr/wP4j+I
OmaTpV1qN3pOiWz3l0QoWKOX7LHc2s1yizSxboobiKQglt2FYH3L4ofs2+B4f2nBpPhv4V3cmp2f
w/j1my+H11PqGn6hrWsG4KvFdWb3M15butuz3Isobt5JIbeJllBlYL8T0VTd7W6f5P8AzX3elko7
36/5r/Jr5/f9q+C/2ZdP8W/G3TINe+AUngi40zwnPquo+DLeXVte1XW5/tSwJLBpAvoNRhI8wOIZ
bqMeVG85d0AVuo8VfsS6H8OPj54sMPwJ8R+JPDY+G6+LLTS9RttVsv7Mv0VQ8YFteTOkYlDrJDLc
zyIA6eajjcvwFRUTTcbR0fvfip2+ack/+3Va19KhpK71V0/ucbr0ai1/28279fuTw5+yjZReJbjx
Fd/s7ahfaRqvwt/4TGHRQNejstPvo3ZAYZRP55gkCpI6SyyMVkYI8eVZY/BH7JfhC++NehX3iX4X
+INHg8V/DpfEui+DbDTtQvY9X1ITrFLFaRTahbXdwot9115KXvmHqGZcRt8P0VUrOV1trp5N1Py5
o6/3F30mKajZvWy+9ez1+fJL/wADfz+0/Ff7MfhSL46a3H4a+CfxGuNZtPB8Oqad8PPFOh6jojax
fG7W3nntbWO9nv5bWOEtL5a3bSeYkrF/KjZBx/8AwU58H+IfD83wZu9c8Ha94KE/gGG0TTdRnurl
dPlhv70vaRyXJaVViSWHEEjtJBHJFGxJAJ+XKKHdwUezv/6V/wDJeb07aJ2XNf8ArZfqr/Pbqet/
sd/DWx+JnjrXYZfDD+O9Z03Q577QvCqXUsB8RXiyRL5OIWWeURwvPcGGB0lkFuVVhk17VH+z1Z6x
4+jiuv2dp/D3jOw8Iy6nZ/DpNc1GWfxPe/bEhMr2bSnUraOOB5JhbeassqweYshjJNfHVFEtbeX/
AAf8193ezQlv/Xb/AC/H5P7e8J/syaTF4u1e71b9nu9bVbb4d3XiTVPBTtrsQ8N30F1LFbv/AK/7
VHDcxxrI0Nw7uVLmN4w8bJe+An7O13oP7e3wK1TT/gdcx6d4y0rTvEM+iSWWsT2OkkXISW9gLTGf
y0Cwy5nlljU3A3AqUA+E6Kd2pKS6f5z/APko+nIrWvonG8ZRfVW/9I/LlfrzO/n9kjV/jL8fP25v
B0Pjj4OeNNT1vSoLZ/8AhHdRm8XXFxplm10AdSRp7976DazDEizLCGRSVznOTF+ybqmh/tZfFXTv
EXw08UeI/EFhBqGseEvB+rw6lDP4tB1FYBKCjJd3SRwNPcfupA8ptyd5AfPyZWr4J8Y3fgDxRaax
Yw6VPd2TFo49S0y21O1YlSp329zHJDIME4DoQDgjkA0rL3bdOb581vyt+e2lm7+958v/AJL/AJ3/
AOH6+1f8FA/htpHwn8X+CdM0/wCG4+GWoX3ha21fV9Kku72e5ju7iSXfHILmaQxqgQBI8K6Kdshd
wWqT/glt4Yu/Ff7cfgOG28EJ46SDUoLi5tntbu4XTIlmjzekW7oR5RKndJuiBYblPFeP/FH4r678
ZfFH9r6/c2090lvHaQx2tlBY2lpDGu1IobeBEhhjHJ2xooyzNjLEnnKKTcZOT7t+l22l8thVI88F
DyS+5JN/Pc+yRq/xl+Pn7c3g6Hxx8HPGmp63pUFs/wDwjuozeLri40yza6AOpI09+99BtZhiRZlh
DIpK5znI8JfA/wCM3wh/4KVS2fhbwz8WNE1j/hI5b5TZ2mpJqE+jNqPlvcvJjzZLZxw0rEq+fmYk
18m0VdKSp1Kc0vh5vndp/p87vysqkOeE4P7Vvla/+f4L5/Z/hT9l21m/b3+KGm/FLwN4xku511bX
PDPhx9CuWuvEzm/2q0FsLuxmukEJuJVWC4Rn8g7S+0xv49+3n8MvD/wx+LmnQeHfA3xC+HtvfaRD
c3Wk+K9An0VvtG+SN5bSCe6uphbMEUjzbiVvM80btoVV8Rornp0+SnCmvsq3ra/+f4G85805zf2n
f02/y/E+k/8AgnDDrU+qfFL7L4Y8QeM/D0fgi9m1nRLCS6jttQCNG8KXLW/zBN4J4KtgPtZD8w9N
8Efsl+EL7416FfeJfhf4g0eDxX8Ol8S6L4NsNO1C9j1fUhOsUsVpFNqFtd3Ci33XXkpe+YeoZlxG
3w/RWsvekpdkl/6c/Wafly+emMU0mr7u/wD6R+kGvNS8tftH/hUfiP4eft9eB1+CXgD47eAtQktb
K91jTJfDuoaPdww/ahDczQQ/abq5XT3UIGM1xIN5kBbbtUY+jfCD41fDn/gp7fDw34X+KOha7deK
J9UI03Tb+1u5tIk1IpJcfu1Dm0YHaz/6s5wTXyNRV0p8lSnUevJzfPmadvRW/PuKpBShOC05lH5W
T19Xf8j631P9l/WY/wBsn4sw+KPhj4l8Q+Io/wC0te8L+Dr60vbB/FW/UfKEqLF5dzcQxxPNPtt3
VpPIOHCq9cD+0P8As7Xk/wAVfh54e0bwDceAvHPjuzhiufBMr3MP9nXsl5LawBft8jTQrOqRyBJ5
WK7y24RugXwaisKFJU4Qg9VGy9Ur/wDA77bbW1qzc5zmt5fht+vp27391+AP7OlzZfHjxv4R8S+D
X8WeNvBdheJZeC0v2U61qkE8cMltutXEk4ija4nMdtIryi2Ko4zmvUI/2erPWPH0cV1+ztP4e8Z2
HhGXU7P4dJrmoyz+J737YkJlezaU6lbRxwPJMLbzVllWDzFkMZJr46oq9Wo33X46P/Nd9u9mpaV3
bZ/lp/l5b/J/b3hP9mTSYvF2r3erfs93rarbfDu68Sap4KdtdiHhu+gupYrd/wDX/ao4bmONZGhu
HdypcxvGHjZL3wE/Z2u9B/b2+BWqaf8AA65j07xlpWneIZ9EkstYnsdJIuQkt7AWmM/loFhlzPLL
GpuBuBUoB8J0VV2pKS6f5z/+Sj6cita+kuN4yi+qt/6R+XK/Xmd/P2r9uf4l/E34jfFOwPxR8NeJ
/B+sWOnIltpWtXWuTyJCzufOUavc3Fwoc5HyuIz5fC53E+K0UVEVZWLbuFFFFUIKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK/V//AIM2
/wDlLhqP/ZP9U/8ASmxr8oK/Tr/g0y8Saj4W/wCCoupXGlNZR3jeBdSjV7uBpolBubInKK6E8D+8
OvfpQB/WFXmP7VH/ACJukf8AYVX/ANJ565v/AIXF48/5/vCP/gluP/kuuT+K3xJ8UeII9CtNXuNB
ntJdSPFnp0tvIGFtcEHc08gxweNvfrV0/jRlX/hy9GfDX/Bc/wD5Mus/+xmtP/RNxXsf/Br5/wAm
CeL/APsoF5/6btNrxz/guf8A8mXWf/YzWn/om4r2P/g18/5ME8X/APZQLz/03abWuJ+M58B/CP0g
ooornO0KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKAPwz/AODff/kVPih/196d/wCgXFfG/wDwcd/8pi/gt/2LGh/+nvUK+yP+Dfc58KfFD/r707/0
C4r5W/4OSPBWixftzaD481rxPrnhxfCXhTw7aWZ0rQYdWmlubjUPEE8blZrq3RVT7CepbJccYzXR
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
+/8AkKj2U+wfWaX8yPzPor9MP+IVP9o7/oZfhD/4OL7/AOQqP+IVP9o7/oZfhD/4OL7/AOQqPZT7
B9ZpfzI/M+iv0w/4hU/2jv8AoZfhD/4OL7/5Co/4hU/2jv8AoZfhD/4OL7/5Co9lPsH1ml/Mj8z6
K/TD/iFT/aO/6GX4Q/8Ag4vv/kKj/iFT/aO/6GX4Q/8Ag4vv/kKj2U+wfWaX8yPzPor9MP8AiFT/
AGjv+hl+EP8A4OL7/wCQqP8AiFT/AGjv+hl+EP8A4OL7/wCQqPZT7B9ZpfzI/M+v1f8A+DNv/lLh
qP8A2T/VP/SmxrkP+IVP9o7/AKGX4Q/+Di+/+Qq+0v8Agg7/AMEffi//AMEqf21774n+NLnwL4g0
ubwveaJFaaJqtw1wZpp7ZwzebbIoQLE+SCTnaMckg9lPsH1ml/Mj9j/i542+MHw5+IWoWnhrw7pv
jfSvF/lxeHbiRvssXhK8WNFlGokfNJZFUluFlT955ga3x+8hYW/jvpmoaL8HvCdnq+p/23qtpc28
N7qP2Zbb7fOtpMJJvKX5Y97AtsXhd2B0qh/w13qP/Qmn/wAGyf8Axuuc+JPxxvfilp1jZS+Hjpkd
tdi5M325Zs4jkTG3av8AfznPbpVQpTUk2jOrXpunJKXQ+Dv+C5//ACZdZ/8AYzWn/om4r2P/AINf
P+TBPF//AGUC8/8ATdpteOf8Fz/+TLrP/sZrT/0TcV7H/wAGvn/Jgni//soF5/6btNqsT8ZGA/hH
6QUUUVznaFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
AFFFFAH80f8AwTs/4KJWX7C+h+KLa58LXXiR/Ek1vKDFfLai3EKyDuj7s+Z7Y2988fSH/EQRpX/R
L9Q/8Hif/GK/MvFG7b1rWNacVZHPPC0py5pLU/TT/iII0r/ol+of+DxP/jFH/EQRpX/RL9Q/8Hif
/GK/MvHyk5H0oPb6VX1iZP1Kj2P00/4iCNK/6JfqH/g8T/4xR/xEEaV/0S/UP/B4n/xivzLoo+sT
D6lR7H6af8RBGlf9Ev1D/wAHif8Axij/AIiCNK/6JfqH/g8T/wCMV+ZdFH1iYfUqPY/TT/iII0r/
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
Jd7Et6aa/wBf0vN32PjD4dfBrxf8YJL9fCXhTxJ4obSoPtV8NI0ya9NnF/z0k8pW2JwfmbA4o+HX
wa8X/GCS/Xwl4U8SeKG0qD7VfDSNMmvTZxf89JPKVticH5mwOK+ovhB4a0rVv+Cj83ibTbL4b/DX
wzo9wlzeWMvxJ0K4srVp7J1Zre5WaGCcPLuYx2qlIDII9saqqjjf2H/g3feBP2wdNn1nX/hzptp4
Tl36hd3HjzREtcT20oTyZvtfl3PJAYQM+wnD7TSV2vl/T9Nv89Snp+H6fj/Xr81UV9IfAHwFP8ON
P8caVZN8Grz4n2k+nizl8S634f1PR1051le5NpNdzPpctxv+yq25nkVDIEAIkx51+1smjJ8bLv8A
sePQIZHsbKTVY9Blgk0hNSa1ia8FoYGaHyROZMCImIHcI/3YQUN6/wBdr3XddG+j0BX1v/X/AAXu
l1Wp5pRRRTAKKKKACiiigAooooAKKKKACu9+Gnxf8P8AgTw+9nqnws8B+NLhpmlF/rN3rUVwikAC
MCz1C3i2jBIyhb5jliMAcFRRcDpPid450zx9rcN1pXg3w34JgigETWWiz6hLBMwZj5rG9ubiTcQQ
PlcLhR8uck83RRRsDdwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACv2j/4M6NZ1XS/i
J8eV0vVrvSHl07RTJLbxQSM4Et7hT5sbjHOeADwOa/Fyv2d/4M7v+SmfHb/sGaP/AOjbugD93P8A
hKvF/wD0O+u/+Aenf/I1cj4717W9Q8Z6PDqmu32sR/Yrt0FzBbR+UQ9sOPJiTrnvnoMYrqa5Dxx/
yPmjf9eF7/6Mta0o/GjDFfwpH51f8HBH/IqfC/8A6+9R/wDQLavqz/g18Of2BPF3/ZQL3/03abXy
n/wcEf8AIqfC/wD6+9R/9At6+rP+DXz/AJME8X/9lAvP/TdptXiPjIwX8FH6QUUUVgdQUUUUAFFF
FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAfj5/wAEMDn9
i68/7Ga7/wDRNvX5rf8ABcL4mRfB/wDbP+LTXms/FltL8c6+mk32i+HPGw0PS7iK38M+HixngNrO
s7SC8KNuwNsajBr9Kf8Aghh/yZfef9jNd/8Aom3r8ov+DkH/AJO+8R/9jldf+ov4SrkzpOcMPRba
jOdnZtNr2c5Wumnuk9z5HMk546hQ5mozm0+WTi7KnOW8WmtUno/LY+Jfj14L8N+G9P8AA+reFrXX
LDT/ABdoD6rJaarqMV/NbSpqV9ZkCWOCAFStorY8vILkZPFee16X8dv+SXfBf/sTbj/1IdZrzSuf
KJSeHtJt2lUWru7RnJLV6vRLV6nq5DKTwjUm3yzqxV227RqTirt6uySV279wooor0z2QooooAKKK
KACiiigAooooAKKKKACiiigAooooAK6H4a/FvxV8GPELav4P8TeIPCmqvC1u17o2ozWNw0TEFozJ
EyttJVSRnB2j0rnqKA33LWua5e+J9avNS1K8utQ1HUJ3ubq6uZWlmuZXYs8juxLMzMSSxJJJJNVa
KKNtEAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU
UUAFftf/AMGavwxu/ib49+P0Fjrk+gXFrYaG/nx2sdxvQyXwKFX467Tn296/FCv3e/4MdP8Akqn7
RP8A2CtD/wDR19QB+13/AAyd4j/6KTff+CS1rjfiT8G7/wCGXiXSZ9Q8S3PiF7m2uo4hJZRWwgAa
3Lfc+9n5evTb710vjL4TfGC68X6r4S0jxj5Xw/8AFd5Nqc3iOSX/AIqHwxA7lrjTLXja3mtIPs9w
wzaxCZSGZLcnY/as/wCQx4b/AOuN5/6Fb1pR+NGGK/hSPyY/4OCP+RU+F/8A196j/wCgW9fVn/Br
5/yYJ4v/AOygXn/pu02vlP8A4OCf+RU+F/OP9L1H/wBAt6+rP+DX0/8AGAni7/soF50/7B2m1eI+
MjBfwUfpBRRRWB1BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU
UAFFFFABRRRQB+Pn/BC85/YuvP8AsZrv/wBE29cV+25/wRFb9s34+eJvF2peJfBEum63qa6rZ2Gr
+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
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKAP//Z
--e89a8f6436d256f2d004e5b56067--


From Richard.Mortier@nottingham.ac.uk Fri Sep 06 14:33:26 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VHwAA-0004s1-Fn (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Fri, 06 Sep 2013 14:33:26 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1520253 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine04-20433-4.icritical.com ([195.62.217.152]:35403)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1VHwA9-000149-2u (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Fri, 06 Sep 2013 14:33:26 +0100
Received: (qmail 19549 invoked from network); 6 Sep 2013 13:33:14 -0000
Received: from localhost (127.0.0.1)
	by engine04-20433-4.icritical.com with SMTP; 6 Sep 2013 13:33:14 -0000
Received: from engine04-20433-4.icritical.com ([127.0.0.1])
	by localhost (engine04-20433-4.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 19432-02 for <cl-mirage@lists.cam.ac.uk>;
	Fri,  6 Sep 2013 14:33:13 +0100 (BST)
Received: (qmail 19533 invoked by uid 599); 6 Sep 2013 13:33:13 -0000
Received: from unknown (HELO smtp4.nottingham.ac.uk) (128.243.220.65)
	by engine04-20433-4.icritical.com (qpsmtpd/0.28) with ESMTP;
	Fri, 06 Sep 2013 14:33:13 +0100
Received: from uiwexhub01.ad.nottingham.ac.uk ([128.243.15.133])
	by smtp4.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Richard.Mortier@nottingham.ac.uk>)
	id 1VHwA7-0002Vk-45
	for cl-mirage@lists.cam.ac.uk; Fri, 06 Sep 2013 14:33:23 +0100
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Phiho Hoang <hohoangphi@gmail.com>
Date: Fri, 6 Sep 2013 14:33:21 +0100
Subject: Re: Mirage Hello World (Re: Building mirage-www)
Thread-Topic: Mirage Hello World (Re: Building mirage-www)
Thread-Index: Ac6rBafrgq9NhcBHQua9vh6wBcNMpw==
Message-ID: <5CD75D88-447C-4067-BAEF-5FD70B489ADB@nottingham.ac.uk>
References: <CALZQg1ayimHpJN+Ht5X58_yEA=ce3sbKPh_O4HhPOpOarmSnOw@mail.gmail.com>
In-Reply-To: <CALZQg1ayimHpJN+Ht5X58_yEA=ce3sbKPh_O4HhPOpOarmSnOw@mail.gmail.com>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine04-20433-4.icritical.com
Cc: Anil, "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	Madhavapeddy <anil@recoil.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Fri, 06 Sep 2013 13:33:26 -0000
Status: O
Content-Length: 1594
Lines: 43

hi phiho;

On 6 Sep 2013, at 13:31, Phiho Hoang wrote:

> I followed the First Steps from "Hello Mirage World":
> http://openmirage.org/wiki/hello-world
>=20
> $ make build-basic
>=20
> completed successfully but NO greetings were received from:
>=20
> $ make run-basic.
>=20
> Please find attached the screen shots.

ah-- sorry. there appears to be a bug in the mirage-unix OS.Console where t=
he console never gets flushed. i have a (probably rather simplistic) patch =
for this that i forgot to submit a PR for after returning from USENIX SEC. =
i'll do that now.

> IIRC, Mirage somehow depends on RWO?

no-- mirage has several package dependencies but these are captured by opam=
, and will be installed when you "opam install mirage-{xen,unix}" etc. i do=
n't believe there's an "RWO" package or similar to install.

--=20
Cheers,

R.




This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From hohoangphi@gmail.com Fri Sep 06 22:19:50 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VI3RV-00063w-VP (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Fri, 06 Sep 2013 22:19:49 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1520253 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.214.180 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (hohoangphi[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-ob0-f180.google.com ([209.85.214.180]:45391)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VI3RV-0004A0-0B (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Fri, 06 Sep 2013 22:19:49 +0100
Received: by mail-ob0-f180.google.com with SMTP id v19so3937138obq.39
	for <cl-mirage@lists.cam.ac.uk>; Fri, 06 Sep 2013 14:19:48 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.182.230.135 with SMTP id sy7mr3347012obc.24.1378502387938;
	Fri, 06 Sep 2013 14:19:47 -0700 (PDT)
Received: by 10.76.177.202 with HTTP; Fri, 6 Sep 2013 14:19:47 -0700 (PDT)
In-Reply-To: <5CD75D88-447C-4067-BAEF-5FD70B489ADB@nottingham.ac.uk>
References: <CALZQg1ayimHpJN+Ht5X58_yEA=ce3sbKPh_O4HhPOpOarmSnOw@mail.gmail.com>
	<5CD75D88-447C-4067-BAEF-5FD70B489ADB@nottingham.ac.uk>
Date: Fri, 6 Sep 2013 17:19:47 -0400
Message-ID: <CALZQg1ZQMQ4OftKA2mbPvKUB1L8YJCGQLk_y4rcSE7Q314FqBQ@mail.gmail.com>
Subject: Re: Mirage Hello World (Re: Building mirage-www)
From: Phiho Hoang <hohoangphi@gmail.com>
To: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
Content-Type: multipart/alternative; boundary=001a11c3367627bd8c04e5bd991f
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	Anil Madhavapeddy <anil@recoil.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Fri, 06 Sep 2013 21:19:50 -0000
Status: O
Content-Length: 8276
Lines: 224

--001a11c3367627bd8c04e5bd991f
Content-Type: text/plain; charset=ISO-8859-1

Hi Richard,

I finished the rest of installation steps from
http://openmirage.org/wiki/install :

"To go a step further, and develop unikernels that will run as POSIX
processes but using the Mirage network stack, switch to a new compiler
instance and install the mirage-net-direct package instead:"

Then, the final steps of "First Steps" at
http://openmirage.org/wiki/hello-world were followed:

<quote>
Cleanup with:
$ make clean-basic

To rebuild this as a Xen VM, simply opam switch and rebuild:

$ opam switch 4.00.1+mirage-xen
$ eval `opam config env`
$ make build-basic
</quote>

I encountered this error:

<quote>
$ make build-basic

### basic: configure
cd basic && mirari configure --unix
/bin/sh: 1: mirari: not found
make: *** [configure-basic] Error 127
</quote>

A look at ~/.opam/mirage-xen/bin:

$ ls -l ~/.opam/mirage-xen/bin | wc -l
6
$ ls -l ~/.opam/mirage-xen/bin/mi*
-rwxrwxr-x 1 phiho phiho 1112728 Sep  5 23:19 .opam/mirage-xen/bin/mirari

and then  ~/.opam/4.00.1+mirage-xen/bin

$ ls -l ~/.opam/4.00.1+mirage-xen/bin | wc -l
42
$ ls -l ~/.opam/4.00.1+mirage-xen/bin/mi*
ls: cannot access .opam/4.00.1+mirage-xen/bin/mi*: No such file or directory

I know I have missed something here.

Thank you for your help.

Cheers,

PhiHo



On Fri, Sep 6, 2013 at 9:33 AM, Richard Mortier <
Richard.Mortier@nottingham.ac.uk> wrote:

> hi phiho;
>
> On 6 Sep 2013, at 13:31, Phiho Hoang wrote:
>
> > I followed the First Steps from "Hello Mirage World":
> > http://openmirage.org/wiki/hello-world
> >
> > $ make build-basic
> >
> > completed successfully but NO greetings were received from:
> >
> > $ make run-basic.
> >
> > Please find attached the screen shots.
>
> ah-- sorry. there appears to be a bug in the mirage-unix OS.Console where
> the console never gets flushed. i have a (probably rather simplistic) patch
> for this that i forgot to submit a PR for after returning from USENIX SEC.
> i'll do that now.
>
> > IIRC, Mirage somehow depends on RWO?
>
> no-- mirage has several package dependencies but these are captured by
> opam, and will be installed when you "opam install mirage-{xen,unix}" etc.
> i don't believe there's an "RWO" package or similar to install.
>
> --
> Cheers,
>
> R.
>
>
>
>
> This message and any attachment are intended solely for the addressee and
> may contain confidential information. If you have received this message in
> error, please send it back to me, and immediately delete it.   Please do
> not use, copy or disclose the information contained in this message or in
> any attachment.  Any views or opinions expressed by the author of this
> email do not necessarily reflect the views of the University of Nottingham.
>
> This message has been checked for viruses but the contents of an attachment
> may still contain software viruses which could damage your computer
> system, you are advised to perform your own checks. Email communications
> with the University of Nottingham may be monitored as permitted by UK
> legislation.
>
>
>
>
>

--001a11c3367627bd8c04e5bd991f
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi Richard,<div><br></div><div>I finished the rest of inst=
allation steps from=A0<a href=3D"http://openmirage.org/wiki/install">http:/=
/openmirage.org/wiki/install</a>=A0:</div><div><br></div><div><span style=
=3D"font-family:&#39;helvetica neue&#39;,helvetica,arial,sans-serif;font-si=
ze:15px;line-height:19px;text-align:justify">&quot;To go a step further, an=
d develop unikernels that will run as POSIX processes but using the Mirage =
network stack, switch to a new compiler instance and install the=A0</span><=
code style=3D"font-size:13px;line-height:19px;text-align:justify">mirage-ne=
t-direct</code><span style=3D"font-family:&#39;helvetica neue&#39;,helvetic=
a,arial,sans-serif;font-size:15px;line-height:19px;text-align:justify">=A0p=
ackage instead:&quot;</span><br>
</div><div><span style=3D"font-family:&#39;helvetica neue&#39;,helvetica,ar=
ial,sans-serif;font-size:15px;line-height:19px;text-align:justify"><br></sp=
an></div><div>Then, the final steps of &quot;First Steps&quot; at=A0<a href=
=3D"http://openmirage.org/wiki/hello-world">http://openmirage.org/wiki/hell=
o-world</a>=A0were followed:</div>
<div><br></div><div>&lt;quote&gt;</div><div><div>Cleanup with:</div><div>$ =
make clean-basic</div><div><br></div><div>To rebuild this as a Xen VM, simp=
ly opam switch and rebuild:</div><div><br></div><div>$ opam switch 4.00.1+m=
irage-xen</div>
<div>$ eval `opam config env`</div><div>$ make build-basic</div></div><div>=
&lt;/quote&gt;</div><div><br></div><div>I encountered this error:</div><div=
><br></div><div>&lt;quote&gt;</div><div><div>$ make build-basic</div><div>
<br></div><div>### basic: configure</div><div>cd basic &amp;&amp; mirari co=
nfigure --unix</div><div>/bin/sh: 1: mirari: not found</div><div>make: *** =
[configure-basic] Error 127</div></div><div>&lt;/quote&gt;</div><div><br>
</div><div>A look at ~/.opam/mirage-xen/bin:</div><div><br></div><div><div>=
$ ls -l ~/.opam/mirage-xen/bin | wc -l</div><div>6</div><div>$ ls -l ~/.opa=
m/mirage-xen/bin/mi*</div><div>-rwxrwxr-x 1 phiho phiho 1112728 Sep =A05 23=
:19 .opam/mirage-xen/bin/mirari</div>
<div><br></div><div>and then =A0~/.opam/4.00.1+mirage-xen/bin</div><div><br=
></div><div>$ ls -l ~/.opam/4.00.1+mirage-xen/bin | wc -l</div><div>42</div=
><div>$ ls -l ~/.opam/4.00.1+mirage-xen/bin/mi*</div><div>ls: cannot access=
 .opam/4.00.1+mirage-xen/bin/mi*: No such file or directory</div>
<div><br></div></div><div>I know I have missed something here.</div><div><b=
r></div><div>Thank you for your help.</div><div><br></div><div>Cheers,</div=
><div><br></div><div>PhiHo</div><div><br></div></div><div class=3D"gmail_ex=
tra">
<br><br><div class=3D"gmail_quote">On Fri, Sep 6, 2013 at 9:33 AM, Richard =
Mortier <span dir=3D"ltr">&lt;<a href=3D"mailto:Richard.Mortier@nottingham.=
ac.uk" target=3D"_blank">Richard.Mortier@nottingham.ac.uk</a>&gt;</span> wr=
ote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">hi phiho;<br>
<div class=3D"im"><br>
On 6 Sep 2013, at 13:31, Phiho Hoang wrote:<br>
<br>
&gt; I followed the First Steps from &quot;Hello Mirage World&quot;:<br>
&gt; <a href=3D"http://openmirage.org/wiki/hello-world" target=3D"_blank">h=
ttp://openmirage.org/wiki/hello-world</a><br>
&gt;<br>
&gt; $ make build-basic<br>
&gt;<br>
&gt; completed successfully but NO greetings were received from:<br>
&gt;<br>
&gt; $ make run-basic.<br>
&gt;<br>
&gt; Please find attached the screen shots.<br>
<br>
</div>ah-- sorry. there appears to be a bug in the mirage-unix OS.Console w=
here the console never gets flushed. i have a (probably rather simplistic) =
patch for this that i forgot to submit a PR for after returning from USENIX=
 SEC. i&#39;ll do that now.<br>

<div class=3D"im"><br>
&gt; IIRC, Mirage somehow depends on RWO?<br>
<br>
</div>no-- mirage has several package dependencies but these are captured b=
y opam, and will be installed when you &quot;opam install mirage-{xen,unix}=
&quot; etc. i don&#39;t believe there&#39;s an &quot;RWO&quot; package or s=
imilar to install.<br>

<span class=3D"HOEnZb"><font color=3D"#888888"><br>
--<br>
Cheers,<br>
<br>
R.<br>
<br>
<br>
<br>
<br>
This message and any attachment are intended solely for the addressee and m=
ay contain confidential information. If you have received this message in e=
rror, please send it back to me, and immediately delete it. =A0 Please do n=
ot use, copy or disclose the information contained in this message or in an=
y attachment. =A0Any views or opinions expressed by the author of this emai=
l do not necessarily reflect the views of the University of Nottingham.<br>

<br>
This message has been checked for viruses but the contents of an attachment=
<br>
may still contain software viruses which could damage your computer system,=
 you are advised to perform your own checks. Email communications with the =
University of Nottingham may be monitored as permitted by UK legislation.<b=
r>

<br>
<br>
<br>
<br>
</font></span></blockquote></div><br></div>

--001a11c3367627bd8c04e5bd991f--


From info@overkastcafe.com Sat Sep 07 09:56:57 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VIEK9-00057Y-Bq (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <info@overkastcafe.com>); Sat, 07 Sep 2013 09:56:57 +0100
X-Cam-SpamScore: sss
X-Cam-SpamDetails: score 3.3 from SpamAssassin-3.3.2-1520514 
	*  1.8 URIBL_BLACK Contains an URL listed in the URIBL blacklist
	*      [URIs: tiny.cc]
	*  1.5 SUBJ_BUY Subject line starts with Buy or Buying
	*  0.0 HTML_MESSAGE BODY: HTML included in message
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from web2mail.slackinc.com ([98.129.190.19]:2538)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1VIEK8-00046v-DV (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <info@overkastcafe.com>); Sat, 07 Sep 2013 09:56:57 +0100
Received: from mail pickup service by Web2mail.slackinc.com with Microsoft
	SMTPSVC; Sat, 7 Sep 2013 04:56:55 -0400
Thread-Topic: Buy Custom Made University Diplomas,
	Fake College Degrees and Transcripts of World Famous
	Universities. recommends this site
thread-index: Ac6rqDOV2n9sfDw8S5iENrtZSKkrag==
From: <info@overkastcafe.com>
To: <guiqingxu@163.com, fernandok@ceee.com.br, office@mancas.ro,
	behnke24@hotmail.com, noorabbas29@gmail.com,
	info@calourahotel.com, hrmoghimi@yahoo.com,
	nhuan@hfglobe.intel.com, isabelledwilhelm@aol.com,
	mjrobbins1@sbcglobal.net, ebraun2521@aol.com,
	arifafzalusmani@yahoo.com, richard.barnard@ashactconsulting.com,
	nbjk@me.com, steve@chickmusic.net,
	photos@midatlanticbreederssale.com, s.ragab@sescotrans.net,
	joe@810crossfit.com, bgroenveld@home.nl, ydpphotos@gmail.com,
	freaksbce@gmail.com, wordhousebooks@yahoo.com, jonathan@dcyf.org,
	ilovelompoc@gmail.com, info@elyza.com, service@fwkunath.de,
	j.c.verster@uu.nl, hugh.nimmo@glasgow.ac.uk,
	johnnagleiv@gmail.com, mycupcakefactory@hotmail.com,
	info@coastalalliance.org, glomawr@insightbb.com,
	mjodimartin@gmail.com, biei-hidamari@k6.dion.ne.jp,
	tyarmas@yahoo.com, smith@bieltd.co.uk, tmbluesman@wmconnect.com,
	lydia@love-a-bull.org, mikkk@videotron.ca, gbrenner@sdasm.org,
	diane.storey@harrynorman.com, nobelapucarana@uol.com.br,
	andycknight@ymail.com, nestjohn.motoringn@telegraph.co.uk,
	shehu.skender@pacbell.net, fphomem@hotmail.com,
	molten135@hotmail.com, yunlaiyang@hotmail.com, info@cynove.com,
	kporuf@gmail.com, gillianlecoz@orange.fr,
	yadira.suarez@whotels.com, cl-mirage@lists.cam.ac.uk,
	stockbeer@mail.telepac.pt, tosil@blue.ocn.ne.jp,
	ffrancois@netzero.net, winkzealj@gmail.com,
	partybusreservations@live.com, pecanderosa1953@att.net,
	iaccef@ott.net, r.greenwood@uclh.org, rivenanci@hotmail.com,
	theplumber27@gmail.com, info@charitapardubice.cz,
	careers@daogroup.org, yarbedmneb-bike@yahoo.com,
	matchmycloset@gmail.com, info@futurecities.org,
	wopriarstbe@aol.com, hector.campbell@yk.ca, s.harvell@sprint.com,
	christopherirish@yahoo.com, clint.cooper@ntlworld.com,
	castingsdis@gmail.com, bpock@seattletimes.com,
	btiny2005@hotmail.com, misskristinalicious@live.de,
	tammy@csrlink.net, fheden@aol.com, tonyrsmith@myrealbox.com,
	janet.carr@gmail.com, wbwfebigar@aol.com, dream1429@hanafos.com,
	jenifer.boiani@yahoo.com, oslerclub@gmail.com, ubuehler@gmx.de,
	bruce439@gateway.net, f28dqdcbl1vpbrv5aws00004df6@hotmail.com,
	cggil@gte.net, allures@gmail.com,
	nesieffiar.kgbr@eesretteatsllim.br, tony@tewhau.co.nz,
	wetlinetj@comcast.net, ritcheyc@usa.net, larhold@bway.net,
	nbays@fuse.net, soriani@ifo.it, chumly70@aol.com,
	wright@rdummy.com, yrttvspmh@gmail.com, hsleec@hanafos.com,
	noivasfloripa@hotmail.com, you-and-i@gem.hj-ho.ne.jp,
	tourajf@yahoo.com, hotelweiss@aol.com, tdiaz617@gmail.com,
	stephenfarrell123@hotmail.com, nitrowarhead@hotmail.com,
	naturegirl67@sbcglobal.net, cristimaldone@hotmail.com,
	kimberleyreed@optusnet.com.au, rdlrad@aol.com,
	ababuglia@yahoo.com.uy, durmas@madmail.com, aharon@gilat.com,
	wicky@altiboxmail.dk, hoa.nguyen@hcm.fpt.vn,
	tazz1622@hotmail.com, drammadden@gmail.com, kiejdzis@hotmail.com,
	birmingham@icfds.com, andyfuture@gmx.de, darklingem@gmail.com,
	bonnie1322@yahoo.com, summerschool.medicine@ugent.be,
	zeebrugge@rbsc.be, fredcone@comcast.net, katy@qseaman.co.uk,
	a.rupp@hs-osnabrueck.de, info@galerie-girard.com,
	unforgettableservice@gmail.com, andreas.fitz@panther.tv,
	alizbuk@yahoo.com, info@discos-redondos.es,
	poststelle@fa-loh.bayerh.de, ritaparisi@waterfallproductions.com,
	miller8933@bellsouth.net, iotabarn@appj.org,
	personel@hualon.com.tw, cyberpet@abq.com,
	marvinbowens@rocketmail.com, marcy.boggess@gmail.com,
	vidigalmunhoz@hotmail.com, yahoomailneo@web162903.mail.bf,
	avalonweddingplanner@gmail.com, debra@hue.hone.com,
	sambomba15@gmail.com, bfdyquxl@igefnoad.com,
	azaleahubbard@hihltd.com, nicksonmonifa@naturallyfirst.com,
	dc.1980@yahoo.com, kim@mpoweredmarketing.com,
	taramarie91@yahaoo.com, vialog.uk@gmx.com,
	gutierrezzc.helene@hmicah.ca, busdriver@ksinc.net,
	wyena.philp@bigpond.com, heindel59@yahoo.com,
	training@redlionfire.org, art.marciniak@neostrada.pl,
	ehs@swissjabber.org, info@facepro.cc,
	youngstersaupairs@hotmail.com, rik.catlow@gmail.com,
	ajrossbach@swbell.net, jp.insyd@rocketmail.com,
	riccardo.puragliesi@psi.ch, wakasugi@kier.kyoto-u.ac.jp,
	shelbys@india.com, presidentpep02@aol.com, sales@accl-ltd.com,
	almai.butt@condostore.com, charlotte@arwanda.com,
	email-jdtcrafts@hotmail.com, gaurav.setia@rediffmail.com,
	xosmartz@aol.com, proshop@mountmurraygolfclub.com,
	dosomethingtour@gmail.com, kaupu-157@mailyu.com,
	yvonnemorrill@yahoo.com, kac5402@aol.com, yjfgnuo@netease.com,
	zhzb@hotmail.com, info@defriesltd.com, kacilynn12@aol.com,
	garbb324@yahoo.com.tw, vitosata@aol.com,
	palomagirl2006@yahoo.com, jgerena@cts-inc.net,
	jackrowland2@hotmail.com, yozamp3375@yahoo.com,
	debbietomyn@hotmail.com, 3achezybiskit@hotmail.com,
	tanya.wilhite@pharma.novartis.com, glamberty1@home.com,
	ramonag@pacbell.net, blackmist2965@ymail.com,
	blababoutit@gmail.com, raymondcheungfinancial@gmail.com,
	mohrandir@hotmail.com, yoyou712@gmail.com,
	zahragashtasebi@yahoo.com, juna0826@naver.com,
	daringeorge1@optonline.net, ruderadio@radiok.org,
	wolf@prz.tu-berlin.de, kerosan41@aol.com, nikkichau@hotmail.com,
	sisteve@aol.com, urstrhendu@yahoo.com, dan@watersmarine.com,
	info@nigeldickinson.com, fjdsafdsfjad@live.se,
	rwebbersons@yahoo.com, mikepridgen93@yashoo.com,
	cheryl.sheehan@analog.com, akbtsc.2010@yahoo.com,
	australia@promosalons.com, filadenis@yandex.ru,
	joie.burrows@shaw.ca, brno.veveri@hudy.cz,
	jozunigaf@liverpool.com.mx, tfa8@maktoob.com,
	ellesstudio@gmail.com, teamfrady@earthlink.net,
	yelian@ms32.hinet.net, kim-eli@comcast.net,
	rentmyaperment002@yahoo.com, xg-sxx@126.com,
	info@citruspurpleheart.org, aliye@aliyemullen.co.uk,
	kristy.mcneal@cnb.com, steelnknives@hotmail.com,
	macred@ozemail.com.au, sonnythemonkey@yahoo.com,
	wirelessinfo@ddtp.org, he10@co.merced.ca.us,
	whistlerzoo@gmail.com, abidr19@hotmail.com, exmcoce@yahoo.com,
	similarthreesistergrapes@yahoo.com, csau@suezasiahk.com,
	jonathan@onbudget.com, doigseguros@hotmail.com,
	blankyfwy@hotmail.com, gsnudden@searshc.com,
	sfaisal@brain.net.pk, wluong@yahoo.com, schwyz@sanacare.ch,
	sunnisch@yahoo.com, tiger@ec-server.com,
	househuntlancaster@gmail.com, beesstonfieldsgolfclub@supanet.com,
	rcmenchini@hotmail.com.ar, ballke@ballke.com.br,
	ohagan@bigpond.net.au, worldlinkpartners@yahoo.com,
	xxxxx.gacct@yahoo.com, xtreme@globalx.net,
	vallejocomas@hotmail.com, boffusa@gmail.com, spike@hcm.vnn.vn,
	dima.aljolani@fnst.org, fazal.iaoproject@yahoo.com,
	benjamin.weyl@bmw.de, yewwns@yahoo.com, ramonamgmt@aol.com,
	gloria.phillips@smccolts.com, liodo@fpt.vn, bureau@gazette.com,
	lerrico@prsdnj.org, pwhoiaver@zoominternet.net,
	chuckdi@centurytel.net, haitham@dr.com, wroclawcamp@gmail.com,
	wim.vanhove@gembobbc.be, whartonbilly@gmail.com,
	support@kismuth.com, rrtammy@ee.bgu.ac.il,
	info@romansautoelectriconline.com, tarso@sepalmeiras.com.br,
	aimee@themccs.ca, vreals123@gmail.com, dictiss@prodigy.net,
	familianik@hotmail.com, marlonoswald@yahoo.com.au,
	lavender@lwsi.com, sales@auxillium.com, sylvie@tecpack.com,
	jennifer.kuehnle@johanniter.de, jodi@cbaofga.com,
	sarada@wlink.com.np, brenda.mercer@negaresa.org,
	aim@sims-ha1.ismart.net, user1@prestech.net, haugland@scana.no,
	roquinn@co.wayne.ga, 4d8a32b6.9050507@gmail.com,
	sirrija69@hotmail.com, samuelkofiagencygh1@gmail.com,
	florjazz@live.com, daryn.cheketri@boostjuice.co.za,
	shoppatonplace@gmail.com, arti.7532@yahoo.com,
	directorybyname.pdfwbarnes2628@charter.net,
	ljones131313@hotmail.com, copperaswrestlingclub@yahoo.com,
	sassyladywclass@hotmail.com, ascensionlc@swbell.net,
	community.partnership@gsk.com, norma.smalley@yahoo.com,
	mmquiltguild@yahoo.com, shajordan20@aol.com,
	bmisztal@bipartisanpolicy.org, cwilson.cristosal@gmail.com,
	brussels@conferenceboard.org, carmine.annunziata@jbuec.us,
	rauch@gmail.com, wajcman@im3.inserm.fr, anon.545@pax.tpa.com.au,
	xoxocle16@hotmail.com, natalia.goncalves@kellog.com,
	zenrchi@yahoo.com, difevera@yahoo.com, tatie3@gateway.net,
	kdenobile@aol.com, kennyelwood@hotmail.com,
	janhakan.jansson@vll.se, pls.godpikinjackey@gmail.com,
	joh@eim.nl, info@purdycontracts.co.uk, city@barsoba.co.uk,
	xcdzhang@163.com, cochrane@sympatico.ca, julen@hotmail.com,
	trainer@firstclasscanine.com, asquiresusa@juno.com,
	tihachev@cityline.ru, abhadsavle@gmail.com,
	joaopiasetzki@hotmail.com, wildkids@ncn.net, mgnuss@hmwd.org,
	info@hollywoodbabypr.com, iversonluvr4@compuserve.com,
	zatedard@yahoo.com, yac1@zahav.net.il, onthewater@pacbell.net,
	terri@ytb.us, sally.fitzgerald@mallesons.com, bglass@sps186.org,
	thispots4u@adelphia.net, patricia.marie70@gmail.com,
	schweiger@wiso.uni-koeln.de, nfarris@centurytel.net,
	amy@micomachines.com, paul.callaghan@vuw.ac.nz,
	rocafort@arrakis.es, bead2023@hotmail.com,
	gerardo.ramirez@am.jll.com, susan.jones@zu.ac.ae,
	wambuaenock@gmail.com, stnhong@stnlaser.com,
	info@eworkswsi.com.cy, tcaldwell@sterling-inc.com,
	info@casabiancalodge.co.za, wjst@helmholtz-muenchen.de,
	ojane@usa.net, escape.tfm@univie.ac.at, support@adjournal.com,
	solution.soudure@wanadoo.fr, tom.barton@capgemini.co.uk,
	ssppm@btinternet.com, sweetgrass@shaw.ca, zhenningliu@yahoo.com,
	wbfh@metrocast.net, yhkevin@hcm.vnn.vn, vetmoon@hanafos.com,
	rbates@ipsadvisors.com, chnjqk888@hotmail.com,
	kapil.thespecialone@gmail.com, saam@hotmail.com,
	staleongroup@yahoo.com, nrsimon2002@hotmail.com,
	glorhus@idcomm.com, ecattsrof@gmail.com,
	yharper@liferenewalcounseling.org, daisysegie@gmail.com,
	twobitacres@gmail.com, darcy@siteware.com,
	cirtusolution2@gmail.com, dougs@alamobowl.com, wls@cloisters.com,
	hackingbear@hotmail.com, thereble@gmail.com, dalhavic@gmail.com,
	maverickproductionsdvdsales@gmail.com, sperez777@nyc.rr.com,
	dario.prodan@gmail.com, stocktakedata@bigpond.com,
	hotboxradio.net@gmail.com, trans.atsa@bigpond.com,
	communityed@elkriver.k12.mn.us, contacto@mijaresresort.com,
	susanne.durst@acat.com, beatrice.neff@kodak.com,
	tcrowley@cisllcfurn.com, kathieowens@baileyandowens.com,
	osiproducciones@yahoo.com.ar, aaronsung@gmail.com,
	carcopeland3@gmail.com, jasem1299@gmail.com, adidavid@dataone.in,
	john@saundcall2.plus.com, llenter8@aol.com, omakridis@aol.com,
	the1kennig@hotmail.com, baftarragona@hotmail.com,
	windchase@shaw.ca, mehta@dhodgkins.com, davegolbert@yahoo.com,
	becky2k@prodigy.net, jkduarte@terra.com.br, ,
	diplomas4everybody@outlook.com>
Subject: Buy Custom Made University Diplomas,
	Fake College Degrees and Transcripts of World Famous Universities.
	recommends this site
Date: Sat, 7 Sep 2013 04:56:54 -0400
Message-ID: <6C118DD9F03E4E36AE77B198BF8632F8@WEB2>
MIME-Version: 1.0
Content-Type: multipart/alternative;
	boundary="----=_NextPart_000_0073_01CEAB86.AC83A8C0"
X-Mailer: Microsoft CDO for Windows 2000
Content-Class: urn:content-classes:message
Importance: normal
Priority: normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.4913
X-OriginalArrivalTime: 07 Sep 2013 08:56:55.0063 (UTC)
	FILETIME=[33B44270:01CEABA8]
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
Reply-To: diplomas4everybody@outlook.com
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Sat, 07 Sep 2013 08:56:57 -0000
Status: O
Content-Length: 1836
Lines: 29

This is a multi-part message in MIME format.

------=_NextPart_000_0073_01CEAB86.AC83A8C0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Your friend Buy Custom Made University Diplomas, Fake College Degrees
and Transcripts of World Famous Universities.
(diplomas4everybody@outlook.com) has recommended this site to you, and
sends you the following message:
Buy fake/novelty university diplomas and degrees online. We design our
Degree or Diploma Certificates and Transcripts to look 99.99% identical
to world famous originals including identical security grade transcript
paper, identical water markings, raised-ink crests, embossed seals,
correct card stock weight (60-100lb depending upon institution
specifications). Most post-secondary institutions available.
http://tiny.cc/fakediploma4u

http://www.overkastword.com/proddetail.asp?prod=49-FIT-ED


------=_NextPart_000_0073_01CEAB86.AC83A8C0
Content-Type: text/html
Content-Transfer-Encoding: 7bit

Your friend Buy Custom Made University Diplomas, Fake College Degrees and Transcripts of World Famous Universities. (diplomas4everybody@outlook.com) has recommended this site to you, and sends you the following message:<br>Buy fake/novelty university diplomas and degrees online. We design our Degree or Diploma Certificates and Transcripts to look 99.99% identical to world famous originals including identical security grade transcript paper, identical water markings, raised-ink crests, embossed seals, correct card stock weight (60-100lb depending upon institution specifications). Most post-secondary institutions available. http://tiny.cc/fakediploma4u<br><br><a href="http://www.overkastword.com/proddetail.asp?prod=49-FIT-ED">http://www.overkastword.com/proddetail.asp?prod=49-FIT-ED</a><br>
------=_NextPart_000_0073_01CEAB86.AC83A8C0--


From sam.and.tetris@gmail.com Sun Sep 08 20:25:33 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VIkc1-0000Nf-56 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <sam.and.tetris@gmail.com>);
	Sun, 08 Sep 2013 20:25:33 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1520742 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.223.169 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (sam.and.tetris[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-ie0-f169.google.com ([209.85.223.169]:47422)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1VIkc0-0003Tf-iP (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk (return-path <sam.and.tetris@gmail.com>);
	Sun, 08 Sep 2013 20:25:33 +0100
Received: by mail-ie0-f169.google.com with SMTP id tp5so11282945ieb.28
	for <cl-mirage@lists.cam.ac.uk>; Sun, 08 Sep 2013 12:25:31 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.50.49.65 with SMTP id s1mr5619839ign.43.1378668331928; Sun,
	08 Sep 2013 12:25:31 -0700 (PDT)
Received: by 10.42.103.84 with HTTP; Sun, 8 Sep 2013 12:25:31 -0700 (PDT)
Date: Mon, 9 Sep 2013 01:25:31 +0600
Message-ID: <CAPVzHcbAZrpaML97+AGVe28ihNAS64ZDzXHMPgE+c2gXxibGDw@mail.gmail.com>
Subject: mirage support for dynamically loaded modules
From: Andrew Lekar <sam.and.tetris@gmail.com>
To: cl-mirage@lists.cam.ac.uk
Content-Type: multipart/alternative; boundary=e89a8f5038e230115404e5e43c71
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Sun, 08 Sep 2013 19:25:33 -0000
Status: O
Content-Length: 978
Lines: 24

--e89a8f5038e230115404e5e43c71
Content-Type: text/plain; charset=ISO-8859-1

Hello everyone.

Is it possible to support dynamically load ocaml modules in mirage? So that
I do not rebuild entire mirage kernel but make it once and add additional
drivers later. What are the steps required to make it possible? I guess to
make it work I should implement filesystem support, bytecode interpreter or
ocaml compiler in mirage.

--e89a8f5038e230115404e5e43c71
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>Hello everyone.</div><div><br></div>Is it possible to=
 support dynamically load ocaml modules in mirage? So that I do not rebuild=
 entire mirage kernel but make it once and add additional drivers later. Wh=
at are the steps required to make it possible? I guess to make it work I sh=
ould implement filesystem support, bytecode interpreter or ocaml compiler i=
n mirage.</div>

--e89a8f5038e230115404e5e43c71--


From anil@recoil.org Mon Sep 09 11:54:20 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VIz6q-0003EU-Le (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 09 Sep 2013 11:54:20 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1520845
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:31186
	helo=dark.recoil.org)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with smtp id 1VIz6q-0006dv-gq (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 09 Sep 2013 11:54:20 +0100
Received: (qmail 21369 invoked by uid 634); 9 Sep 2013 10:54:18 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from volstagg-0.srg.cl.cam.ac.uk (HELO clink.office) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Mon, 09 Sep 2013 11:54:17 +0100
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: Pulling out XenStore out of Mirage.
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <520CEA57.3030506@luminar.eu.org>
Date: Mon, 9 Sep 2013 11:54:19 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <8D25205C-01C4-4255-8DEF-6E7EAAAF639E@recoil.org>
References: <520CEA57.3030506@luminar.eu.org>
To: Vincent Bernardoff <vb@luminar.eu.org>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: Mirage List <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 09 Sep 2013 10:54:20 -0000
Status: O
Content-Length: 838
Lines: 27

I'm just catching up on my Mirage mail -- before I dive in, does this =
branch still need testing?  I saw some other Xenstore commits and so =
don't want to duplicate work.

cheers
Anil

On 15 Aug 2013, at 15:48, Vincent Bernardoff <vb@luminar.eu.org> wrote:

> Please try out my branch no-xenstore of mirage-platform =
(git://github.com/vbmithr/mirage-platform), compatible with my branch =
"mirage-compatible" of git://github.com/vbmithr/ocaml-xenstore.
>=20
> It should work, and thus make it much easier to develop libraries that =
depends on either mirage-platform or Unix's xenctrl library. In =
particular, this is a requirement for an easy cross unix/xen packaging =
of my ocaml-xenstore library.
>=20
> I'm going to test it as well ASAP, but I wouldn't mind other people =
trying it out too.
>=20
> Cheers,
>=20
> Vincent
>=20



From scott.dj@gmail.com Mon Sep 09 12:05:47 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VIzHv-0003qB-4w (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Mon, 09 Sep 2013 12:05:47 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1520845 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.220.51 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (scott.dj[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-pa0-f51.google.com ([209.85.220.51]:56747)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VIzHu-0004O6-17 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Mon, 09 Sep 2013 12:05:47 +0100
Received: by mail-pa0-f51.google.com with SMTP id lf1so6095846pab.24
	for <cl-mirage@lists.cam.ac.uk>; Mon, 09 Sep 2013 04:05:45 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.68.189.98 with SMTP id gh2mr1419846pbc.181.1378724745238;
	Mon, 09 Sep 2013 04:05:45 -0700 (PDT)
Received: by 10.70.56.36 with HTTP; Mon, 9 Sep 2013 04:05:45 -0700 (PDT)
In-Reply-To: <8D25205C-01C4-4255-8DEF-6E7EAAAF639E@recoil.org>
References: <520CEA57.3030506@luminar.eu.org>
	<8D25205C-01C4-4255-8DEF-6E7EAAAF639E@recoil.org>
Date: Mon, 9 Sep 2013 12:05:45 +0100
Message-ID: <CAG_esB11pdeHvbxnzcOavFQ9yv=eH6BH6iL4Y2mABVztK_QBxQ@mail.gmail.com>
Subject: Re: Pulling out XenStore out of Mirage.
From: David Scott <scott.dj@gmail.com>
To: Anil Madhavapeddy <anil@recoil.org>
Content-Type: multipart/alternative; boundary=e89a8ff1c4eeaee40804e5f15ee5
Cc: Mirage List <cl-mirage@lists.cam.ac.uk>,
	Vincent Bernardoff <vb@luminar.eu.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 09 Sep 2013 11:05:47 -0000
Status: O
Content-Length: 3383
Lines: 101

--e89a8ff1c4eeaee40804e5f15ee5
Content-Type: text/plain; charset=ISO-8859-1

Hi,

I believe I've tested this and merged it already.

I think there's still an outstanding vchan pull request -- JonL says he's
going to have a play with that today.

Cheers,
Dave


On Mon, Sep 9, 2013 at 11:54 AM, Anil Madhavapeddy <anil@recoil.org> wrote:

> I'm just catching up on my Mirage mail -- before I dive in, does this
> branch still need testing?  I saw some other Xenstore commits and so don't
> want to duplicate work.
>
> cheers
> Anil
>
> On 15 Aug 2013, at 15:48, Vincent Bernardoff <vb@luminar.eu.org> wrote:
>
> > Please try out my branch no-xenstore of mirage-platform (git://
> github.com/vbmithr/mirage-platform), compatible with my branch
> "mirage-compatible" of git://github.com/vbmithr/ocaml-xenstore.
> >
> > It should work, and thus make it much easier to develop libraries that
> depends on either mirage-platform or Unix's xenctrl library. In particular,
> this is a requirement for an easy cross unix/xen packaging of my
> ocaml-xenstore library.
> >
> > I'm going to test it as well ASAP, but I wouldn't mind other people
> trying it out too.
> >
> > Cheers,
> >
> > Vincent
> >
>
>
>


-- 
Dave Scott

--e89a8ff1c4eeaee40804e5f15ee5
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi,<div><br></div><div>I believe I&#39;ve tested this and =
merged it already.</div><div><br></div><div>I think there&#39;s still an ou=
tstanding vchan pull request -- JonL says he&#39;s going to have a play wit=
h that today.</div>
<div><br></div><div>Cheers,</div><div>Dave</div></div><div class=3D"gmail_e=
xtra"><br><br><div class=3D"gmail_quote">On Mon, Sep 9, 2013 at 11:54 AM, A=
nil Madhavapeddy <span dir=3D"ltr">&lt;<a href=3D"mailto:anil@recoil.org" t=
arget=3D"_blank">anil@recoil.org</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">I&#39;m just catching up on my Mirage mail -=
- before I dive in, does this branch still need testing? =A0I saw some othe=
r Xenstore commits and so don&#39;t want to duplicate work.<br>

<br>
cheers<br>
<span class=3D"HOEnZb"><font color=3D"#888888">Anil<br>
</font></span><div class=3D"HOEnZb"><div class=3D"h5"><br>
On 15 Aug 2013, at 15:48, Vincent Bernardoff &lt;<a href=3D"mailto:vb@lumin=
ar.eu.org">vb@luminar.eu.org</a>&gt; wrote:<br>
<br>
&gt; Please try out my branch no-xenstore of mirage-platform (git://<a href=
=3D"http://github.com/vbmithr/mirage-platform" target=3D"_blank">github.com=
/vbmithr/mirage-platform</a>), compatible with my branch &quot;mirage-compa=
tible&quot; of git://<a href=3D"http://github.com/vbmithr/ocaml-xenstore" t=
arget=3D"_blank">github.com/vbmithr/ocaml-xenstore</a>.<br>

&gt;<br>
&gt; It should work, and thus make it much easier to develop libraries that=
 depends on either mirage-platform or Unix&#39;s xenctrl library. In partic=
ular, this is a requirement for an easy cross unix/xen packaging of my ocam=
l-xenstore library.<br>

&gt;<br>
&gt; I&#39;m going to test it as well ASAP, but I wouldn&#39;t mind other p=
eople trying it out too.<br>
&gt;<br>
&gt; Cheers,<br>
&gt;<br>
&gt; Vincent<br>
&gt;<br>
<br>
<br>
</div></div></blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>=
Dave Scott
</div>

--e89a8ff1c4eeaee40804e5f15ee5--


From anil@recoil.org Mon Sep 09 12:12:24 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VIzOK-00042O-Uy (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 09 Sep 2013 12:12:24 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1520845 
	*  0.0 HTML_MESSAGE BODY: HTML included in message
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:42365
	helo=dark.recoil.org)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with smtp id 1VIzOK-00078J-h3 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 09 Sep 2013 12:12:24 +0100
Received: (qmail 10692 invoked by uid 634); 9 Sep 2013 11:12:24 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED,HTML_MESSAGE
X-Spam-Check-By: dark.recoil.org
Received: from volstagg-0.srg.cl.cam.ac.uk (HELO clink.office) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Mon, 09 Sep 2013 12:12:23 +0100
Content-Type: multipart/alternative;
	boundary="Apple-Mail=_E8286730-7A0F-4B97-BBE5-850E98B3EBFE"
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: Pulling out XenStore out of Mirage.
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <CAG_esB11pdeHvbxnzcOavFQ9yv=eH6BH6iL4Y2mABVztK_QBxQ@mail.gmail.com>
Date: Mon, 9 Sep 2013 12:12:23 +0100
Message-Id: <8B0DFB8F-81EF-4F30-BAC8-BB49EF239502@recoil.org>
References: <520CEA57.3030506@luminar.eu.org>
	<8D25205C-01C4-4255-8DEF-6E7EAAAF639E@recoil.org>
	<CAG_esB11pdeHvbxnzcOavFQ9yv=eH6BH6iL4Y2mABVztK_QBxQ@mail.gmail.com>
To: David Scott <scott.dj@gmail.com>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: Mirage List <cl-mirage@lists.cam.ac.uk>,
	Vincent Bernardoff <vb@luminar.eu.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 09 Sep 2013 11:12:25 -0000
Status: O
Content-Length: 4155
Lines: 95


--Apple-Mail=_E8286730-7A0F-4B97-BBE5-850E98B3EBFE
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=iso-8859-1

Excellent, thanks! I'm hacking on Mirari today, so won't be touching =
anything Xen-related.

-anil

On 9 Sep 2013, at 12:05, David Scott <scott.dj@gmail.com> wrote:

> Hi,
>=20
> I believe I've tested this and merged it already.
>=20
> I think there's still an outstanding vchan pull request -- JonL says =
he's going to have a play with that today.
>=20
> Cheers,
> Dave
>=20
>=20
> On Mon, Sep 9, 2013 at 11:54 AM, Anil Madhavapeddy <anil@recoil.org> =
wrote:
> I'm just catching up on my Mirage mail -- before I dive in, does this =
branch still need testing?  I saw some other Xenstore commits and so =
don't want to duplicate work.
>=20
> cheers
> Anil
>=20
> On 15 Aug 2013, at 15:48, Vincent Bernardoff <vb@luminar.eu.org> =
wrote:
>=20
> > Please try out my branch no-xenstore of mirage-platform =
(git://github.com/vbmithr/mirage-platform), compatible with my branch =
"mirage-compatible" of git://github.com/vbmithr/ocaml-xenstore.
> >
> > It should work, and thus make it much easier to develop libraries =
that depends on either mirage-platform or Unix's xenctrl library. In =
particular, this is a requirement for an easy cross unix/xen packaging =
of my ocaml-xenstore library.
> >
> > I'm going to test it as well ASAP, but I wouldn't mind other people =
trying it out too.
> >
> > Cheers,
> >
> > Vincent
> >
>=20
>=20
>=20
>=20
>=20
> --=20
> Dave Scott


--Apple-Mail=_E8286730-7A0F-4B97-BBE5-850E98B3EBFE
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
	charset=iso-8859-1

<html><head><meta http-equiv="Content-Type" content="text/html charset=iso-8859-1"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Excellent, thanks! I'm hacking on Mirari today, so won't be touching anything Xen-related.<div><br></div><div>-anil</div><div><br><div><div>On 9 Sep 2013, at 12:05, David Scott &lt;<a href="mailto:scott.dj@gmail.com">scott.dj@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr">Hi,<div><br></div><div>I believe I've tested this and merged it already.</div><div><br></div><div>I think there's still an outstanding vchan pull request -- JonL says he's going to have a play with that today.</div>
<div><br></div><div>Cheers,</div><div>Dave</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Sep 9, 2013 at 11:54 AM, Anil Madhavapeddy <span dir="ltr">&lt;<a href="mailto:anil@recoil.org" target="_blank">anil@recoil.org</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I'm just catching up on my Mirage mail -- before I dive in, does this branch still need testing? &nbsp;I saw some other Xenstore commits and so don't want to duplicate work.<br>

<br>
cheers<br>
<span class="HOEnZb"><font color="#888888">Anil<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On 15 Aug 2013, at 15:48, Vincent Bernardoff &lt;<a href="mailto:vb@luminar.eu.org">vb@luminar.eu.org</a>&gt; wrote:<br>
<br>
&gt; Please try out my branch no-xenstore of mirage-platform (git://<a href="http://github.com/vbmithr/mirage-platform" target="_blank">github.com/vbmithr/mirage-platform</a>), compatible with my branch "mirage-compatible" of git://<a href="http://github.com/vbmithr/ocaml-xenstore" target="_blank">github.com/vbmithr/ocaml-xenstore</a>.<br>

&gt;<br>
&gt; It should work, and thus make it much easier to develop libraries that depends on either mirage-platform or Unix's xenctrl library. In particular, this is a requirement for an easy cross unix/xen packaging of my ocaml-xenstore library.<br>

&gt;<br>
&gt; I'm going to test it as well ASAP, but I wouldn't mind other people trying it out too.<br>
&gt;<br>
&gt; Cheers,<br>
&gt;<br>
&gt; Vincent<br>
&gt;<br>
<br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Dave Scott
</div>
</blockquote></div><br></div></body></html>
--Apple-Mail=_E8286730-7A0F-4B97-BBE5-850E98B3EBFE--


From anil@recoil.org Mon Sep 09 13:33:01 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJ0eL-0006hW-Iz (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 09 Sep 2013 13:33:01 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1520845
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:8289
	helo=dark.recoil.org)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with smtp id 1VJ0eL-0007RL-ga (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 09 Sep 2013 13:33:01 +0100
Received: (qmail 10303 invoked by uid 634); 9 Sep 2013 12:33:01 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from volstagg-0.srg.cl.cam.ac.uk (HELO clink.office) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Mon, 09 Sep 2013 13:33:00 +0100
Content-Type: text/plain; charset=iso-8859-1
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: mirage support for dynamically loaded modules
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <CAPVzHcbAZrpaML97+AGVe28ihNAS64ZDzXHMPgE+c2gXxibGDw@mail.gmail.com>
Date: Mon, 9 Sep 2013 13:32:59 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <CB902C95-CCF3-4ADD-8AE6-11DDA878442C@recoil.org>
References: <CAPVzHcbAZrpaML97+AGVe28ihNAS64ZDzXHMPgE+c2gXxibGDw@mail.gmail.com>
To: Andrew Lekar <sam.and.tetris@gmail.com>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: cl-mirage@lists.cam.ac.uk
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 09 Sep 2013 12:33:01 -0000
Status: O
Content-Length: 1102
Lines: 26

On 8 Sep 2013, at 20:25, Andrew Lekar <sam.and.tetris@gmail.com> wrote:

> Hello everyone.
>=20
> Is it possible to support dynamically load ocaml modules in mirage? So =
that I do not rebuild entire mirage kernel but make it once and add =
additional drivers later. What are the steps required to make it =
possible? I guess to make it work I should implement filesystem support, =
bytecode interpreter or ocaml compiler in mirage.

Hi Andrew,

It depends which backend you're thinking of.  In Xen, we have some =
patches to further make the address space immutable post-boot (by =
dropping the ability to alter the guest page tables or switch CR3).  In =
that case, you can't do dynamic loading by design.

However, without this patch, and with a suitable filesystem, network or =
vchan source for the dynamic module, you could do dynamic loading.  The =
real question is why you'd want that at all, given it's easier to =
recompile a Mirage instance and redeploy it rather than go through all =
the trouble of dynamic loading.  In many ways, that's the whole point of =
the Xen backend ;-)

-anil=


From sam.and.tetris@gmail.com Mon Sep 09 18:21:06 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJ598-0002vH-Kc (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <sam.and.tetris@gmail.com>);
	Mon, 09 Sep 2013 18:21:06 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1520845 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.223.181 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (sam.and.tetris[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-ie0-f181.google.com ([209.85.223.181]:44666)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1VJ598-00034l-Cw (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk (return-path <sam.and.tetris@gmail.com>);
	Mon, 09 Sep 2013 18:21:06 +0100
Received: by mail-ie0-f181.google.com with SMTP id y16so8511085ieg.12
	for <cl-mirage@lists.cam.ac.uk>; Mon, 09 Sep 2013 10:21:05 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.50.25.39 with SMTP id z7mr8624376igf.59.1378747265241; Mon,
	09 Sep 2013 10:21:05 -0700 (PDT)
Received: by 10.42.103.84 with HTTP; Mon, 9 Sep 2013 10:21:05 -0700 (PDT)
In-Reply-To: <CB902C95-CCF3-4ADD-8AE6-11DDA878442C@recoil.org>
References: <CAPVzHcbAZrpaML97+AGVe28ihNAS64ZDzXHMPgE+c2gXxibGDw@mail.gmail.com>
	<CB902C95-CCF3-4ADD-8AE6-11DDA878442C@recoil.org>
Date: Mon, 9 Sep 2013 23:21:05 +0600
Message-ID: <CAPVzHcaA1A2BM7bkqSeBZjWLcCcUrjgzxtzLPkYYWWPr0UEFWQ@mail.gmail.com>
Subject: Re: mirage support for dynamically loaded modules
From: Andrew Lekar <sam.and.tetris@gmail.com>
To: Anil Madhavapeddy <anil@recoil.org>
Content-Type: multipart/alternative; boundary=047d7bd76898fad8ed04e5f69c74
Cc: cl-mirage@lists.cam.ac.uk
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 09 Sep 2013 17:21:06 -0000
Status: O
Content-Length: 4423
Lines: 96

--047d7bd76898fad8ed04e5f69c74
Content-Type: text/plain; charset=ISO-8859-1

Thank you Anil.

I am working with baremetal port of mirage (well on top of xen in dom0
domain) and I'm expecting to have a lot of hardware drivers which I'd like
to deploy and debug without rebuild of entire mirage image. Also I'd like
to have a way of upgrading software and it is better done with in-system
compiler or bytecode interpreter. As far as I understood your answer mirage
ocaml does have bytecode interpreter but does not support filesystem or
other modules sources, am I right?
Unikernel solution is good for me for now but it is way too long to debug
anything with unikernel and I expect it to become worse in future.


2013/9/9 Anil Madhavapeddy <anil@recoil.org>

> On 8 Sep 2013, at 20:25, Andrew Lekar <sam.and.tetris@gmail.com> wrote:
>
> > Hello everyone.
> >
> > Is it possible to support dynamically load ocaml modules in mirage? So
> that I do not rebuild entire mirage kernel but make it once and add
> additional drivers later. What are the steps required to make it possible?
> I guess to make it work I should implement filesystem support, bytecode
> interpreter or ocaml compiler in mirage.
>
> Hi Andrew,
>
> It depends which backend you're thinking of.  In Xen, we have some patches
> to further make the address space immutable post-boot (by dropping the
> ability to alter the guest page tables or switch CR3).  In that case, you
> can't do dynamic loading by design.
>
> However, without this patch, and with a suitable filesystem, network or
> vchan source for the dynamic module, you could do dynamic loading.  The
> real question is why you'd want that at all, given it's easier to recompile
> a Mirage instance and redeploy it rather than go through all the trouble of
> dynamic loading.  In many ways, that's the whole point of the Xen backend
> ;-)
>
> -anil

--047d7bd76898fad8ed04e5f69c74
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Thank you Anil.<div><br></div><div>I am working with barem=
etal port of mirage (well on top of xen in dom0 domain) and I&#39;m expecti=
ng to have a lot of hardware drivers which I&#39;d like to deploy and debug=
 without rebuild of entire mirage image. Also I&#39;d like to have a way of=
 upgrading software and it is better done with in-system compiler or byteco=
de interpreter. As far as I understood your answer mirage ocaml does have b=
ytecode interpreter but does not support filesystem or other modules source=
s, am I right?</div>
<div>Unikernel solution is good for me for now but it is way too long to de=
bug anything with unikernel and I expect it to become worse in future.</div=
></div><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">2013/9=
/9 Anil Madhavapeddy <span dir=3D"ltr">&lt;<a href=3D"mailto:anil@recoil.or=
g" target=3D"_blank">anil@recoil.org</a>&gt;</span><br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div class=3D"im">On 8 Sep 2013, at 20:25, A=
ndrew Lekar &lt;<a href=3D"mailto:sam.and.tetris@gmail.com">sam.and.tetris@=
gmail.com</a>&gt; wrote:<br>

<br>
&gt; Hello everyone.<br>
&gt;<br>
&gt; Is it possible to support dynamically load ocaml modules in mirage? So=
 that I do not rebuild entire mirage kernel but make it once and add additi=
onal drivers later. What are the steps required to make it possible? I gues=
s to make it work I should implement filesystem support, bytecode interpret=
er or ocaml compiler in mirage.<br>

<br>
</div>Hi Andrew,<br>
<br>
It depends which backend you&#39;re thinking of. =A0In Xen, we have some pa=
tches to further make the address space immutable post-boot (by dropping th=
e ability to alter the guest page tables or switch CR3). =A0In that case, y=
ou can&#39;t do dynamic loading by design.<br>

<br>
However, without this patch, and with a suitable filesystem, network or vch=
an source for the dynamic module, you could do dynamic loading. =A0The real=
 question is why you&#39;d want that at all, given it&#39;s easier to recom=
pile a Mirage instance and redeploy it rather than go through all the troub=
le of dynamic loading. =A0In many ways, that&#39;s the whole point of the X=
en backend ;-)<br>

<span class=3D"HOEnZb"><font color=3D"#888888"><br>
-anil</font></span></blockquote></div><br></div>

--047d7bd76898fad8ed04e5f69c74--


From ben.guthro@gmail.com Mon Sep 09 18:54:55 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJ5fr-0003ZG-4e (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <ben.guthro@gmail.com>); Mon, 09 Sep 2013 18:54:55 +0100
X-Cam-SpamDetails: score -0.6 from SpamAssassin-3.3.2-1520845 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.212.53 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (ben.guthro[at]gmail.com)
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-vb0-f53.google.com ([209.85.212.53]:33824)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1VJ5fq-0004Dt-DC (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <ben.guthro@gmail.com>); Mon, 09 Sep 2013 18:54:55 +0100
Received: by mail-vb0-f53.google.com with SMTP id i3so4096723vbh.26
	for <cl-mirage@lists.cam.ac.uk>; Mon, 09 Sep 2013 10:54:53 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.221.44.136 with SMTP id ug8mr18524798vcb.13.1378749293357;
	Mon, 09 Sep 2013 10:54:53 -0700 (PDT)
Sender: ben.guthro@gmail.com
Received: by 10.58.45.132 with HTTP; Mon, 9 Sep 2013 10:54:53 -0700 (PDT)
In-Reply-To: <520379F8.7010505@xen.org>
References: <51FF91CA.7050501@xen.org> <1375772671.9712.64.camel@Abyss>
	<520379F8.7010505@xen.org>
Date: Mon, 9 Sep 2013 13:54:53 -0400
X-Google-Sender-Auth: 2eBvi2_9f88SmQr_LMJYYx0W-Es
Message-ID: <CAOvdn6X6TT16Pr6BvDH8rh1t+AEjnpa+ApYqsiF92KLvTDBQYg@mail.gmail.com>
Subject: Re: [Xen-devel] [Input needed, open until Monday Aug 12th] Should we
	have an invite only,
	1/2 day developer meeting before Xen Developer Summit
	(i.e. in the afternoon of October 23, Edinburgh, UK)
From: Ben Guthro <ben@guthro.net>
To: Lars Kurth <lars.kurth@xen.org>
Content-Type: multipart/alternative; boundary=001a113378d8dd739b04e5f715f7
Cc: "xen-arm@lists.xen.org" <xen-arm@lists.xen.org>,
	Dario Faggioli <dario.faggioli@citrix.com>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
	"cl-mirage@lists.cam.ac.uk" <cl-mirage@lists.cam.ac.uk>,
	"xen-api@lists.xen.org" <xen-api@lists.xen.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 09 Sep 2013 17:54:55 -0000
Status: O
Content-Length: 2053
Lines: 61

--001a113378d8dd739b04e5f715f7
Content-Type: text/plain; charset=ISO-8859-1

Lars,

I'm looking to finalize travel plans for this trip, and need to know if
this dev meeting will happen, and when it will be

Apologies if you sent the details in another thread.

Thanks
Ben



On Thu, Aug 8, 2013 at 6:59 AM, Lars Kurth <lars.kurth@xen.org> wrote:

> Looks like we have 12 for a dev meeting and 12 would attend (if they can
> make it, or send somebody else), including replies to me made in private.
> Any more?
>
> Regards
> Lars
>
> ______________________________**_________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
>

--001a113378d8dd739b04e5f715f7
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Lars,<div><br></div><div>I&#39;m looking to finalize trave=
l plans for this trip, and need to know if this dev meeting will happen, an=
d when it will be</div><div><br></div><div>Apologies if you sent the detail=
s in another thread.</div>
<div><br></div><div>Thanks</div><div>Ben</div><div><br></div></div><div cla=
ss=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On Thu, Aug 8, 2013 a=
t 6:59 AM, Lars Kurth <span dir=3D"ltr">&lt;<a href=3D"mailto:lars.kurth@xe=
n.org" target=3D"_blank">lars.kurth@xen.org</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">Looks like we have 12 for a dev meeting and =
12 would attend (if they can make it, or send somebody else), including rep=
lies to me made in private.<br>

Any more?<div class=3D"HOEnZb"><div class=3D"h5"><br>
Regards<br>
Lars<br>
<br>
______________________________<u></u>_________________<br>
Xen-devel mailing list<br>
<a href=3D"mailto:Xen-devel@lists.xen.org" target=3D"_blank">Xen-devel@list=
s.xen.org</a><br>
<a href=3D"http://lists.xen.org/xen-devel" target=3D"_blank">http://lists.x=
en.org/xen-devel</a><br>
</div></div></blockquote></div><br></div>

--001a113378d8dd739b04e5f715f7--


From lars.kurth.xen@gmail.com Mon Sep 09 19:32:00 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJ6Fk-000401-EK (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Mon, 09 Sep 2013 19:32:00 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1520845 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [74.125.82.177 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (lars.kurth.xen[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-we0-f177.google.com ([74.125.82.177]:49957)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VJ6Fj-0003zL-2W (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk (return-path <lars.kurth.xen@gmail.com>);
	Mon, 09 Sep 2013 19:32:00 +0100
Received: by mail-we0-f177.google.com with SMTP id t60so4596024wes.36
	for <cl-mirage@lists.cam.ac.uk>; Mon, 09 Sep 2013 11:31:59 -0700 (PDT)
X-Received: by 10.194.201.225 with SMTP id kd1mr2840266wjc.35.1378751519546;
	Mon, 09 Sep 2013 11:31:59 -0700 (PDT)
Received: from [192.168.0.11] (05453ae9.skybroadband.com. [5.69.58.233])
	by mx.google.com with ESMTPSA id ey2sm19727526wib.5.1969.12.31.16.00.00
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Mon, 09 Sep 2013 11:31:58 -0700 (PDT)
Date: Mon, 09 Sep 2013 19:31:58 +0100
Subject: Re: [Xen-devel] [Input needed, open until Monday Aug 12th] Should
	we have an invite only, 1/2 day developer meeting before Xen Developer
	Summit (i.e. in the afternoon of October 23, Edinburgh, UK)
Message-ID: <quaflv00is89uqv3ls8xme0d.1378751518623@email.android.com>
Importance: normal
From: "lars.kurth@xen.org" <lars.kurth.xen@gmail.com>
To: Ben Guthro <ben@guthro.net>, Lars Kurth <lars.kurth@xen.org>
MIME-Version: 1.0
Content-Type: multipart/alternative;
	boundary="--_com.android.email_821386145397350"
Cc: "xen-arm@lists.xen.org" <xen-arm@lists.xen.org>,
	Dario Faggioli <dario.faggioli@citrix.com>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
	"cl-mirage@lists.cam.ac.uk" <cl-mirage@lists.cam.ac.uk>,
	"xen-api@lists.xen.org" <xen-api@lists.xen.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
Reply-To: "lars.kurth@xen.org" <lars.kurth.xen@gmail.com>
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 09 Sep 2013 18:32:00 -0000
Status: O
Content-Length: 4967
Lines: 76

----_com.android.email_821386145397350
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64

WWVzIGl0IGlzIGhhcHBlbmluZy4gSSBzZW50IGEgbWFpbCAyIHRvIHRoZSBsaXN0IHdlZWtzIGFn
by4gSSBzZW50IG91dCBhIG1haWwgZWFybGllciB0b2RheSB0byBnZXQgaW5wdXQgb24gcmV2aXNl
ZCB0aW1pbmcuIEkgd291bGQgdHJ5IGFuZCBhcnJpdmUgdGhlIGV2ZW5pbmcgYmVmb3JlIG9yIGlu
IHRoZSBlYXJseSBob3VycyBvZiB3ZWQgOGlzaCBvciBzbwpMYXJzCgoKU2VudCBmcm9tIFNhbXN1
bmcgTW9iaWxlCgotLS0tLS0tLSBPcmlnaW5hbCBtZXNzYWdlIC0tLS0tLS0tCkZyb206IEJlbiBH
dXRocm8gPGJlbkBndXRocm8ubmV0PiAKRGF0ZTogMjAxMy8wOS8wOSAgMTg6NTQgIChHTVQrMDA6
MDApIApUbzogTGFycyBLdXJ0aCA8bGFycy5rdXJ0aEB4ZW4ub3JnPiAKQ2M6IERhcmlvIEZhZ2dp
b2xpIDxkYXJpby5mYWdnaW9saUBjaXRyaXguY29tPix4ZW4tYXJtQGxpc3RzLnhlbi5vcmcseGVu
LWFwaUBsaXN0cy54ZW4ub3JnLGNsLW1pcmFnZUBsaXN0cy5jYW0uYWMudWsseGVuLWRldmVsQGxp
c3RzLnhlbi5vcmcgClN1YmplY3Q6IFJlOiBbWGVuLWRldmVsXSBbSW5wdXQgbmVlZGVkLCBvcGVu
IHVudGlsIE1vbmRheSBBdWcgMTJ0aF0gU2hvdWxkIHdlIGhhdmUgYW4gaW52aXRlIG9ubHksIDEv
MiBkYXkgZGV2ZWxvcGVyIG1lZXRpbmcgYmVmb3JlIFhlbiBEZXZlbG9wZXIgU3VtbWl0IChpLmUu
IGluIHRoZSBhZnRlcm5vb24gb2YgT2N0b2JlciAyMywgRWRpbmJ1cmdoLCBVSykgCiAKTGFycywK
CkknbSBsb29raW5nIHRvIGZpbmFsaXplIHRyYXZlbCBwbGFucyBmb3IgdGhpcyB0cmlwLCBhbmQg
bmVlZCB0byBrbm93IGlmIHRoaXMgZGV2IG1lZXRpbmcgd2lsbCBoYXBwZW4sIGFuZCB3aGVuIGl0
IHdpbGwgYmUKCkFwb2xvZ2llcyBpZiB5b3Ugc2VudCB0aGUgZGV0YWlscyBpbiBhbm90aGVyIHRo
cmVhZC4KClRoYW5rcwpCZW4KCgoKT24gVGh1LCBBdWcgOCwgMjAxMyBhdCA2OjU5IEFNLCBMYXJz
IEt1cnRoIDxsYXJzLmt1cnRoQHhlbi5vcmc+IHdyb3RlOgpMb29rcyBsaWtlIHdlIGhhdmUgMTIg
Zm9yIGEgZGV2IG1lZXRpbmcgYW5kIDEyIHdvdWxkIGF0dGVuZCAoaWYgdGhleSBjYW4gbWFrZSBp
dCwgb3Igc2VuZCBzb21lYm9keSBlbHNlKSwgaW5jbHVkaW5nIHJlcGxpZXMgdG8gbWUgbWFkZSBp
biBwcml2YXRlLgpBbnkgbW9yZT8KClJlZ2FyZHMKTGFycwoKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2
ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwKCg==

----_com.android.email_821386145397350
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64

PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0
L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjwvaGVhZD48Ym9keSA+PGRpdj5ZZXMgaXQgaXMgaGFwcGVu
aW5nLiBJIHNlbnQgYSBtYWlsIDIgdG8gdGhlIGxpc3Qgd2Vla3MgYWdvLiBJIHNlbnQgb3V0IGEg
bWFpbCBlYXJsaWVyIHRvZGF5IHRvIGdldCBpbnB1dCBvbiByZXZpc2VkIHRpbWluZy4gSSB3b3Vs
ZCB0cnkgYW5kIGFycml2ZSB0aGUgZXZlbmluZyBiZWZvcmUgb3IgaW4gdGhlIGVhcmx5IGhvdXJz
IG9mIHdlZCA4aXNoIG9yIHNvPC9kaXY+PGRpdj5MYXJzPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRp
dj48YnI+PC9kaXY+PGRpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6NzUlO2NvbG9yOiM1NzU3NTci
PlNlbnQgZnJvbSBTYW1zdW5nIE1vYmlsZTwvZGl2PjwvZGl2Pjxicj48YnI+PGJyPi0tLS0tLS0t
IE9yaWdpbmFsIG1lc3NhZ2UgLS0tLS0tLS08YnI+RnJvbTogQmVuIEd1dGhybyAmbHQ7YmVuQGd1
dGhyby5uZXQmZ3Q7IDxicj5EYXRlOiAyMDEzLzA5LzA5ICAxODo1NCAgKEdNVCswMDowMCkgPGJy
PlRvOiBMYXJzIEt1cnRoICZsdDtsYXJzLmt1cnRoQHhlbi5vcmcmZ3Q7IDxicj5DYzogRGFyaW8g
RmFnZ2lvbGkgJmx0O2RhcmlvLmZhZ2dpb2xpQGNpdHJpeC5jb20mZ3Q7LHhlbi1hcm1AbGlzdHMu
eGVuLm9yZyx4ZW4tYXBpQGxpc3RzLnhlbi5vcmcsY2wtbWlyYWdlQGxpc3RzLmNhbS5hYy51ayx4
ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZyA8YnI+U3ViamVjdDogUmU6IFtYZW4tZGV2ZWxdIFtJbnB1
dCBuZWVkZWQsIG9wZW4gdW50aWwgTW9uZGF5IEF1ZyAxMnRoXSBTaG91bGQgd2UgaGF2ZSBhbiBp
bnZpdGUgb25seSwgMS8yIGRheSBkZXZlbG9wZXIgbWVldGluZyBiZWZvcmUgWGVuIERldmVsb3Bl
ciBTdW1taXQgKGkuZS4gaW4gdGhlIGFmdGVybm9vbiBvZiBPY3RvYmVyIDIzLCBFZGluYnVyZ2gs
IFVLKSA8YnI+IDxicj48YnI+PGRpdiBkaXI9Imx0ciI+TGFycyw8ZGl2Pjxicj48L2Rpdj48ZGl2
PkknbSBsb29raW5nIHRvIGZpbmFsaXplIHRyYXZlbCBwbGFucyBmb3IgdGhpcyB0cmlwLCBhbmQg
bmVlZCB0byBrbm93IGlmIHRoaXMgZGV2IG1lZXRpbmcgd2lsbCBoYXBwZW4sIGFuZCB3aGVuIGl0
IHdpbGwgYmU8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkFwb2xvZ2llcyBpZiB5b3Ugc2VudCB0
aGUgZGV0YWlscyBpbiBhbm90aGVyIHRocmVhZC48L2Rpdj4KPGRpdj48YnI+PC9kaXY+PGRpdj5U
aGFua3M8L2Rpdj48ZGl2PkJlbjwvZGl2PjxkaXY+PGJyPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIj48YnI+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj5PbiBUaHUsIEF1
ZyA4LCAyMDEzIGF0IDY6NTkgQU0sIExhcnMgS3VydGggPHNwYW4gZGlyPSJsdHIiPiZsdDs8YSBo
cmVmPSJtYWlsdG86bGFycy5rdXJ0aEB4ZW4ub3JnIiB0YXJnZXQ9Il9ibGFuayI+bGFycy5rdXJ0
aEB4ZW4ub3JnPC9hPiZndDs8L3NwYW4+IHdyb3RlOjxicj4KPGJsb2NrcXVvdGUgY2xhc3M9Imdt
YWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mg
c29saWQ7cGFkZGluZy1sZWZ0OjFleCI+TG9va3MgbGlrZSB3ZSBoYXZlIDEyIGZvciBhIGRldiBt
ZWV0aW5nIGFuZCAxMiB3b3VsZCBhdHRlbmQgKGlmIHRoZXkgY2FuIG1ha2UgaXQsIG9yIHNlbmQg
c29tZWJvZHkgZWxzZSksIGluY2x1ZGluZyByZXBsaWVzIHRvIG1lIG1hZGUgaW4gcHJpdmF0ZS48
YnI+CgpBbnkgbW9yZT88ZGl2IGNsYXNzPSJIT0VuWmIiPjxkaXYgY2xhc3M9Img1Ij48YnI+ClJl
Z2FyZHM8YnI+CkxhcnM8YnI+Cjxicj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPHU+
PC91Pl9fX19fX19fX19fX19fX19fPGJyPgpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0PGJyPgo8YSBo
cmVmPSJtYWlsdG86WGVuLWRldmVsQGxpc3RzLnhlbi5vcmciIHRhcmdldD0iX2JsYW5rIj5YZW4t
ZGV2ZWxAbGlzdHMueGVuLm9yZzwvYT48YnI+CjxhIGhyZWY9Imh0dHA6Ly9saXN0cy54ZW4ub3Jn
L3hlbi1kZXZlbCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZl
bDwvYT48YnI+CjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48L2Rpdj48YnI+PC9kaXY+CjwvYm9k
eT4=

----_com.android.email_821386145397350--




From Richard.Mortier@nottingham.ac.uk Tue Sep 10 10:20:50 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJK7u-000445-5A (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Tue, 10 Sep 2013 10:20:50 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1520997 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine06-20433-6.icritical.com ([195.62.217.150]:58407)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VJK7s-0004Bm-Es (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Tue, 10 Sep 2013 10:20:50 +0100
Received: (qmail 7757 invoked from network); 10 Sep 2013 09:20:44 -0000
Received: from localhost (127.0.0.1)
	by engine06-20433-6.icritical.com with SMTP; 10 Sep 2013 09:20:44 -0000
Received: from engine06-20433-6.icritical.com ([127.0.0.1])
	by localhost (engine06-20433-6.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 07733-03 for <cl-mirage@lists.cam.ac.uk>;
	Tue, 10 Sep 2013 10:20:44 +0100 (BST)
Received: (qmail 5556 invoked by uid 599); 10 Sep 2013 09:15:29 -0000
Received: from unknown (HELO smtp3.nottingham.ac.uk) (128.243.44.55)
	by engine06-20433-6.icritical.com (qpsmtpd/0.28) with ESMTP;
	Tue, 10 Sep 2013 10:15:29 +0100
Received: from uiwexhub02.ad.nottingham.ac.uk ([128.243.15.132])
	by smtp3.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Richard.Mortier@nottingham.ac.uk>)
	id 1VJK2q-0008SA-Su
	for cl-mirage@lists.cam.ac.uk; Tue, 10 Sep 2013 10:15:36 +0100
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Phiho Hoang <hohoangphi@gmail.com>
Date: Tue, 10 Sep 2013 10:15:36 +0100
Subject: Re: Mirage Hello World (Re: Building mirage-www)
Thread-Topic: Mirage Hello World (Re: Building mirage-www)
Thread-Index: Ac6uBk99F00pfB7BRI+IJ/CcFYZ88A==
Message-ID: <6D0FD8F0-91AD-4145-A595-422B0417C2AA@nottingham.ac.uk>
References: <CALZQg1ayimHpJN+Ht5X58_yEA=ce3sbKPh_O4HhPOpOarmSnOw@mail.gmail.com>
	<5CD75D88-447C-4067-BAEF-5FD70B489ADB@nottingham.ac.uk>
	<CALZQg1ZQMQ4OftKA2mbPvKUB1L8YJCGQLk_y4rcSE7Q314FqBQ@mail.gmail.com>
In-Reply-To: <CALZQg1ZQMQ4OftKA2mbPvKUB1L8YJCGQLk_y4rcSE7Q314FqBQ@mail.gmail.com>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine06-20433-6.icritical.com
Cc: Anil, "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	Madhavapeddy <anil@recoil.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 10 Sep 2013 09:20:50 -0000
Status: O
Content-Length: 1550
Lines: 53

hi phiho;

On 6 Sep 2013, at 22:19, Phiho Hoang wrote:

> To rebuild this as a Xen VM, simply opam switch and rebuild:
>=20
> $ opam switch 4.00.1+mirage-xen
> $ eval `opam config env`
> $ make build-basic
> </quote>
>=20
> I encountered this error:
>=20
> <quote>
> $ make build-basic
>=20
> ### basic: configure
> cd basic && mirari configure --unix
> /bin/sh: 1: mirari: not found
> make: *** [configure-basic] Error 127
> </quote>

drat-- that's my fault, again. sorry about this. i missed an inconsistency =
between the installation instructions and the hello world pages.

replace=20

$ opam switch 4.00.1+mirage-xen

above with

$ opam switch mirage-xen

...or, more generally, whichever opam compiler switch that you installed th=
e mirage-xen, mirari, etc packages to.

--=20
Cheers,

R.




This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From anil@recoil.org Tue Sep 10 10:58:21 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJKiD-0005Xl-Ef (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 10 Sep 2013 10:58:21 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1520997 
	*  0.0 HTML_MESSAGE BODY: HTML included in message
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:15991
	helo=dark.recoil.org)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1VJKiC-0005hO-2T (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 10 Sep 2013 10:58:21 +0100
Received: (qmail 15748 invoked by uid 634); 10 Sep 2013 09:58:19 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED,HTML_MESSAGE
X-Spam-Check-By: dark.recoil.org
Received: from volstagg-0.srg.cl.cam.ac.uk (HELO clink.office) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Tue, 10 Sep 2013 10:58:18 +0100
Content-Type: multipart/alternative;
	boundary="Apple-Mail=_4DF9B2E7-52CE-49A5-8D8E-F2834C6DA6D6"
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: mirage support for dynamically loaded modules
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <CAPVzHcaA1A2BM7bkqSeBZjWLcCcUrjgzxtzLPkYYWWPr0UEFWQ@mail.gmail.com>
Date: Tue, 10 Sep 2013 10:58:16 +0100
Message-Id: <0A5C21A3-5333-409B-AD35-4D2E66042F78@recoil.org>
References: <CAPVzHcbAZrpaML97+AGVe28ihNAS64ZDzXHMPgE+c2gXxibGDw@mail.gmail.com>
	<CB902C95-CCF3-4ADD-8AE6-11DDA878442C@recoil.org>
	<CAPVzHcaA1A2BM7bkqSeBZjWLcCcUrjgzxtzLPkYYWWPr0UEFWQ@mail.gmail.com>
To: Andrew Lekar <sam.and.tetris@gmail.com>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: cl-mirage@lists.cam.ac.uk
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 10 Sep 2013 09:58:21 -0000
Status: O
Content-Length: 10511
Lines: 209


--Apple-Mail=_4DF9B2E7-52CE-49A5-8D8E-F2834C6DA6D6
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=iso-8859-1

Got it -- so you want to interface with hardware drivers via passthrough =
to a driver domain, I think.

The best way to think of Mirage is as a growing bunch of libraries, =
glued together by a minimal runtime for whatever platform is targetted =
and an increasingly sophisticated constraint-based package manager =
(OPAM).

For example, consider these backends:

- UNIX --- the compiler output is an ELF executable, and started/stopped =
via a helper binary that passes it file descriptors and performs =
privileged operations.  It can be passed raw packets via tuntap, or =
invoke kernel sockets, depending on how it's built.

- Xen -- the compiler output is an object file that is linked to a =
minimal Xen OS with a linker script to make it PV bootable.  All the =
drivers are normal OCaml libraries (including the shared memory ring =
handling).

- Javascript -- the compiler output is a JS blob which has externals =
that are satisfied via other Javascript functions made available, and =
the runtime used is the Javascript one.

- kFreeBSD -- the compiler output is linked with the OCaml GC and =
fixed-point floating point and kernel module scaffolding.  The internal =
kernel APIs are bound as OCaml libraries.

The final one is the most relevant to you...the easiest way to manage =
hardware in the first instance is to use FreeBSD as a driver domain (no =
userspace), and take advantage of existing Mirage libraries to manage =
the kernel lifecycle.

The most immediate thing to get working in the kernel guest is Xenstore. =
 This is exposed to a HVM guest via a special MSR which gives you the =
shared_info page, which in turns gives access to hypercalls and the =
Xenstore event channel.  Once this is set up, you can use the existing =
OCaml Xenstore library to handle all the communication to/from the =
driver domain, without having to worry about reimplementing the protocol =
in the kernel.  The same goes for other virtual devices such as =
Netfront, Blkfront, and (thanks to Dave) even a VNC framebuffer if you =
want a PV framebuffer.

On your other points about filesystems -- Thomas Gazagnaire is working =
on a Mirage filesystem at the moment (a branch-consistent one dubbed =
Irminsule), and Dave has a FAT32 implementation, and I wrote a simple =
static one (in mirage-fs).  We're finding that filesystems aren't often =
required by our current applications, however.

Hope this helps -- if you let us know more specific use-cases, I can =
guide you towards more specific solutions. =20

cheers,
Anil

On 9 Sep 2013, at 18:21, Andrew Lekar <sam.and.tetris@gmail.com> wrote:

> Thank you Anil.
>=20
> I am working with baremetal port of mirage (well on top of xen in dom0 =
domain) and I'm expecting to have a lot of hardware drivers which I'd =
like to deploy and debug without rebuild of entire mirage image. Also =
I'd like to have a way of upgrading software and it is better done with =
in-system compiler or bytecode interpreter. As far as I understood your =
answer mirage ocaml does have bytecode interpreter but does not support =
filesystem or other modules sources, am I right?
> Unikernel solution is good for me for now but it is way too long to =
debug anything with unikernel and I expect it to become worse in future.
>=20
>=20
> 2013/9/9 Anil Madhavapeddy <anil@recoil.org>
> On 8 Sep 2013, at 20:25, Andrew Lekar <sam.and.tetris@gmail.com> =
wrote:
>=20
> > Hello everyone.
> >
> > Is it possible to support dynamically load ocaml modules in mirage? =
So that I do not rebuild entire mirage kernel but make it once and add =
additional drivers later. What are the steps required to make it =
possible? I guess to make it work I should implement filesystem support, =
bytecode interpreter or ocaml compiler in mirage.
>=20
> Hi Andrew,
>=20
> It depends which backend you're thinking of.  In Xen, we have some =
patches to further make the address space immutable post-boot (by =
dropping the ability to alter the guest page tables or switch CR3).  In =
that case, you can't do dynamic loading by design.
>=20
> However, without this patch, and with a suitable filesystem, network =
or vchan source for the dynamic module, you could do dynamic loading.  =
The real question is why you'd want that at all, given it's easier to =
recompile a Mirage instance and redeploy it rather than go through all =
the trouble of dynamic loading.  In many ways, that's the whole point of =
the Xen backend ;-)
>=20
> -anil
>=20


--Apple-Mail=_4DF9B2E7-52CE-49A5-8D8E-F2834C6DA6D6
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=iso-8859-1

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Diso-8859-1"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Got =
it -- so you want to interface with hardware drivers via passthrough to =
a driver domain, I think.<div><br></div><div>The best way to think of =
Mirage is as a growing bunch of libraries, glued together by a minimal =
runtime for whatever platform is targetted and an increasingly =
sophisticated constraint-based package manager =
(OPAM).</div><div><br></div><div>For example, consider these =
backends:</div><div><br></div><div>- UNIX --- the compiler output is an =
ELF executable, and started/stopped via a helper binary that passes it =
file descriptors and performs privileged operations. &nbsp;It can be =
passed raw packets via tuntap, or invoke kernel sockets, depending on =
how it's built.</div><div><br></div><div>- Xen -- the compiler output is =
an object file that is linked to a minimal Xen OS with a linker script =
to make it PV bootable. &nbsp;All the drivers are normal OCaml libraries =
(including the shared memory ring handling).</div><div><br></div><div>- =
Javascript -- the compiler output is a JS blob which has externals that =
are satisfied via other Javascript functions made available, and the =
runtime used is the Javascript one.</div><div><br></div><div>- kFreeBSD =
-- the compiler output is linked with the OCaml GC and fixed-point =
floating point and kernel module scaffolding. &nbsp;The internal kernel =
APIs are bound as OCaml libraries.</div><div><br></div><div>The final =
one is the most relevant to you...the easiest way to manage hardware in =
the first instance is to use FreeBSD as a driver domain (no userspace), =
and take advantage of existing Mirage libraries to manage the kernel =
lifecycle.</div><div><br></div><div>The most immediate thing to get =
working in the kernel guest is Xenstore. &nbsp;This is exposed to a HVM =
guest via a special MSR which gives you the shared_info page, which in =
turns gives access to hypercalls and the Xenstore event channel. =
&nbsp;Once this is set up, you can use the existing OCaml Xenstore =
library to handle all the communication to/from the driver domain, =
without having to worry about reimplementing the protocol in the kernel. =
&nbsp;The same goes for other virtual devices such as Netfront, =
Blkfront, and (thanks to Dave) even a VNC framebuffer if you want a PV =
framebuffer.</div><div><br></div><div>On your other points about =
filesystems -- Thomas Gazagnaire is working on a Mirage filesystem at =
the moment (a branch-consistent one dubbed Irminsule), and Dave has a =
FAT32 implementation, and I wrote a simple static one (in mirage-fs). =
&nbsp;We're finding that filesystems aren't often required by our =
current applications, however.</div><div><br></div><div>Hope this helps =
-- if you let us know more specific use-cases, I can guide you towards =
more specific solutions. =
&nbsp;</div><div><br></div><div>cheers,</div><div>Anil</div><div><br><div>=
<div>On 9 Sep 2013, at 18:21, Andrew Lekar &lt;<a =
href=3D"mailto:sam.and.tetris@gmail.com">sam.and.tetris@gmail.com</a>&gt; =
wrote:</div><br class=3D"Apple-interchange-newline"><blockquote =
type=3D"cite"><div dir=3D"ltr">Thank you Anil.<div><br></div><div>I am =
working with baremetal port of mirage (well on top of xen in dom0 =
domain) and I'm expecting to have a lot of hardware drivers which I'd =
like to deploy and debug without rebuild of entire mirage image. Also =
I'd like to have a way of upgrading software and it is better done with =
in-system compiler or bytecode interpreter. As far as I understood your =
answer mirage ocaml does have bytecode interpreter but does not support =
filesystem or other modules sources, am I right?</div>
<div>Unikernel solution is good for me for now but it is way too long to =
debug anything with unikernel and I expect it to become worse in =
future.</div></div><div class=3D"gmail_extra"><br><br><div =
class=3D"gmail_quote">2013/9/9 Anil Madhavapeddy <span dir=3D"ltr">&lt;<a =
href=3D"mailto:anil@recoil.org" =
target=3D"_blank">anil@recoil.org</a>&gt;</span><br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 =
.8ex;border-left:1px #ccc solid;padding-left:1ex"><div class=3D"im">On 8 =
Sep 2013, at 20:25, Andrew Lekar &lt;<a =
href=3D"mailto:sam.and.tetris@gmail.com">sam.and.tetris@gmail.com</a>&gt; =
wrote:<br>

<br>
&gt; Hello everyone.<br>
&gt;<br>
&gt; Is it possible to support dynamically load ocaml modules in mirage? =
So that I do not rebuild entire mirage kernel but make it once and add =
additional drivers later. What are the steps required to make it =
possible? I guess to make it work I should implement filesystem support, =
bytecode interpreter or ocaml compiler in mirage.<br>

<br>
</div>Hi Andrew,<br>
<br>
It depends which backend you're thinking of. &nbsp;In Xen, we have some =
patches to further make the address space immutable post-boot (by =
dropping the ability to alter the guest page tables or switch CR3). =
&nbsp;In that case, you can't do dynamic loading by design.<br>

<br>
However, without this patch, and with a suitable filesystem, network or =
vchan source for the dynamic module, you could do dynamic loading. =
&nbsp;The real question is why you'd want that at all, given it's easier =
to recompile a Mirage instance and redeploy it rather than go through =
all the trouble of dynamic loading. &nbsp;In many ways, that's the whole =
point of the Xen backend ;-)<br>

<span class=3D"HOEnZb"><font color=3D"#888888"><br>
-anil</font></span></blockquote></div><br></div>
</blockquote></div><br></div></body></html>=

--Apple-Mail=_4DF9B2E7-52CE-49A5-8D8E-F2834C6DA6D6--


From sam.and.tetris@gmail.com Tue Sep 10 11:22:46 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJL5q-0006T7-B5 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <sam.and.tetris@gmail.com>);
	Tue, 10 Sep 2013 11:22:46 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1520997 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.223.170 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (sam.and.tetris[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-ie0-f170.google.com ([209.85.223.170]:62137)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VJL5p-0002YW-1G (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk (return-path <sam.and.tetris@gmail.com>);
	Tue, 10 Sep 2013 11:22:46 +0100
Received: by mail-ie0-f170.google.com with SMTP id 17so6799537iea.1
	for <cl-mirage@lists.cam.ac.uk>; Tue, 10 Sep 2013 03:22:44 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.50.49.14 with SMTP id q14mr10758672ign.2.1378808564583; Tue,
	10 Sep 2013 03:22:44 -0700 (PDT)
Received: by 10.42.103.84 with HTTP; Tue, 10 Sep 2013 03:22:44 -0700 (PDT)
In-Reply-To: <0A5C21A3-5333-409B-AD35-4D2E66042F78@recoil.org>
References: <CAPVzHcbAZrpaML97+AGVe28ihNAS64ZDzXHMPgE+c2gXxibGDw@mail.gmail.com>
	<CB902C95-CCF3-4ADD-8AE6-11DDA878442C@recoil.org>
	<CAPVzHcaA1A2BM7bkqSeBZjWLcCcUrjgzxtzLPkYYWWPr0UEFWQ@mail.gmail.com>
	<0A5C21A3-5333-409B-AD35-4D2E66042F78@recoil.org>
Date: Tue, 10 Sep 2013 16:22:44 +0600
Message-ID: <CAPVzHcZRR2r-YYuEhV8Rx+uuER49CHW7YidhCvYNU7qU_k10Jg@mail.gmail.com>
Subject: Re: mirage support for dynamically loaded modules
From: Andrew Lekar <sam.and.tetris@gmail.com>
To: Anil Madhavapeddy <anil@recoil.org>
Content-Type: multipart/alternative; boundary=e89a8f8395b3b4913504e604e22a
Cc: cl-mirage@lists.cam.ac.uk
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 10 Sep 2013 10:22:46 -0000
Status: O
Content-Length: 12557
Lines: 248

--e89a8f8395b3b4913504e604e22a
Content-Type: text/plain; charset=ISO-8859-1

"Got it -- so you want to interface with hardware drivers via passthrough
to a driver domain, I think."

No! I do not have any domains with drivers or kernels - only dom0 with
mirage. So I have to implement hardware interaction all by myself with a
thin layer of xen.
For now I've got working baremetal ocaml runtime and I teared off xenstore
support from mirage to run it on dom0. You can think of it as a true
baremetal mirage since xen does not offer anything but some debug io and
timer support.
Therefore I'm interested in deploying hardware drivers separately from
mirage kernel and I'd prefer to have in theese drivers as less C code as
possible. Will you give me any suggestions about such mirage configuration?


2013/9/10 Anil Madhavapeddy <anil@recoil.org>

> Got it -- so you want to interface with hardware drivers via passthrough
> to a driver domain, I think.
>
> The best way to think of Mirage is as a growing bunch of libraries, glued
> together by a minimal runtime for whatever platform is targetted and an
> increasingly sophisticated constraint-based package manager (OPAM).
>
> For example, consider these backends:
>
> - UNIX --- the compiler output is an ELF executable, and started/stopped
> via a helper binary that passes it file descriptors and performs privileged
> operations.  It can be passed raw packets via tuntap, or invoke kernel
> sockets, depending on how it's built.
>
> - Xen -- the compiler output is an object file that is linked to a minimal
> Xen OS with a linker script to make it PV bootable.  All the drivers are
> normal OCaml libraries (including the shared memory ring handling).
>
> - Javascript -- the compiler output is a JS blob which has externals that
> are satisfied via other Javascript functions made available, and the
> runtime used is the Javascript one.
>
> - kFreeBSD -- the compiler output is linked with the OCaml GC and
> fixed-point floating point and kernel module scaffolding.  The internal
> kernel APIs are bound as OCaml libraries.
>
> The final one is the most relevant to you...the easiest way to manage
> hardware in the first instance is to use FreeBSD as a driver domain (no
> userspace), and take advantage of existing Mirage libraries to manage the
> kernel lifecycle.
>
> The most immediate thing to get working in the kernel guest is Xenstore.
>  This is exposed to a HVM guest via a special MSR which gives you the
> shared_info page, which in turns gives access to hypercalls and the
> Xenstore event channel.  Once this is set up, you can use the existing
> OCaml Xenstore library to handle all the communication to/from the driver
> domain, without having to worry about reimplementing the protocol in the
> kernel.  The same goes for other virtual devices such as Netfront,
> Blkfront, and (thanks to Dave) even a VNC framebuffer if you want a PV
> framebuffer.
>
> On your other points about filesystems -- Thomas Gazagnaire is working on
> a Mirage filesystem at the moment (a branch-consistent one dubbed
> Irminsule), and Dave has a FAT32 implementation, and I wrote a simple
> static one (in mirage-fs).  We're finding that filesystems aren't often
> required by our current applications, however.
>
> Hope this helps -- if you let us know more specific use-cases, I can guide
> you towards more specific solutions.
>
> cheers,
> Anil
>
> On 9 Sep 2013, at 18:21, Andrew Lekar <sam.and.tetris@gmail.com> wrote:
>
> Thank you Anil.
>
> I am working with baremetal port of mirage (well on top of xen in dom0
> domain) and I'm expecting to have a lot of hardware drivers which I'd like
> to deploy and debug without rebuild of entire mirage image. Also I'd like
> to have a way of upgrading software and it is better done with in-system
> compiler or bytecode interpreter. As far as I understood your answer mirage
> ocaml does have bytecode interpreter but does not support filesystem or
> other modules sources, am I right?
> Unikernel solution is good for me for now but it is way too long to debug
> anything with unikernel and I expect it to become worse in future.
>
>
> 2013/9/9 Anil Madhavapeddy <anil@recoil.org>
>
>> On 8 Sep 2013, at 20:25, Andrew Lekar <sam.and.tetris@gmail.com> wrote:
>>
>> > Hello everyone.
>> >
>> > Is it possible to support dynamically load ocaml modules in mirage? So
>> that I do not rebuild entire mirage kernel but make it once and add
>> additional drivers later. What are the steps required to make it possible?
>> I guess to make it work I should implement filesystem support, bytecode
>> interpreter or ocaml compiler in mirage.
>>
>> Hi Andrew,
>>
>> It depends which backend you're thinking of.  In Xen, we have some
>> patches to further make the address space immutable post-boot (by dropping
>> the ability to alter the guest page tables or switch CR3).  In that case,
>> you can't do dynamic loading by design.
>>
>> However, without this patch, and with a suitable filesystem, network or
>> vchan source for the dynamic module, you could do dynamic loading.  The
>> real question is why you'd want that at all, given it's easier to recompile
>> a Mirage instance and redeploy it rather than go through all the trouble of
>> dynamic loading.  In many ways, that's the whole point of the Xen backend
>> ;-)
>>
>> -anil
>
>
>
>

--e89a8f8395b3b4913504e604e22a
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">&quot;<span style=3D"font-family:arial,sans-serif;font-siz=
e:13px">Got it -- so you want to interface with hardware drivers via passth=
rough to a driver domain, I think.&quot;</span><div><span style=3D"font-fam=
ily:arial,sans-serif;font-size:13px"><br>
</span></div><div><span style=3D"font-family:arial,sans-serif;font-size:13p=
x">No! I do not have any domains with drivers or kernels - only dom0 with m=
irage. So I have to implement hardware interaction all by myself with a thi=
n layer of xen.</span></div>
<div><span style=3D"font-family:arial,sans-serif;font-size:13px">For now I&=
#39;ve got working baremetal ocaml runtime and I teared off xenstore suppor=
t from mirage to run it on dom0. You can think of it as a true baremetal mi=
rage since xen does not offer anything but some debug io and timer support.=
</span></div>
<div><span style=3D"font-family:arial,sans-serif;font-size:13px">Therefore =
I&#39;m interested in deploying hardware drivers separately from mirage ker=
nel and I&#39;d prefer to have in theese drivers as less C code as possible=
. Will you give me any suggestions about such mirage configuration?</span><=
/div>
</div><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">2013/9/=
10 Anil Madhavapeddy <span dir=3D"ltr">&lt;<a href=3D"mailto:anil@recoil.or=
g" target=3D"_blank">anil@recoil.org</a>&gt;</span><br><blockquote class=3D=
"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding=
-left:1ex">
<div style=3D"word-wrap:break-word">Got it -- so you want to interface with=
 hardware drivers via passthrough to a driver domain, I think.<div><br></di=
v><div>The best way to think of Mirage is as a growing bunch of libraries, =
glued together by a minimal runtime for whatever platform is targetted and =
an increasingly sophisticated constraint-based package manager (OPAM).</div=
>
<div><br></div><div>For example, consider these backends:</div><div><br></d=
iv><div>- UNIX --- the compiler output is an ELF executable, and started/st=
opped via a helper binary that passes it file descriptors and performs priv=
ileged operations. =A0It can be passed raw packets via tuntap, or invoke ke=
rnel sockets, depending on how it&#39;s built.</div>
<div><br></div><div>- Xen -- the compiler output is an object file that is =
linked to a minimal Xen OS with a linker script to make it PV bootable. =A0=
All the drivers are normal OCaml libraries (including the shared memory rin=
g handling).</div>
<div><br></div><div>- Javascript -- the compiler output is a JS blob which =
has externals that are satisfied via other Javascript functions made availa=
ble, and the runtime used is the Javascript one.</div><div><br></div><div>
- kFreeBSD -- the compiler output is linked with the OCaml GC and fixed-poi=
nt floating point and kernel module scaffolding. =A0The internal kernel API=
s are bound as OCaml libraries.</div><div><br></div><div>The final one is t=
he most relevant to you...the easiest way to manage hardware in the first i=
nstance is to use FreeBSD as a driver domain (no userspace), and take advan=
tage of existing Mirage libraries to manage the kernel lifecycle.</div>
<div><br></div><div>The most immediate thing to get working in the kernel g=
uest is Xenstore. =A0This is exposed to a HVM guest via a special MSR which=
 gives you the shared_info page, which in turns gives access to hypercalls =
and the Xenstore event channel. =A0Once this is set up, you can use the exi=
sting OCaml Xenstore library to handle all the communication to/from the dr=
iver domain, without having to worry about reimplementing the protocol in t=
he kernel. =A0The same goes for other virtual devices such as Netfront, Blk=
front, and (thanks to Dave) even a VNC framebuffer if you want a PV framebu=
ffer.</div>
<div><br></div><div>On your other points about filesystems -- Thomas Gazagn=
aire is working on a Mirage filesystem at the moment (a branch-consistent o=
ne dubbed Irminsule), and Dave has a FAT32 implementation, and I wrote a si=
mple static one (in mirage-fs). =A0We&#39;re finding that filesystems aren&=
#39;t often required by our current applications, however.</div>
<div><br></div><div>Hope this helps -- if you let us know more specific use=
-cases, I can guide you towards more specific solutions. =A0</div><div><br>=
</div><div>cheers,</div><div>Anil</div><div><div class=3D"h5"><div><br><div=
>
<div>On 9 Sep 2013, at 18:21, Andrew Lekar &lt;<a href=3D"mailto:sam.and.te=
tris@gmail.com" target=3D"_blank">sam.and.tetris@gmail.com</a>&gt; wrote:</=
div><br><blockquote type=3D"cite"><div dir=3D"ltr">Thank you Anil.<div><br>=
</div>
<div>I am working with baremetal port of mirage (well on top of xen in dom0=
 domain) and I&#39;m expecting to have a lot of hardware drivers which I&#3=
9;d like to deploy and debug without rebuild of entire mirage image. Also I=
&#39;d like to have a way of upgrading software and it is better done with =
in-system compiler or bytecode interpreter. As far as I understood your ans=
wer mirage ocaml does have bytecode interpreter but does not support filesy=
stem or other modules sources, am I right?</div>

<div>Unikernel solution is good for me for now but it is way too long to de=
bug anything with unikernel and I expect it to become worse in future.</div=
></div><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">2013/9=
/9 Anil Madhavapeddy <span dir=3D"ltr">&lt;<a href=3D"mailto:anil@recoil.or=
g" target=3D"_blank">anil@recoil.org</a>&gt;</span><br>

<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div>On 8 Sep 2013, at 20:25, Andrew Lekar &=
lt;<a href=3D"mailto:sam.and.tetris@gmail.com" target=3D"_blank">sam.and.te=
tris@gmail.com</a>&gt; wrote:<br>


<br>
&gt; Hello everyone.<br>
&gt;<br>
&gt; Is it possible to support dynamically load ocaml modules in mirage? So=
 that I do not rebuild entire mirage kernel but make it once and add additi=
onal drivers later. What are the steps required to make it possible? I gues=
s to make it work I should implement filesystem support, bytecode interpret=
er or ocaml compiler in mirage.<br>


<br>
</div>Hi Andrew,<br>
<br>
It depends which backend you&#39;re thinking of. =A0In Xen, we have some pa=
tches to further make the address space immutable post-boot (by dropping th=
e ability to alter the guest page tables or switch CR3). =A0In that case, y=
ou can&#39;t do dynamic loading by design.<br>


<br>
However, without this patch, and with a suitable filesystem, network or vch=
an source for the dynamic module, you could do dynamic loading. =A0The real=
 question is why you&#39;d want that at all, given it&#39;s easier to recom=
pile a Mirage instance and redeploy it rather than go through all the troub=
le of dynamic loading. =A0In many ways, that&#39;s the whole point of the X=
en backend ;-)<br>


<span><font color=3D"#888888"><br>
-anil</font></span></blockquote></div><br></div>
</blockquote></div><br></div></div></div></div></blockquote></div><br></div=
>

--e89a8f8395b3b4913504e604e22a--


From anil@recoil.org Tue Sep 10 12:20:43 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJLzv-0002L6-ND (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 10 Sep 2013 12:20:43 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1520997 
	*  0.0 HTML_MESSAGE BODY: HTML included in message
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:44342
	helo=dark.recoil.org)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1VJLzu-0005uq-1W (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 10 Sep 2013 12:20:43 +0100
Received: (qmail 28982 invoked by uid 634); 10 Sep 2013 11:20:42 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED,HTML_MESSAGE
X-Spam-Check-By: dark.recoil.org
Received: from volstagg-0.srg.cl.cam.ac.uk (HELO clink.office) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Tue, 10 Sep 2013 12:20:40 +0100
Content-Type: multipart/alternative;
	boundary="Apple-Mail=_43989449-0766-4BE7-91C7-645B378C04A0"
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: mirage support for dynamically loaded modules
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <CAPVzHcZRR2r-YYuEhV8Rx+uuER49CHW7YidhCvYNU7qU_k10Jg@mail.gmail.com>
Date: Tue, 10 Sep 2013 12:20:39 +0100
Message-Id: <2F4D8F1A-B39E-4FC6-BE54-9CED6E1B14DD@recoil.org>
References: <CAPVzHcbAZrpaML97+AGVe28ihNAS64ZDzXHMPgE+c2gXxibGDw@mail.gmail.com>
	<CB902C95-CCF3-4ADD-8AE6-11DDA878442C@recoil.org>
	<CAPVzHcaA1A2BM7bkqSeBZjWLcCcUrjgzxtzLPkYYWWPr0UEFWQ@mail.gmail.com>
	<0A5C21A3-5333-409B-AD35-4D2E66042F78@recoil.org>
	<CAPVzHcZRR2r-YYuEhV8Rx+uuER49CHW7YidhCvYNU7qU_k10Jg@mail.gmail.com>
To: Andrew Lekar <sam.and.tetris@gmail.com>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: cl-mirage@lists.cam.ac.uk
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 10 Sep 2013 11:20:43 -0000
Status: O
Content-Length: 17100
Lines: 339


--Apple-Mail=_43989449-0766-4BE7-91C7-645B378C04A0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=iso-8859-1

Ah, I see.  One first step here might be to add support for HVM booting =
of normal guests.  The HVM mode is very similar to PV boot, except:

- you need to configure a hardware timer
- the boot process goes through normal 16-bit bootstrap instead of =
direct PV boot
- page table manipulation is direct instead of via hypercalls.
- you can interact with emulated device drivers for block/net.

The last point is most important -- it would be easiest to get the =
scaffolding for device drivers working by being able to evaluate the =
rest of the system against the PV equivalents.

Another way to go is to investigate Snowflock's hardware device drivers =
that were written in OCaml: =
https://github.com/jessicah/snowflake-svn/tree/master/kernel (the =
license should be clarified with the author first, however, as I didn't =
spot any LICENSE files in there).

There's another approach which doesn't involve Xen at all -- have you =
considered taking one of the Raspberry Pi ARM mini operating systems and =
porting the Mirage libraries to it?  They compile in ARM fine, and it =
should be possible to adapt Dave's VNC library to rasterise onto HDMI. =
The advantage of this is that there's a fairly small hardware HDL to =
port, vs the incredible number of x86 drivers that would need to be =
supported.  (this isn't relevant if you have a specific x86 hardware set =
to support, but in general there's no easy way out of x86 support except =
for re-using kernel drivers in interesting ways).

Finally, you should also check out rump kernels: it should be easy to =
re-use portions of the NetBSD rump infrastructure to interface with =
Mirage management -- http://www.netbsd.org/docs/rump/.

cheers
Anil


On 10 Sep 2013, at 11:22, Andrew Lekar <sam.and.tetris@gmail.com> wrote:

> "Got it -- so you want to interface with hardware drivers via =
passthrough to a driver domain, I think."
>=20
> No! I do not have any domains with drivers or kernels - only dom0 with =
mirage. So I have to implement hardware interaction all by myself with a =
thin layer of xen.
> For now I've got working baremetal ocaml runtime and I teared off =
xenstore support from mirage to run it on dom0. You can think of it as a =
true baremetal mirage since xen does not offer anything but some debug =
io and timer support.
> Therefore I'm interested in deploying hardware drivers separately from =
mirage kernel and I'd prefer to have in theese drivers as less C code as =
possible. Will you give me any suggestions about such mirage =
configuration?
>=20
>=20
> 2013/9/10 Anil Madhavapeddy <anil@recoil.org>
> Got it -- so you want to interface with hardware drivers via =
passthrough to a driver domain, I think.
>=20
> The best way to think of Mirage is as a growing bunch of libraries, =
glued together by a minimal runtime for whatever platform is targetted =
and an increasingly sophisticated constraint-based package manager =
(OPAM).
>=20
> For example, consider these backends:
>=20
> - UNIX --- the compiler output is an ELF executable, and =
started/stopped via a helper binary that passes it file descriptors and =
performs privileged operations.  It can be passed raw packets via =
tuntap, or invoke kernel sockets, depending on how it's built.
>=20
> - Xen -- the compiler output is an object file that is linked to a =
minimal Xen OS with a linker script to make it PV bootable.  All the =
drivers are normal OCaml libraries (including the shared memory ring =
handling).
>=20
> - Javascript -- the compiler output is a JS blob which has externals =
that are satisfied via other Javascript functions made available, and =
the runtime used is the Javascript one.
>=20
> - kFreeBSD -- the compiler output is linked with the OCaml GC and =
fixed-point floating point and kernel module scaffolding.  The internal =
kernel APIs are bound as OCaml libraries.
>=20
> The final one is the most relevant to you...the easiest way to manage =
hardware in the first instance is to use FreeBSD as a driver domain (no =
userspace), and take advantage of existing Mirage libraries to manage =
the kernel lifecycle.
>=20
> The most immediate thing to get working in the kernel guest is =
Xenstore.  This is exposed to a HVM guest via a special MSR which gives =
you the shared_info page, which in turns gives access to hypercalls and =
the Xenstore event channel.  Once this is set up, you can use the =
existing OCaml Xenstore library to handle all the communication to/from =
the driver domain, without having to worry about reimplementing the =
protocol in the kernel.  The same goes for other virtual devices such as =
Netfront, Blkfront, and (thanks to Dave) even a VNC framebuffer if you =
want a PV framebuffer.
>=20
> On your other points about filesystems -- Thomas Gazagnaire is working =
on a Mirage filesystem at the moment (a branch-consistent one dubbed =
Irminsule), and Dave has a FAT32 implementation, and I wrote a simple =
static one (in mirage-fs).  We're finding that filesystems aren't often =
required by our current applications, however.
>=20
> Hope this helps -- if you let us know more specific use-cases, I can =
guide you towards more specific solutions. =20
>=20
> cheers,
> Anil
>=20
> On 9 Sep 2013, at 18:21, Andrew Lekar <sam.and.tetris@gmail.com> =
wrote:
>=20
>> Thank you Anil.
>>=20
>> I am working with baremetal port of mirage (well on top of xen in =
dom0 domain) and I'm expecting to have a lot of hardware drivers which =
I'd like to deploy and debug without rebuild of entire mirage image. =
Also I'd like to have a way of upgrading software and it is better done =
with in-system compiler or bytecode interpreter. As far as I understood =
your answer mirage ocaml does have bytecode interpreter but does not =
support filesystem or other modules sources, am I right?
>> Unikernel solution is good for me for now but it is way too long to =
debug anything with unikernel and I expect it to become worse in future.
>>=20
>>=20
>> 2013/9/9 Anil Madhavapeddy <anil@recoil.org>
>> On 8 Sep 2013, at 20:25, Andrew Lekar <sam.and.tetris@gmail.com> =
wrote:
>>=20
>> > Hello everyone.
>> >
>> > Is it possible to support dynamically load ocaml modules in mirage? =
So that I do not rebuild entire mirage kernel but make it once and add =
additional drivers later. What are the steps required to make it =
possible? I guess to make it work I should implement filesystem support, =
bytecode interpreter or ocaml compiler in mirage.
>>=20
>> Hi Andrew,
>>=20
>> It depends which backend you're thinking of.  In Xen, we have some =
patches to further make the address space immutable post-boot (by =
dropping the ability to alter the guest page tables or switch CR3).  In =
that case, you can't do dynamic loading by design.
>>=20
>> However, without this patch, and with a suitable filesystem, network =
or vchan source for the dynamic module, you could do dynamic loading.  =
The real question is why you'd want that at all, given it's easier to =
recompile a Mirage instance and redeploy it rather than go through all =
the trouble of dynamic loading.  In many ways, that's the whole point of =
the Xen backend ;-)
>>=20
>> -anil
>>=20
>=20
>=20


--Apple-Mail=_43989449-0766-4BE7-91C7-645B378C04A0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=iso-8859-1

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Diso-8859-1"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Ah, I =
see. &nbsp;One first step here might be to add support for HVM booting =
of normal guests. &nbsp;The HVM mode is very similar to PV boot, =
except:<div><br></div><div>- you need to configure a hardware =
timer</div><div>- the boot process goes through normal 16-bit bootstrap =
instead of direct PV boot</div><div>- page table manipulation is direct =
instead of via hypercalls.</div><div>- you can interact with emulated =
device drivers for block/net.</div><div><br></div><div>The last point is =
most important -- it would be easiest to get the scaffolding for device =
drivers working by being able to evaluate the rest of the system against =
the PV equivalents.</div><div><br></div><div>Another way to go is to =
investigate Snowflock's hardware device drivers that were written in =
OCaml:&nbsp;<a =
href=3D"https://github.com/jessicah/snowflake-svn/tree/master/kernel">http=
s://github.com/jessicah/snowflake-svn/tree/master/kernel</a> (the =
license should be clarified with the author first, however, as I didn't =
spot any LICENSE files in there).</div><div><br></div><div>There's =
another approach which doesn't involve Xen at all -- have you considered =
taking one of the Raspberry Pi ARM mini operating systems and porting =
the Mirage libraries to it? &nbsp;They compile in ARM fine, and it =
should be possible to adapt Dave's VNC library to rasterise onto HDMI. =
The advantage of this is that there's a fairly small hardware HDL to =
port, vs the incredible number of x86 drivers that would need to be =
supported. &nbsp;(this isn't relevant if you have a specific x86 =
hardware set to support, but in general there's no easy way out of x86 =
support except for re-using kernel drivers in interesting =
ways).</div><div><br></div><div>Finally, you should also check out rump =
kernels: it should be easy to re-use portions of the NetBSD rump =
infrastructure to interface with Mirage management --&nbsp;<a =
href=3D"http://www.netbsd.org/docs/rump/">http://www.netbsd.org/docs/rump/=
</a>.</div><div><br></div><div>cheers</div><div>Anil</div><div><br></div><=
div><br><div><div>On 10 Sep 2013, at 11:22, Andrew Lekar &lt;<a =
href=3D"mailto:sam.and.tetris@gmail.com">sam.and.tetris@gmail.com</a>&gt; =
wrote:</div><br class=3D"Apple-interchange-newline"><blockquote =
type=3D"cite"><div dir=3D"ltr">"<span =
style=3D"font-family:arial,sans-serif;font-size:13px">Got it -- so you =
want to interface with hardware drivers via passthrough to a driver =
domain, I think."</span><div><span =
style=3D"font-family:arial,sans-serif;font-size:13px"><br>
</span></div><div><span =
style=3D"font-family:arial,sans-serif;font-size:13px">No! I do not have =
any domains with drivers or kernels - only dom0 with mirage. So I have =
to implement hardware interaction all by myself with a thin layer of =
xen.</span></div>
<div><span style=3D"font-family:arial,sans-serif;font-size:13px">For now =
I've got working baremetal ocaml runtime and I teared off xenstore =
support from mirage to run it on dom0. You can think of it as a true =
baremetal mirage since xen does not offer anything but some debug io and =
timer support.</span></div>
<div><span style=3D"font-family:arial,sans-serif;font-size:13px">Therefore=
 I'm interested in deploying hardware drivers separately from mirage =
kernel and I'd prefer to have in theese drivers as less C code as =
possible. Will you give me any suggestions about such mirage =
configuration?</span></div>
</div><div class=3D"gmail_extra"><br><br><div =
class=3D"gmail_quote">2013/9/10 Anil Madhavapeddy <span dir=3D"ltr">&lt;<a=
 href=3D"mailto:anil@recoil.org" =
target=3D"_blank">anil@recoil.org</a>&gt;</span><br><blockquote =
class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc =
solid;padding-left:1ex">
<div style=3D"word-wrap:break-word">Got it -- so you want to interface =
with hardware drivers via passthrough to a driver domain, I =
think.<div><br></div><div>The best way to think of Mirage is as a =
growing bunch of libraries, glued together by a minimal runtime for =
whatever platform is targetted and an increasingly sophisticated =
constraint-based package manager (OPAM).</div>
<div><br></div><div>For example, consider these =
backends:</div><div><br></div><div>- UNIX --- the compiler output is an =
ELF executable, and started/stopped via a helper binary that passes it =
file descriptors and performs privileged operations. &nbsp;It can be =
passed raw packets via tuntap, or invoke kernel sockets, depending on =
how it's built.</div>
<div><br></div><div>- Xen -- the compiler output is an object file that =
is linked to a minimal Xen OS with a linker script to make it PV =
bootable. &nbsp;All the drivers are normal OCaml libraries (including =
the shared memory ring handling).</div>
<div><br></div><div>- Javascript -- the compiler output is a JS blob =
which has externals that are satisfied via other Javascript functions =
made available, and the runtime used is the Javascript =
one.</div><div><br></div><div>
- kFreeBSD -- the compiler output is linked with the OCaml GC and =
fixed-point floating point and kernel module scaffolding. &nbsp;The =
internal kernel APIs are bound as OCaml =
libraries.</div><div><br></div><div>The final one is the most relevant =
to you...the easiest way to manage hardware in the first instance is to =
use FreeBSD as a driver domain (no userspace), and take advantage of =
existing Mirage libraries to manage the kernel lifecycle.</div>
<div><br></div><div>The most immediate thing to get working in the =
kernel guest is Xenstore. &nbsp;This is exposed to a HVM guest via a =
special MSR which gives you the shared_info page, which in turns gives =
access to hypercalls and the Xenstore event channel. &nbsp;Once this is =
set up, you can use the existing OCaml Xenstore library to handle all =
the communication to/from the driver domain, without having to worry =
about reimplementing the protocol in the kernel. &nbsp;The same goes for =
other virtual devices such as Netfront, Blkfront, and (thanks to Dave) =
even a VNC framebuffer if you want a PV framebuffer.</div>
<div><br></div><div>On your other points about filesystems -- Thomas =
Gazagnaire is working on a Mirage filesystem at the moment (a =
branch-consistent one dubbed Irminsule), and Dave has a FAT32 =
implementation, and I wrote a simple static one (in mirage-fs). =
&nbsp;We're finding that filesystems aren't often required by our =
current applications, however.</div>
<div><br></div><div>Hope this helps -- if you let us know more specific =
use-cases, I can guide you towards more specific solutions. =
&nbsp;</div><div><br></div><div>cheers,</div><div>Anil</div><div><div =
class=3D"h5"><br><div>
<div>On 9 Sep 2013, at 18:21, Andrew Lekar &lt;<a =
href=3D"mailto:sam.and.tetris@gmail.com" =
target=3D"_blank">sam.and.tetris@gmail.com</a>&gt; =
wrote:</div><br><blockquote type=3D"cite"><div dir=3D"ltr">Thank you =
Anil.<div><br></div>
<div>I am working with baremetal port of mirage (well on top of xen in =
dom0 domain) and I'm expecting to have a lot of hardware drivers which =
I'd like to deploy and debug without rebuild of entire mirage image. =
Also I'd like to have a way of upgrading software and it is better done =
with in-system compiler or bytecode interpreter. As far as I understood =
your answer mirage ocaml does have bytecode interpreter but does not =
support filesystem or other modules sources, am I right?</div>

<div>Unikernel solution is good for me for now but it is way too long to =
debug anything with unikernel and I expect it to become worse in =
future.</div></div><div class=3D"gmail_extra"><br><br><div =
class=3D"gmail_quote">2013/9/9 Anil Madhavapeddy <span dir=3D"ltr">&lt;<a =
href=3D"mailto:anil@recoil.org" =
target=3D"_blank">anil@recoil.org</a>&gt;</span><br>

<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 =
.8ex;border-left:1px #ccc solid;padding-left:1ex"><div>On 8 Sep 2013, at =
20:25, Andrew Lekar &lt;<a href=3D"mailto:sam.and.tetris@gmail.com" =
target=3D"_blank">sam.and.tetris@gmail.com</a>&gt; wrote:<br>


<br>
&gt; Hello everyone.<br>
&gt;<br>
&gt; Is it possible to support dynamically load ocaml modules in mirage? =
So that I do not rebuild entire mirage kernel but make it once and add =
additional drivers later. What are the steps required to make it =
possible? I guess to make it work I should implement filesystem support, =
bytecode interpreter or ocaml compiler in mirage.<br>


<br>
</div>Hi Andrew,<br>
<br>
It depends which backend you're thinking of. &nbsp;In Xen, we have some =
patches to further make the address space immutable post-boot (by =
dropping the ability to alter the guest page tables or switch CR3). =
&nbsp;In that case, you can't do dynamic loading by design.<br>


<br>
However, without this patch, and with a suitable filesystem, network or =
vchan source for the dynamic module, you could do dynamic loading. =
&nbsp;The real question is why you'd want that at all, given it's easier =
to recompile a Mirage instance and redeploy it rather than go through =
all the trouble of dynamic loading. &nbsp;In many ways, that's the whole =
point of the Xen backend ;-)<br>


<span><font color=3D"#888888"><br>
-anil</font></span></blockquote></div><br></div>
</blockquote></div><br></div></div></div></blockquote></div><br></div>
</blockquote></div><br></div></body></html>=

--Apple-Mail=_43989449-0766-4BE7-91C7-645B378C04A0--


From scott.dj@gmail.com Tue Sep 10 14:01:32 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJNZU-0007dm-B9 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Tue, 10 Sep 2013 14:01:32 +0100
X-Cam-SpamScore: s
X-Cam-SpamDetails: score 1.3 from SpamAssassin-3.3.2-1520997 
	* -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/,
	no *      trust
	*      [209.85.192.179 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (scott.dj[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-pd0-f179.google.com ([209.85.192.179]:33147)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1VJNZT-0007b9-8S (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Tue, 10 Sep 2013 14:01:32 +0100
Received: by mail-pd0-f179.google.com with SMTP id v10so7585386pde.38
	for <cl-mirage@lists.cam.ac.uk>; Tue, 10 Sep 2013 06:01:30 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.66.150.232 with SMTP id ul8mr26466859pab.26.1378818090134;
	Tue, 10 Sep 2013 06:01:30 -0700 (PDT)
Received: by 10.70.56.36 with HTTP; Tue, 10 Sep 2013 06:01:29 -0700 (PDT)
Date: Tue, 10 Sep 2013 14:01:29 +0100
Message-ID: <CAG_esB3iurA_dD_7PKZ=L36kXCCG9bcyubR8Mdqkx38hOMmMCQ@mail.gmail.com>
Subject: Mirage weekly call wednesday (tomorrow) 4pm BST
From: David Scott <scott.dj@gmail.com>
To: Mirage List <cl-mirage@lists.cam.ac.uk>
Content-Type: multipart/alternative; boundary=047d7b6d91fc78f55804e6071a38
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 10 Sep 2013 13:01:32 -0000
Status: O
Content-Length: 1737
Lines: 47

--047d7b6d91fc78f55804e6071a38
Content-Type: text/plain; charset=ISO-8859-1

Fellow Mirage hackers, please join me on the slightly delayed Mirage weekly
call (binding left deliberately ambiguous) tomorrow (wednesday) at 4pm BST!

1.  Please join my meeting.
https://www1.gotomeeting.com/join/591890401

2.  Use your microphone and speakers (VoIP) - a headset is recommended.
 Or, call in using your telephone.

United Kingdom (toll-free): 0 808 168 0209 United Kingdom: +44 (0) 207 151
1817

United States (toll-free): 1 877 309 2070 United States: +1 (626) 521-0017

Access Code: 591-890-401
Audio PIN: Shown after joining the meeting

Meeting ID: 591-890-401

-- 
Dave Scott

--047d7b6d91fc78f55804e6071a38
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>Fellow Mirage hackers, please join me on the slightly=
 delayed Mirage weekly call (binding left deliberately ambiguous) tomorrow =
(wednesday) at 4pm BST!</div><div><br></div><div>1. =A0Please join my meeti=
ng.</div>
<div><a href=3D"https://www1.gotomeeting.com/join/591890401">https://www1.g=
otomeeting.com/join/591890401</a></div><div><br></div><div>2. =A0Use your m=
icrophone and speakers (VoIP) - a headset is recommended. =A0Or, call in us=
ing your telephone.</div>
<div><br></div><div>United Kingdom (toll-free): 0 808 168 0209 United Kingd=
om: +44 (0) 207 151 1817</div><div><br></div><div>United States (toll-free)=
: 1 877 309 2070 United States: +1 (626) 521-0017</div><div><br></div><div>
Access Code: 591-890-401</div><div>Audio PIN: Shown after joining the meeti=
ng</div><div><br></div><div>Meeting ID: 591-890-401</div><div><br></div>-- =
<br>Dave Scott
</div>

--047d7b6d91fc78f55804e6071a38--


From amc79@cam.ac.uk Tue Sep 10 14:53:55 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJOOB-0002NX-6h (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <amc79@cam.ac.uk>); Tue, 10 Sep 2013 14:53:55 +0100
X-Cam-AntiVirus: no malware found
X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/
Received: from dhcp-172-17-152-179.eduroam.lapwing.private.cam.ac.uk
	([172.17.152.179]:63837)
	by ppsw-52.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.158]:587)
	with esmtpsa (PLAIN:amc79) (TLSv1:AES128-SHA:128)
	id 1VJOOB-0007se-DL (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <amc79@cam.ac.uk>); Tue, 10 Sep 2013 14:53:55 +0100
From: Amir Chaudhry <amc79@cam.ac.uk>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
Subject: Problem with tuntap while building mirage-www
Message-Id: <0AB29DB9-2623-49EC-8EFE-54E02C070244@cam.ac.uk>
Date: Tue, 10 Sep 2013 14:53:55 +0100
To: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
X-Mailer: Apple Mail (2.1508)
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 10 Sep 2013 13:53:55 -0000
Status: O
Content-Length: 1492
Lines: 46

Hi everyone,

I'm going through the Mirage install instructions to build the mirage =
website and hit a tuntap related problem.  I installed tuntap via `brew =
install tuntap` and went through some of the brew caveats (i.e a few =
`sudo cp` and `sudo chown` steps).

Some notes:
- My compiler switch is OCaml 4.01.0 RC2 (ie I varied from the =
instructions by doing `opam switch mirage-unix -a 4.01.0` instead)

- I'm trying to use the mirage network stack so I ran...
$ make clean unix-direct-build      # this seems to work fine
$ sudo make run                              # this produces the output =
below

=85 but I have the same error with unix-socket-build.  Not sure what =
I've done wrong with tuntap. =20
What can I try next? =20

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D

amir$ sudo make run
cd src && sudo mirari run www.conf=20
[mirari] Using specified config file www.conf
[mirari] + unix direct mode
[mirari] Creating tap0 interface.
/dev/tap0
[mirari] Ctrl-C received, killing child and exiting.

[mirari] Tuntap failed with error No such file or directory. Remember =
that mirari has to be run as root have the CAP_NET_ADMIN capability in =
order to be able to run unikernels for the UNIX backendmirari: internal =
error, uncaught exception:
        Failure("No such file or directory")
       =20
make: *** [run] Error 1
amir$=20

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D


Amir=


From anil@recoil.org Tue Sep 10 15:19:29 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJOmv-0003WR-Sg (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 10 Sep 2013 15:19:29 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1520997
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:3221
	helo=dark.recoil.org)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1VJOmu-000611-38 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 10 Sep 2013 15:19:29 +0100
Received: (qmail 7751 invoked by uid 634); 10 Sep 2013 14:19:28 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from volstagg-0.srg.cl.cam.ac.uk (HELO clink.office) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Tue, 10 Sep 2013 15:19:28 +0100
From: Anil Madhavapeddy <anil@recoil.org>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Subject: Fwd: [Caml-list] ReactiveML 1.09.01
Date: Tue, 10 Sep 2013 15:19:28 +0100
References: <B5BC3CF6-54D7-4A22-9548-1B382CDBC8DE@lri.fr>
To: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
Message-Id: <6E7DB3D0-D8FB-47AB-B3F2-DF72F02BC43B@recoil.org>
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 10 Sep 2013 14:19:30 -0000
Status: O
Content-Length: 2058
Lines: 59

This is worth looking into, as it compiles to pure OCaml code which =
interoperates with Mirage.  Thomas just merged into OPAM too.

-anil

Begin forwarded message:

> From: Louis Mandel <louis.mandel@lri.fr>
> Subject: [Caml-list] ReactiveML 1.09.01
> Date: 10 September 2013 13:26:50 BST
> To: OCaml List <caml-list@inria.fr>, list@reactiveml.org
>=20
> We are happy to announce the new release of ReactiveML: =
http://reactiveml.org.
>=20
> ReactiveML is a language similar to OCaml extended with a built-in =
notion of parallel composition. It is based on the reactive synchronous =
model, a kind of cooperative multithreading with a global notion of =
time.
>=20
> The language is well suited to program applications with a lot of =
parallel processes which communicate and synchronize a lot such as video =
games or simulation problems.
>=20
> ReactiveML is compiled into plain OCaml code and thus can link or be =
linked to any OCaml code.
>=20
> This new version includes among others the following features:
> - a new application to the programming of mixed music: =
http://reactiveml.org/reactive_asco
> - the possibility to execute non-instantaneous code at top-level
> - a new standard library which includes in particular:
>    Module Rml_list: process iterators on lists
>    Module Rml_process_manager: combinators for suspension, =
reconfiguration, ...
>    Module async: launching asychronous computations
> - a new preemption construct with multiple handler to easily define =
automata.
>=20
> The full list of changes is available at =
http://reactiveml.org/distrib/changes.
>=20
> ReactiveML can be installed from the sources:
>  http://reactiveml.org/distrib/rml-1.09.01-2013-09-10.tar.gz
>=20
> or using OPAM:
>  opam install rml
>=20
> --
> Louis Mandel for the ReactiveML development team
>=20
>=20
> --=20
> Caml-list mailing list.  Subscription management and archives:
> https://sympa.inria.fr/sympa/arc/caml-list
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs



From anil@recoil.org Tue Sep 10 15:46:06 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJPCg-0004mV-QG (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 10 Sep 2013 15:46:06 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1520997
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:29435
	helo=dark.recoil.org)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1VJPCg-0001GB-1R (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 10 Sep 2013 15:46:06 +0100
Received: (qmail 21601 invoked by uid 634); 10 Sep 2013 14:46:06 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from volstagg-0.srg.cl.cam.ac.uk (HELO clink.office) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Tue, 10 Sep 2013 15:46:05 +0100
Content-Type: text/plain; charset=windows-1252
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: Problem with tuntap while building mirage-www
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <0AB29DB9-2623-49EC-8EFE-54E02C070244@cam.ac.uk>
Date: Tue, 10 Sep 2013 15:46:04 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <8B88EADA-E28B-435A-AEC1-0E8E459D6DC3@recoil.org>
References: <0AB29DB9-2623-49EC-8EFE-54E02C070244@cam.ac.uk>
To: Amir Chaudhry <amc79@cam.ac.uk>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 10 Sep 2013 14:46:06 -0000
Status: O
Content-Length: 1871
Lines: 56

This indicates that the tuntap MacOS X kext hasn't been installed =
correctly.  I dont know if the tuntap Homebrew package installs the =
kext, as the homepage has an Mpkg installer which installs the kernel =
module for you.

-anil

On 10 Sep 2013, at 14:53, Amir Chaudhry <amc79@cam.ac.uk> wrote:

> Hi everyone,
>=20
> I'm going through the Mirage install instructions to build the mirage =
website and hit a tuntap related problem.  I installed tuntap via `brew =
install tuntap` and went through some of the brew caveats (i.e a few =
`sudo cp` and `sudo chown` steps).
>=20
> Some notes:
> - My compiler switch is OCaml 4.01.0 RC2 (ie I varied from the =
instructions by doing `opam switch mirage-unix -a 4.01.0` instead)
>=20
> - I'm trying to use the mirage network stack so I ran...
> $ make clean unix-direct-build      # this seems to work fine
> $ sudo make run                              # this produces the =
output below
>=20
> =85 but I have the same error with unix-socket-build.  Not sure what =
I've done wrong with tuntap. =20
> What can I try next? =20
>=20
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
>=20
> amir$ sudo make run
> cd src && sudo mirari run www.conf=20
> [mirari] Using specified config file www.conf
> [mirari] + unix direct mode
> [mirari] Creating tap0 interface.
> /dev/tap0
> [mirari] Ctrl-C received, killing child and exiting.
>=20
> [mirari] Tuntap failed with error No such file or directory. Remember =
that mirari has to be run as root have the CAP_NET_ADMIN capability in =
order to be able to run unikernels for the UNIX backendmirari: internal =
error, uncaught exception:
>        Failure("No such file or directory")
>=20
> make: *** [run] Error 1
> amir$=20
>=20
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
>=20
>=20
> Amir



From pgj@caesar.elte.hu Tue Sep 10 16:22:21 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJPll-0001fx-9i (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <pgj@caesar.elte.hu>); Tue, 10 Sep 2013 16:22:21 +0100
X-Cam-SpamDetails: score -1.4 from SpamAssassin-3.3.2-1520997 
	* -0.7 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [157.181.151.9 listed in list.dnswl.dnsbl.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mx2.mail.elte.hu ([157.181.151.9]:55396)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1VJPlk-0006mG-Ee (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <pgj@caesar.elte.hu>); Tue, 10 Sep 2013 16:22:21 +0100
Received: from login01.caesar.elte.hu ([157.181.151.130])
	by mx2.mail.elte.hu with esmtp (Exim) id 1VJPld-00022u-7e
	from <pgj@caesar.elte.hu>; Tue, 10 Sep 2013 17:22:20 +0200
Received: (Authenticated sender: pgj)
	by login01.caesar.elte.hu with local (Exim 4.72)
	(envelope-from <pgj@caesar.elte.hu>)
	id 1VJPlc-0003eF-Fg; Tue, 10 Sep 2013 17:22:12 +0200
Date: Tue, 10 Sep 2013 17:22:12 +0200
From: PALI Gabor Janos <pgj@elte.hu>
To: Anil Madhavapeddy <anil@recoil.org>
Subject: Re: Mirage/kFreeBSD Compiler Patches
Message-ID: <20130910152212.GA3508@caesar.elte.hu>
References: <20130903173708.GA2976@caesar.elte.hu>
	<B8DAA9A3-8B4B-4C47-98F1-26F629F84318@recoil.org>
	<20130905153714.GA1041@caesar.elte.hu>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20130905153714.GA1041@caesar.elte.hu>
User-Agent: Mutt/1.5.20 (2009-06-14)
Sender: Pali Gabor Janos <pgj@login01.caesar.elte.hu>
X-ELTE-SpamScore: -2.0
X-ELTE-SpamLevel: 
X-ELTE-SpamCheck: no
X-ELTE-SpamVersion: ELTE 3.0 
X-ELTE-SpamCheck-Details: score=-2.0 required=5.9 tests=AWL,
	BAYES_00 autolearn=no SpamAssassin version=3.3.1
	-2.0 BAYES_00               BODY: Bayes spam probability is 0 to 1%
	[score: 0.0000]
	0.0 AWL AWL: From: address is in the auto white-list
Cc: cl-mirage@lists.cam.ac.uk
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 10 Sep 2013 15:22:21 -0000
Status: O
Content-Length: 569
Lines: 16

On Thu, Sep 05, 2013 at 05:37:14PM +0200, PALI Gabor Janos wrote:
> On Thu, Sep 05, 2013 at 11:59:11AM +0100, Anil Madhavapeddy wrote:
> > Do you want to submit the nopic one upstream for now and start some discussion
> > going on that?
> 
> Sure.   What about submitting
> 
> https://github.com/pgj/ocaml/commit/acb827c29187de3fafd17561e6e53606de33a94a.patch
> https://github.com/pgj/ocaml/commit/e63fdcbad6b403a52a7458e849136b08f97bb3d3.patch
> 
> as a single patch?

Okay, this one has been submitted as #6167 [1].

[1] http://caml.inria.fr/mantis/view.php?id=6167


From amc79@cam.ac.uk Tue Sep 10 16:43:19 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJQ63-0002Qc-IV (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <amc79@cam.ac.uk>); Tue, 10 Sep 2013 16:43:19 +0100
X-Cam-AntiVirus: no malware found
X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/
Received: from dhcp-172-17-152-179.eduroam.lapwing.private.cam.ac.uk
	([172.17.152.179]:50836)
	by ppsw-52.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.158]:587)
	with esmtpsa (PLAIN:amc79) (TLSv1:AES128-SHA:128)
	id 1VJQ63-0000eR-Cx (Exim 4.80_167-5a66dd3)
	(return-path <amc79@cam.ac.uk>); Tue, 10 Sep 2013 16:43:19 +0100
Content-Type: text/plain; charset=windows-1252
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: Problem with tuntap while building mirage-www
From: Amir Chaudhry <amc79@cam.ac.uk>
In-Reply-To: <8B88EADA-E28B-435A-AEC1-0E8E459D6DC3@recoil.org>
Date: Tue, 10 Sep 2013 16:43:18 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <BB7C3439-0D41-4056-B711-FA2834804513@cam.ac.uk>
References: <0AB29DB9-2623-49EC-8EFE-54E02C070244@cam.ac.uk>
	<8B88EADA-E28B-435A-AEC1-0E8E459D6DC3@recoil.org>
To: Anil Madhavapeddy <anil@recoil.org>
X-Mailer: Apple Mail (2.1508)
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 10 Sep 2013 15:43:19 -0000
Status: O
Content-Length: 2829
Lines: 82

Fixed.

Short answer: I rebooted (haven't had to do that in a while for an =
install to work, hence didn't think about it)

Longer answer: Getting tuntap via homebrew is fine but there's extra =
work in moving files to the appropriate places. This is pointed out in =
the Caveats and I'd already followed those instructions, namely copying =
and chown-ing files from Cellar into `/Library/Extensions/` and =
`/Library/StartupItems/` (nb: you can see the instructions I'm referring =
to via `brew info tuntap`)

Since the README in the downloadable pkg mentioned the same file =
locations, I guessed that a reboot was required to give the stuff in =
StartupItems a kick (I guessed based on the name of the folder).  That =
seems to have worked.  I assume installing via the pkg tells you that =
you need to restart.

Thanks,
Amir



On 10 Sep 2013, at 15:46, Anil Madhavapeddy <anil@recoil.org> wrote:

> This indicates that the tuntap MacOS X kext hasn't been installed =
correctly.  I dont know if the tuntap Homebrew package installs the =
kext, as the homepage has an Mpkg installer which installs the kernel =
module for you.
>=20
> -anil
>=20
> On 10 Sep 2013, at 14:53, Amir Chaudhry <amc79@cam.ac.uk> wrote:
>=20
>> Hi everyone,
>>=20
>> I'm going through the Mirage install instructions to build the mirage =
website and hit a tuntap related problem.  I installed tuntap via `brew =
install tuntap` and went through some of the brew caveats (i.e a few =
`sudo cp` and `sudo chown` steps).
>>=20
>> Some notes:
>> - My compiler switch is OCaml 4.01.0 RC2 (ie I varied from the =
instructions by doing `opam switch mirage-unix -a 4.01.0` instead)
>>=20
>> - I'm trying to use the mirage network stack so I ran...
>> $ make clean unix-direct-build      # this seems to work fine
>> $ sudo make run                              # this produces the =
output below
>>=20
>> =85 but I have the same error with unix-socket-build.  Not sure what =
I've done wrong with tuntap. =20
>> What can I try next? =20
>>=20
>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
>>=20
>> amir$ sudo make run
>> cd src && sudo mirari run www.conf=20
>> [mirari] Using specified config file www.conf
>> [mirari] + unix direct mode
>> [mirari] Creating tap0 interface.
>> /dev/tap0
>> [mirari] Ctrl-C received, killing child and exiting.
>>=20
>> [mirari] Tuntap failed with error No such file or directory. Remember =
that mirari has to be run as root have the CAP_NET_ADMIN capability in =
order to be able to run unikernels for the UNIX backendmirari: internal =
error, uncaught exception:
>>       Failure("No such file or directory")
>>=20
>> make: *** [run] Error 1
>> amir$=20
>>=20
>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
>>=20
>>=20
>> Amir
>=20



From hohoangphi@gmail.com Tue Sep 10 17:28:10 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJQnS-0003rX-E8 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Tue, 10 Sep 2013 17:28:10 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1520997 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.215.48 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (hohoangphi[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-la0-f48.google.com ([209.85.215.48]:53447)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1VJQnR-0006QQ-9E (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Tue, 10 Sep 2013 17:28:10 +0100
Received: by mail-la0-f48.google.com with SMTP id er20so6415281lab.35
	for <cl-mirage@lists.cam.ac.uk>; Tue, 10 Sep 2013 09:28:09 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.112.72.100 with SMTP id c4mr194991lbv.57.1378830489297; Tue,
	10 Sep 2013 09:28:09 -0700 (PDT)
Received: by 10.112.182.106 with HTTP; Tue, 10 Sep 2013 09:28:09 -0700 (PDT)
In-Reply-To: <6D0FD8F0-91AD-4145-A595-422B0417C2AA@nottingham.ac.uk>
References: <CALZQg1ayimHpJN+Ht5X58_yEA=ce3sbKPh_O4HhPOpOarmSnOw@mail.gmail.com>
	<5CD75D88-447C-4067-BAEF-5FD70B489ADB@nottingham.ac.uk>
	<CALZQg1ZQMQ4OftKA2mbPvKUB1L8YJCGQLk_y4rcSE7Q314FqBQ@mail.gmail.com>
	<6D0FD8F0-91AD-4145-A595-422B0417C2AA@nottingham.ac.uk>
Date: Tue, 10 Sep 2013 12:28:09 -0400
Message-ID: <CALZQg1ab3hnEeVVLxHBt7C3H4H1H-OagsBv9dRXq39sJ7iw5nw@mail.gmail.com>
Subject: Re: Mirage Hello World (Re: Building mirage-www)
From: Phiho Hoang <hohoangphi@gmail.com>
To: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
Content-Type: multipart/alternative; boundary=001a11c348ee8529a004e609fd10
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	Anil Madhavapeddy <anil@recoil.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 10 Sep 2013 16:28:10 -0000
Status: O
Content-Length: 7898
Lines: 241

--001a11c348ee8529a004e609fd10
Content-Type: text/plain; charset=ISO-8859-1

Hi Richard,

> $ opam switch mirage-xen

Thanks for the info.

$ make build-basic

now completed successfully.

However:

hph@ubunxen:~/mirage-skeleton$ make run-basic
cd basic && mirari run --xen
[mirari] Using scanned config file hello.conf
[mirari] + xen mode
ERROR:  A different toolstack (xapi) have been selected!
make: *** [run-basic] Error 1
hph@ubunxen:~/mirage-skeleton$

How can I instruct 'mirari run' to use 'xapi' instead of 'xl'?
Is there something that can be added to 'basic/hello.conf' to achieve this?

If I edit /etc/default/xen:

# TOOLSTACK=xapi
TOOLSTACK=xl

hph@ubunxen:~/mirage-skeleton$ make run-basic
cd basic && mirari run --xen
[mirari] Using scanned config file hello.conf
[mirari] + xen mode
xc: error: Could not obtain handle on privileged command interface (13 =
Permission denied): Internal error
libxl: error: libxl.c:87:libxl_ctx_alloc: cannot open libxc handle:
Permission denied
cannot init xl context
make: *** [run-basic] Error 1
hph@ubunxen:~/mirage-skeleton$

and

hph@ubunxen:~/mirage-skeleton$ sudo make run-basic
cd basic && mirari run --xen
/bin/sh: 1: mirari: not found
make: *** [run-basic] Error 127
hph@ubunxen:~/mirage-skeleton$

BTW, I still cannot run the Mirage "hello World" unikernel as a simple
POSIX binary as expected.
It does not print anything.


Cheers,

PhiHo




On Tue, Sep 10, 2013 at 5:15 AM, Richard Mortier <
Richard.Mortier@nottingham.ac.uk> wrote:

> hi phiho;
>
> On 6 Sep 2013, at 22:19, Phiho Hoang wrote:
>
> > To rebuild this as a Xen VM, simply opam switch and rebuild:
> >
> > $ opam switch 4.00.1+mirage-xen
> > $ eval `opam config env`
> > $ make build-basic
> > </quote>
> >
> > I encountered this error:
> >
> > <quote>
> > $ make build-basic
> >
> > ### basic: configure
> > cd basic && mirari configure --unix
> > /bin/sh: 1: mirari: not found
> > make: *** [configure-basic] Error 127
> > </quote>
>
> drat-- that's my fault, again. sorry about this. i missed an inconsistency
> between the installation instructions and the hello world pages.
>
> replace
>
> $ opam switch 4.00.1+mirage-xen
>
> above with
>
> $ opam switch mirage-xen
>
> ...or, more generally, whichever opam compiler switch that you installed
> the mirage-xen, mirari, etc packages to.
>
> --
> Cheers,
>
> R.
>
>
>
>
> This message and any attachment are intended solely for the addressee and
> may contain confidential information. If you have received this message in
> error, please send it back to me, and immediately delete it.   Please do
> not use, copy or disclose the information contained in this message or in
> any attachment.  Any views or opinions expressed by the author of this
> email do not necessarily reflect the views of the University of Nottingham.
>
> This message has been checked for viruses but the contents of an attachment
> may still contain software viruses which could damage your computer
> system, you are advised to perform your own checks. Email communications
> with the University of Nottingham may be monitored as permitted by UK
> legislation.
>
>
>
>
>

--001a11c348ee8529a004e609fd10
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi Richard,<div><br></div><div>&gt;=A0<span style=3D"font-=
family:arial,sans-serif;font-size:13px">$ opam switch mirage-xen</span></di=
v><div><span style=3D"font-family:arial,sans-serif;font-size:13px"><br></sp=
an></div>
<div>Thanks for the info.</div><div><br></div><div>$ make build-basic</div>=
<div><br></div><div>now completed successfully.</div><div><br></div><div>Ho=
wever:</div><div><br></div><div><div>hph@ubunxen:~/mirage-skeleton$ make ru=
n-basic</div>
<div>cd basic &amp;&amp; mirari run --xen</div><div>[mirari] Using scanned =
config file hello.conf</div><div>[mirari] + xen mode</div><div>ERROR: =A0A =
different toolstack (xapi) have been selected!</div><div>make: *** [run-bas=
ic] Error 1</div>
<div>hph@ubunxen:~/mirage-skeleton$</div></div><div><br></div><div>How can =
I instruct &#39;mirari run&#39; to use &#39;xapi&#39; instead of &#39;xl&#3=
9;?<br></div><div>Is there something that can be added to &#39;basic/hello.=
conf&#39; to achieve this?</div>
<div><br></div><div>If I edit /etc/default/xen:</div><div><div><br></div><d=
iv># TOOLSTACK=3Dxapi</div><div>TOOLSTACK=3Dxl</div></div><div><br></div><d=
iv><div>hph@ubunxen:~/mirage-skeleton$ make run-basic</div><div>cd basic &a=
mp;&amp; mirari run --xen</div>
<div>[mirari] Using scanned config file hello.conf</div><div>[mirari] + xen=
 mode</div><div>xc: error: Could not obtain handle on privileged command in=
terface (13 =3D Permission denied): Internal error</div><div>libxl: error: =
libxl.c:87:libxl_ctx_alloc: cannot open libxc handle: Permission denied</di=
v>
<div>cannot init xl context</div><div>make: *** [run-basic] Error 1</div><d=
iv>hph@ubunxen:~/mirage-skeleton$</div></div><div><br></div><div>and</div><=
div><br></div><div><div>hph@ubunxen:~/mirage-skeleton$ sudo make run-basic<=
/div>
<div>cd basic &amp;&amp; mirari run --xen</div><div>/bin/sh: 1: mirari: not=
 found</div><div>make: *** [run-basic] Error 127</div><div>hph@ubunxen:~/mi=
rage-skeleton$</div></div><div><br></div><div><div>BTW, I still cannot run =
the Mirage &quot;hello World&quot; unikernel as a simple POSIX binary as ex=
pected.</div>
<div>It does not print anything.</div></div><div><br></div><div><br></div><=
div>Cheers,</div><div><br></div><div>PhiHo</div><div><br></div><div><br></d=
iv></div><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On T=
ue, Sep 10, 2013 at 5:15 AM, Richard Mortier <span dir=3D"ltr">&lt;<a href=
=3D"mailto:Richard.Mortier@nottingham.ac.uk" target=3D"_blank">Richard.Mort=
ier@nottingham.ac.uk</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">hi phiho;<br>
<div class=3D"im"><br>
On 6 Sep 2013, at 22:19, Phiho Hoang wrote:<br>
<br>
&gt; To rebuild this as a Xen VM, simply opam switch and rebuild:<br>
&gt;<br>
&gt; $ opam switch 4.00.1+mirage-xen<br>
&gt; $ eval `opam config env`<br>
&gt; $ make build-basic<br>
&gt; &lt;/quote&gt;<br>
&gt;<br>
&gt; I encountered this error:<br>
&gt;<br>
&gt; &lt;quote&gt;<br>
&gt; $ make build-basic<br>
&gt;<br>
&gt; ### basic: configure<br>
&gt; cd basic &amp;&amp; mirari configure --unix<br>
&gt; /bin/sh: 1: mirari: not found<br>
&gt; make: *** [configure-basic] Error 127<br>
&gt; &lt;/quote&gt;<br>
<br>
</div>drat-- that&#39;s my fault, again. sorry about this. i missed an inco=
nsistency between the installation instructions and the hello world pages.<=
br>
<br>
replace<br>
<br>
$ opam switch 4.00.1+mirage-xen<br>
<br>
above with<br>
<br>
$ opam switch mirage-xen<br>
<br>
...or, more generally, whichever opam compiler switch that you installed th=
e mirage-xen, mirari, etc packages to.<br>
<div class=3D"HOEnZb"><div class=3D"h5"><br>
--<br>
Cheers,<br>
<br>
R.<br>
<br>
<br>
<br>
<br>
This message and any attachment are intended solely for the addressee and m=
ay contain confidential information. If you have received this message in e=
rror, please send it back to me, and immediately delete it. =A0 Please do n=
ot use, copy or disclose the information contained in this message or in an=
y attachment. =A0Any views or opinions expressed by the author of this emai=
l do not necessarily reflect the views of the University of Nottingham.<br>

<br>
This message has been checked for viruses but the contents of an attachment=
<br>
may still contain software viruses which could damage your computer system,=
 you are advised to perform your own checks. Email communications with the =
University of Nottingham may be monitored as permitted by UK legislation.<b=
r>

<br>
<br>
<br>
<br>
</div></div></blockquote></div><br></div>

--001a11c348ee8529a004e609fd10--


From sam.and.tetris@gmail.com Tue Sep 10 17:34:27 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJQtX-00042a-SC (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <sam.and.tetris@gmail.com>);
	Tue, 10 Sep 2013 17:34:27 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1520997 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.223.180 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (sam.and.tetris[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-ie0-f180.google.com ([209.85.223.180]:51057)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1VJQtW-0006r1-ED (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk (return-path <sam.and.tetris@gmail.com>);
	Tue, 10 Sep 2013 17:34:27 +0100
Received: by mail-ie0-f180.google.com with SMTP id 10so13408519ied.39
	for <cl-mirage@lists.cam.ac.uk>; Tue, 10 Sep 2013 09:34:25 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.50.25.39 with SMTP id z7mr10735633igf.59.1378830865398; Tue,
	10 Sep 2013 09:34:25 -0700 (PDT)
Received: by 10.42.103.84 with HTTP; Tue, 10 Sep 2013 09:34:25 -0700 (PDT)
In-Reply-To: <2F4D8F1A-B39E-4FC6-BE54-9CED6E1B14DD@recoil.org>
References: <CAPVzHcbAZrpaML97+AGVe28ihNAS64ZDzXHMPgE+c2gXxibGDw@mail.gmail.com>
	<CB902C95-CCF3-4ADD-8AE6-11DDA878442C@recoil.org>
	<CAPVzHcaA1A2BM7bkqSeBZjWLcCcUrjgzxtzLPkYYWWPr0UEFWQ@mail.gmail.com>
	<0A5C21A3-5333-409B-AD35-4D2E66042F78@recoil.org>
	<CAPVzHcZRR2r-YYuEhV8Rx+uuER49CHW7YidhCvYNU7qU_k10Jg@mail.gmail.com>
	<2F4D8F1A-B39E-4FC6-BE54-9CED6E1B14DD@recoil.org>
Date: Tue, 10 Sep 2013 22:34:25 +0600
Message-ID: <CAPVzHcZ5TQMvrbo3xvHSkVGQksQZ_mvpcDAnbg6te0d+HmmUpA@mail.gmail.com>
Subject: Re: mirage support for dynamically loaded modules
From: Andrew Lekar <sam.and.tetris@gmail.com>
To: Anil Madhavapeddy <anil@recoil.org>
Content-Type: multipart/alternative; boundary=047d7bd76898f008bc04e60a1334
Cc: cl-mirage@lists.cam.ac.uk
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 10 Sep 2013 16:34:27 -0000
Status: O
Content-Length: 17908
Lines: 361

--047d7bd76898f008bc04e60a1334
Content-Type: text/plain; charset=ISO-8859-1

Anil, this is just awesome! Snowflake is exactly the same I intended to do.
It even has dynamically loaded modules, shell, filesystem support. Do you
intend to implement shell or toplevel in mirage? It should ease os
management very much.


2013/9/10 Anil Madhavapeddy <anil@recoil.org>

> Ah, I see.  One first step here might be to add support for HVM booting of
> normal guests.  The HVM mode is very similar to PV boot, except:
>
> - you need to configure a hardware timer
> - the boot process goes through normal 16-bit bootstrap instead of direct
> PV boot
> - page table manipulation is direct instead of via hypercalls.
> - you can interact with emulated device drivers for block/net.
>
> The last point is most important -- it would be easiest to get the
> scaffolding for device drivers working by being able to evaluate the rest
> of the system against the PV equivalents.
>
> Another way to go is to investigate Snowflock's hardware device drivers
> that were written in OCaml:
> https://github.com/jessicah/snowflake-svn/tree/master/kernel (the license
> should be clarified with the author first, however, as I didn't spot any
> LICENSE files in there).
>
> There's another approach which doesn't involve Xen at all -- have you
> considered taking one of the Raspberry Pi ARM mini operating systems and
> porting the Mirage libraries to it?  They compile in ARM fine, and it
> should be possible to adapt Dave's VNC library to rasterise onto HDMI. The
> advantage of this is that there's a fairly small hardware HDL to port, vs
> the incredible number of x86 drivers that would need to be supported.
>  (this isn't relevant if you have a specific x86 hardware set to support,
> but in general there's no easy way out of x86 support except for re-using
> kernel drivers in interesting ways).
>
> Finally, you should also check out rump kernels: it should be easy to
> re-use portions of the NetBSD rump infrastructure to interface with Mirage
> management -- http://www.netbsd.org/docs/rump/.
>
> cheers
> Anil
>
>
> On 10 Sep 2013, at 11:22, Andrew Lekar <sam.and.tetris@gmail.com> wrote:
>
> "Got it -- so you want to interface with hardware drivers via passthrough
> to a driver domain, I think."
>
> No! I do not have any domains with drivers or kernels - only dom0 with
> mirage. So I have to implement hardware interaction all by myself with a
> thin layer of xen.
> For now I've got working baremetal ocaml runtime and I teared off xenstore
> support from mirage to run it on dom0. You can think of it as a true
> baremetal mirage since xen does not offer anything but some debug io and
> timer support.
> Therefore I'm interested in deploying hardware drivers separately from
> mirage kernel and I'd prefer to have in theese drivers as less C code as
> possible. Will you give me any suggestions about such mirage configuration?
>
>
> 2013/9/10 Anil Madhavapeddy <anil@recoil.org>
>
>> Got it -- so you want to interface with hardware drivers via passthrough
>> to a driver domain, I think.
>>
>> The best way to think of Mirage is as a growing bunch of libraries, glued
>> together by a minimal runtime for whatever platform is targetted and an
>> increasingly sophisticated constraint-based package manager (OPAM).
>>
>> For example, consider these backends:
>>
>> - UNIX --- the compiler output is an ELF executable, and started/stopped
>> via a helper binary that passes it file descriptors and performs privileged
>> operations.  It can be passed raw packets via tuntap, or invoke kernel
>> sockets, depending on how it's built.
>>
>> - Xen -- the compiler output is an object file that is linked to a
>> minimal Xen OS with a linker script to make it PV bootable.  All the
>> drivers are normal OCaml libraries (including the shared memory ring
>> handling).
>>
>> - Javascript -- the compiler output is a JS blob which has externals that
>> are satisfied via other Javascript functions made available, and the
>> runtime used is the Javascript one.
>>
>> - kFreeBSD -- the compiler output is linked with the OCaml GC and
>> fixed-point floating point and kernel module scaffolding.  The internal
>> kernel APIs are bound as OCaml libraries.
>>
>> The final one is the most relevant to you...the easiest way to manage
>> hardware in the first instance is to use FreeBSD as a driver domain (no
>> userspace), and take advantage of existing Mirage libraries to manage the
>> kernel lifecycle.
>>
>> The most immediate thing to get working in the kernel guest is Xenstore.
>>  This is exposed to a HVM guest via a special MSR which gives you the
>> shared_info page, which in turns gives access to hypercalls and the
>> Xenstore event channel.  Once this is set up, you can use the existing
>> OCaml Xenstore library to handle all the communication to/from the driver
>> domain, without having to worry about reimplementing the protocol in the
>> kernel.  The same goes for other virtual devices such as Netfront,
>> Blkfront, and (thanks to Dave) even a VNC framebuffer if you want a PV
>> framebuffer.
>>
>> On your other points about filesystems -- Thomas Gazagnaire is working on
>> a Mirage filesystem at the moment (a branch-consistent one dubbed
>> Irminsule), and Dave has a FAT32 implementation, and I wrote a simple
>> static one (in mirage-fs).  We're finding that filesystems aren't often
>> required by our current applications, however.
>>
>> Hope this helps -- if you let us know more specific use-cases, I can
>> guide you towards more specific solutions.
>>
>> cheers,
>> Anil
>>
>> On 9 Sep 2013, at 18:21, Andrew Lekar <sam.and.tetris@gmail.com> wrote:
>>
>> Thank you Anil.
>>
>> I am working with baremetal port of mirage (well on top of xen in dom0
>> domain) and I'm expecting to have a lot of hardware drivers which I'd like
>> to deploy and debug without rebuild of entire mirage image. Also I'd like
>> to have a way of upgrading software and it is better done with in-system
>> compiler or bytecode interpreter. As far as I understood your answer mirage
>> ocaml does have bytecode interpreter but does not support filesystem or
>> other modules sources, am I right?
>> Unikernel solution is good for me for now but it is way too long to debug
>> anything with unikernel and I expect it to become worse in future.
>>
>>
>> 2013/9/9 Anil Madhavapeddy <anil@recoil.org>
>>
>>> On 8 Sep 2013, at 20:25, Andrew Lekar <sam.and.tetris@gmail.com> wrote:
>>>
>>> > Hello everyone.
>>> >
>>> > Is it possible to support dynamically load ocaml modules in mirage? So
>>> that I do not rebuild entire mirage kernel but make it once and add
>>> additional drivers later. What are the steps required to make it possible?
>>> I guess to make it work I should implement filesystem support, bytecode
>>> interpreter or ocaml compiler in mirage.
>>>
>>> Hi Andrew,
>>>
>>> It depends which backend you're thinking of.  In Xen, we have some
>>> patches to further make the address space immutable post-boot (by dropping
>>> the ability to alter the guest page tables or switch CR3).  In that case,
>>> you can't do dynamic loading by design.
>>>
>>> However, without this patch, and with a suitable filesystem, network or
>>> vchan source for the dynamic module, you could do dynamic loading.  The
>>> real question is why you'd want that at all, given it's easier to recompile
>>> a Mirage instance and redeploy it rather than go through all the trouble of
>>> dynamic loading.  In many ways, that's the whole point of the Xen backend
>>> ;-)
>>>
>>> -anil
>>
>>
>>
>>
>
>

--047d7bd76898f008bc04e60a1334
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Anil, this is just awesome! Snowflake is exactly the same =
I intended to do. It even has dynamically loaded modules, shell, filesystem=
 support. Do you intend to implement shell or toplevel in mirage? It should=
 ease os management very much.</div>
<div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">2013/9/10 Ani=
l Madhavapeddy <span dir=3D"ltr">&lt;<a href=3D"mailto:anil@recoil.org" tar=
get=3D"_blank">anil@recoil.org</a>&gt;</span><br><blockquote class=3D"gmail=
_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:=
1ex">
<div style=3D"word-wrap:break-word">Ah, I see. =A0One first step here might=
 be to add support for HVM booting of normal guests. =A0The HVM mode is ver=
y similar to PV boot, except:<div><br></div><div>- you need to configure a =
hardware timer</div>
<div>- the boot process goes through normal 16-bit bootstrap instead of dir=
ect PV boot</div><div>- page table manipulation is direct instead of via hy=
percalls.</div><div>- you can interact with emulated device drivers for blo=
ck/net.</div>
<div><br></div><div>The last point is most important -- it would be easiest=
 to get the scaffolding for device drivers working by being able to evaluat=
e the rest of the system against the PV equivalents.</div><div><br></div>
<div>Another way to go is to investigate Snowflock&#39;s hardware device dr=
ivers that were written in OCaml:=A0<a href=3D"https://github.com/jessicah/=
snowflake-svn/tree/master/kernel" target=3D"_blank">https://github.com/jess=
icah/snowflake-svn/tree/master/kernel</a> (the license should be clarified =
with the author first, however, as I didn&#39;t spot any LICENSE files in t=
here).</div>
<div><br></div><div>There&#39;s another approach which doesn&#39;t involve =
Xen at all -- have you considered taking one of the Raspberry Pi ARM mini o=
perating systems and porting the Mirage libraries to it? =A0They compile in=
 ARM fine, and it should be possible to adapt Dave&#39;s VNC library to ras=
terise onto HDMI. The advantage of this is that there&#39;s a fairly small =
hardware HDL to port, vs the incredible number of x86 drivers that would ne=
ed to be supported. =A0(this isn&#39;t relevant if you have a specific x86 =
hardware set to support, but in general there&#39;s no easy way out of x86 =
support except for re-using kernel drivers in interesting ways).</div>
<div><br></div><div>Finally, you should also check out rump kernels: it sho=
uld be easy to re-use portions of the NetBSD rump infrastructure to interfa=
ce with Mirage management --=A0<a href=3D"http://www.netbsd.org/docs/rump/"=
 target=3D"_blank">http://www.netbsd.org/docs/rump/</a>.</div>
<div><br></div><div>cheers</div><span class=3D"HOEnZb"><font color=3D"#8888=
88"><div>Anil</div></font></span><div><div class=3D"h5"><div><br></div><div=
><br><div><div>On 10 Sep 2013, at 11:22, Andrew Lekar &lt;<a href=3D"mailto=
:sam.and.tetris@gmail.com" target=3D"_blank">sam.and.tetris@gmail.com</a>&g=
t; wrote:</div>
<br><blockquote type=3D"cite"><div dir=3D"ltr">&quot;<span style=3D"font-fa=
mily:arial,sans-serif;font-size:13px">Got it -- so you want to interface wi=
th hardware drivers via passthrough to a driver domain, I think.&quot;</spa=
n><div>
<span style=3D"font-family:arial,sans-serif;font-size:13px"><br>
</span></div><div><span style=3D"font-family:arial,sans-serif;font-size:13p=
x">No! I do not have any domains with drivers or kernels - only dom0 with m=
irage. So I have to implement hardware interaction all by myself with a thi=
n layer of xen.</span></div>

<div><span style=3D"font-family:arial,sans-serif;font-size:13px">For now I&=
#39;ve got working baremetal ocaml runtime and I teared off xenstore suppor=
t from mirage to run it on dom0. You can think of it as a true baremetal mi=
rage since xen does not offer anything but some debug io and timer support.=
</span></div>

<div><span style=3D"font-family:arial,sans-serif;font-size:13px">Therefore =
I&#39;m interested in deploying hardware drivers separately from mirage ker=
nel and I&#39;d prefer to have in theese drivers as less C code as possible=
. Will you give me any suggestions about such mirage configuration?</span><=
/div>

</div><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">2013/9/=
10 Anil Madhavapeddy <span dir=3D"ltr">&lt;<a href=3D"mailto:anil@recoil.or=
g" target=3D"_blank">anil@recoil.org</a>&gt;</span><br><blockquote class=3D=
"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding=
-left:1ex">

<div style=3D"word-wrap:break-word">Got it -- so you want to interface with=
 hardware drivers via passthrough to a driver domain, I think.<div><br></di=
v><div>The best way to think of Mirage is as a growing bunch of libraries, =
glued together by a minimal runtime for whatever platform is targetted and =
an increasingly sophisticated constraint-based package manager (OPAM).</div=
>

<div><br></div><div>For example, consider these backends:</div><div><br></d=
iv><div>- UNIX --- the compiler output is an ELF executable, and started/st=
opped via a helper binary that passes it file descriptors and performs priv=
ileged operations. =A0It can be passed raw packets via tuntap, or invoke ke=
rnel sockets, depending on how it&#39;s built.</div>

<div><br></div><div>- Xen -- the compiler output is an object file that is =
linked to a minimal Xen OS with a linker script to make it PV bootable. =A0=
All the drivers are normal OCaml libraries (including the shared memory rin=
g handling).</div>

<div><br></div><div>- Javascript -- the compiler output is a JS blob which =
has externals that are satisfied via other Javascript functions made availa=
ble, and the runtime used is the Javascript one.</div><div><br></div><div>

- kFreeBSD -- the compiler output is linked with the OCaml GC and fixed-poi=
nt floating point and kernel module scaffolding. =A0The internal kernel API=
s are bound as OCaml libraries.</div><div><br></div><div>The final one is t=
he most relevant to you...the easiest way to manage hardware in the first i=
nstance is to use FreeBSD as a driver domain (no userspace), and take advan=
tage of existing Mirage libraries to manage the kernel lifecycle.</div>

<div><br></div><div>The most immediate thing to get working in the kernel g=
uest is Xenstore. =A0This is exposed to a HVM guest via a special MSR which=
 gives you the shared_info page, which in turns gives access to hypercalls =
and the Xenstore event channel. =A0Once this is set up, you can use the exi=
sting OCaml Xenstore library to handle all the communication to/from the dr=
iver domain, without having to worry about reimplementing the protocol in t=
he kernel. =A0The same goes for other virtual devices such as Netfront, Blk=
front, and (thanks to Dave) even a VNC framebuffer if you want a PV framebu=
ffer.</div>

<div><br></div><div>On your other points about filesystems -- Thomas Gazagn=
aire is working on a Mirage filesystem at the moment (a branch-consistent o=
ne dubbed Irminsule), and Dave has a FAT32 implementation, and I wrote a si=
mple static one (in mirage-fs). =A0We&#39;re finding that filesystems aren&=
#39;t often required by our current applications, however.</div>

<div><br></div><div>Hope this helps -- if you let us know more specific use=
-cases, I can guide you towards more specific solutions. =A0</div><div><br>=
</div><div>cheers,</div><div>Anil</div><div><div><br><div>
<div>On 9 Sep 2013, at 18:21, Andrew Lekar &lt;<a href=3D"mailto:sam.and.te=
tris@gmail.com" target=3D"_blank">sam.and.tetris@gmail.com</a>&gt; wrote:</=
div><br><blockquote type=3D"cite"><div dir=3D"ltr">Thank you Anil.<div><br>=
</div>

<div>I am working with baremetal port of mirage (well on top of xen in dom0=
 domain) and I&#39;m expecting to have a lot of hardware drivers which I&#3=
9;d like to deploy and debug without rebuild of entire mirage image. Also I=
&#39;d like to have a way of upgrading software and it is better done with =
in-system compiler or bytecode interpreter. As far as I understood your ans=
wer mirage ocaml does have bytecode interpreter but does not support filesy=
stem or other modules sources, am I right?</div>


<div>Unikernel solution is good for me for now but it is way too long to de=
bug anything with unikernel and I expect it to become worse in future.</div=
></div><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">2013/9=
/9 Anil Madhavapeddy <span dir=3D"ltr">&lt;<a href=3D"mailto:anil@recoil.or=
g" target=3D"_blank">anil@recoil.org</a>&gt;</span><br>


<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div>On 8 Sep 2013, at 20:25, Andrew Lekar &=
lt;<a href=3D"mailto:sam.and.tetris@gmail.com" target=3D"_blank">sam.and.te=
tris@gmail.com</a>&gt; wrote:<br>



<br>
&gt; Hello everyone.<br>
&gt;<br>
&gt; Is it possible to support dynamically load ocaml modules in mirage? So=
 that I do not rebuild entire mirage kernel but make it once and add additi=
onal drivers later. What are the steps required to make it possible? I gues=
s to make it work I should implement filesystem support, bytecode interpret=
er or ocaml compiler in mirage.<br>



<br>
</div>Hi Andrew,<br>
<br>
It depends which backend you&#39;re thinking of. =A0In Xen, we have some pa=
tches to further make the address space immutable post-boot (by dropping th=
e ability to alter the guest page tables or switch CR3). =A0In that case, y=
ou can&#39;t do dynamic loading by design.<br>



<br>
However, without this patch, and with a suitable filesystem, network or vch=
an source for the dynamic module, you could do dynamic loading. =A0The real=
 question is why you&#39;d want that at all, given it&#39;s easier to recom=
pile a Mirage instance and redeploy it rather than go through all the troub=
le of dynamic loading. =A0In many ways, that&#39;s the whole point of the X=
en backend ;-)<br>



<span><font color=3D"#888888"><br>
-anil</font></span></blockquote></div><br></div>
</blockquote></div><br></div></div></div></blockquote></div><br></div>
</blockquote></div><br></div></div></div></div></blockquote></div><br></div=
>

--047d7bd76898f008bc04e60a1334--


From anil@recoil.org Tue Sep 10 22:01:55 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJV4N-00001Q-2s (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 10 Sep 2013 22:01:55 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1520997
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:38587
	helo=dark.recoil.org)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VJV4M-0006VM-Ei (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 10 Sep 2013 22:01:55 +0100
Received: (qmail 32325 invoked by uid 634); 10 Sep 2013 21:01:54 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from cpc7-cmbg14-2-0-cust238.5-4.cable.virginmedia.com (HELO
	[192.168.1.84]) (86.30.244.239)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Tue, 10 Sep 2013 22:01:53 +0100
Content-Type: text/plain; charset=windows-1252
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: Problem with tuntap while building mirage-www
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <BB7C3439-0D41-4056-B711-FA2834804513@cam.ac.uk>
Date: Tue, 10 Sep 2013 22:01:53 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <7892B36F-39DC-4A31-81B9-F91B9DD74C4F@recoil.org>
References: <0AB29DB9-2623-49EC-8EFE-54E02C070244@cam.ac.uk>
	<8B88EADA-E28B-435A-AEC1-0E8E459D6DC3@recoil.org>
	<BB7C3439-0D41-4056-B711-FA2834804513@cam.ac.uk>
To: Amir Chaudhry <amc79@cam.ac.uk>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 10 Sep 2013 21:01:55 -0000
Status: O
Content-Length: 3124
Lines: 91

I believe the official installer loads the package as part of the =
post-installation scripts, and so no reboot is required.

-anil

On 10 Sep 2013, at 16:43, Amir Chaudhry <amc79@cam.ac.uk> wrote:

> Fixed.
>=20
> Short answer: I rebooted (haven't had to do that in a while for an =
install to work, hence didn't think about it)
>=20
> Longer answer: Getting tuntap via homebrew is fine but there's extra =
work in moving files to the appropriate places. This is pointed out in =
the Caveats and I'd already followed those instructions, namely copying =
and chown-ing files from Cellar into `/Library/Extensions/` and =
`/Library/StartupItems/` (nb: you can see the instructions I'm referring =
to via `brew info tuntap`)
>=20
> Since the README in the downloadable pkg mentioned the same file =
locations, I guessed that a reboot was required to give the stuff in =
StartupItems a kick (I guessed based on the name of the folder).  That =
seems to have worked.  I assume installing via the pkg tells you that =
you need to restart.
>=20
> Thanks,
> Amir
>=20
>=20
>=20
> On 10 Sep 2013, at 15:46, Anil Madhavapeddy <anil@recoil.org> wrote:
>=20
>> This indicates that the tuntap MacOS X kext hasn't been installed =
correctly.  I dont know if the tuntap Homebrew package installs the =
kext, as the homepage has an Mpkg installer which installs the kernel =
module for you.
>>=20
>> -anil
>>=20
>> On 10 Sep 2013, at 14:53, Amir Chaudhry <amc79@cam.ac.uk> wrote:
>>=20
>>> Hi everyone,
>>>=20
>>> I'm going through the Mirage install instructions to build the =
mirage website and hit a tuntap related problem.  I installed tuntap via =
`brew install tuntap` and went through some of the brew caveats (i.e a =
few `sudo cp` and `sudo chown` steps).
>>>=20
>>> Some notes:
>>> - My compiler switch is OCaml 4.01.0 RC2 (ie I varied from the =
instructions by doing `opam switch mirage-unix -a 4.01.0` instead)
>>>=20
>>> - I'm trying to use the mirage network stack so I ran...
>>> $ make clean unix-direct-build      # this seems to work fine
>>> $ sudo make run                              # this produces the =
output below
>>>=20
>>> =85 but I have the same error with unix-socket-build.  Not sure what =
I've done wrong with tuntap. =20
>>> What can I try next? =20
>>>=20
>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
>>>=20
>>> amir$ sudo make run
>>> cd src && sudo mirari run www.conf=20
>>> [mirari] Using specified config file www.conf
>>> [mirari] + unix direct mode
>>> [mirari] Creating tap0 interface.
>>> /dev/tap0
>>> [mirari] Ctrl-C received, killing child and exiting.
>>>=20
>>> [mirari] Tuntap failed with error No such file or directory. =
Remember that mirari has to be run as root have the CAP_NET_ADMIN =
capability in order to be able to run unikernels for the UNIX =
backendmirari: internal error, uncaught exception:
>>>      Failure("No such file or directory")
>>>=20
>>> make: *** [run] Error 1
>>> amir$=20
>>>=20
>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
>>>=20
>>>=20
>>> Amir
>>=20
>=20
>=20



From amc79@cam.ac.uk Tue Sep 10 22:09:52 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJVC4-00005q-7Z (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <amc79@cam.ac.uk>); Tue, 10 Sep 2013 22:09:52 +0100
X-Cam-AntiVirus: no malware found
X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/
Received: from cpc17-cmbg14-2-0-cust360.5-4.cable.virginmedia.com
	([86.6.155.105]:55652 helo=[192.168.0.3])
	by ppsw-33.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.157]:587)
	with esmtpsa (PLAIN:amc79) (TLSv1:AES128-SHA:128)
	id 1VJVC4-0004KH-gD (Exim 4.80_167-5a66dd3)
	(return-path <amc79@cam.ac.uk>); Tue, 10 Sep 2013 22:09:52 +0100
Content-Type: text/plain; charset=windows-1252
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: Problem with tuntap while building mirage-www
From: Amir Chaudhry <amc79@cam.ac.uk>
In-Reply-To: <7892B36F-39DC-4A31-81B9-F91B9DD74C4F@recoil.org>
Date: Tue, 10 Sep 2013 22:09:51 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <026603EF-A3D3-411D-8F64-B3BCD5B6D38B@cam.ac.uk>
References: <0AB29DB9-2623-49EC-8EFE-54E02C070244@cam.ac.uk>
	<8B88EADA-E28B-435A-AEC1-0E8E459D6DC3@recoil.org>
	<BB7C3439-0D41-4056-B711-FA2834804513@cam.ac.uk>
	<7892B36F-39DC-4A31-81B9-F91B9DD74C4F@recoil.org>
To: Anil Madhavapeddy <anil@recoil.org>
X-Mailer: Apple Mail (2.1508)
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 10 Sep 2013 21:09:52 -0000
Status: O
Content-Length: 3607
Lines: 102

Yeah, that would make sense.  I did some more digging earlier and found =
out that I could (probably) have run `SystemStarter start tap` (or =
something like that -- apparently that utility is deprecated so it =
should be launchctl instead, I stopped digging at this point).  The =
installer probably does the right thing.

Amir=20

On 10 Sep 2013, at 22:01, Anil Madhavapeddy <anil@recoil.org> wrote:

> I believe the official installer loads the package as part of the =
post-installation scripts, and so no reboot is required.
>=20
> -anil
>=20
> On 10 Sep 2013, at 16:43, Amir Chaudhry <amc79@cam.ac.uk> wrote:
>=20
>> Fixed.
>>=20
>> Short answer: I rebooted (haven't had to do that in a while for an =
install to work, hence didn't think about it)
>>=20
>> Longer answer: Getting tuntap via homebrew is fine but there's extra =
work in moving files to the appropriate places. This is pointed out in =
the Caveats and I'd already followed those instructions, namely copying =
and chown-ing files from Cellar into `/Library/Extensions/` and =
`/Library/StartupItems/` (nb: you can see the instructions I'm referring =
to via `brew info tuntap`)
>>=20
>> Since the README in the downloadable pkg mentioned the same file =
locations, I guessed that a reboot was required to give the stuff in =
StartupItems a kick (I guessed based on the name of the folder).  That =
seems to have worked.  I assume installing via the pkg tells you that =
you need to restart.
>>=20
>> Thanks,
>> Amir
>>=20
>>=20
>>=20
>> On 10 Sep 2013, at 15:46, Anil Madhavapeddy <anil@recoil.org> wrote:
>>=20
>>> This indicates that the tuntap MacOS X kext hasn't been installed =
correctly.  I dont know if the tuntap Homebrew package installs the =
kext, as the homepage has an Mpkg installer which installs the kernel =
module for you.
>>>=20
>>> -anil
>>>=20
>>> On 10 Sep 2013, at 14:53, Amir Chaudhry <amc79@cam.ac.uk> wrote:
>>>=20
>>>> Hi everyone,
>>>>=20
>>>> I'm going through the Mirage install instructions to build the =
mirage website and hit a tuntap related problem.  I installed tuntap via =
`brew install tuntap` and went through some of the brew caveats (i.e a =
few `sudo cp` and `sudo chown` steps).
>>>>=20
>>>> Some notes:
>>>> - My compiler switch is OCaml 4.01.0 RC2 (ie I varied from the =
instructions by doing `opam switch mirage-unix -a 4.01.0` instead)
>>>>=20
>>>> - I'm trying to use the mirage network stack so I ran...
>>>> $ make clean unix-direct-build      # this seems to work fine
>>>> $ sudo make run                              # this produces the =
output below
>>>>=20
>>>> =85 but I have the same error with unix-socket-build.  Not sure =
what I've done wrong with tuntap. =20
>>>> What can I try next? =20
>>>>=20
>>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D
>>>>=20
>>>> amir$ sudo make run
>>>> cd src && sudo mirari run www.conf=20
>>>> [mirari] Using specified config file www.conf
>>>> [mirari] + unix direct mode
>>>> [mirari] Creating tap0 interface.
>>>> /dev/tap0
>>>> [mirari] Ctrl-C received, killing child and exiting.
>>>>=20
>>>> [mirari] Tuntap failed with error No such file or directory. =
Remember that mirari has to be run as root have the CAP_NET_ADMIN =
capability in order to be able to run unikernels for the UNIX =
backendmirari: internal error, uncaught exception:
>>>>     Failure("No such file or directory")
>>>>=20
>>>> make: *** [run] Error 1
>>>> amir$=20
>>>>=20
>>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D
>>>>=20
>>>>=20
>>>> Amir
>>>=20
>>=20
>>=20
>=20



From Richard.Mortier@nottingham.ac.uk Wed Sep 11 09:19:28 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJfe4-0002Hw-MT (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Wed, 11 Sep 2013 09:19:28 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1521372 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine04-20433-4.icritical.com ([195.62.217.152]:48696)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VJfe3-0003dt-Ee (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Wed, 11 Sep 2013 09:19:28 +0100
Received: (qmail 6999 invoked from network); 11 Sep 2013 08:19:17 -0000
Received: from localhost (127.0.0.1)
	by engine04-20433-4.icritical.com with SMTP; 11 Sep 2013 08:19:17 -0000
Received: from engine04-20433-4.icritical.com ([127.0.0.1])
	by localhost (engine04-20433-4.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 06081-07 for <cl-mirage@lists.cam.ac.uk>;
	Wed, 11 Sep 2013 09:19:16 +0100 (BST)
Received: (qmail 6983 invoked by uid 599); 11 Sep 2013 08:19:16 -0000
Received: from unknown (HELO smtp4.nottingham.ac.uk) (128.243.220.65)
	by engine04-20433-4.icritical.com (qpsmtpd/0.28) with ESMTP;
	Wed, 11 Sep 2013 09:19:16 +0100
Received: from uiwexhub01.ad.nottingham.ac.uk ([128.243.15.133])
	by smtp4.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Richard.Mortier@nottingham.ac.uk>)
	id 1VJfe1-0000GM-34
	for cl-mirage@lists.cam.ac.uk; Wed, 11 Sep 2013 09:19:25 +0100
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Phiho Hoang <hohoangphi@gmail.com>
Date: Wed, 11 Sep 2013 09:19:27 +0100
Subject: Re: Mirage Hello World (Re: Building mirage-www)
Thread-Topic: Mirage Hello World (Re: Building mirage-www)
Thread-Index: Ac6ux5/uQKFV3PVqRqeGR+1fUagMwg==
Message-ID: <F2C0AD68-B4D3-4CFF-8407-12C835D03A85@nottingham.ac.uk>
References: <CALZQg1ayimHpJN+Ht5X58_yEA=ce3sbKPh_O4HhPOpOarmSnOw@mail.gmail.com>
	<5CD75D88-447C-4067-BAEF-5FD70B489ADB@nottingham.ac.uk>
	<CALZQg1ZQMQ4OftKA2mbPvKUB1L8YJCGQLk_y4rcSE7Q314FqBQ@mail.gmail.com>
	<6D0FD8F0-91AD-4145-A595-422B0417C2AA@nottingham.ac.uk>
	<CALZQg1ab3hnEeVVLxHBt7C3H4H1H-OagsBv9dRXq39sJ7iw5nw@mail.gmail.com>
In-Reply-To: <CALZQg1ab3hnEeVVLxHBt7C3H4H1H-OagsBv9dRXq39sJ7iw5nw@mail.gmail.com>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine04-20433-4.icritical.com
Cc: Anil, "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	Madhavapeddy <anil@recoil.org>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 11 Sep 2013 08:19:28 -0000
Status: O
Content-Length: 1794
Lines: 44


On 10 Sep 2013, at 17:28, Phiho Hoang wrote:

> hph@ubunxen:~/mirage-skeleton$ sudo make run-basic
> cd basic && mirari run --xen
> /bin/sh: 1: mirari: not found
> make: *** [run-basic] Error 127
> hph@ubunxen:~/mirage-skeleton$

i believe this is to do with how sudo cleans the environment, including PAT=
H, before it executes a shell. try changing the makefile so that it execute=
s "sudo mirari" rather than having to "sudo make". (there are better ways t=
o fix this too, i'm sure.)

ultimately i guess mirari itself should attempt to acquire necessary privs =
to do what it needs to do...

> BTW, I still cannot run the Mirage "hello World" unikernel as a simple PO=
SIX binary as expected.
> It does not print anything.

that's the problem i noted previously to do with buffering of console write=
s (i think). i submitted a pull request, i guess it's not been high enough =
priority to merge. if you look at my mirage tree, you should be able to pul=
l it out (it's the last commit i think -- only a few lines).


--=20
Cheers,

R.




This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From anil@recoil.org Wed Sep 11 09:28:10 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJfmU-0002Xf-Lr (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 11 Sep 2013 09:28:10 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1521372
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:7920
	helo=dark.recoil.org)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1VJfmU-0001Nu-10 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 11 Sep 2013 09:28:10 +0100
Received: (qmail 29491 invoked by uid 634); 11 Sep 2013 08:28:10 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from host81-149-102-120.in-addr.btopenworld.com (HELO clink.home)
	(81.149.102.120)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Wed, 11 Sep 2013 09:28:09 +0100
Content-Type: text/plain; charset=iso-8859-1
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: Mirage Hello World (Re: Building mirage-www)
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <F2C0AD68-B4D3-4CFF-8407-12C835D03A85@nottingham.ac.uk>
Date: Wed, 11 Sep 2013 09:28:06 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <3F8AF8F8-0320-4279-A37B-F0E09609B723@recoil.org>
References: <CALZQg1ayimHpJN+Ht5X58_yEA=ce3sbKPh_O4HhPOpOarmSnOw@mail.gmail.com>
	<5CD75D88-447C-4067-BAEF-5FD70B489ADB@nottingham.ac.uk>
	<CALZQg1ZQMQ4OftKA2mbPvKUB1L8YJCGQLk_y4rcSE7Q314FqBQ@mail.gmail.com>
	<6D0FD8F0-91AD-4145-A595-422B0417C2AA@nottingham.ac.uk>
	<CALZQg1ab3hnEeVVLxHBt7C3H4H1H-OagsBv9dRXq39sJ7iw5nw@mail.gmail.com>
	<F2C0AD68-B4D3-4CFF-8407-12C835D03A85@nottingham.ac.uk>
To: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	Phiho Hoang <hohoangphi@gmail.com>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 11 Sep 2013 08:28:10 -0000
Status: O
Content-Length: 1149
Lines: 32

[ why was anil@hermes.ac.uk CCed on this thread? that's an invalid =
e-mail ]

On 11 Sep 2013, at 09:19, Richard Mortier =
<Richard.Mortier@nottingham.ac.uk> wrote:
>=20
> On 10 Sep 2013, at 17:28, Phiho Hoang wrote:
>=20
>> hph@ubunxen:~/mirage-skeleton$ sudo make run-basic
>> cd basic && mirari run --xen
>> /bin/sh: 1: mirari: not found
>> make: *** [run-basic] Error 127
>> hph@ubunxen:~/mirage-skeleton$
>=20
> i believe this is to do with how sudo cleans the environment, =
including PATH, before it executes a shell. try changing the makefile so =
that it executes "sudo mirari" rather than having to "sudo make". (there =
are better ways to fix this too, i'm sure.)
>=20
> ultimately i guess mirari itself should attempt to acquire necessary =
privs to do what it needs to do...

I'm fixing this slightly differently in my Mirari rewrite -- the =
generated binary now links to a UNIX library that implements the logic =
for it to self-fork and acquire its privileges.  This should reduce the =
coupling on Mirari for anything beyond build, and leave deployment other =
scripts.

Mirari 2: Coming To A Repository Near You Soon (tm)

-anil=


From Richard.Mortier@nottingham.ac.uk Wed Sep 11 09:38:04 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJfw4-00035c-Ie (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Wed, 11 Sep 2013 09:38:04 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1521372 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine04-20433-4.icritical.com ([195.62.217.152]:50693)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1VJfw4-0006Br-0b (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Wed, 11 Sep 2013 09:38:04 +0100
Received: (qmail 15371 invoked from network); 11 Sep 2013 08:37:52 -0000
Received: from localhost (127.0.0.1)
	by engine04-20433-4.icritical.com with SMTP; 11 Sep 2013 08:37:52 -0000
Received: from engine04-20433-4.icritical.com ([127.0.0.1])
	by localhost (engine04-20433-4.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 14734-08 for <cl-mirage@lists.cam.ac.uk>;
	Wed, 11 Sep 2013 09:37:51 +0100 (BST)
Received: (qmail 15355 invoked by uid 599); 11 Sep 2013 08:37:51 -0000
Received: from unknown (HELO smtp4.nottingham.ac.uk) (128.243.220.65)
	by engine04-20433-4.icritical.com (qpsmtpd/0.28) with ESMTP;
	Wed, 11 Sep 2013 09:37:51 +0100
Received: from uiwexhub02.ad.nottingham.ac.uk ([128.243.15.132])
	by smtp4.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Richard.Mortier@nottingham.ac.uk>)
	id 1VJfw1-0001Kd-Hv
	for cl-mirage@lists.cam.ac.uk; Wed, 11 Sep 2013 09:38:01 +0100
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Anil Madhavapeddy <anil@recoil.org>
Date: Wed, 11 Sep 2013 09:38:03 +0100
Subject: Re: Mirage Hello World (Re: Building mirage-www)
Thread-Topic: Mirage Hello World (Re: Building mirage-www)
Thread-Index: Ac6uyjki7Lnrcj5ATJuNfjewV/3LnA==
Message-ID: <8D0A22BE-753A-4A89-8019-7C637EACD34D@nottingham.ac.uk>
References: <CALZQg1ayimHpJN+Ht5X58_yEA=ce3sbKPh_O4HhPOpOarmSnOw@mail.gmail.com>
	<5CD75D88-447C-4067-BAEF-5FD70B489ADB@nottingham.ac.uk>
	<CALZQg1ZQMQ4OftKA2mbPvKUB1L8YJCGQLk_y4rcSE7Q314FqBQ@mail.gmail.com>
	<6D0FD8F0-91AD-4145-A595-422B0417C2AA@nottingham.ac.uk>
	<CALZQg1ab3hnEeVVLxHBt7C3H4H1H-OagsBv9dRXq39sJ7iw5nw@mail.gmail.com>
	<F2C0AD68-B4D3-4CFF-8407-12C835D03A85@nottingham.ac.uk>
	<3F8AF8F8-0320-4279-A37B-F0E09609B723@recoil.org>
In-Reply-To: <3F8AF8F8-0320-4279-A37B-F0E09609B723@recoil.org>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine04-20433-4.icritical.com
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	Phiho Hoang <hohoangphi@gmail.com>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 11 Sep 2013 08:38:04 -0000
Status: O
Content-Length: 2310
Lines: 58


On 11 Sep 2013, at 09:28, Anil Madhavapeddy wrote:

> [ why was anil@hermes.ac.uk CCed on this thread? that's an invalid e-mail=
 ]

no idea. the miracles of modern email. didn't think hermes had ever been pr=
omoted to a JANET domain... :)

> On 11 Sep 2013, at 09:19, Richard Mortier <Richard.Mortier@nottingham.ac.=
uk> wrote:
>>=20
>> On 10 Sep 2013, at 17:28, Phiho Hoang wrote:
>>=20
>>> hph@ubunxen:~/mirage-skeleton$ sudo make run-basic
>>> cd basic && mirari run --xen
>>> /bin/sh: 1: mirari: not found
>>> make: *** [run-basic] Error 127
>>> hph@ubunxen:~/mirage-skeleton$
>>=20
>> i believe this is to do with how sudo cleans the environment, including =
PATH, before it executes a shell. try changing the makefile so that it exec=
utes "sudo mirari" rather than having to "sudo make". (there are better way=
s to fix this too, i'm sure.)
>>=20
>> ultimately i guess mirari itself should attempt to acquire necessary pri=
vs to do what it needs to do...
>=20
> I'm fixing this slightly differently in my Mirari rewrite -- the generate=
d binary now links to a UNIX library that implements the logic for it to se=
lf-fork and acquire its privileges.  This should reduce the coupling on Mir=
ari for anything beyond build, and leave deployment other scripts.

don't follow - this means "mirari run" will no longer exist, will no longer=
 exist for xen, or that the mirari output will effectively encapsulate what=
ever "mirari run" would've done? (or something else?)

> Mirari 2: Coming To A Repository Near You Soon (=99)

:)

--=20
Cheers,

R.




This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From anil@recoil.org Wed Sep 11 09:45:24 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJg3A-0003Iw-Rs (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 11 Sep 2013 09:45:24 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1521372
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:2391
	helo=dark.recoil.org)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1VJg39-0001LA-2O (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 11 Sep 2013 09:45:24 +0100
Received: (qmail 30685 invoked by uid 634); 11 Sep 2013 08:45:23 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from host81-149-102-120.in-addr.btopenworld.com (HELO clink.home)
	(81.149.102.120)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Wed, 11 Sep 2013 09:45:23 +0100
Content-Type: text/plain; charset=windows-1252
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: Mirage Hello World (Re: Building mirage-www)
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <8D0A22BE-753A-4A89-8019-7C637EACD34D@nottingham.ac.uk>
Date: Wed, 11 Sep 2013 09:45:20 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <AAAE568F-CB0C-41DC-B8A0-D4D480A8BC2A@recoil.org>
References: <CALZQg1ayimHpJN+Ht5X58_yEA=ce3sbKPh_O4HhPOpOarmSnOw@mail.gmail.com>
	<5CD75D88-447C-4067-BAEF-5FD70B489ADB@nottingham.ac.uk>
	<CALZQg1ZQMQ4OftKA2mbPvKUB1L8YJCGQLk_y4rcSE7Q314FqBQ@mail.gmail.com>
	<6D0FD8F0-91AD-4145-A595-422B0417C2AA@nottingham.ac.uk>
	<CALZQg1ab3hnEeVVLxHBt7C3H4H1H-OagsBv9dRXq39sJ7iw5nw@mail.gmail.com>
	<F2C0AD68-B4D3-4CFF-8407-12C835D03A85@nottingham.ac.uk>
	<3F8AF8F8-0320-4279-A37B-F0E09609B723@recoil.org>
	<8D0A22BE-753A-4A89-8019-7C637EACD34D@nottingham.ac.uk>
To: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: Phiho Hoang <hohoangphi@gmail.com>,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 11 Sep 2013 08:45:24 -0000
Status: O
Content-Length: 1319
Lines: 31

On 11 Sep 2013, at 09:38, Richard Mortier =
<Richard.Mortier@nottingham.ac.uk> wrote:

>>=20
>> I'm fixing this slightly differently in my Mirari rewrite -- the =
generated binary now links to a UNIX library that implements the logic =
for it to self-fork and acquire its privileges.  This should reduce the =
coupling on Mirari for anything beyond build, and leave deployment other =
scripts.
>=20
> don't follow - this means "mirari run" will no longer exist, will no =
longer exist for xen, or that the mirari output will effectively =
encapsulate whatever "mirari run" would've done? (or something else?)

It just means that you can run the UNIX binary directly, without =
absolutely having to go through `mirari run` (which currently fd passes =
tuntap descriptors to the child).  I'm still figuring out exactly how =
this looks, but I'm aiming to make the UNIX process "lifecycle" as =
similar to Xen as possible -- that is, you can start/stop/suspend/resume =
a UNIX process, with the appropriate callbacks in the main code.

This would let us, for example, do a 'mirari list' and see all running =
Mirage UNIX processes, assuming that we have a central scoreboard on =
each machine for the processes to live.  It also makes privilege =
separation (via Capsicum for example) much easier to integrate.

-anil





From hohoangphi@gmail.com Wed Sep 11 11:55:05 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJi4f-0000kQ-KD (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Wed, 11 Sep 2013 11:55:05 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1521372 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.215.50 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (hohoangphi[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-la0-f50.google.com ([209.85.215.50]:55456)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VJi4c-0002dl-2u (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Wed, 11 Sep 2013 11:55:05 +0100
Received: by mail-la0-f50.google.com with SMTP id lv10so567377lab.9
	for <cl-mirage@lists.cam.ac.uk>; Wed, 11 Sep 2013 03:55:02 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.112.0.242 with SMTP id 18mr2227345lbh.18.1378896902363; Wed,
	11 Sep 2013 03:55:02 -0700 (PDT)
Received: by 10.112.72.4 with HTTP; Wed, 11 Sep 2013 03:55:02 -0700 (PDT)
In-Reply-To: <3F8AF8F8-0320-4279-A37B-F0E09609B723@recoil.org>
References: <CALZQg1ayimHpJN+Ht5X58_yEA=ce3sbKPh_O4HhPOpOarmSnOw@mail.gmail.com>
	<5CD75D88-447C-4067-BAEF-5FD70B489ADB@nottingham.ac.uk>
	<CALZQg1ZQMQ4OftKA2mbPvKUB1L8YJCGQLk_y4rcSE7Q314FqBQ@mail.gmail.com>
	<6D0FD8F0-91AD-4145-A595-422B0417C2AA@nottingham.ac.uk>
	<CALZQg1ab3hnEeVVLxHBt7C3H4H1H-OagsBv9dRXq39sJ7iw5nw@mail.gmail.com>
	<F2C0AD68-B4D3-4CFF-8407-12C835D03A85@nottingham.ac.uk>
	<3F8AF8F8-0320-4279-A37B-F0E09609B723@recoil.org>
Date: Wed, 11 Sep 2013 06:55:02 -0400
Message-ID: <CALZQg1ZLVhTw_M9JmTUHTcegbodVvRZbQ1jj_kSNeh52BjuCdw@mail.gmail.com>
Subject: Re: Mirage Hello World (Re: Building mirage-www)
From: Phiho Hoang <hohoangphi@gmail.com>
To: Anil Madhavapeddy <anil@recoil.org>
Content-Type: multipart/alternative; boundary=f46d042ac0e80c202a04e6197487
Cc: Richard Mortier <Richard.Mortier@nottingham.ac.uk>,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 11 Sep 2013 10:55:05 -0000
Status: O
Content-Length: 7111
Lines: 162

--f46d042ac0e80c202a04e6197487
Content-Type: text/plain; charset=ISO-8859-1

Hi Anil,

> Mirari 2: Coming To A Repository Near You Soon (tm)

Thanks for the great news.

While waiting for the big event, I have a couple of small questions.

1/- The size of basic xen image on my VM is  3,189,567 (around 3MB?)

hph@ubunxen:~/mirage-skeleton$ ls -l basic/_build/*.xen
-rwxrwxr-x 1 hph hph 3189567 Sep 10 14:54 basic/_build/main.xen

is this correct? Is it a bit too big?

That's just for saying 'hello world' 5 times.

In comparison, ClickOS (1) claims:

"Image Size: ClickOS is compiled with most of the available
Click elements (221/267), the remaining ones requiring a
file system to work. The uncompressed ClickOS image is
12MB, the compressed one 2.9MB, and the virtual machine
needs a minimum of 5MB to run."

If the basic HelloWorld Mirage unikernel is compressed, what is the minimum
memory needed for the VM to run?
How can I create a xen VM with HelloWorld unikernel to test it out?

I think I read it somewhere that the smallest xen VM can be below 100KB, is
it true?
What kind of "OS" can be that small?

Thanks for your time and advice.

Regards,

PhiHo

(1) Enabling Dynamic Network Processing with ClickOS (Mohamed Ahmed, Felipe
Huici, and Armin Jahanpanah - NEC Europe Ltd. 2012)


On Wed, Sep 11, 2013 at 4:28 AM, Anil Madhavapeddy <anil@recoil.org> wrote:

> [ why was anil@hermes.ac.uk CCed on this thread? that's an invalid e-mail
> ]
>
> On 11 Sep 2013, at 09:19, Richard Mortier <
> Richard.Mortier@nottingham.ac.uk> wrote:
> >
> > On 10 Sep 2013, at 17:28, Phiho Hoang wrote:
> >
> >> hph@ubunxen:~/mirage-skeleton$ sudo make run-basic
> >> cd basic && mirari run --xen
> >> /bin/sh: 1: mirari: not found
> >> make: *** [run-basic] Error 127
> >> hph@ubunxen:~/mirage-skeleton$
> >
> > i believe this is to do with how sudo cleans the environment, including
> PATH, before it executes a shell. try changing the makefile so that it
> executes "sudo mirari" rather than having to "sudo make". (there are better
> ways to fix this too, i'm sure.)
> >
> > ultimately i guess mirari itself should attempt to acquire necessary
> privs to do what it needs to do...
>
> I'm fixing this slightly differently in my Mirari rewrite -- the generated
> binary now links to a UNIX library that implements the logic for it to
> self-fork and acquire its privileges.  This should reduce the coupling on
> Mirari for anything beyond build, and leave deployment other scripts.
>
> Mirari 2: Coming To A Repository Near You Soon (tm)
>
> -anil

--f46d042ac0e80c202a04e6197487
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi Anil,<div><br></div><div>&gt;=A0<span style=3D"font-fam=
ily:arial,sans-serif;font-size:13px">Mirari 2: Coming To A Repository Near =
You Soon (tm)</span></div><div><span style=3D"font-family:arial,sans-serif;=
font-size:13px"><br>
</span></div><div><span style=3D"font-family:arial,sans-serif;font-size:13p=
x">Thanks for the great news.</span></div><div><span style=3D"font-family:a=
rial,sans-serif;font-size:13px"><br></span></div><div><span style=3D"font-f=
amily:arial,sans-serif;font-size:13px">While waiting for the big event, I h=
ave a couple of small questions.</span></div>
<div><span style=3D"font-family:arial,sans-serif;font-size:13px"><br></span=
></div><div><span style=3D"font-family:arial,sans-serif;font-size:13px">1/-=
 The size of basic xen image on my VM is=A0</span><span style=3D"font-famil=
y:arial,sans-serif;font-size:13px">=A0</span><span style=3D"font-family:ari=
al,sans-serif;font-size:13px">3,189,567 (around 3MB?)</span></div>
<div><span style=3D"font-family:arial,sans-serif;font-size:13px"><br></span=
></div><div><span style=3D"font-family:arial,sans-serif;font-size:13px"><di=
v>hph@ubunxen:~/mirage-skeleton$ ls -l basic/_build/*.xen</div><div>-rwxrwx=
r-x 1 hph hph 3189567 Sep 10 14:54 basic/_build/main.xen</div>
<div><br></div><div>is this correct? Is it a bit too big?</div><div><br></d=
iv><div>That&#39;s just for saying &#39;hello world&#39; 5 times.</div><div=
><br></div><div>In comparison, ClickOS (1) claims:</div><div><br></div>
<div><div>&quot;Image Size: ClickOS is compiled with most of the available<=
/div><div>Click elements (221/267), the remaining ones requiring a</div><di=
v>file system to work. The uncompressed ClickOS image is</div><div>12MB, th=
e compressed one 2.9MB, and the virtual machine</div>
<div>needs a minimum of 5MB to run.&quot;</div></div><div><br></div><div>If=
 the basic HelloWorld Mirage unikernel is compressed, what is the minimum m=
emory needed for the VM to run?</div><div>How can I create a xen VM with He=
lloWorld unikernel to test it out?</div>
<div><br></div><div>I think I read it somewhere that the smallest xen VM ca=
n be below 100KB, is it true?</div><div>What kind of &quot;OS&quot; can be =
that small?</div><div><br></div><div>Thanks for your time and advice.</div>
<div><br></div><div>Regards,</div><div><br></div><div>PhiHo</div><div><br><=
/div><div>(1)=A0Enabling Dynamic Network Processing with ClickOS (Mohamed A=
hmed, Felipe Huici, and Armin Jahanpanah -=A0NEC Europe Ltd. 2012)</div></s=
pan></div>
</div><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On Wed,=
 Sep 11, 2013 at 4:28 AM, Anil Madhavapeddy <span dir=3D"ltr">&lt;<a href=
=3D"mailto:anil@recoil.org" target=3D"_blank">anil@recoil.org</a>&gt;</span=
> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">[ why was <a href=3D"mailto:anil@hermes.ac.u=
k">anil@hermes.ac.uk</a> CCed on this thread? that&#39;s an invalid e-mail =
]<br>

<div class=3D"im"><br>
On 11 Sep 2013, at 09:19, Richard Mortier &lt;<a href=3D"mailto:Richard.Mor=
tier@nottingham.ac.uk">Richard.Mortier@nottingham.ac.uk</a>&gt; wrote:<br>
&gt;<br>
&gt; On 10 Sep 2013, at 17:28, Phiho Hoang wrote:<br>
&gt;<br>
&gt;&gt; hph@ubunxen:~/mirage-skeleton$ sudo make run-basic<br>
&gt;&gt; cd basic &amp;&amp; mirari run --xen<br>
&gt;&gt; /bin/sh: 1: mirari: not found<br>
&gt;&gt; make: *** [run-basic] Error 127<br>
&gt;&gt; hph@ubunxen:~/mirage-skeleton$<br>
&gt;<br>
&gt; i believe this is to do with how sudo cleans the environment, includin=
g PATH, before it executes a shell. try changing the makefile so that it ex=
ecutes &quot;sudo mirari&quot; rather than having to &quot;sudo make&quot;.=
 (there are better ways to fix this too, i&#39;m sure.)<br>

&gt;<br>
&gt; ultimately i guess mirari itself should attempt to acquire necessary p=
rivs to do what it needs to do...<br>
<br>
</div>I&#39;m fixing this slightly differently in my Mirari rewrite -- the =
generated binary now links to a UNIX library that implements the logic for =
it to self-fork and acquire its privileges. =A0This should reduce the coupl=
ing on Mirari for anything beyond build, and leave deployment other scripts=
.<br>

<br>
Mirari 2: Coming To A Repository Near You Soon (tm)<br>
<span class=3D"HOEnZb"><font color=3D"#888888"><br>
-anil</font></span></blockquote></div><br></div>

--f46d042ac0e80c202a04e6197487--


From amc79@cam.ac.uk Wed Sep 11 17:08:11 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJmxf-0007OC-2S (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <amc79@cam.ac.uk>); Wed, 11 Sep 2013 17:08:11 +0100
X-Cam-AntiVirus: no malware found
X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/
Received: from dhcp-172-17-152-179.eduroam.lapwing.private.cam.ac.uk
	([172.17.152.179]:51918)
	by ppsw-33.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.157]:587)
	with esmtpsa (PLAIN:amc79) (TLSv1:AES128-SHA:128)
	id 1VJmxf-00065g-g3 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <amc79@cam.ac.uk>); Wed, 11 Sep 2013 17:08:11 +0100
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: Notes on Mirage meeting - 11 Sep
From: Amir Chaudhry <amc79@cam.ac.uk>
In-Reply-To: <A6FDF2B2-AE49-4AE9-9F4F-F6C8562A3534@cam.ac.uk>
Date: Wed, 11 Sep 2013 17:08:10 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <3F45424F-C350-4E1A-A6F8-1B67709FF1AF@cam.ac.uk>
References: <4AF38AA2-7AA6-4DCF-8366-69FD7AF29DD6@cam.ac.uk>
	<A6FDF2B2-AE49-4AE9-9F4F-F6C8562A3534@cam.ac.uk>
To: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-Mailer: Apple Mail (2.1508)
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 11 Sep 2013 16:08:11 -0000
Status: O
Content-Length: 3557
Lines: 99

brief notes from call today

- Looked over issues and only one item left before DP1 =
https://github.com/mirage/mirage/issues/102

- Have much better plan for Mirari now so moved to DP2

- Dimos fixed problem with ring (mail to come?)

- David Sheets working on refactoring opam2web. Useful to have opam =
remotes generate websites.

- Anil to send instructions to others on ocamldoc generation

- Xen-arm (cubie boards).  Progress being made so Mort will try out.

- Amir will try out mirage-decks in order to get a unikernel that serves =
a static website

Amir

On 3 Sep 2013, at 17:00, Amir Chaudhry <amc79@cam.ac.uk> wrote:

> Hi folks,
>=20
> My brief notes from this meeting (please add stuff I missed).
>=20
> - Going through checklist on issue =
(https://github.com/mirage/mirage/issues/102)
>=20
> - Mirari combinator stuff is a blocker - Anil will work on this for =
next Tuesday=20
>=20
> - Anil/Thomas also looking at using opam2web and using opam remotes to =
provide overview of all the libs (this is the trove stuff mentioned last =
week).
>=20
> - Dimos looking into networking stuff and trying to hunt down a bug.  =
Need an event channel ninja to help with this kind of debugging. Maybe =
Dimos, Anil, Balraj and Thomas can have a chat on Friday?
>=20
> - Mort's done a bunch of stuff on Installation (work through big =
backlog of emails)
>=20
> - There's a memory leak on mirage site but it reboots every couple of =
days (in 100s of ms) so not prioritised chasing it down. Anil chatting =
to others about testing for memory leaks but this is on the back burner =
for now.
>=20
> - Anil/Mort (and others) also looking into moving blogs onto Mirage.  =
Anil and Mort also keen to have DNS servers running.
>=20
> - Overall, looking in good shape to release DP1 after next week's call =
(perhaps even before)
>=20
> Amir
>=20
>=20
>=20
> On 27 Aug 2013, at 17:59, Amir Chaudhry <amc79@cam.ac.uk> wrote:
>=20
>> Hi folks these are my brief notes on what we spoke about at today's =
Mirage meeting. =20
>> Please add in any further details as you remember them.  i.e Dimos, =
it would be worth you adding a little more info about your testing.
>>=20
>> - Get a release out the door.  Anil pointed people to a GitHub Issue =
which check-lists all the things for DP1 and DP2. Mort has added to this =
with a list of repos we should review.  Issue is at: =
https://github.com/mirage/mirage/issues/102
>>=20
>> - Spent some time looking through the check-list and discussing =
items.   Lots has been done and there's quite a bit to do but it's =
tractable. Anil working on trove to pull together info/updates from =
repos.
>>=20
>> - Dimos went through the xen-server script and improved it.  Hasn't =
committed it yet.  Dimos can lead with lead w XenServer RT
>>=20
>> - Dimos also did some network tests - developed something in TCP.  =
Not committed anywhere yet? (dimos is fairly new to github)
>>=20
>> - Might be worth us having one machine to mess with. Use it to =
automate mirage-www. Need a spare test machine to install XenServer on.  =
Might use Bytemark machines for those?
>>=20
>> - Mirage 1.0 release date.  Amir spoke to Lars and proposed a date of =
22nd October. Picking a firm date far enough in advance allows Xen =
Project to get press resources and trigger the whole announcement =
machine. However, once date is picked it cannot be changed (think =
'juggernaut').  XenSummit is on 24th Oct so 22nd would work well.  Means =
getting DP1 out soon and DP2 out about a month later.
>>=20
>> Best wishes,
>> Amir
>=20
>=20



From Richard.Mortier@nottingham.ac.uk Wed Sep 11 17:13:48 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VJn36-0007lJ-OQ (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Wed, 11 Sep 2013 17:13:48 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1521372 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine03-20433-10.icritical.com ([93.159.202.53]:45373)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VJn35-00074X-FM (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Wed, 11 Sep 2013 17:13:48 +0100
Received: (qmail 6899 invoked from network); 11 Sep 2013 16:13:29 -0000
Received: from localhost (127.0.0.1)
	by engine03-20433-10.icritical.com with SMTP; 11 Sep 2013 16:13:29 -0000
Received: from engine03-20433-10.icritical.com ([127.0.0.1])
	by localhost (engine03-20433-10.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 06881-01 for <cl-mirage@lists.cam.ac.uk>;
	Wed, 11 Sep 2013 17:13:28 +0100 (BST)
Received: (qmail 6796 invoked by uid 599); 11 Sep 2013 16:13:20 -0000
Received: from unknown (HELO smtp3.nottingham.ac.uk) (128.243.44.55)
	by engine03-20433-10.icritical.com (qpsmtpd/0.28) with ESMTP;
	Wed, 11 Sep 2013 17:13:20 +0100
Received: from uiwexhub02.ad.nottingham.ac.uk ([128.243.15.132])
	by smtp3.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Richard.Mortier@nottingham.ac.uk>)
	id 1VJn2v-0007R3-KQ; Wed, 11 Sep 2013 17:13:37 +0100
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Amir Chaudhry <amc79@cam.ac.uk>
Date: Wed, 11 Sep 2013 17:13:40 +0100
Subject: Re: Notes on Mirage meeting - 11 Sep
Thread-Topic: Notes on Mirage meeting - 11 Sep
Thread-Index: Ac6vCd8Nl0b9XizyR5SpZ3EL3tqa7g==
Message-ID: <9140F71E-EB61-4CE2-8712-02B1FC2C2378@nottingham.ac.uk>
References: <4AF38AA2-7AA6-4DCF-8366-69FD7AF29DD6@cam.ac.uk>
	<A6FDF2B2-AE49-4AE9-9F4F-F6C8562A3534@cam.ac.uk>
	<3F45424F-C350-4E1A-A6F8-1B67709FF1AF@cam.ac.uk>
In-Reply-To: <3F45424F-C350-4E1A-A6F8-1B67709FF1AF@cam.ac.uk>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine03-20433-10.icritical.com
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 11 Sep 2013 16:13:48 -0000
Status: O
Content-Length: 1749
Lines: 44

followups inline...

On 11 Sep 2013, at 17:08, Amir Chaudhry wrote:

> brief notes from call today
>=20
> - Looked over issues and only one item left before DP1 https://github.com=
/mirage/mirage/issues/102

...after moving a couple; and actually two DP1 blockers now i think (bytema=
rk machines and activations thing, cf dimos below).=20

but those will be dealt with on friday and much rejoicing and happy hour be=
er shall ensue... ;)

> - Dimos fixed problem with ring (mail to come?)

unless i was confused (very possible!) that's the subject of the second (po=
ssibly garbled) DP1 blocker i added re activations.

> - Xen-arm (cubie boards).  Progress being made so Mort will try out.

specifically, i've forwarded info to chris greenhalgh (prof @ notts) who ha=
s expressed interest. not sure whether/on what timescale he'll try them out=
 -- at least the lead time of getting a cubieboard i imagine. i think chris=
 is on cl-mirage so can comment further if he wants.

--=20
Cheers,

R.




This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From Chris.Greenhalgh@nottingham.ac.uk Thu Sep 12 12:02:26 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VK4fK-0004Ir-FU (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Thu, 12 Sep 2013 12:02:26 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1521760 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine04-20433-4.icritical.com ([195.62.217.152]:57589)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1VK4fJ-0007RU-8t (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Thu, 12 Sep 2013 12:02:26 +0100
Received: (qmail 11295 invoked from network); 12 Sep 2013 11:02:18 -0000
Received: from localhost (127.0.0.1)
	by engine04-20433-4.icritical.com with SMTP; 12 Sep 2013 11:02:18 -0000
Received: from engine04-20433-4.icritical.com ([127.0.0.1])
	by localhost (engine04-20433-4.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 11116-02 for <cl-mirage@lists.cam.ac.uk>;
	Thu, 12 Sep 2013 12:02:15 +0100 (BST)
Received: (qmail 10455 invoked by uid 599); 12 Sep 2013 11:01:24 -0000
Received: from unknown (HELO smtp3.nottingham.ac.uk) (128.243.44.55)
	by engine04-20433-4.icritical.com (qpsmtpd/0.28) with ESMTP;
	Thu, 12 Sep 2013 12:01:24 +0100
Received: from uiwexhub01.ad.nottingham.ac.uk ([128.243.15.133])
	by smtp3.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Chris.Greenhalgh@nottingham.ac.uk>)
	id 1VK4eQ-00037c-BO; Thu, 12 Sep 2013 12:01:30 +0100
From: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
To: Amir Chaudhry <amc79@cam.ac.uk>
Date: Thu, 12 Sep 2013 12:01:28 +0100
Subject: RE: Notes on Mirage meeting - 11 Sep
Thread-Topic: Notes on Mirage meeting - 11 Sep
Thread-Index: Ac6vCd8Nl0b9XizyR5SpZ3EL3tqa7gAhOrgw
Message-ID: <4C20415C7327A849961F3B8421413725010CD55069DE@EXCHANGE1.ad.nottingham.ac.uk>
References: <4AF38AA2-7AA6-4DCF-8366-69FD7AF29DD6@cam.ac.uk>
	<A6FDF2B2-AE49-4AE9-9F4F-F6C8562A3534@cam.ac.uk>
	<3F45424F-C350-4E1A-A6F8-1B67709FF1AF@cam.ac.uk>
	<9140F71E-EB61-4CE2-8712-02B1FC2C2378@nottingham.ac.uk>
In-Reply-To: <9140F71E-EB61-4CE2-8712-02B1FC2C2378@nottingham.ac.uk>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine04-20433-4.icritical.com
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 12 Sep 2013 11:02:26 -0000
Status: O
Content-Length: 2438
Lines: 47

>On September 2013 17:14 Richard Mortier wrote:
>
>>On 11 Sep 2013, at 17:08, Amir Chaudhry wrote:
>>
>> - Xen-arm (cubie boards).  Progress being made so Mort will try out.
>
>specifically, i've forwarded info to chris greenhalgh (prof @ notts) who h=
as expressed interest. not sure whether/on what timescale he'll try them ou=
t -- at least the lead time of getting a cubieboard i imagine. i think chri=
s is on cl-mirage so can ?comment further if he wants.

I want to develop some services for (1) media sharing and (2) network shari=
ng (http://opensharingtoolkit.org). There are a few overlapping use cases, =
including (a) on an Android tablet running as a kiosk-type device (with and=
 without an internet connection) (b) on something comparable to a plug comp=
uter but battery+mains powered to be used as a local media exchange point &=
 managed internet access point (with a 2G/3G modem) (c) cloud hosted. The s=
econd of these is the one that a cubieboard might fit.=20

Right now I'm working on the Android use case so I'm not in a great hurry. =
And I'm still more in the position of "giving Mirage a go" for embedded ser=
vice development than being fully committed to it :-) I haven't touched Mir=
age since January but plan to give it a go again in the next week or two, t=
argeting Linux thence Android in the first instance.

I'll probably order a couple of boards anyway; I'm guessing anything labell=
ed cubieboard2 will be the same(?). By default I was going to try one of th=
e German resellers as there don't seem to be any UK ones yet, e.g. http://w=
ww.exp-tech.de/Mainboards/Kits/Cubieboard-2-Starter-Kit.html=20
Thoughts/suggestions welcome

Cheers
Chris





This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From dp463@hermes.cam.ac.uk Fri Sep 13 23:50:05 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VKcBh-0006RD-30 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <dp463@hermes.cam.ac.uk>); Fri, 13 Sep 2013 23:50:05 +0100
X-Cam-AntiVirus: no malware found
X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/
Received: from cosmic.cl.cam.ac.uk ([128.232.10.197]:44313 helo=localhost)
	by ppsw-42.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.159]:587)
	with esmtpsa (PLAIN:dp463) (TLSv1:DHE-RSA-CAMELLIA256-SHA:256)
	id 1VKcBg-0004ol-9V (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <dp463@hermes.cam.ac.uk>); Fri, 13 Sep 2013 23:50:05 +0100
Message-ID: <5233969C.1080802@cl.cam.ac.uk>
Date: Fri, 13 Sep 2013 23:50:04 +0100
From: Dimosthenis Pediaditakis <dimosthenis.pediaditakis@cl.cam.ac.uk>
User-Agent: Mozilla/5.0 (X11; Linux x86_64;
	rv:17.0) Gecko/20130803 Thunderbird/17.0.8
MIME-Version: 1.0
To: cl-mirage@lists.cam.ac.uk
Subject: Improving the network-stack performance over Xen
Content-Type: multipart/alternative;
	boundary="------------010003060908020407060805"
Sender: "D. Pediaditakis" <dp463@hermes.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Fri, 13 Sep 2013 22:50:05 -0000
Status: O
Content-Length: 13407
Lines: 321

This is a multi-part message in MIME format.
--------------010003060908020407060805
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hi all,
The last few days I've been trying to pin-down the performance issues of 
the Mirage network stack, when running over Xen.
When trying to push net-direct to its limits, random transmissions stall 
for anywhere between 0.1sec-4sec (especially at the sender).

After some experimentation, I believe that those time-outs occur because 
netif is not (always) notified (via Activations) about freed TX-ring slots.
It seems that these events (intermittently) don't reach the guest 
domain's front-end driver.

AFAIK Activations.wait() currently blocks waiting for an event on the 
port belonging to the event channel for the netif.
This event is delivered to Activations.run via Main.run.aux which is 
invoked via the callback in app_main() of runtime/kernel/main.c
The problem I observed was that using "SCHEDOP_poll" without masking the 
intended events, the hypervisor didn't "wake-up" the blocked domain upon 
new event availability.
The requirement for event-masking when using "SCHEDOP_poll" is also 
mentioned in the Xen documentation.

I've produced a patch that seems to fix the above erratic behavior.
Now I am able to consistently achieve higher speeds (up to 2.75Gbps 
DomU2Domu). Please, have a look at my repo:
https://github.com/dimosped/mirage-platform
It will be helpful to use big-enough txqueuelen values for your VIFs, as 
the current TCP implementation doesn't like much losses at high 
datarates. The default size in my system was only 32.

I have also modified the mirage-net-direct by adding per-flow TCP debug 
logging. This has helped me to better understand and pin-down the problem.
You can grab the modified sources here:
https://github.com/dimosped/mirage-net
Be aware that logging big volumes of data for a TCP flow will require 
big enough memory. Nevertheless, it only barely affects performance.

The iperf benchmark sources can be found here:
https://github.com/dimosped/iperf-mirage
I've included as much info as possible in the README file. This should 
be sufficient to get you started and replicate my experiments.

In the iperf-mirage repo there is also a Python tool, which you can use 
to automatically generate plots based on the collected TCP debug info (I 
include also a sample dataset in data/ ):
https://github.com/dimosped/iperf-mirage/tree/master/tools/MirageTcpVis
For really large datasets, the script might be slow. I need to switch 
into using NumPy arrays at some point...

Please keep in mind that I am a newbie in Xen/Mirage so your 
comments/input are more than welcome.

Regards,
Dimos




------------------------------------------------
    MORE TECHNICAL DETAILS
------------------------------------------------


-----------------------------------------------------------------
=== How (I think) Mirage and XEN scheduling works ===
-----------------------------------------------------------------
  - When Netif receives a writev request, it checks if the TX ring has 
enough empty space (for the producer) for the data
     - If there is not enough space, it block-waits (via 
Activations.wait) for an event on the port mapped to the netif (and 
bound to the backend driver)
     - Otherwise it pushes the request.
-  Activations are notified (via run) from "aux ()" in Main.run. Once 
notified, it means that the waiting netif can proceed, check again the 
ring for free space, write a new request, and send an event to the backend.
- Main.run.aux is registered as a callback (under name "OS.Main.run") 
and is invoked in xen/runtime/kernel/main.c (in app_main() loop). As 
long as the Mirage guest domain is scheduled, this loop keeps running.
- However, in Main.run.aux, the Mirage guest domain is blocked via 
"block_domain timeout" if the main thread has no task to perform.
- In turn, "block_domain" invokes caml_block_domain()  found in 
xen/runtime/kernel/main.c, which issues a 
"HYPERVISOR_sched_op(SCHEDOP_poll, &sched_poll);" hypercall

-------------------------------------
=== Polling mode issue ===
-------------------------------------
In my opinion, and based on debug information, it seems that the problem 
is that Mirage uses "SCHEDOP_poll" without masking the event channels.
The XEN documentation clearly states that with "SCHEDOP_poll" the domain 
would yield until either
   a) an event is pending on the polled channels and
   b) the timeout time (given in nanoseconds, is not duration but 
absolute system time) is reached
It also states that this SCHEDOP_poll can only be be executed when the 
guest has delivery of events disabled.

In Mirage, netif events are not masked and therefore they never "wakeup" 
the guest domain.
The guest only wakes-up whenever a thread is scheduled to  wakeup in 
Time.SleepQueue (e.g. a TCP timer).
Once the guest is scheduled again, it completes any outstanding tasks, 
sends any packets pending, and whenever a) the TX ring gets full, or  
b)the hypervisor  it, c)  it will sleep again.
To further support the above, whenever I press buttons via XEN-console 
while the mirage-sender is running, the execution completes faster.

----------------
=== Fix ===
----------------
There are multiple ways to mask events (e.g. at VCPU level, event level 
etc).
As a quick hack I replaced "Eventchn.unmask h evtchn;" in 
Netif.plug_inner with  Eventchn.mask h evtchn (which I had to create, 
both in Eventchn and  as a stub in xen/runtime/kernel/eventchn_stubs.c).
See:
https://github.com/dimosped/mirage-platform/commit/6d4d3f0403497f07fde4db6f4cb63665a8bf8e26






--------------010003060908020407060805
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hi all,
    <br>
    The last few days I've been trying to pin-down the performance
    issues of the Mirage network stack, when running over Xen.<br>
    When trying to push net-direct to its limits, random transmissions
    stall for anywhere between 0.1sec-4sec (especially at the sender).<br>
    <br>
    After some experimentation, I believe that those time-outs occur
    because netif is not (always) notified (via Activations) about freed
    TX-ring slots. <br>
    It seems that these events (intermittently) don't reach the guest
    domain's front-end driver.
    <br>
    <br>
    AFAIK Activations.wait() currently blocks waiting for an event on
    the port belonging to the event channel for the netif.
    <br>
    This event is delivered to Activations.run via Main.run.aux which is
    invoked via the callback in app_main() of runtime/kernel/main.c
    <br>
    The problem I observed was that using "SCHEDOP_poll" without masking
    the intended events, the hypervisor didn't "wake-up" the blocked
    domain upon new event availability.
    <br>
    The requirement for event-masking when using "SCHEDOP_poll" is also
    mentioned in the Xen documentation.<br>
    <br>
    I've produced a patch that seems to fix the above erratic behavior.
    <br>
    Now I am able to consistently achieve higher speeds (up to 2.75Gbps
    DomU2Domu). Please, have a look at my repo:<br>
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-1">
    <a href="https://github.com/dimosped/mirage-platform">https://github.com/dimosped/mirage-platform</a><br>
    It will be helpful to use big-enough txqueuelen values for your
    VIFs, as the current TCP implementation doesn't like much losses at
    high datarates. The default size in my system was only 32.<br>
    <br>
    I have also modified the mirage-net-direct by adding per-flow TCP
    debug logging. This has helped me to better understand and pin-down
    the problem.<br>
    You can grab the modified sources here:<br>
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-1">
    <a href="https://github.com/dimosped/mirage-net">https://github.com/dimosped/mirage-net</a><br>
    Be aware that logging big volumes of data for a TCP flow will
    require big enough memory. Nevertheless, it only barely affects
    performance.<br>
    <br>
    The iperf benchmark sources can be found here:<br>
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-1">
    <a href="https://github.com/dimosped/iperf-mirage">https://github.com/dimosped/iperf-mirage</a><br>
    I've included as much info as possible in the README file. This
    should be sufficient to get you started and replicate my
    experiments.<br>
    <br>
    In the iperf-mirage repo there is also a Python tool, which you can
    use to automatically generate plots based on the collected TCP debug
    info (I include also a sample dataset in data/ ):<br>
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-1">
    <a
href="https://github.com/dimosped/iperf-mirage/tree/master/tools/MirageTcpVis">https://github.com/dimosped/iperf-mirage/tree/master/tools/MirageTcpVis</a><br>
    For really large datasets, the script might be slow. I need to
    switch into using NumPy arrays at some point...<br>
    <br>
    Please keep in mind that I am a newbie in Xen/Mirage so your
    comments/input are more than welcome.<br>
    &nbsp;<br>
    Regards,
    <br>
    Dimos
    <br>
    <br>
    <br>
    <br>
    <br>
    ------------------------------------------------<br>
    &nbsp;&nbsp; MORE TECHNICAL DETAILS<br>
    ------------------------------------------------<br>
    <br>
    <br>
    -----------------------------------------------------------------
    <br>
    === How (I think) Mirage and XEN scheduling works ===
    <br>
    -----------------------------------------------------------------
    <br>
    &nbsp;- When Netif receives a writev request, it checks if the TX ring
    has enough empty space (for the producer) for the data
    <br>
    &nbsp;&nbsp;&nbsp; - If there is not enough space, it block-waits (via
    Activations.wait) for an event on the port mapped to the netif (and
    bound to the backend driver)
    <br>
    &nbsp;&nbsp;&nbsp; - Otherwise it pushes the request.
    <br>
    -&nbsp; Activations are notified (via run) from "aux ()" in Main.run.
    Once notified, it means that the waiting netif can proceed, check
    again the ring for free space, write a new request, and send an
    event to the backend.
    <br>
    - Main.run.aux is registered as a callback (under name
    "OS.Main.run") and is invoked in xen/runtime/kernel/main.c (in
    app_main() loop). As long as the Mirage guest domain is scheduled,
    this loop keeps running.
    <br>
    - However, in Main.run.aux, the Mirage guest domain is blocked via
    "block_domain timeout" if the main thread has no task to perform.
    <br>
    - In turn, "block_domain" invokes caml_block_domain()&nbsp; found in
    xen/runtime/kernel/main.c, which issues a
    "HYPERVISOR_sched_op(SCHEDOP_poll, &amp;sched_poll);" hypercall
    <br>
    <br>
    -------------------------------------
    <br>
    === Polling mode issue ===
    <br>
    -------------------------------------
    <br>
    In my opinion, and based on debug information, it seems that the
    problem is that Mirage uses "SCHEDOP_poll" without masking the event
    channels.
    <br>
    The XEN documentation clearly states that with "SCHEDOP_poll" the
    domain would yield until either
    <br>
    &nbsp; a) an event is pending on the polled channels and
    <br>
    &nbsp; b) the timeout time (given in nanoseconds, is not duration but
    absolute system time) is reached
    <br>
    It also states that this SCHEDOP_poll can only be be executed when
    the guest has delivery of events disabled.
    <br>
    <br>
    In Mirage, netif events are not masked and therefore they never
    "wakeup" the guest domain.
    <br>
    The guest only wakes-up whenever a thread is scheduled to&nbsp; wakeup in
    Time.SleepQueue (e.g. a TCP timer).
    <br>
    Once the guest is scheduled again, it completes any outstanding
    tasks, sends any packets pending, and whenever a) the TX ring gets
    full, or&nbsp; b)the hypervisor&nbsp; it, c)&nbsp; it will sleep again.
    <br>
    To further support the above, whenever I press buttons via
    XEN-console while the mirage-sender is running, the execution
    completes faster.
    <br>
    <br>
    ----------------
    <br>
    === Fix ===
    <br>
    ----------------
    <br>
    There are multiple ways to mask events (e.g. at VCPU level, event
    level etc).
    <br>
    As a quick hack I replaced "Eventchn.unmask h evtchn;" in
    Netif.plug_inner with&nbsp; Eventchn.mask h evtchn (which I had to
    create, both in Eventchn and&nbsp; as a stub in
    xen/runtime/kernel/eventchn_stubs.c).
    <br>
    See:<br>
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-1">
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-1">
    <a
href="https://github.com/dimosped/mirage-platform/commit/6d4d3f0403497f07fde4db6f4cb63665a8bf8e26">https://github.com/dimosped/mirage-platform/commit/6d4d3f0403497f07fde4db6f4cb63665a8bf8e26</a><br>
    <br>
    <br>
    <br>
    <br>
    <br>
  </body>
</html>

--------------010003060908020407060805--


From hohoangphi@gmail.com Sun Sep 15 21:34:37 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VLJ1h-0002pW-Hl (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Sun, 15 Sep 2013 21:34:37 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1523192 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.215.46 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (hohoangphi[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-la0-f46.google.com ([209.85.215.46]:60507)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1VLJ1g-00061d-Fq (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Sun, 15 Sep 2013 21:34:37 +0100
Received: by mail-la0-f46.google.com with SMTP id eh20so2478215lab.5
	for <cl-mirage@lists.cam.ac.uk>; Sun, 15 Sep 2013 13:34:36 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.112.167.3 with SMTP id zk3mr3206544lbb.23.1379277276291;
	Sun, 15 Sep 2013 13:34:36 -0700 (PDT)
Received: by 10.112.72.4 with HTTP; Sun, 15 Sep 2013 13:34:36 -0700 (PDT)
Date: Sun, 15 Sep 2013 16:34:36 -0400
Message-ID: <CALZQg1bnk2dZibq3EBKhKFa9y=CHywipsHgjobnu_Yh1ht29WA@mail.gmail.com>
Subject: opam install vchan failed
From: Phiho Hoang <hohoangphi@gmail.com>
To: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
Content-Type: multipart/alternative; boundary=001a11c264a419a91c04e6720406
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Sun, 15 Sep 2013 20:34:37 -0000
Status: O
Content-Length: 1135
Lines: 37

--001a11c264a419a91c04e6720406
Content-Type: text/plain; charset=ISO-8859-1

Dear List,

I am trying to install 'vchan' as described here http://openmirage.org/blog/

and got this:

$ opam install vchan
vchan is not a valid versioned package name
'opam install vchan' failed.

It is much appreciated if someone would advise the correct package name for
vchan.

Regards,

PhiHo

--001a11c264a419a91c04e6720406
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Dear List,<div><br></div><div>I am trying to install &#39;=
vchan&#39; as described here=A0<a href=3D"http://openmirage.org/blog/">http=
://openmirage.org/blog/</a></div><div><br></div><div>and got this:</div><di=
v><br>
</div><div>$ opam install vchan</div><div><div><div>vchan is not a valid ve=
rsioned package name</div><div>&#39;opam install vchan&#39; failed.</div></=
div></div><div><br></div><div>It is much appreciated if someone would advis=
e the correct package name for vchan.</div>
<div><br></div><div>Regards,</div><div><br></div><div>PhiHo</div><div><br><=
/div></div>

--001a11c264a419a91c04e6720406--


From anil@recoil.org Mon Sep 16 15:04:49 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VLZQ1-0004Sd-26 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 16 Sep 2013 15:04:49 +0100
X-Cam-SpamDetails: score 0.3 from SpamAssassin-3.3.2-1523416 
	*  0.3 URIBL_RHS_DOB Contains an URI of a new domain (Day Old Bread)
	*      [URIs: opensharingtoolkit.org]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:3055
	helo=dark.recoil.org)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VLZPz-00050X-F2 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 16 Sep 2013 15:04:48 +0100
Received: (qmail 24290 invoked by uid 634); 16 Sep 2013 14:04:47 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-0.7 required=5.0
	tests=ALL_TRUSTED, T_URIBL_SEM_FRESH, T_URIBL_SEM_FRESH_10,
	T_URIBL_SEM_FRESH_15, URIBL_RHS_DOB
X-Spam-Check-By: dark.recoil.org
Received: from volstagg-0.srg.cl.cam.ac.uk (HELO clink.office) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Mon, 16 Sep 2013 15:04:45 +0100
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: Notes on Mirage meeting - 11 Sep
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <4C20415C7327A849961F3B8421413725010CD55069DE@EXCHANGE1.ad.nottingham.ac.uk>
Date: Mon, 16 Sep 2013 15:04:46 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <DD9A06FE-C5B7-4E5F-B00A-9F8228740709@recoil.org>
References: <4AF38AA2-7AA6-4DCF-8366-69FD7AF29DD6@cam.ac.uk>
	<A6FDF2B2-AE49-4AE9-9F4F-F6C8562A3534@cam.ac.uk>
	<3F45424F-C350-4E1A-A6F8-1B67709FF1AF@cam.ac.uk>
	<9140F71E-EB61-4CE2-8712-02B1FC2C2378@nottingham.ac.uk>
	<4C20415C7327A849961F3B8421413725010CD55069DE@EXCHANGE1.ad.nottingham.ac.uk>
To: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	Amir Chaudhry <amc79@cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 16 Sep 2013 14:04:49 -0000
Status: O
Content-Length: 3232
Lines: 66

On 12 Sep 2013, at 12:01, Christopher Greenhalgh =
<Chris.Greenhalgh@nottingham.ac.uk> wrote:

>> On September 2013 17:14 Richard Mortier wrote:
>>=20
>>> On 11 Sep 2013, at 17:08, Amir Chaudhry wrote:
>>>=20
>>> - Xen-arm (cubie boards).  Progress being made so Mort will try out.
>>=20
>> specifically, i've forwarded info to chris greenhalgh (prof @ notts) =
who has expressed interest. not sure whether/on what timescale he'll try =
them out -- at least the lead time of getting a cubieboard i imagine. i =
think chris is on cl-mirage so can ?comment further if he wants.
>=20
> I want to develop some services for (1) media sharing and (2) network =
sharing (http://opensharingtoolkit.org). There are a few overlapping use =
cases, including (a) on an Android tablet running as a kiosk-type device =
(with and without an internet connection) (b) on something comparable to =
a plug computer but battery+mains powered to be used as a local media =
exchange point & managed internet access point (with a 2G/3G modem) (c) =
cloud hosted. The second of these is the one that a cubieboard might =
fit.=20
>=20
> Right now I'm working on the Android use case so I'm not in a great =
hurry. And I'm still more in the position of "giving Mirage a go" for =
embedded service development than being fully committed to it :-) I =
haven't touched Mirage since January but plan to give it a go again in =
the next week or two, targeting Linux thence Android in the first =
instance.

Your Android patches all look very interesting.  In particular, I hadn't =
realized that there existed an OPAM Android package repository already!

A newbie question in return from someone who's never owned an Android: =
what's the best tablet I can buy that is easy to develop for and test =
your patches under?  I can rotate it into the OCamlot pool [1] when it's =
stable too...

[1] http://anil.recoil.org/2013/09/09/ocamlot-autotriaging.html

> I'll probably order a couple of boards anyway; I'm guessing anything =
labelled cubieboard2 will be the same(?). By default I was going to try =
one of the German resellers as there don't seem to be any UK ones yet, =
e.g. =
http://www.exp-tech.de/Mainboards/Kits/Cubieboard-2-Starter-Kit.html=20

The Cubieboard2 is most interesting because it will (does?) support =
Xen/ARM in PVH mode, which makes it the target for a Mirage/ARM/Xen =
combo.  However, Mirage also works just fine in POSIX mode of course, =
which is the likely target for initial infrastructure that you build on =
earlier ARM variants (the utility here being that you should be able to =
simply recompile into unikernel mode in the future).

The downside with the Cubie2 is upstream Linux support atm; it's making =
steady progress, but you'll be on the bleeding edge until at least the =
3.12.x kernel series is released, and possibly into 3.13.x.  However, it =
does ship with an Android kernel by default which should be fine for =
running Linux, and there appear to be no barrier to long-term =
upstreaming that I've noticed.

Ian Campbell is making good progress in xen-devel on the Xen/ARM port if =
you want to follow discussions upstream in Xen-devel:
http://lists.xen.org/archives/html/xen-devel/2013-09/msg00880.html

-anil=


From anil@recoil.org Mon Sep 16 16:22:17 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VLacz-000150-AN (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 16 Sep 2013 16:22:17 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1523416 
	*  0.0 HTML_MESSAGE BODY: HTML included in message
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:29471
	helo=dark.recoil.org)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VLacx-0006VM-Fp (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 16 Sep 2013 16:22:17 +0100
Received: (qmail 21208 invoked by uid 634); 16 Sep 2013 15:22:15 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED,HTML_MESSAGE
X-Spam-Check-By: dark.recoil.org
Received: from volstagg-0.srg.cl.cam.ac.uk (HELO clink.office) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Mon, 16 Sep 2013 16:22:15 +0100
Content-Type: multipart/alternative;
	boundary="Apple-Mail=_52C0D60A-54EA-4CA4-8556-36C1ED58031C"
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: opam install vchan failed
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <CALZQg1bnk2dZibq3EBKhKFa9y=CHywipsHgjobnu_Yh1ht29WA@mail.gmail.com>
Date: Mon, 16 Sep 2013 16:22:16 +0100
Message-Id: <F85826DC-7349-4D05-8CBC-9170A3C4769B@recoil.org>
References: <CALZQg1bnk2dZibq3EBKhKFa9y=CHywipsHgjobnu_Yh1ht29WA@mail.gmail.com>
To: Phiho Hoang <hohoangphi@gmail.com>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 16 Sep 2013 15:22:17 -0000
Status: O
Content-Length: 2023
Lines: 46


--Apple-Mail=_52C0D60A-54EA-4CA4-8556-36C1ED58031C
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=iso-8859-1

I don't believe Vchan has been released to OPAM yet (or at least, I =
don't recall merging it).

Dave, Jon?

-anil

On 15 Sep 2013, at 21:34, Phiho Hoang <hohoangphi@gmail.com> wrote:

> Dear List,
>=20
> I am trying to install 'vchan' as described here =
http://openmirage.org/blog/
>=20
> and got this:
>=20
> $ opam install vchan
> vchan is not a valid versioned package name
> 'opam install vchan' failed.
>=20
> It is much appreciated if someone would advise the correct package =
name for vchan.
>=20
> Regards,
>=20
> PhiHo
>=20


--Apple-Mail=_52C0D60A-54EA-4CA4-8556-36C1ED58031C
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
	charset=iso-8859-1

<html><head><meta http-equiv="Content-Type" content="text/html charset=iso-8859-1"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">I don't believe Vchan has been released to OPAM yet (or at least, I don't recall merging it).<div><br></div><div>Dave, Jon?</div><div><br></div><div>-anil</div><div><br><div><div>On 15 Sep 2013, at 21:34, Phiho Hoang &lt;<a href="mailto:hohoangphi@gmail.com">hohoangphi@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr">Dear List,<div><br></div><div>I am trying to install 'vchan' as described here&nbsp;<a href="http://openmirage.org/blog/">http://openmirage.org/blog/</a></div><div><br></div><div>and got this:</div><div><br>
</div><div>$ opam install vchan</div><div><div>vchan is not a valid versioned package name</div><div>'opam install vchan' failed.</div></div><div><br></div><div>It is much appreciated if someone would advise the correct package name for vchan.</div>
<div><br></div><div>Regards,</div><div><br></div><div>PhiHo</div><div><br></div></div>
</blockquote></div><br></div></body></html>
--Apple-Mail=_52C0D60A-54EA-4CA4-8556-36C1ED58031C--


From amc79@cam.ac.uk Mon Sep 16 16:59:59 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VLbDS-00038S-TN (Exim 4.70)
	(return-path <amc79@cam.ac.uk>); Mon, 16 Sep 2013 16:59:58 +0100
X-Cam-AntiVirus: no malware found
X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/
Received: from dhcp-172-17-155-202.eduroam.lapwing.private.cam.ac.uk
	([172.17.155.202]:57222)
	by ppsw-33.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.157]:587)
	with esmtpsa (PLAIN:amc79) (TLSv1:AES128-SHA:128)
	id 1VLbDS-0007OB-ii (Exim 4.80_167-5a66dd3)
	(return-path <amc79@cam.ac.uk>); Mon, 16 Sep 2013 16:59:58 +0100
Content-Type: text/plain; charset=windows-1252
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: OCaml Labs Meeting - Tuesday at 4pm in the Computer Lab
From: Amir Chaudhry <amc79@cam.ac.uk>
In-Reply-To: <BAA6EB31-9893-4DF2-9863-B6D6941B4154@cam.ac.uk>
Date: Mon, 16 Sep 2013 17:00:00 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <3DB53FFC-6EF9-4951-9B1D-D16E17577A55@cam.ac.uk>
References: <BAA6EB31-9893-4DF2-9863-B6D6941B4154@cam.ac.uk>
To: "cl-ocamllabs@lists.cam.ac.uk" <cl-ocamllabs@lists.cam.ac.uk>,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-Mailer: Apple Mail (2.1508)
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 16 Sep 2013 15:59:59 -0000
Status: O
Content-Length: 2824
Lines: 81

Dear all,

Please find the agenda below for tomorrow's OCaml Labs Meeting.  We'll =
be going through the talks for the OCaml 2013 Meeting in Boston next =
week [1]. =20

-- Details --
OCaml Labs Meeting
17th September 2013 (TOMORROW)
4pm =96 5pm
Room FW26 - Cambridge Computer Laboratory
William Gates Building
JJ Thomson Avenue
Cambridge CB3 0FD


-- Agenda --
* OCL update (Anil)

* OCaml Platform (Anil)
The OCaml Platform combines the core OCaml compiler with a coherent set =
of tools, documentation, libraries and testing resources. The project is =
led by the OCaml Labs group in Cambridge, working closely with OCaml-Pro =
in France, and the requirements are being guided by the industrial OCaml =
Consortium (primarily Jane Street, Citrix and Lexifi to start with). =
Creating and maintaining the Platform is an ambitious, long-term project =
so the v0.1 is not taking arbitrary decisions about which packages are =
included. Instead, we are first placing the industrial contributors on a =
common toolchain and workflow so that it=92s easier to work together and =
share code. We expect a standard set of libraries to emerge from =
consensus over time as this workflow rises in adoption.
(Full abstract: http://bit.ly/1goBbmA)

* OCamlot (David Sheets)
OCamlot provides a distributed, continuous testing service for OPAM =
package quality and compatibility. Using signals from GitHub, OCamlot =
ensures that, before being merged, patches submitted to the OPAM =
repository are thoroughly tested on the variety of supported =
configurations, architectures, and systems. The resulting improved build =
and metadata quality in turn speeds up development on other aspects of =
the Platform through earlier error feedback. A high-quality package =
repository is also very important for new user retention.
(Full abstract: http://bit.ly/1goBaiL)

* Ctypes (Jeremy)
The ctypes library provides a typed, high-level interface for describing =
C types, accessing C data, and calling C functions. Using ctypes, you =
can bind to foreign functions without writing or generating C.
(Full abstract: http://bit.ly/1goB62x)

Best wishes,
Amir

[1] Programme for OCaml 2013 - =
http://ocaml.org/meetings/ocaml/2013/program.html

On 3 Sep 2013, at 14:40, Amir Chaudhry <amc79@cam.ac.uk> wrote:

> Dear all,
>=20
> The rescheduled OCaml Labs meeting will take place on the 17th of =
September at 4pm in the Lab (Room FW26).
>=20
> An agenda will be sent in advance of the meeting, which will cover the =
topics we are presenting at the OCaml Workshop in Boston.
>=20
> Please do let me know if you will be attending.
>=20
> -- Details --
> OCaml Labs Meeting
> 17th September 2013
> 4pm =96 5pm
> Room FW26 - Cambridge Computer Laboratory
> William Gates Building
> JJ Thomson Avenue
> Cambridge CB3 0FD
>=20
> Best wishes,
> Amir



From hohoangphi@gmail.com Tue Sep 17 02:43:00 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VLkJg-0004JY-9n (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Tue, 17 Sep 2013 02:43:00 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1523416 
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (hohoangphi[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.215.42 listed in list.dnswl.dnsbl.ja.net]
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-la0-f42.google.com ([209.85.215.42]:65151)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VLkJf-0006oc-1z (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Tue, 17 Sep 2013 02:43:00 +0100
Received: by mail-la0-f42.google.com with SMTP id ep20so3914842lab.1
	for <cl-mirage@lists.cam.ac.uk>; Mon, 16 Sep 2013 18:42:59 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.152.3.201 with SMTP id e9mr5224539lae.24.1379382178743; Mon,
	16 Sep 2013 18:42:58 -0700 (PDT)
Received: by 10.112.72.4 with HTTP; Mon, 16 Sep 2013 18:42:58 -0700 (PDT)
Date: Mon, 16 Sep 2013 21:42:58 -0400
Message-ID: <CALZQg1YsoFa6wMUPa65TwyHLCJFMTsoVfpKnX=EtCMm5Ahha1w@mail.gmail.com>
Subject: Mirage xen console
From: Phiho Hoang <hohoangphi@gmail.com>
To: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
Content-Type: multipart/mixed; boundary=089e013d14cac625e004e68a7028
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 01:43:00 -0000
Status: O
Content-Length: 205794
Lines: 2694

--089e013d14cac625e004e68a7028
Content-Type: multipart/alternative; boundary=089e013d14cac625d604e68a7026

--089e013d14cac625d604e68a7026
Content-Type: text/plain; charset=ISO-8859-1

Dear List,

I have been trying to attach a console to 'mir-www' without success:

$ sudo xl console mir-www

(Please find attached a screen shot)

I know I don't know how to do it properly, please advise.

It is much appreciated if someone would point me to other samples that
would allow a console to be attached.

Regards,

PhiHo

--089e013d14cac625d604e68a7026
Content-Type: text/html; charset=ISO-8859-1

<div dir="ltr">Dear List,<div><br></div><div>I have been trying to attach a console to &#39;mir-www&#39; without success:</div><div><br></div><div>$ sudo xl console mir-www<br></div><div><br></div><div>(Please find attached a screen shot)</div>
<div><br></div><div>I know I don&#39;t know how to do it properly, please advise.</div><div><br></div><div>It is much appreciated if someone would point me to other samples that would allow a console to be attached.</div>
<div><br></div><div>Regards,</div><div><br></div><div>PhiHo</div><div><br></div></div>

--089e013d14cac625d604e68a7026--
--089e013d14cac625e004e68a7028
Content-Type: image/jpeg; name="mir-console.jpg"
Content-Disposition: attachment; filename="mir-console.jpg"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hlogiguh0

/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcG
BwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwM
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCANgBIADASIA
AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9YPBP
/BRbTviF4ej1TS/hZ8V5LOSWaAedFo9tKjxSvFIjRy6grqyyI6kMoOVrVT9uLD8/Cf4nkenm6Fz/
AOVKvFf2ev8AkQr/AP7GbX//AE83taXxt+LGnfAb4M+LvHOrw3tzpPgzRbzXb2GzRXuJYLWB55Fj
VmVS5VCFDMoJIyQOa9L2SseM8ZPmskj2Bf28Ni4Hwl+J4H/XXQv/AJZUv/Def/VJvif/AN/dC/8A
llX55/EL/gq3qvwo1PxvFqvhv4a6wvwvuNSTxZbeHvFPiGe8tE0yeCHU1tXvfDlpZXdxbm5t/wBy
t4u7z4TuVH8wfaVXXy+VGbp14yjJdJJp/c0XPGVopNpf18zuv+G8/wDqk3xP/wC/uhf/ACypH/bw
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
1aBP9oVfI7r/AIbz/wCqTfE//v7oX/yyqOf9ukTj/kkvxP3dj5uhf/LKvzR8ef8ABabxT8Lfilq3
wh1v9nvxPJ+0FJrVtY+FfCOl60LvS/F+nzB2OrQ6q1tGsVrGsM5kMkH7vCB9uy6+y/dfhufUbrw7
YSava2Vjq0ltG17bWd013b285UGRI5mjiaRFbIV2jjLAAlFJ2iY0abehc8ZWiveS/r5nef8ADcTf
9En+J3/f7Q//AJZVVtf+Cg9hc+JbvSF+FvxRfUbG2gvJ4t+iDZFM0yRtn+0dpy0EowDkbOQMjPNV
w2gf8nKeLP8AsWdE/wDSrVq09kjNY2fZH158D/ijp/x6+Gtr4msNP1XSYbi5vLNrTURELm3ltbqW
1lV/KkkjP7yF8FXYEYOea7RF2IB6DFeM/sCf8m2xf9jN4l/9P2oV7PXBO97HsQ1imFFFFQUFFFFA
BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHwd+z1/y
IV//ANjNr/8A6eb2vj79tD47+K/E/wAbfEvhO+tvHPif4Z2+r6l4W8U+FPCjWUbajo8eh+HL51ZW
0+6v7i7vG129tVjtLi0HlwRyebarBdXi/YP7PX/IhX//AGM2v/8Ap5va8Y8dfsR/Ee717xQPC3xI
+G2n6L4nv7zUJm8RfCq317Xme6dncSap9shlcQqy29ttVGgtba1iUnyQ7d+JoU69KVCtFuMk4vln
KEkmmrxnBxlGcb80XdpSS5ozjeL8PDzhCq5T/K/XsfL/AI/8M+Mv2wfjT8XdB8Ifs96Npfhaw1O8
+HM1xpV/pdlZyWNxHZagy387zC8t8T3U1zKumW5QNeynF7MglP6TfDfQ9Y8MfDvQdN8Q65/wk+v6
fp1vbanrP2JLL+1rpIlWW58hCUh8xwz+Wp2ruwOBXl/7Hf7HcX7L9prepalraeKPGnihbeDVdVgs
m060NtatObW3gtTLL5aJ9oncs8skjyTyEuIxFFF7VXFkeUUsrwFLL6Dk4U4qMeacpuy11lJuT1be
r6lY7FuvUcv0sFFFFescIUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
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
+MXw5W/+xfav7ENlr/24SbN32bcNN+z+bn5M+d5e7/lpt+aifuyku34q7V//ACV/rZ6Dh70U11/y
T/X07NkWqftbfFXXPAB8KXvxN+IN54WNslkdGn8RXkmnmBAAsXkGQx7AFXC7cDA44rNT9oPx9H8L
D4GXxv4vHgk8Hw+NZuP7KP7zzf8Aj23+V/rPn+797nrzXsp1BvBn7Ilwnjbwn8N9Hsdb0KOHwhYr
pEUfifVblrpWOtG62teLbhFmGZZVt5eI4YiFZouV1/XrLxZ+wxaFfDXhbS7vw74pttOS/sdOVL++
WS1u5ZGuLlt0shZgnybhGojXYi85KminJ625b/OSj+F7+j73SVNq8EtL3t8ot6fc16p9LN+KUUUU
DCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK/tc/wCCKX/KI/8AZy/7J/pP/pMl
fxR1/a5/wRS/5RH/ALOX/ZP9J/8ASZKAPqCvlXxX/wAjlrv/AGFbz/0okr6qr5V8V/8AI5a7/wBh
W8/9KJK6cL8ZwZh/DXr/AJnof7An/JtsX/YzeJf/AE/ahXs9eMfsCf8AJtsX/YzeJf8A0/ahXs9Y
T+JnZT+BBRRRUlhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
AFFFFABRRRQB+U37Tv8Ayix/aK/7F/4gf+jtVr+am9/bW+MmpeFJdCuPi18TbjQ57Q2EmnSeKL5r
SS3KbDCYjLsMZT5dpGMcYxX9K37Tv/KLH9or/sX/AIgf+jtVr8Ofjr8StC0T9mvwbp2ieHfBuqeO
/E/gy0kvdGT4W6OiraS2mpfatUiv7eH7V9ph8m3kzuiWPaXImBcp1Y3SnzPa6Vu903+j/Pa55+Xt
+0klvq/xS/X8O58reKf2kPiJ45uLeXW/HvjTWJbSwm0qB77W7m4aGzmTZLbKXc7YXT5WQfKw4IIp
13+0r8Rr/wCGI8Ez+P8AxrN4MWJYV0CTXLptMEauHVPsxfytocBgNuAQD1r7V8J6XoXiPTZvEOke
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
bYqVMH2fzPL8sqSCm3bg4xXVa/r1l4s/YYtCvhrwtpd34d8U22nJf2OnKl/fLJa3csjXFy26WQsw
T5NwjURrsRec+keEvh98LT+wH42/sbxJ4I1fxgmg2et6vNf6VqP9s6Xef2lbRpZWrtZmCKERuyF4
5yZpLj59sca7SppKaetrfO8VL12b/LdiptOMGtL3+VpOP5r+kj5MooooGFFFFABRRRQAUUUUAFFF
FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
AFFFFABRRRQAUUUUAFFFFABRRRQAV/a5/wAEUv8AlEf+zl/2T/Sf/SZK/ijr+1z/AIIpf8oj/wBn
L/sn+k/+kyUAfUFfKviv/kctd/7Ct5/6USV9VV8q+K/+Ry13/sK3n/pRJXThfjODMP4a9f8AM9D/
AGBP+TbYv+xm8S/+n7UK9nrxj9gT/k22L/sZvEv/AKftQr2esJ/Ezsp/AgoooqSwooooAKKKKACi
iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/Kb9p3/AJRY/tFf
9i/8QP8A0dqtfzU3v7a3xk1LwpLoVx8WvibcaHPaGwk06TxRfNaSW5TYYTEZdhjKfLtIxjjGK/pW
/ad/5RY/tFf9i/8AED/0dqtfhz8dfiVoWifs1+DdO0Tw74N1Tx34n8GWkl7oyfC3R0VbSW01L7Vq
kV/bw/avtMPk28md0Sx7S5EwLlOrG6U+Z7XSt3um/wBH+e1zz8vb9pJLfV/il+v4dz5W8U/tIfET
xzcW8ut+PfGmsS2lhNpUD32t3Nw0NnMmyW2Uu52wunysg+VhwQRTrv8AaV+I1/8ADEeCZ/H/AI1m
8GLEsK6BJrl02mCNXDqn2Yv5W0OAwG3AIB619q+E9L0LxHps3iHSPCvgBfEXh74RSar4hsJvCGlX
Frdg6JLdWmqxW72xiiljvcRzMgG/zbXIIL15VqP7UEs37HUXib/hXXwXS6uvE1z4baFPAGlqFtBp
MQUrMIftIlWRzMJfO3+ZjJK/JXJXfJGd9bW+d6jgv/JtfK76qx3UXzShbS+vp7in+WnyXTU+YV+I
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
pEvnZOz5uWabu0lp+msUrf8Aga+V7X0v8m0UUUFBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
RRRQAUUUUAFf2uf8EUv+UR/7OX/ZP9J/9Jkr+KOv7XP+CKX/ACiP/Zy/7J/pP/pMlAH1BXyr4r/5
HLXf+wref+lElfVVfKviv/kctd/7Ct5/6USV04X4zgzD+GvX/M9D/YE/5Nti/wCxm8S/+n7UK9nr
xj9gT/k22L/sZvEv/p+1CvZ6wn8TOyn8CCiiipLCiiigAooooAKKKKACiiigAooooAKKKKACiiig
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigD8pv2nf+UWP7RX/Yv/ED/wBHarX81N7+2t8ZNS8K
S6FcfFr4m3Ghz2hsJNOk8UXzWkluU2GExGXYYyny7SMY4xiv6Vv2nf8AlFj+0V/2L/xA/wDR2q1+
HPx1+JWhaJ+zX4N07RPDvg3VPHfifwZaSXujJ8LdHRVtJbTUvtWqRX9vD9q+0w+TbyZ3RLHtLkTA
uU6sbpT5ntdK3e6b/R/ntc8/L2/aSS31f4pfr+Hc+VvFP7SHxE8c3FvLrfj3xprEtpYTaVA99rdz
cNDZzJsltlLudsLp8rIPlYcEEU67/aV+I1/8MR4Jn8f+NZvBixLCugSa5dNpgjVw6p9mL+VtDgMB
twCAetfavhPS9C8R6bN4h0jwr4AXxF4e+EUmq+IbCbwhpVxa3YOiS3VpqsVu9sYopY73EczIBv8A
NtcggvXlWo/tQSzfsdReJv8AhXXwXS6uvE1z4baFPAGlqFtBpMQUrMIftIlWRzMJfO3+ZjJK/JXJ
XfJGd9bW+d6jgv8AybXyu+qsd1F80oW0vr6e4p/lp8l01PmFfiHr6+Az4WGuawPDDXv9pnSBeSfY
DdbPL+0eRny/N2fLvxu28ZxWPXpEXw90Bv2TJfFJ0P4kHxOvigaYNXWyj/4RIWv2bzPs5nx5n2/f
82zO3yucZrzhTtOfT1FV9tp+X5J/kV9lP1/N/qdAfi54rMe3/hJvEO3+yf7Bx/aM2P7Ozu+xfe/4
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
OTR44rbxDdxIlkm7ZagLIAIV3NiP7o3HA5qxH+2J8XIvAo8Lr8U/iMvhoWX9mDSB4lvRYi12eX9n
8nzNnlbPl2Y27eMYrziijdW/rr/m/vY1o7rp/X6I9Hj/AGxPi5F4FHhdfin8Rl8NCy/swaQPEt6L
EWuzy/s/k+Zs8rZ8uzG3bxjFUdT/AGnviVrXw0XwZefEPxzd+D0gjtl0KbXrqTTFijKmOMW5fy9q
lVKrtwCox0rhqKHq7vqC0tbodRYfG7xppXwzu/Bdr4u8UW3g6/l8660GLVZ00y5k3K297YN5TNuR
DkrnKKewrl6KKOtw6WCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACv7XP+CKX/ACiP/Zy/7J/p
P/pMlfxR1/a5/wAEUv8AlEf+zl/2T/Sf/SZKAPqCvlXxX/yOWu/9hW8/9KJK+qq+VfFf/I5a7/2F
bz/0okrpwvxnBmH8Nev+Z6H+wJ/ybbF/2M3iX/0/ahXs9eMfsCf8m2xf9jN4l/8AT9qFez1hP4md
lP4EFFFFSWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU
UAFFFFAH5TftO/8AKLH9or/sX/iB/wCjtVr+am9/bW+MmpeFJdCuPi18TbjQ57Q2EmnSeKL5rSS3
KbDCYjLsMZT5dpGMcYxX9K37Tv8Ayix/aK/7F/4gf+jtVr8Ofjr8StC0T9mvwbp2ieHfBuqeO/E/
gy0kvdGT4W6OiraS2mpfatUiv7eH7V9ph8m3kzuiWPaXImBcp1Y3SnzPa6Vu903+j/Pa55+Xt+0k
lvq/xS/X8O58reKf2kPiJ45uLeXW/HvjTWJbSwm0qB77W7m4aGzmTZLbKXc7YXT5WQfKw4IIp13+
0r8Rr/4YjwTP4/8AGs3gxYlhXQJNcum0wRq4dU+zF/K2hwGA24BAPWvtXwnpeheI9Nm8Q6R4V8AL
4i8PfCKTVfENhN4Q0q4tbsHRJbq01WK3e2MUUsd7iOZkA3+ba5BBevKtR/aglm/Y6i8Tf8K6+C6X
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
SRzbvNQ26uIyr7m3DbhtxznNWdI/a4+K3h/wbbeHbD4m/EKy8P2cLW1vpdv4jvI7OCJlZWjSFZAi
qVdgQBghiO5rz2ih6pp9QWmx6L4W/a/+LXgbwrZaFovxR+Iuj6JpoK2en2PiS8t7W1B3EiOJJAiZ
3N0A+8fWqep/tPfErWvhovgy8+Ifjm78HpBHbLoU2vXUmmLFGVMcYty/l7VKqVXbgFRjpXDUUPXc
Fpa3QKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
iigAooooAKKKKACv7XP+CKX/ACiP/Zy/7J/pP/pMlfxR1/a5/wAEUv8AlEf+zl/2T/Sf/SZKAPqC
vlXxX/yOWu/9hW8/9KJK+qq+VfFf/I5a7/2Fbz/0okrpwvxnBmH8Nev+Z6H+wJ/ybbF/2M3iX/0/
ahXs9eMfsCf8m2xf9jN4l/8AT9qFez1hP4mdlP4EFFFFSWFFFFABRRRQAUUUUAFFFFABRRRQAUUU
UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH5TftO/8AKLH9or/sX/iB/wCjtVr+am9/
bW+MmpeFJdCuPi18TbjQ57Q2EmnSeKL5rSS3KbDCYjLsMZT5dpGMcYxX9K37Tv8Ayix/aK/7F/4g
f+jtVr8Ofjr8StC0T9mvwbp2ieHfBuqeO/E/gy0kvdGT4W6OiraS2mpfatUiv7eH7V9ph8m3kzui
WPaXImBcp1Y3SnzPa6Vu903+j/Pa55+Xt+0klvq/xS/X8O58reKf2kPiJ45uLeXW/HvjTWJbSwm0
qB77W7m4aGzmTZLbKXc7YXT5WQfKw4IIp13+0r8Rr/4YjwTP4/8AGs3gxYlhXQJNcum0wRq4dU+z
F/K2hwGA24BAPWvtXwnpeheI9Nm8Q6R4V8AL4i8PfCKTVfENhN4Q0q4tbsHRJbq01WK3e2MUUsd7
iOZkA3+ba5BBevKtR/aglm/Y6i8Tf8K6+C6XV14mufDbQp4A0tQtoNJiClZhD9pEqyOZhL52/wAz
GSV+SuSu+SM762t871HBf+Ta+V31VjuovmlC2l9fT3FP8tPkump8wr8Q9fXwGfCw1zWB4Ya9/tM6
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
3hf4a/Eq78Ya/wCFbzVri+tfE0d3aI9rfXcVxcS2o04sYkjtyxCSxCOPbuLFWkcnJQbi9/8Ah/l9
l67BD31dbbfl89VJP5nzxRX1V8O/2W/hD4h/Z4v7rUNW8X/8LOtvBl74nTSBcSWMheNHmiYW0+m/
Z3s/ICTGZdS8yRM7Id7LHXyrTekuT+t2vzTQRfNHmX9aJ/k0/mFFFFABRRRQAUUUUAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV/a5/wRS/5RH/s5f9k/0n/0mSv4o6/tc/4Ipf8A
KI/9nL/sn+k/+kyUAfUFfKviv/kctd/7Ct5/6USV9VV8q+K/+Ry13/sK3n/pRJXThfjODMP4a9f8
z0P9gT/k22L/ALGbxL/6ftQr2evGP2BP+TbYv+xm8S/+n7UK9nrCfxM7KfwIKKKKksKKKKACiiig
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPym/ad/5RY/tF
f9i/8QP/AEdqtfzU3v7a3xk1LwpLoVx8WvibcaHPaGwk06TxRfNaSW5TYYTEZdhjKfLtIxjjGK/p
W/ad/wCUWP7RX/Yv/ED/ANHarX4c/HX4laFon7Nfg3TtE8O+DdU8d+J/BlpJe6Mnwt0dFW0ltNS+
1apFf28P2r7TD5NvJndEse0uRMC5TqxulPme10rd7pv9H+e1zz8vb9pJLfV/il+v4dz5W8U/tIfE
TxzcW8ut+PfGmsS2lhNpUD32t3Nw0NnMmyW2Uu52wunysg+VhwQRTrv9pX4jX/wxHgmfx/41m8GL
EsK6BJrl02mCNXDqn2Yv5W0OAwG3AIB619q+E9L0LxHps3iHSPCvgBfEXh74RSar4hsJvCGlXFrd
g6JLdWmqxW72xiiljvcRzMgG/wA21yCC9eVaj+1BLN+x1F4m/wCFdfBdLq68TXPhtoU8AaWoW0Gk
xBSswh+0iVZHMwl87f5mMkr8lcld8kZ31tb53qOC/wDJtfK76qx3UXzShbS+vp7in+WnyXTU+YV+
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
Pz1t89v6TQoP3IyjtuvLRfp/l0Z3Gp/tPfErWvhovgy8+Ifjm78HpBHbLoU2vXUmmLFGVMcYty/l
7VKqVXbgFRjpWdYfG7xppXwzu/Bdr4u8UW3g6/l8660GLVZ00y5k3K297YN5TNuRDkrnKKewr9Cb
74XaWvhS6+JSaL8PXvl8BHxH/wAI9J4K0FNPOjSeH/MjvBCtpuW4Gt/J5u7cUKrnbkV89+N/2V/g
d8PfgfaHWPiRPp3xA1DwhbeI7Is2ozQXtzPAtxHaJaDRxF5bZMH2gakQrqWZPlaIKfu81/Lzv8X3
25X53VlfrNOXNyqPqvL4f/kl8mnotvC9T/ae+JWtfDRfBl58Q/HN34PSCO2XQpteupNMWKMqY4xb
l/L2qVUqu3AKjHSuGr7R+MPwS+HPxN8Q+CdIPh/xRo3jfxZ8M7HxO2q6VbWOl+HbOSPSzM0r2Mdq
DLE7W8pmuUmiEbO37tzE2/4upKScmvX8G1+aZS/hxa2aT9LpP9UFFFFUAUUUUAFFFFABRRRQAUUU
UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFf2uf8EUv+UR/7OX/ZP9J/9Jkr+KOv7XP+CKX/
ACiP/Zy/7J/pP/pMlAH1BXyr4r/5HLXf+wref+lElfVVfKviv/kctd/7Ct5/6USV04X4zgzD+GvX
/M9D/YE/5Nti/wCxm8S/+n7UK9nrxj9gT/k22L/sZvEv/p+1CvZ6wn8TOyn8CCiiipLCiiigAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD8pv2nf+UWP7
RX/Yv/ED/wBHarX81N7+2t8ZNS8KS6FcfFr4m3Ghz2hsJNOk8UXzWkluU2GExGXYYyny7SMY4xiv
6Vv2nf8AlFj+0V/2L/xA/wDR2q1+HPx1+JWhaJ+zX4N07RPDvg3VPHfifwZaSXujJ8LdHRVtJbTU
vtWqRX9vD9q+0w+TbyZ3RLHtLkTAuU6sbpT5ntdK3e6b/R/ntc8/L2/aSS31f4pfr+Hc+VvFP7SH
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
9n8jbs8ry/N27Nvy7cYxxjFdbL4D+Cmg/s3eEfE+rWXxSHiPxN9u05obTVbB7K3ntkjzegtbK7IZ
JUH2Tg7dx+1AgK3gNQ19l7f8P/nf597ouL+0v6t/Vvl2sFFfVXw7/Zb+EPiH9ni/utQ1bxf/AMLO
tvBl74nTSBcSWMheNHmiYW0+m/Z3s/ICTGZdS8yRM7Id7LHXOeO/ht8Pbz4C+A5vC/w1+JV34w1/
wreatcX1r4mju7RHtb67iuLiW1GnFjEkduWISWIRx7dxYq0jk5KDcXv/AMP8vsvXYIe+rrbb8vnq
pJ/M+eKK+sB+xR4Dm/Zu1u8k1jULD4neHPB8Hi6905dTmvgkUpgeNZbdNLSC3WSC4jZWOpO4LIDF
uYonGy+A/gpoP7N3hHxPq1l8Uh4j8TfbtOaG01Wweyt57ZI83oLWyuyGSVB9k4O3cftQICs5+7OV
N7r/ADa0+aa/PTUUWpRjNbP/ACT1+TT/AODoeA0V9D+O/ht8Pbz4C+A5vC/w1+JV34w1/wAK3mrX
F9a+Jo7u0R7W+u4ri4ltRpxYxJHbliEliEce3cWKtI/zxS5k3Zf1q1+hVtL/ANdH+oUUUUxBRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV/a5/wRS/5RH/s5f9k/0n/0mSv4o6/tc/4Ipf8A
KI/9nL/sn+k/+kyUAfUFfKviv/kctd/7Ct5/6USV9VV8q+K/+Ry13/sK3n/pRJXThfjODMP4a9f8
z0P9gT/k22L/ALGbxL/6ftQr2evGP2BP+TbYv+xm8S/+n7UK9nrCfxM7KfwIKKKKksKKKKACiiig
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPym/ad/5RY/tF
f9i/8QP/AEdqtfzPap+1t8Vdc8AHwpe/E34g3nhY2yWR0afxFeSaeYEACxeQZDHsAVcLtwMDjiv6
Yf2nf+UWP7RX/Yv/ABA/9HarX4a+HtV0/wAb698FvAOreE/h9/wi3jT4f/a9fvLfwlpllqNoY5dQ
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
bymbciHJXOUU9hXL0UPVtvruC0tbpsFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU
UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABX9rn
/BFL/lEf+zl/2T/Sf/SZK/ijr+1z/gil/wAoj/2cv+yf6T/6TJQB9QV8q+K/+Ry13/sK3n/pRJX1
VXyr4r/5HLXf+wref+lEldOF+M4Mw/hr1/zPQ/2BP+TbYv8AsZvEv/p+1CvZ68Y/YE/5Nti/7Gbx
L/6ftQr2esJ/Ezsp/AgoooqSwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
AooooAKKKKACiiigAooooA/Kb9p3/lFj+0V/2L/xA/8AR2q1/NOf2zvjCfFg1/8A4Wv8Sv7dWzOn
jUf+EnvftYti+8web5u/y943bM7c84zX9LH7Tv8Ayix/aK/7F/4gf+jtVr8NfD2q6f43174LeAdW
8J/D7/hFvGnw/wDtev3lv4S0yy1G0McuoB9SF/DAlyjwRWscjEy7HELeYrh3DdWMVoKfnb74yf5R
a+eulzzsvd5yg/X5KUV+bT+Xc+atM/a7+LGieEYPD9n8T/iHaaDaxNBBpsPiO8jtIY2VlZFiEmwK
VdwQBghmHc0qftf/ABaju0nX4ofEQTx6d/ZCyDxJeb1ssg/ZQfMz5OQP3f3eBxXtHjf9lf4HfD34
H2h1j4kT6d8QNQ8IW3iOyLNqM0F7czwLcR2iWg0cReW2TB9oGpEK6lmT5WiCaX+z98GL34TR/EU6
P8S/+EKt/DM0l9IPFtiJ4/ES3KwR6ap/swr8ysk2MFhBJ5mcxmNuWpaLlzdLp/dL/Jr1aX2lf0Iy
5lFrra3zcf8ANP5P+V28V0j9rj4reH/Btt4dsPib8QrLw/ZwtbW+l2/iO8js4ImVlaNIVkCKpV2B
AGCGI7mus8Nft8eNvCX7Mt38LbIgaNeWk1g9zNrGrzslvNIXkRLN7w6cmQWTetoHAZiGDnfUHiDw
x4Yvf2GdO1/SdP1Wx1q18WrpepSXc9ldR3jNZPJ5kLLZx3MKfKB5LXEqZy2N3NdPY/Av4Y+HP7H8
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
uXf7ZHxev9VN9P8AFT4kTXzPBIbiTxNetKWgLGBtxkzmMu+w5+Xe2MZNez+Mf2WPgX8O/grYnXPi
NdWHjy/8I23iS1Ak1CSG/uJ4FuI7OO1GjeUEYEwfaP7RYI4LtH8rQjtNc/Yf+CV5bvDpEfxUt76U
adZRm812wmigu9Q0KTV45DtsUMkUAi8pk+RpjJuDw7MPdS8FKT+y9fvsv/JtPLRuyaZEJRk4wX2r
29LXf4fftumeKfHX/gor8RPjf4PsfD0d7deDtAg09dMvNL0HXtZFjrMKxxxr9qgub2eN2CxjLBVL
7iX3nBHHR/tifFyLwKPC6/FP4jL4aFl/Zg0geJb0WItdnl/Z/J8zZ5Wz5dmNu3jGK9u8c/svfB+2
13wt4X0rT/ilpuveN/AsXjCy1XU9Zs5dN0x3sZLryniWyje5gHkyK1wssXl5b925hO/z3XtTj8Vf
8E+7C7utJ8Nx6hofjWPSra/s9Ds7O+e2NhJIY5riGJJZ/nwczM54HPFZvlUJ22Vr/OfJ+Df3baWv
cG24W6rT/wAB5l96X3nHaR+1x8VvD/g228O2HxN+IVl4fs4WtrfS7fxHeR2cETKytGkKyBFUq7Ag
DBDEdzWLYfG7xppXwzu/Bdr4u8UW3g6/l8660GLVZ00y5k3K297YN5TNuRDkrnKKewr6IH7FHgOb
9m7W7yTWNQsPid4c8HweLr3Tl1Oa+CRSmB41lt00tILdZILiNlY6k7gsgMW5iict47+G3w9vPgL4
Dm8L/DX4lXfjDX/Ct5q1xfWviaO7tEe1vruK4uJbUacWMSR25YhJYhHHt3FirSO6slGcoS+L8172
t9rXi9+qCl70Yzjt08nZfjaS2PMfDv7T3xK8H/DuXwhpPxD8c6X4Tnimgk0S0166g06SObd5qG3V
xGVfc24bcNuOc5o1P9p74la18NF8GXnxD8c3fg9II7ZdCm166k0xYoypjjFuX8vapVSq7cAqMdK9
08b/ALK/wO+HvwPtDrHxIn074gah4QtvEdkWbUZoL25ngW4jtEtBo4i8tsmD7QNSIV1LMnytEGfD
v9lv4Q+If2eL+61DVvF//CzrbwZe+J00gXEljIXjR5omFtPpv2d7PyAkxmXUvMkTOyHeyx1VRW5u
b7O/yv8AlZ+nzV1CV+Vx67fO33XbXz9Hb5tX4h6+vgM+FhrmsDww17/aZ0gXkn2A3Wzy/tHkZ8vz
dny78btvGcVoWHxu8aaV8M7vwXa+LvFFt4Ov5fOutBi1WdNMuZNytve2DeUzbkQ5K5yinsK6CL4e
6A37Jkvik6H8SD4nXxQNMGrrZR/8IkLX7N5n2cz48z7fv+bZnb5XOM13/jv4bfD28+AvgObwv8Nf
iVd+MNf8K3mrXF9a+Jo7u0R7W+u4ri4ltRpxYxJHbliEliEce3cWKtI6qPlunvp8/d5vwVtyopvl
a+Xlrb8X2PNPC37UvxN8DeAW8KaL8RfHej+F3SWJtHsdfu7ewZJSTKpgSQR4cs24bfm3HOc1cu/2
yPi9f6qb6f4qfEia+Z4JDcSeJr1pS0BYwNuMmcxl32HPy72xjJr2fxj+yx8C/h38FbE658Rrqw8e
X/hG28SWoEmoSQ39xPAtxHZx2o0bygjAmD7R/aLBHBdo/laEdprn7D/wSvLd4dIj+KlvfSjTrKM3
mu2E0UF3qGhSavHIdtihkigEXlMnyNMZNweHZh6qXgpSf2Xr99l/5Np5aN2TTM4SjJxgvtXt6Wu/
w+/bdM8U+Ov/AAUV+Inxv8H2Ph6O9uvB2gQaeumXml6Dr2six1mFY441+1QXN7PG7BYxlgql9xL7
zgjjo/2xPi5F4FHhdfin8Rl8NCy/swaQPEt6LEWuzy/s/k+Zs8rZ8uzG3bxjFe3eOf2Xvg/ba74W
8L6Vp/xS03XvG/gWLxhZarqes2cum6Y72Ml15TxLZRvcwDyZFa4WWLy8t+7cwnf57r2px+Kv+Cfd
hd3Wk+G49Q0PxrHpVtf2eh2dnfPbGwkkMc1xDEks/wA+DmZnPA54rN8qhO2ytf5z5Pwb+7bS17g2
3C3Vaf8AgPMvvS+847SP2uPit4f8G23h2w+JvxCsvD9nC1tb6Xb+I7yOzgiZWVo0hWQIqlXYEAYI
YjuaxbD43eNNK+Gd34LtfF3ii28HX8vnXWgxarOmmXMm5W3vbBvKZtyIclc5RT2FfRA/Yo8Bzfs3
a3eSaxqFh8TvDng+Dxde6cupzXwSKUwPGstumlpBbrJBcRsrHUncFkBi3MUTlvHfw2+Ht58BfAc3
hf4a/Eq78Ya/4VvNWuL618TR3doj2t9dxXFxLajTixiSO3LEJLEI49u4sVaR3VkozlCXxfmve1vt
a8Xv1QUvejGcdunk7L8bSWx5j4d/ae+JXg/4dy+ENJ+IfjnS/Cc8U0EmiWmvXUGnSRzbvNQ26uIy
r7m3DbhtxznNGp/tPfErWvhovgy8+Ifjm78HpBHbLoU2vXUmmLFGVMcYty/l7VKqVXbgFRjpXunj
f9lf4HfD34H2h1j4kT6d8QNQ8IW3iOyLNqM0F7czwLcR2iWg0cReW2TB9oGpEK6lmT5WiDPh3+y3
8IfEP7PF/dahq3i//hZ1t4MvfE6aQLiSxkLxo80TC2n037O9n5ASYzLqXmSJnZDvZY6qorc3N9nf
5X/Kz9PmrqEr8rj12+dvuu2vn6O3hup/HK4vv2f9P+HkOg6DY2Fnqza1calB9qN/qVx5bxr5peZo
QqxvtAiij+6CdxyTw9e2ahJBrX/BPezuJtL0Fb/R/HI0+31CDSLWC/e3kspZmiluUjWadfMOQJXb
bgAYAAHidEv4s099PxjFr7k0vkOOtOLW2v8A6VJP72m/me5/Gf8A4KDePvi34B0vwpYzyeBvC+n6
XHo8+jeHNc1iPTtUto4o4o1uLa4vZomKpEBlVUtkl95xjjL79rD4pap8Ox4QufiV4/uPCYtUsRok
viG7fThboAEh+zmTy/LUKoC7cDAwOK+ibX9grwTd6bH8QUt/EzfCoeGW1SW1Him2/t7zk0xbyS4D
/wBneR9mW5dLHbjf5zD5sZAxh+xR4Dm/Zu1u8k1jULD4neHPB8Hi6905dTmvgkUpgeNZbdNLSC3W
SC4jZWOpO4LIDFuYoiqWhGblstX6e9fTy5Zemq3uhUnzOEYdbW/8lsvnzR/B7WZ4Lb/tK/Ea0+GJ
8ExeP/G0fg1omgOgprl0NMMbNvKfZt/lbSxLEbcZOetcwvinU18MNoo1G/GjPdC+awFw/wBla4CF
BMY87fMCMyhsZwSM4NfYknwQ+Huv/sDeCfil4w0e/wBVudH0V9ObSfBMlhoupTMNXuoE1DUnNnKD
bCKNIftOySRpmiR/9YHrxXxJ4Z8LX37Dmn6/o2navYavbeLl0zUXvbiyu0u2ayeTfC6WcVzCg2ge
S08qZy2AxzScvdlN9LX+cklf5tPrv62cNeVLzt6qN3b8uhzsf7Ynxci8CjwuvxT+Iy+GhZf2YNIH
iW9FiLXZ5f2fyfM2eVs+XZjbt4xim+Fv2v8A4teBvCtloWi/FH4i6PommgrZ6fY+JLy3tbUHcSI4
kkCJnc3QD7x9a9a8T/s+/CK78HxWWh2XxHs/Fd18Pj42F5fa7ZXGn20qRmV7XyEso5JUdI3xJ5sZ
QyKCjhCz3fC37MHwosrTV9E1uz+Jmp+JvD/w+XxzPqml6raQaTqBls4rpLdI2s5XhiQXESG4aV/M
kidRHH5ilKqtRc+fpdvz5edP7nCW/wAt1dU2pKHL1sl5cyhb7+eP367O3hnh39p74leD/h3L4Q0n
4h+OdL8JzxTQSaJaa9dQadJHNu81Dbq4jKvubcNuG3HOc1PfftYfFLVPh2PCFz8SvH9x4TFqliNE
l8Q3b6cLdAAkP2cyeX5ahVAXbgYGBxXn9fZNr+wV4Ju9Nj+IKW/iZvhUPDLapLajxTbf295yaYt5
JcB/7O8j7Mty6WO3G/zmHzYyAT+Bylt1+Sb/ACT/AB6XGn7yit/+Cl+bXr62Pjavc/jP/wAFBvH3
xb8A6X4UsZ5PA3hfT9Lj0efRvDmuaxHp2qW0cUcUa3FtcXs0TFUiAyqqWyS+84x3o/Yo8Bzfs3a3
eSaxqFh8TvDng+Dxde6cupzXwSKUwPGstumlpBbrJBcRsrHUncFkBi3MUTzbxB4Y8MXv7DOna/pO
n6rY61a+LV0vUpLueyuo7xmsnk8yFls47mFPlA8lriVM5bG7mlVtHmjL7NvucuS/pe6/TqKk+Zxn
H7V/wip2+6z/AODoc/H+2J8XIvAo8Lr8U/iMvhoWX9mDSB4lvRYi12eX9n8nzNnlbPl2Y27eMYqv
4c/at+KPg/wjZ+H9I+JPj7S9B04SC002z8Q3cFpahw4cJEsgRdwkkBwBkO2epr0jx38Nvh7efAXw
HN4X+GvxKu/GGv8AhW81a4vrXxNHd2iPa313FcXEtqNOLGJI7csQksQjj27ixVpH6bxv+yv8Dvh7
8D7Q6x8SJ9O+IGoeELbxHZFm1GaC9uZ4FuI7RLQaOIvLbJg+0DUiFdSzJ8rRAlK6lJ6r8/i+b2f5
LXQcd4xX/DfD8luvz2OA8Nft8eNvCX7Mt38LbIgaNeWk1g9zNrGrzslvNIXkRLN7w6cmQWTetoHA
ZiGDnfXiNe/S+A/gpoP7N3hHxPq1l8Uh4j8TfbtOaG01Wweyt57ZI83oLWyuyGSVB9k4O3cftQIC
t1nw7/Zb+EPiH9ni/utQ1bxf/wALOtvBl74nTSBcSWMheNHmiYW0+m/Z3s/ICTGZdS8yRM7Id7LH
Tn9qpLdL8k3+CTb6K+ut0TBqyhHq/wAW0vzsv+BZnyrRRRQUFFFFABRRRQAUUUUAFFFFABRRRQAU
UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABX9rn/BFL/lEf8As5f9
k/0n/wBJkr+KOv7XP+CKX/KI/wDZy/7J/pP/AKTJQB9QV8q+K/8Akctd/wCwref+lElfVVfKviv/
AJHLXf8AsK3n/pRJXThfjODMP4a9f8z0P9gT/k22L/sZvEv/AKftQr2evGP2BP8Ak22L/sZvEv8A
6ftQr2esJ/Ezsp/AgoooqSwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo
oooAKKKKACiiigAooooA/Kb9p3/lFj+0V/2L/wAQP/R2q1/M9qn7W3xV1zwAfCl78TfiDeeFjbJZ
HRp/EV5Jp5gQALF5BkMewBVwu3AwOOK/ph/ad/5RY/tFf9i/8QP/AEdqtfhr4e1XT/G+vfBbwDq3
hP4ff8It40+H/wBr1+8t/CWmWWo2hjl1APqQv4YEuUeCK1jkYmXY4hbzFcO4bqxulO72btb5Sf5R
f39jz8uf7xx+d/K8V/7cn8j5f8O/tPfErwf8O5fCGk/EPxzpfhOeKaCTRLTXrqDTpI5t3mobdXEZ
V9zbhtw245zmuVXxTqa+GG0UajfjRnuhfNYC4f7K1wEKCYx52+YEZlDYzgkZwa+nvG/7K/wO+Hvw
PtDrHxIn074gah4QtvEdkWbUZoL25ngW4jtEtBo4i8tsmD7QNSIV1LMnytEE0v8AZ++DF78Jo/iK
dH+Jf/CFW/hmaS+kHi2xE8fiJblYI9NU/wBmFfmVkmxgsIJPMzmMxty1Pdcr9NPuv+sbLzt3R3xl
eMWuu3zt+ju/K/ZnjUf7Ynxci8CjwuvxT+Iy+GhZf2YNIHiW9FiLXZ5f2fyfM2eVs+XZjbt4xisr
T/2ifiDpHwxl8E2vjrxjbeDJ1dJNAi1q5TTJA772Btg/lEM3zH5eTz1rtfEHhjwxe/sM6dr+k6fq
tjrVr4tXS9Sku57K6jvGayeTzIWWzjuYU+UDyWuJUzlsbua6ex+Bfwx8Of2P4Y1jw98Z/EXi/WvC
UfiS31Dw49o1pJLPZm7jjisWt2klt4l+Wa4FwCDDPiIBOSpo582trX87x5/yu/8Ag6Dg7qFvNrys
+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
r4Z3fgu18XeKLbwdfy+ddaDFqs6aZcyblbe9sG8pm3IhyVzlFPYVo+Hf2nviV4P+HcvhDSfiH450
vwnPFNBJolpr11Bp0kc27zUNuriMq+5tw24bcc5zXDUUPW9+oLS1uh6BfftYfFLVPh2PCFz8SvH9
x4TFqliNEl8Q3b6cLdAAkP2cyeX5ahVAXbgYGBxUGp/tPfErWvhovgy8+Ifjm78HpBHbLoU2vXUm
mLFGVMcYty/l7VKqVXbgFRjpXDUUPVtvqC0tboFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
FFABX9dH/BIj/lF/8Bf+xJ0z/wBELX8i9f1ZfsKazrOgf8EWvg9d+H59bttXi8E6N9nk0jSE1a8X
PkhvLtnZVk+UtnJG1SzdVoA+wq8+8Nf8e17/ANhO/wD/AErmrzj9kjx94/8AFPxHvbfxVqPxEu9P
TTZJI017wLbaFbCUSxAFZ45WZn2lsJjBBY5+UV6P4a/49r3/ALCd/wD+lc1dOF+M4Mw/hr1/zPYv
2BP+TbYv+xm8S/8Ap+1CvZ68Y/YE/wCTbYv+xm8S/wDp+1CvZ6wn8TOyn8CCiiipLCiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD8pv2nf+UWP7RX
/Yv/ABA/9HarX4Lm3+LZ/aOHh/8A4au/4uUt6fB4f/hIfFP2sSm58s2X2n7Fjy/PH9/y8/NnvX70
ftO/8osf2iv+xf8AiB/6O1Wv58v+cxH/AHWT/wBzdeJxTicRTf7io4ctKrPRRd3HltfmT0953ta/
c+BznF4ujz/Vqrhy0q1TRRd3D2fKnzRlpq9rPzPLdM/a7+LGieEYPD9n8T/iHaaDaxNBBpsPiO8j
tIY2VlZFiEmwKVdwQBghmHc0qftf/FqO7Sdfih8RBPHp39kLIPEl5vWyyD9lB8zPk5A/d/d4HFed
UV7b11f9b/5v72fff1/X3L7j0LSP2uPit4f8G23h2w+JvxCsvD9nC1tb6Xb+I7yOzgiZWVo0hWQI
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
/wAGP/I/Af7WxHl9xxf/AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE12lFH/EunB38lT/w
Y/8AIP7WxHl9xxf/AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE12lFH/EunB38lT/wY/8A
IP7WxHl9xxf/AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE12lFH/EunB38lT/wY/8AIP7W
xHl9xxf/AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE12lFH/EunB38lT/wY/8AIP7WxHl9
xxf/AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE12lFH/EunB38lT/wY/8AIP7WxHl9xxf/
AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE12lFH/EunB38lT/wY/8AIP7WxHl9xxf/AArm
+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE12lFH/EunB38lT/wY/8AIP7WxHl9xxf/AArm+/56
2v8A303/AMTR/wAK5vv+etr/AN9N/wDE12lFH/EunB38lT/wY/8AIP7WxHl9xxf/AArm+/562v8A
303/AMTR/wAK5vv+etr/AN9N/wDE12lFH/EunB38lT/wY/8AIP7WxHl9xxf/AArm+/562v8A303/
AMTR/wAK5vv+etr/AN9N/wDE12lFH/EunB38lT/wY/8AIP7WxHl9xxf/AArm+/562v8A303/AMTR
/wAK5vv+etr/AN9N/wDE12lFH/EunB38lT/wY/8AIP7WxHl9xxf/AArm+/562v8A303/AMTR/wAK
5vv+etr/AN9N/wDE12lFH/EunB38lT/wY/8AIP7WxHl9xxf/AArm+/562v8A303/AMTR/wAK5vv+
etr/AN9N/wDE12lFH/EunB38lT/wY/8AIP7WxHl9xxf/AArm+/562v8A303/AMTR/wAK5vv+etr/
AN9N/wDE12lFH/EunB38lT/wY/8AIP7WxHl9xxf/AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N
/wDE12lFH/EunB38lT/wY/8AIP7WxHl9xxf/AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE
12lFH/EunB38lT/wY/8AIP7WxHl9xxf/AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE12lF
H/EunB38lT/wY/8AIP7WxHl9xxf/AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE12lFH/Eu
nB38lT/wY/8AIP7WxHl9xxf/AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE12lFH/EunB38
lT/wY/8AIP7WxHl9xxf/AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE12lFH/EunB38lT/w
Y/8AIP7WxHl9xxf/AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE12lFH/EunB38lT/wY/8A
IP7WxHl9xxf/AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE12lFH/EunB38lT/wY/8AIP7W
xHl9xxf/AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE12lFH/EunB38lT/wY/8AIP7WxHl9
xxf/AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE12lFH/EunB38lT/wY/8AIP7WxHl9xxf/
AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE19cp+zX4U1Mam1npXjbyP+FcL4yt7g6lDLHp
06xvv88i0AkgeRVRcGIqWxuc123xa+DngH4ha94P0s6H4j0jxh4n+HNn4jOpaZBZ6boFo8emGZpH
s47fMsTtBKZrhJYhGXY+W5iYP+c1PD7w/jWhBYeu4uLlJ+0XuJRhNtpN6KMnfXmvG0Yy5ot+H/rp
LnUUtLNt2WllF9+0teumid0fCH/Cub7/AJ62v/fTf/E0f8K5vv8Anra/99N/8TX1yn7NfhTUxqbW
eleNvI/4VwvjK3uDqUMsenTrG+/zyLQCSB5FVFwYipbG5zVnxF8Cfhdd+FIrPRrTx9a+JbrwIfGK
3l7rNpcWNtLGjSPbGBLRHkVkjbEnmoUaQAo4Ql+qPhv4fSnCEaFd3te04vlTUXeXvXSXNra70dk0
4uWi4xbaST1t0Wl+XfX+8v6sfHv/AArm+/562v8A303/AMTR/wAK5vv+etr/AN9N/wDE19waf+yP
8O7j9lf/AIWLLZ/EBb9PDcl0fDq6taf2lJciYRjVlhNru/sTqGm+8Jcx5IHmHM8Yfs1fBrwL8G7U
6t4/uLDxxqHhO38Q2ZLX0sN5czQLcR2i2o0oR7GyYPO/tAhHBZkG1ohx4fgXw5r1fY0MNipyVSVJ
qPNNxlG3O3yc3uw5o3kr3v7vMk7ZU+NueXLCMm+Zx0je1rXel9Fda/dc+Mv+Fc33/PW1/wC+m/8A
iaP+Fc33/PW1/wC+m/8Aia+wvEXwJ+F134Uis9GtPH1r4luvAh8YreXus2lxY20saNI9sYEtEeRW
SNsSeahRpACjhCX+ca+pyDwW4HzanKpRo1octtJzs7NXTVnJWevW+m1rN+jguJKuJi5QVrd0u176
NnF/8K5vv+etr/303/xNH/Cub7/nra/99N/8TXaV9naDo2izeB7LwDH4Y8GS+Er74NX3jO61hdCt
J9XGrRWl1dLcf2nsN1Fi+gis/JWVYdo8sxl3Zm5eJvBvg3KFSf1epPmbb/etWjG3M1o+aWq5Yac2
uqsejRzLEVJ8l/w7uMV+Ml8r77P8/f8AhXN9/wA9bX/vpv8A4mj/AIVzff8APW1/76b/AOJr9FPg
BF8MfjB+zZceHhqPw40+20T4b63e63pN14Imm8WPrlst3dQajFrCW2I7bcLJNr3saMoaD7K7yK8n
inhJv+Gd/wBj/U/EBPleLPjL5uhaRziSz0C3lH2+5HPH2q5jS0Rh1S1v0PD14eB8M+DsTVq4R4Kv
CtGtGlGMpzjzKTk+a8qaXu04TqS5eePLFcs5OSNY43ESjCfMrPfRaWSbW++tle15aLoz5W/4Vzff
89bX/vpv/iaP+Fc33/PW1/76b/4mvrDWvEWn+Mv+Cd6Y8KeENJvfCvjHT9Mi1Ow0tE1LUFms9Smm
e5umLTSbmSIeXvESCFNkancW938N/BXwf4O/Yy8BaX4Z1vwrF8QPif4K13xTeSaj8PrDxBDdiyW8
aW2OsX0hXS3jt7aUItnb+YkvzzzKrwmHLNvDvgnL6cPrOFqqc686K/eTlGKhGVR1Jyp05uEfZxv8
LSlpKSjeaWHx2IquNmrNN7bWlyW1aTfN57a9D82P+Fc33/PW1/76b/4mj/hXN9/z1tf++m/+JrtK
K/Sv+JdODv5Kn/gx/wCRzf2tiPL7ji/+Fc33/PW1/wC+m/8AiaP+Fc33/PW1/wC+m/8Aia/RT4AR
fDH4wfs2XHh4aj8ONPttE+G+t3ut6TdeCJpvFj65bLd3UGoxawltiO23CyTa97GjKGg+yu8ivJ85
WXwz8NzfsX3njB/D/wAUm8Ww+ME0mPW47GI+C0sjZ+abaS42+YNSMnziPdt8nnGa+Byrwx4KxNer
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
8F6da/DNvA7Qarrt5cSa7K95HcedBLY6VJ9k2bZT+9SVctCCsiiTPnmm/tb+CND0q50Sz8B+LF8N
R+Fr3w9pttL4ut3vLea8nM891NONOCy8iNVjSKIBY+WJYtU1HJOcY66Ss/8AwNR9L2i+tr6qwU/e
UXLTWN/T3HL1tea6baO+/nGsfs0eM9E+MOieA5NNtJ/EniWS0j0mOz1S0vLTUvtTBYGhu4pWtnRm
YLvWQqCGBIKtjnfiL8PtX+E3j7WvC/iC0+wa54evZtO1C281Jfs88TlJE3oWRsMCMqSDjgmvQPHX
x08GeM/EvwxnbwPq8ukeCNOtNM1jTb3xGJR4gginaZ1SWG2he18zzJVyPMKhlwcqS3n/AMRdb0jx
L4+1rUPD+if8I1od7ezT6fpP2x7z+zIGcmODznAeXYpC72GWxk9at6Oy7y+5Ncr8rq76+fLbVxs4
3e9o/e17y87PTp876YtFFFAgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
ooooAKKKKACv1f8A+DNv/lLhqP8A2T/VP/Smxr8oK/V//gzb/wCUuGo/9k/1T/0psaAP6na8Q/b9
/wCSIW3/AGFYf/Rcte314h+37/yRC2/7CsP/AKLlr0Mo/wB+o/44/mjxeJf+RRiv+vc//SWfIPwZ
/wCT1/gH/wBjXqP/AKjOt1+ltfml8Gf+T1/gH/2Neo/+ozrdfpbXs8Y/8jF+iPl/DH/kRx/xSCii
ivlj9CCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
iigD8k9J/wCS+a1/2AG/9THxjX5nf8Fov2arf9p/9vlNIj199F17SvhZbalpMElmkltq0w1W9iW2
knaaP7OzvLEqvsdct820DNfox4C+IGkeMv2l/Hmnabd/abzwnYDStVj8p0+yXL+JvFN4seWADZgu
7d8qSP3mM7gwH5tf8FxfjL4f+EH7b0qa54f13XG8TfCq20eB9M12PS2sN2q3splJe1n3ndDHgDZg
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
zb/5S4aj/wBk/wBU/wDSmxr8oK/V/wD4M2/+UuGo/wDZP9U/9KbGgD+p2vEP2/f+SIW3/YVh/wDR
cte314h+37/yRC2/7CsP/ouWvQyj/fqP+OP5o8XiX/kUYr/r3P8A9JZ8g/Bn/k9f4B/9jXqP/qM6
3X6W1+aXwZ/5PX+Af/Y16j/6jOt1+ltezxj/AMjF+iPl/DH/AJEcf8Ugooor5Y/QgooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK
KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/JPSf+S+a1/wBg
Bv8A1MfGNeR+Lv8Ak+bxp/2Inhr/ANOHiCvXNJ/5L5rX/YAb/wBTHxjXkfi7/k+bxp/2Inhr/wBO
HiCvI8dv+TUYr/FT/wDUiJ/Gvj1/u+a/4KP/AKXQPz3/AODiD/mkH/ca/wDbCvzTr9LP+DiD/mkH
/ca/9sK/NOvgvBT/AJIvBf8AcT/07UP1/wCjt/yb3L/+4v8A6fqhRRRX6oftYUUUUAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
FFABRRRQAUUUUAFFFFABRRRQAUUUUAFfq/8A8Gbf/KXDUf8Asn+qf+lNjX5QV+r/APwZt/8AKXDU
f+yf6p/6U2NAH9TteIft+/8AJELb/sKw/wDouWvb68Q/b9/5Ihbf9hWH/wBFy16GUf79R/xx/NHi
8S/8ijFf9e5/+ks+Qfgz/wAnr/AP/sa9R/8AUZ1uv0tr80vgz/yev8A/+xr1H/1Gdbr9La9njH/k
Yv0R8v4Y/wDIjj/ikFFFFfLH6EFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU
UAFFFFABRRRQAUUUUAFFFFAH5J6T/wAl81r/ALADf+pj4xr8d/8Ag5N/5Pm8Kf8AYiWn/pw1Gv2I
0n/kvmtf9gBv/Ux8Y1+O/wDwcm/8nzeFP+xEtP8A04ajX3uK/wCSch/if/pcj8gwH/JdVf8AAv8A
03A/Peiiivgj9fCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK/V/wD4M2/+
UuGo/wDZP9U/9KbGvygr9X/+DNv/AJS4aj/2T/VP/SmxoA/qdrxD9v3/AJIhbf8AYVh/9Fy17fXi
H7fv/JELb/sKw/8AouWvQyj/AH6j/jj+aPF4l/5FGK/69z/9JZ8g/Bn/AJPX+Af/AGNeo/8AqM63
X6W1+aXwZ/5PX+Af/Y16j/6jOt1+ltezxj/yMX6I+X8Mf+RHH/FIKKKK+WP0IKKKKACiiigAoooo
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPyT0n/AJL5rX/YAb/1
MfGNfjv/AMHJv/J83hT/ALES0/8AThqNfsRpP/JfNa/7ADf+pj4xr8d/+Dk3/k+bwp/2Ilp/6cNR
r73Ff8k5D/E//S5H5BgP+S6q/wCBf+m4H570UUV8Efr4UUUUAFFFFABRRRQAUUUUAFFFFABRRRQA
UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR
RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
FABRRRQAUUUUAFFFFABX6v8A/Bm3/wApcNR/7J/qn/pTY1+UFfq//wAGbf8Aylw1H/sn+qf+lNjQ
B/U7XiH7fv8AyRC2/wCwrD/6Llr2+vEP2/f+SIW3/YVh/wDRctehlH+/Uf8AHH80eLxL/wAijFf9
e5/+ks+Qfgz/AMnr/AP/ALGvUf8A1Gdbr9La/NL4M/8AJ6/wD/7GvUf/AFGdbr9La9njH/kYv0R8
v4Y/8iOP+KQUUUV8sfoQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
AFFFFABRRRQAUUUUAfknpP8AyXzWv+wA3/qY+Ma/Hf8A4OTf+T5vCn/YiWn/AKcNRr9iNJ/5L5rX
/YAb/wBTHxjX47/8HJv/ACfN4U/7ES0/9OGo197iv+Sch/if/pcj8gwH/JdVf8C/9NwPz3ooor4I
/XwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACv1f/4M2/8AlLhqP/ZP9U/9
KbGvygr9X/8Agzb/AOUuGo/9k/1T/wBKbGgD+p2vEP2/f+SIW3/YVh/9Fy17fXiH7fv/ACRC2/7C
sP8A6Llr0Mo/36j/AI4/mjxeJf8AkUYr/r3P/wBJZ8g/Bn/k9f4B/wDY16j/AOozrdfpbX5pfBn/
AJPX+Af/AGNeo/8AqM63X6W17PGP/Ixfoj5fwx/5Ecf8Ugooor5Y/QgooooAKKKKACiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/JPSf+S+a1/2AG/9THxjX47/
APByb/yfN4U/7ES0/wDThqNfrJ8MfinpfxB/aj+Jmk6f9o+1+BoF0PU/MQKv2h/EPiXUF2HJ3L5F
9Bzx824Y4yfyb/4OTf8Ak+bwp/2Ilp/6cNRr73Ff8k5D/E//AEuR+QYHTjqr/gX/AKbgfnvRRRXw
R+vhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU
UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFfpp/wagapf6X/AMFP9SbT
r+fTLmTwNqKC4hjid0H2mzJwJEdecY5U1+Zdfpf/AMGpP/KUC9/7EnUv/R9pQB/SV/wlXi//AKHf
Xf8AwD07/wCRq82/ag8R+ILrwNYQ6j4k1LVraXUUBguLe0RQRFKQwMUKNnj1xyeK9ErzX9qH/kS9
L/7Ca/8AoiavQyj/AH6j/jj+aPF4l/5FGK/69z/9JZ5J8Gf+T1/gH/2Neo/+ozrdfpbX5pfBn/k9
f4B/9jXqP/qM63X6W17PGP8AyMX6I+X8Mf8AkRx/xSCiiivlj9CCiiigAooooAKKKKACiiigAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD8cvht8NNP8AAn7UHxH1Sze7e48a
Wy6zfiaXeiTJ4j8TWIEQx8ieVZRHHPzFz/FivyY/4OTf+T5vCn/YiWn/AKcNRr9iNJ/5L5rX/YAb
/wBTHxjX47/8HJv/ACfN4U/7ES0/9OGo197i23w5C/8AN/7dI/IMB/yXVX/Av/TcD896KKK+CP18
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr9L/+DUn/AJSgXv8A2JOpf+j7
SvzQr9L/APg1J/5SgXv/AGJOpf8Ao+0oA/pFrzX9qH/kS9L/AOwmv/oiavSq81/ah/5EvS/+wmv/
AKImr0Mo/wB+o/44/mjxeJf+RRiv+vc//SWeSfBn/k9f4B/9jXqP/qM63X6W1+aXwZ/5PX+Af/Y1
6j/6jOt1+ltezxj/AMjF+iPl/DH/AJEcf8Ugooor5Y/QgooooAKKKKACiiigAooooAKKKKACiiig
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/JPSf+S+a1/wBgBv8A1MfGNfjv/wAHJv8A
yfN4U/7ES0/9OGo1+xGk/wDJfNa/7ADf+pj4xr8d/wDg5N/5Pm8Kf9iJaf8Apw1GvvcV/wAk5D/E
/wD0uR+QYD/kuqv+Bf8ApuB+e9FFFfBH6+FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
FFABRRRQAV+l/wDwak/8pQL3/sSdS/8AR9pX5oV+l/8Awak/8pQL3/sSdS/9H2lAH9Itea/tQ/8A
Il6X/wBhNf8A0RNXpVea/tQ/8iXpf/YTX/0RNXoZR/v1H/HH80eLxL/yKMV/17n/AOks8k+DP/J6
/wAA/wDsa9R/9RnW6/S2vzS+DP8Ayev8A/8Asa9R/wDUZ1uv0tr2eMf+Ri/RHy/hj/yI4/4pBRRR
Xyx+hBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU
UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR
RQB+Sek/8l81r/sAN/6mPjGvx3/4OTf+T5vCn/YiWn/pw1Gv2I0n/kvmtf8AYAb/ANTHxjX47/8A
Byb/AMnzeFP+xEtP/ThqNfe4r/knIf4n/wClyPyDAf8AJdVf8C/9NwPz3ooor4I/XwooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACv0v/wCDUn/lKBe/9iTqX/o+0r80K/S//g1J
/wCUoF7/ANiTqX/o+0oA/pFrzX9qH/kS9L/7Ca/+iJq9KrzX9qH/AJEvS/8AsJr/AOiJq9DKP9+o
/wCOP5o8XiX/AJFGK/69z/8ASWeSfBn/AJPX+Af/AGNeo/8AqM63X6W1+aXwZ/5PX+Af/Y16j/6j
Ot1+ltezxj/yMX6I+X8Mf+RHH/FIKKKK+WP0IKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
KACiiigAooooAKKKKACiiigAooooAKKKKAPyT0n/AJL5rX/YAb/1MfGNfjv/AMHJv/J83hT/ALES
0/8AThqNfsRpP/JfNa/7ADf+pj4xr8d/+Dk3/k+bwp/2Ilp/6cNRr73Ff8k5D/E//S5H5BgP+S6q
/wCBf+m4H570UUV8Efr4UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABX6X/8
GpP/AClAvf8AsSdS/wDR9pX5oV+l/wDwak/8pQL3/sSdS/8AR9pQB/SLXmv7UP8AyJel/wDYTX/0
RNXpVea/tQ/8iXpf/YTX/wBETV6GUf79R/xx/NHi8S/8ijFf9e5/+ks8k+DP/J6/wD/7GvUf/UZ1
uv0tr80vgz/yev8AAP8A7GvUf/UZ1uv0tr2eMf8AkYv0R8v4Y/8AIjj/AIpBRRRXyx+hBRRRQAUU
UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB+Sek/8l81r
/sAN/wCpj4xr8d/+Dk3/AJPm8Kf9iJaf+nDUa/XDwJqmo6h+0t46ivYbWK2sdPEGntCxLzQHxP4p
kLSA8B/OeZcDjaqHqTX5H/8AByb/AMnzeFP+xEtP/ThqNffYyLjw5BS7/wDtzPx3LpqXHNVx/l/K
nFH570UUV8CfsQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABX6X/wDBqT/y
lAvf+xJ1L/0faV+aFfpf/wAGpP8AylAvf+xJ1L/0faUAf0i15r+1D/yJel/9hNf/AERNXpVea/tQ
/wDIl6X/ANhNf/RE1ehlH+/Uf8cfzR4vEv8AyKMV/wBe5/8ApLPJPgz/AMnr/AP/ALGvUf8A1Gdb
r9La/NL4M/8AJ6/wD/7GvUf/AFGdbr9La9njH/kYv0R8v4Y/8iOP+KQUUUV8sfoQUUUUAFFFFABR
RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAfkZ4fsEs/2hPEci
libvRDK+egI8XeL049sIP1r8fv8Ag5N/5Pm8Kf8AYiWn/pw1Gv2I0n/kvmtf9gBv/Ux8Y1+O/wDw
cm/8nzeFP+xEtP8A04ajX32LbfDkL9//AG5n49l8VHjmql/Kv/TcD896KKK+BP2EKKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr9L/+DUn/AJSgXv8A2JOpf+j7SvzQr9L/APg1
J/5SgXv/AGJOpf8Ao+0oA/fP4jftQf8ACu/GV5o//Cu/ilrv2PZ/p2kaD9qs59yK/wC7k8wbsbtp
44ZWHaofj3rf/CS/Cjw3qP2S9sPt91Dc/Zb2Lyrm2320reXKmTtdc4YZ4IIrzP8AaM/Yu1/4tfGX
WPEFl4a+F1/bX/kbLjV9Q1mK8k2QRxnzFt5ViGChA2j7oXPOa7/4q+HJfB/wE8F6RPDZW8+lm0s5
IrJ5Htomjs5EKxNITIUBGFLktjGTnNehlH+/Uf8AHH80eLxL/wAijFf9e5/+ks8/+DP/ACev8A/+
xr1H/wBRnW6/S2vzS+DP/J6/wD/7GvUf/UZ1uv0tr2eMf+Ri/RHy/hj/AMiOP+KQUUUV8sfoQUUU
UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAfknpP/
ACXzWv8AsAN/6mPjGvx3/wCDk3/k+bwp/wBiJaf+nDUa/Tz9nP4g6v4z/bO/aC07UrxLmy8JanBp
OkxrGim0tn1DWLxoyVALE3F3cPliTiQDO0KB+Yf/AAcm/wDJ83hT/sRLT/04ajX6Dj6bp8Owi+9/
vk3+p+QYH/kuqv8AgX/puB+e9FFFfnx+vhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA
FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU
UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR
RQAUUUUAFfpf/wAGpP8AylAvf+xJ1L/0faV+aFfpf/wak/8AKUC9/wCxJ1L/ANH2lAH9Itea/tQ/
8iXpf/YTX/0RNXpVea/tQ/8AIl6X/wBhNf8A0RNXoZR/v1H/ABx/NHi8S/8AIoxX/Xuf/pLPJPgz
/wAnr/AP/sa9R/8AUZ1uv0tr80vgz/yev8A/+xr1H/1Gdbr9La9njH/kYv0R8v4Y/wDIjj/ikFFF
FfLH6EFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
FFAH4y/CH4TQ/Dn9q74s6xFdG4fx6E16aMx7fszx674i04IDuO75bBXzhfv4xxk/lL/wcm/8nzeF
P+xEtP8A04ajX7EaT/yXzWv+wA3/AKmPjGvx3/4OTf8Ak+bwp/2Ilp/6cNRr9Ax1SU+HYOXe33Sa
X4H49l0VHjmql/Kv/TcD896KKK/Pz9hCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK
KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
AooooAK/S/8A4NSf+UoF7/2JOpf+j7SvzQr9L/8Ag1J/5SgXv/Yk6l/6PtKAP6Ra81/ah/5EvS/+
wmv/AKImr0qvNf2of+RL0v8A7Ca/+iJq9DKP9+o/44/mjxeJf+RRiv8Ar3P/ANJZ5J8Gf+T1/gH/
ANjXqP8A6jOt1+ltfml8Gf8Ak9f4B/8AY16j/wCozrdfpbXs8Y/8jF+iPl/DH/kRx/xSCiiivlj9
CCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD8
k9J/5L5rX/YAb/1MfGNfjv8A8HJv/J83hT/sRLT/ANOGo1+tXw7uzc/tOfEJDqOtXvkWaxiG+0/7
NBp4/wCEk8Tt5NrJ5Mf2iE7vMMu6bE008fmDyvKi/JX/AIOTf+T5vCn/AGIlp/6cNRr7zEu/DcP8
T/8AS5H5Bgf+S6q/4F/6bgfnvRRRXwZ+vhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA
FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU
UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR
RQAUUUUAFfpf/wAGpP8AylAvf+xJ1L/0faV+aFfpf/wak/8AKUC9/wCxJ1L/ANH2lAH9Itea/tQ/
8iXpf/YTX/0RNXpVea/tQ/8AIl6X/wBhNf8A0RNXoZR/v1H/ABx/NHi8S/8AIoxX/Xuf/pLPJPgz
/wAnr/AP/sa9R/8AUZ1uv0tr80vgz/yev8A/+xr1H/1Gdbr9La9njH/kYv0R8v4Y/wDIjj/ikFFF
FfLH6EFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
FFAH5CeEvDltof7Rni65ga8MusaV9suBNeTTosg8V+LIAIkdisKbIUykQVC5dyu+R2b8hv8Ag5N/
5Pm8Kf8AYiWn/pw1Gv2I0n/kvmtf9gBv/Ux8Y1+O/wDwcm/8nzeFP+xEtP8A04ajX3uK/wCSch/i
f/pcj8gwP/JdVf8AAv8A03A/Peiiivgj9fCiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
iigAooooAK/S/wD4NSf+UoF7/wBiTqX/AKPtK/NCv0v/AODUn/lKBe/9iTqX/o+0oA/pFrzX9qH/
AJEvS/8AsJr/AOiJq9KrzX9qH/kS9L/7Ca/+iJq9DKP9+o/44/mjxeJf+RRiv+vc/wD0lnknwZ/5
PX+Af/Y16j/6jOt1+ltfml8Gf+T1/gH/ANjXqP8A6jOt1+ltezxj/wAjF+iPl/DH/kRx/wAUgooo
r5Y/QgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooA/JPSf+S+a1/2AG/8AUx8Y1+O//Byb/wAnzeFP+xEtP/ThqNfsLos6TfH/AF1VdWaLQSrgHJQ/
8Jh4wOD6HBB+hFfj1/wcm/8AJ83hT/sRLT/04ajX3uK/5JyH+J/+lyPyDAf8l1V/wL/03A/Peiii
vgj9fCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK/S//g1J/wCUoF7/ANiT
qX/o+0r80K/S/wD4NSf+UoF7/wBiTqX/AKPtKAP6Ra81/ah/5EvS/wDsJr/6Imr0qvNf2of+RL0v
/sJr/wCiJq9DKP8AfqP+OP5o8XiX/kUYr/r3P/0lnknwZ/5PX+Af/Y16j/6jOt1+ltfmb8Jr6HTf
2zvgLNcTRQQp4r1DdJI4VVz4a1sDJPHU1+l8E6XUCSRuskcihkdTlWB5BB7ivZ4x/wCRi/RHy/hj
/wAiOP8AikPooor5Y/QgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
AKKKKACiiigAooooA/IPwh/ycd4w/wCwV/7tXiyvyH/4OTf+T5vCn/YiWn/pw1Gv148If8nHeMP+
wV/7tXiyvyH/AODk3/k+bwp/2Ilp/wCnDUa+9xX/ACTkP8T/APS5H5BgP+S6q/4F/wCm4H570UUV
8Efr4UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU
UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABX6X/APBqT/ylAvf+xJ1L
/wBH2lfmhX6Uf8GreqW2i/8ABTPUbm8uILS2j8E6jvlmkEaJm4swMseByQPxoA/pMrzX9qH/AJEv
S/8AsJr/AOiJq63/AIWj4Z/6GLQv/A+L/wCKrgP2ifGWkeIvCumw6fqum30y6irtHb3KSsF8mYZI
Uk4yRz7ivQyj/fqP+OP5o8XiX/kUYr/r3P8A9JZ4tpf/ACc58Ef+xrvf/Ud1mv098J/8irpn/XpF
/wCgCvzC0v8A5Oc+CP8A2Nd7/wCo7rNfp74T/wCRV0z/AK9Iv/QBXs8Y/wDIxfoj5fwx/wCRHH/F
I0KKKK+WP0IKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
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
KKKACiiigD//2Q==
--089e013d14cac625e004e68a7028--


From Chris.Greenhalgh@nottingham.ac.uk Tue Sep 17 08:49:45 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VLq2b-0003Wv-M0 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Tue, 17 Sep 2013 08:49:45 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1523560 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine03-20433-3.icritical.com ([93.95.15.170]:49643)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with smtp id 1VLq2b-0007sy-gE (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Tue, 17 Sep 2013 08:49:45 +0100
Received: (qmail 10032 invoked from network); 17 Sep 2013 07:49:39 -0000
Received: from localhost (127.0.0.1)
	by engine03-20433-3.icritical.com with SMTP; 17 Sep 2013 07:49:39 -0000
Received: from engine03-20433-3.icritical.com ([127.0.0.1])
	by localhost (engine03-20433-3.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 09960-03 for <cl-mirage@lists.cam.ac.uk>;
	Tue, 17 Sep 2013 08:49:38 +0100 (BST)
Received: (qmail 10021 invoked by uid 599); 17 Sep 2013 07:49:38 -0000
Received: from unknown (HELO smtp3.nottingham.ac.uk) (128.243.44.55)
	by engine03-20433-3.icritical.com (qpsmtpd/0.28) with ESMTP;
	Tue, 17 Sep 2013 08:49:38 +0100
Received: from uiwexhub01.ad.nottingham.ac.uk ([128.243.15.133])
	by smtp3.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Chris.Greenhalgh@nottingham.ac.uk>)
	id 1VLq2Y-0008IC-Pw; Tue, 17 Sep 2013 08:49:42 +0100
From: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
To: Anil Madhavapeddy <anil@recoil.org>
Date: Tue, 17 Sep 2013 08:49:39 +0100
Subject: RE: Notes on Mirage meeting - 11 Sep
Thread-Topic: Notes on Mirage meeting - 11 Sep
Thread-Index: Ac6y5dTzPf4ODtIxRYeBI1WxAcjJvgAk489w
Message-ID: <4C20415C7327A849961F3B8421413725010CD5506A57@EXCHANGE1.ad.nottingham.ac.uk>
References: <4AF38AA2-7AA6-4DCF-8366-69FD7AF29DD6@cam.ac.uk>
	<A6FDF2B2-AE49-4AE9-9F4F-F6C8562A3534@cam.ac.uk>
	<3F45424F-C350-4E1A-A6F8-1B67709FF1AF@cam.ac.uk>
	<9140F71E-EB61-4CE2-8712-02B1FC2C2378@nottingham.ac.uk>
	<4C20415C7327A849961F3B8421413725010CD55069DE@EXCHANGE1.ad.nottingham.ac.uk>
	<DD9A06FE-C5B7-4E5F-B00A-9F8228740709@recoil.org>
In-Reply-To: <DD9A06FE-C5B7-4E5F-B00A-9F8228740709@recoil.org>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine03-20433-3.icritical.com
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	Amir Chaudhry <amc79@cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 07:49:45 -0000
Status: O
Content-Length: 1724
Lines: 31

On 16 September 2013 15:05 Anil Madhavapeddy [mailto:anil@recoil.org] wrote=
:

> A newbie question in return from someone who's never owned an Android: wh=
at's the best tablet I can buy that is easy to develop for and test your pa=
tches under?  I can rotate it into the OCamlot pool [1] when it's stable to=
o...

Android devices with a "google" badge are usually a good bet for developmen=
t, e.g. you can be confident of unlocking the boot loader - they are the de=
vices google uses to drive evolution in the platform.=20

Currently I'm working with a Google Nexus 7 (i.e. 7 in tablet); there are v=
ersions with & without GSM. I believe its made by asus. I know that its USB=
-OTG support works (which I need). Larger format would be the Google Nexus =
10, which is completely different hardware, possibly made by Samsung (can't=
 remember). But anything reasonably supported by custom firmware (e.g. http=
://www.cyanogenmod.org/ ) is likely to be ok.

Cheers
Chris

This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From scott.dj@gmail.com Tue Sep 17 11:27:48 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VLsVX-0002WC-Vq (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Tue, 17 Sep 2013 11:27:48 +0100
X-Cam-SpamScore: s
X-Cam-SpamDetails: score 1.3 from SpamAssassin-3.3.2-1523560 
	* -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/,
	no *      trust
	*      [209.85.192.182 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (scott.dj[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-pd0-f182.google.com ([209.85.192.182]:53660)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VLsVW-00079I-1T (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Tue, 17 Sep 2013 11:27:47 +0100
Received: by mail-pd0-f182.google.com with SMTP id r10so5421085pdi.27
	for <cl-mirage@lists.cam.ac.uk>; Tue, 17 Sep 2013 03:27:44 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.66.228.38 with SMTP id sf6mr36139454pac.21.1379413664292;
	Tue, 17 Sep 2013 03:27:44 -0700 (PDT)
Received: by 10.70.56.36 with HTTP; Tue, 17 Sep 2013 03:27:44 -0700 (PDT)
Date: Tue, 17 Sep 2013 11:27:44 +0100
Message-ID: <CAG_esB1HU4j41toaOANZniTq6N5aXLOu-DnuO4aRn4HF8oiFFw@mail.gmail.com>
Subject: OSv: unikernel targeting the JVM
From: David Scott <scott.dj@gmail.com>
To: Mirage List <cl-mirage@lists.cam.ac.uk>
Content-Type: multipart/alternative; boundary=047d7b11201b7565d604e691c597
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 10:27:48 -0000
Status: O
Content-Length: 1319
Lines: 36

--047d7b11201b7565d604e691c597
Content-Type: text/plain; charset=ISO-8859-1

This looks interesting:

http://www.theregister.co.uk/2013/09/17/cloudius_systems_osv_cloud_software/

https://github.com/cloudius-systems/osv

The license seems to be 3-clause BSD (with code derived from FreeBSD and
OpenSolaris), a lot of it seems to be in C/C++ and the main target seems to
be the JVM.

It looks like the unikernel idea is gaining traction.

Cheers,
Dave

--047d7b11201b7565d604e691c597
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">This looks interesting:<div><br></div><div><a href=3D"http=
://www.theregister.co.uk/2013/09/17/cloudius_systems_osv_cloud_software/">h=
ttp://www.theregister.co.uk/2013/09/17/cloudius_systems_osv_cloud_software/=
</a></div>
<div><br></div><div><a href=3D"https://github.com/cloudius-systems/osv">htt=
ps://github.com/cloudius-systems/osv</a></div><div><br></div><div>The licen=
se seems to be 3-clause BSD (with code derived from FreeBSD and OpenSolaris=
), a lot of it seems to be in C/C++ and the main target seems to be the JVM=
.<br clear=3D"all">
<div><br></div><div>It looks like the unikernel idea is gaining traction.</=
div><div><br></div><div>Cheers,</div></div><div>Dave</div></div>

--047d7b11201b7565d604e691c597--


From anil@recoil.org Tue Sep 17 12:06:05 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VLt6b-0004Go-SZ (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 17 Sep 2013 12:06:05 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1523560
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:41801
	helo=dark.recoil.org)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1VLt6a-0007pl-8T (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 17 Sep 2013 12:06:05 +0100
Received: (qmail 27579 invoked by uid 634); 17 Sep 2013 11:06:04 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from volstagg-0.srg.cl.cam.ac.uk (HELO clink.office) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Tue, 17 Sep 2013 12:06:04 +0100
Content-Type: text/plain; charset=iso-8859-1
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: OSv: unikernel targeting the JVM
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <CAG_esB1HU4j41toaOANZniTq6N5aXLOu-DnuO4aRn4HF8oiFFw@mail.gmail.com>
Date: Tue, 17 Sep 2013 12:06:02 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <850C1221-74CB-42A0-8F25-34A369EDE63A@recoil.org>
References: <CAG_esB1HU4j41toaOANZniTq6N5aXLOu-DnuO4aRn4HF8oiFFw@mail.gmail.com>
To: David Scott <scott.dj@gmail.com>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: Mirage List <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 11:06:05 -0000
Status: O
Content-Length: 784
Lines: 27

It's good to see this taking off, and their use of the JVM is definitely =
more mainstream than Mirage.  There's been a rich history of JVM-based =
microkernels that have failed to take off though (including GuestVM from =
Sun/Oracle), so I'd be interested to see their performance numbers.

-anil

On 17 Sep 2013, at 11:27, David Scott <scott.dj@gmail.com> wrote:

> This looks interesting:
>=20
> =
http://www.theregister.co.uk/2013/09/17/cloudius_systems_osv_cloud_softwar=
e/
>=20
> https://github.com/cloudius-systems/osv
>=20
> The license seems to be 3-clause BSD (with code derived from FreeBSD =
and OpenSolaris), a lot of it seems to be in C/C++ and the main target =
seems to be the JVM.
>=20
> It looks like the unikernel idea is gaining traction.
>=20
> Cheers,
> Dave



From Chris.Greenhalgh@nottingham.ac.uk Tue Sep 17 12:21:56 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VLtLw-0004oo-LP (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Tue, 17 Sep 2013 12:21:56 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1523560 
	*  0.0 HTML_MESSAGE BODY: HTML included in message
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine01-20433-7.icritical.com ([151.236.209.33]:39297)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1VLtLv-0006QD-9U (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Tue, 17 Sep 2013 12:21:56 +0100
Received: (qmail 22957 invoked from network); 17 Sep 2013 11:21:26 -0000
Received: from localhost (127.0.0.1)
	by engine01-20433-7.icritical.com with SMTP; 17 Sep 2013 11:21:26 -0000
Received: from engine01-20433-7.icritical.com ([127.0.0.1])
	by localhost (engine01-20433-7.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 22739-10 for <cl-mirage@lists.cam.ac.uk>;
	Tue, 17 Sep 2013 12:21:25 +0100 (BST)
Received: (qmail 21095 invoked by uid 599); 17 Sep 2013 11:16:15 -0000
Received: from unknown (HELO smtp4.nottingham.ac.uk) (128.243.220.65)
	by engine01-20433-7.icritical.com (qpsmtpd/0.28) with ESMTP;
	Tue, 17 Sep 2013 12:16:15 +0100
Received: from uiwexhub01.ad.nottingham.ac.uk ([128.243.15.133])
	by smtp4.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Chris.Greenhalgh@nottingham.ac.uk>)
	id 1VLtGu-0003p9-Mk
	for cl-mirage@lists.cam.ac.uk; Tue, 17 Sep 2013 12:16:44 +0100
From: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
To: "cl-mirage@lists.cam.ac.uk" <cl-mirage@lists.cam.ac.uk>
Date: Tue, 17 Sep 2013 12:16:41 +0100
Subject: mirage examples running on android
Thread-Topic: mirage examples running on android
Thread-Index: Ac6zl2JVfyG2fEZtR+6vCQhqzd2e9g==
Message-ID: <4C20415C7327A849961F3B8421413725010CD5506A5E@EXCHANGE1.ad.nottingham.ac.uk>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: multipart/alternative;
	boundary="_000_4C20415C7327A849961F3B8421413725010CD5506A5EEXCHANGE1ad_"
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine01-20433-7.icritical.com
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 11:21:56 -0000
Status: O
Content-Length: 5319
Lines: 117

--_000_4C20415C7327A849961F3B8421413725010CD5506A5EEXCHANGE1ad_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

I've managed to get the mirage (0.9.6) examples 'basic' and 'static_website=
' running on Android (as native unix/socket applications). Working notes ar=
e https://github.com/cgreenhalgh/opensharingtoolkit/blob/master/docs/mirage=
onandroid.md There is an opam repo for the compiler and most pre-requisite =
packages https://github.com/cgreenhalgh/opam-android-repository

Some of the build steps are still very untidy, I'm not using mirari at the =
moment and I haven't done any testing beyond just running the final applica=
tions. But other deadlines are pressing so I'll probably pause this now for=
 a few days.

Cheers
Chris


This message and any attachment are intended solely for the addressee and m=
ay contain confidential information. If you have received this message in er=
ror, please send it back to me, and immediately delete it.   Please do not u=
se, copy or disclose the information contained in this message or in any att=
achment.  Any views or opinions expressed by the author of this email do not=
 necessarily reflect the views of the University of Nottingham.=0D=0A
=0D=0A
This message has been checked for viruses but the contents of an attachment=
=0D=0A
may still contain software viruses which could damage your computer system,=
 you are advised to perform your own checks. Email communications with the U=
niversity of Nottingham may be monitored as permitted by UK legislation.=0D=0A
=0D=0A
=0D=0A
=0D=0A
=0D=0A

--_000_4C20415C7327A849961F3B8421413725010CD5506A5EEXCHANGE1ad_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40"><head><meta http-equiv=3DContent-Type content=
=3D"text/html; charset=3Dus-ascii"><meta name=3DGenerator content=3D"Micros=
oft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Calibri","sans-serif";
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]--></head><body lang=3DEN-GB link=3Dblue vli=
nk=3Dpurple><div class=3DWordSection1><p class=3DMsoNormal>I&#8217;ve manag=
ed to get the mirage (0.9.6) examples &#8216;basic&#8217; and &#8216;static=
_website&#8217; running on Android (as native unix/socket applications). Wo=
rking notes are <a href=3D"https://github.com/cgreenhalgh/opensharingtoolki=
t/blob/master/docs/mirageonandroid.md">https://github.com/cgreenhalgh/opens=
haringtoolkit/blob/master/docs/mirageonandroid.md</a> There is an opam repo=
 for the compiler and most pre-requisite packages <a href=3D"https://github=
.com/cgreenhalgh/opam-android-repository">https://github.com/cgreenhalgh/op=
am-android-repository</a><o:p></o:p></p><p class=3DMsoNormal><o:p>&nbsp;</o=
:p></p><p class=3DMsoNormal>Some of the build steps are still very untidy, =
I&#8217;m not using mirari at the moment and I haven&#8217;t done any testi=
ng beyond just running the final applications. But other deadlines are pres=
sing so I&#8217;ll probably pause this now for a few days. <o:p></o:p></p><=
p class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>Cheers<o:p></=
o:p></p><p class=3DMsoNormal>Chris<o:p></o:p></p><p class=3DMsoNormal><o:p>=
&nbsp;</o:p></p></div>
<br>=
<p>This message and any attachment are intended solely for the addressee an=
d may contain confidential information. If you have received this message in=
 error, please send it back to me, and immediately delete it.&nbsp;&nbsp; Pl=
ease do not use, copy or disclose the information contained in this message =
or in any attachment.&nbsp; Any views or opinions expressed by the author of=
 this email do not necessarily reflect the views of the University of Nottin=
gham.</p><p>This message has been checked for viruses but the contents of an=
 attachment may still contain software viruses which could damage your compu=
ter system, you are advised to perform your own checks. Email communications=
 with the University of Nottingham may be monitored as permitted by UK legis=
lation.</p>
<br>=
</body></html>=

--_000_4C20415C7327A849961F3B8421413725010CD5506A5EEXCHANGE1ad_--


From Richard.Mortier@nottingham.ac.uk Tue Sep 17 12:36:56 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VLtaS-0005Qa-GC (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Tue, 17 Sep 2013 12:36:56 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1523560 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine02-20433-2.icritical.com ([195.62.217.151]:42165)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1VLtaR-0004LR-0k (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Tue, 17 Sep 2013 12:36:56 +0100
Received: (qmail 9593 invoked from network); 17 Sep 2013 11:36:47 -0000
Received: from localhost (127.0.0.1)
	by engine02-20433-2.icritical.com with SMTP; 17 Sep 2013 11:36:47 -0000
Received: from engine02-20433-2.icritical.com ([127.0.0.1])
	by localhost (engine02-20433-2.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 09527-03 for <cl-mirage@lists.cam.ac.uk>;
	Tue, 17 Sep 2013 12:36:46 +0100 (BST)
Received: (qmail 9021 invoked by uid 599); 17 Sep 2013 11:36:17 -0000
Received: from unknown (HELO smtp3.nottingham.ac.uk) (128.243.44.55)
	by engine02-20433-2.icritical.com (qpsmtpd/0.28) with ESMTP;
	Tue, 17 Sep 2013 12:36:17 +0100
Received: from uiwexhub02.ad.nottingham.ac.uk ([128.243.15.132])
	by smtp3.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Richard.Mortier@nottingham.ac.uk>)
	id 1VLtZv-0001zx-2i; Tue, 17 Sep 2013 12:36:23 +0100
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
Date: Tue, 17 Sep 2013 12:36:21 +0100
Subject: Re: mirage examples running on android
Thread-Topic: mirage examples running on android
Thread-Index: Ac6zmiIRAB01QQniTI2d4Hek9smRGw==
Message-ID: <C9318ED6-F7A1-4CE1-A41E-14D525E43E8D@nottingham.ac.uk>
References: <4C20415C7327A849961F3B8421413725010CD5506A5E@EXCHANGE1.ad.nottingham.ac.uk>
In-Reply-To: <4C20415C7327A849961F3B8421413725010CD5506A5E@EXCHANGE1.ad.nottingham.ac.uk>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine02-20433-2.icritical.com
Cc: "cl-mirage@lists.cam.ac.uk" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 11:36:56 -0000
Status: O
Content-Length: 2057
Lines: 55


On 17 Sep 2013, at 12:16, Christopher Greenhalgh wrote:

> I=92ve managed to get the mirage (0.9.6) examples =91basic=92 and =91stat=
ic_website=92 running on Android (as native unix/socket applications). Work=
ing notes arehttps://github.com/cgreenhalgh/opensharingtoolkit/blob/master/=
docs/mirageonandroid.md=20

cool!

re that doc, you say=20

"""
	=95 it wasn't obvious from the introductory documentation on the Xen wiki =
that you can't opam install mirage-xen and mirage-unix at the same time, so=
 if you have installed for one target (or mirari has done for you) then you=
 need to "opam switch ..." (and/or "opem remove ..." it) before you can ins=
tall/build for the other target.
"""

...was that clear from the mirage wiki install page though? (if not, i'll u=
pdate.)

"""
	=95 mirage 0.9.6 doesn't seem to print console output; had to use Mort's v=
ersion, https://github.com/mor1/mirage
"""

...i believe there's an outstanding PR for that in flight already -- anil, =
dave, others-- let me know if you can't see it, or if there're issues with =
it.

re running socket examples-- presumably as root, ie., you need to be runnin=
g a rooted phone?

i wonder if it's worth putting together something for the mirage wiki about=
 more advanced build environments/targets?

--=20
Cheers,

R.




This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From jdy22@cam.ac.uk Tue Sep 17 15:13:15 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VLw1j-00033v-PL (Exim 4.70)
	(return-path <jdy22@cam.ac.uk>); Tue, 17 Sep 2013 15:13:15 +0100
X-Cam-AntiVirus: no malware found
X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/
Received: from mail-wi0-f177.google.com ([209.85.212.177]:47656)
	by ppsw-32.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.156]:587)
	with esmtpsa (PLAIN:jdy22) (TLSv1:RC4-SHA:128)
	id 1VLw1j-0003P9-2N (Exim 4.80_167-5a66dd3)
	(return-path <jdy22@cam.ac.uk>); Tue, 17 Sep 2013 15:13:15 +0100
Received: by mail-wi0-f177.google.com with SMTP id cb5so5077781wib.4
	for <multiple recipients>; Tue, 17 Sep 2013 07:13:15 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=mime-version:in-reply-to:references:date:message-id:subject:from:to
	:cc:content-type;
	bh=ytmeAx4QH2xgUGrIkOE0VNl7vE9yijrvX40Mdyjkzu4=;
	b=VsV84jo+i79oAr85HtcFT6Tgg0gULjoxqWRNHpWSM+az2ZpfXsWFExwq1Bp6aTfeyJ
	6dcFAicO0prtWrvwf2eQvZpxq6CsPHe7gr1ybj5fWNPsX85I3AQfvyWk/qtsiuQNylTG
	GsBYEkh0DirSAnMLrWqARgL9phxfzRuh8N3LxzHgxwbWEg4unVVgZfPPoCPCtlrsy7a/
	lja9/tpW+KCAkYyhQZ2uuPhbkPkbYTLfQ52jrFpur07ayshbEhodx465oans54N3pnI2
	eJI5P4AMrMpTPw9lAaVVCQLz4MmM0fQzHadkFnE61LM/JKYCgzXF3Xjb9xrHdiB6T5Ya
	fGWw==
MIME-Version: 1.0
X-Received: by 10.180.39.134 with SMTP id p6mr2712879wik.9.1379427195531; Tue,
	17 Sep 2013 07:13:15 -0700 (PDT)
Received: by 10.216.20.79 with HTTP; Tue, 17 Sep 2013 07:13:15 -0700 (PDT)
In-Reply-To: <CAAxsn=F-shyH01Pn4n17DnK68P2J5Usq2__p5jF-DFy-G0amiw@mail.gmail.com>
References: <CAAxsn=F-shyH01Pn4n17DnK68P2J5Usq2__p5jF-DFy-G0amiw@mail.gmail.com>
Date: Tue, 17 Sep 2013 15:13:15 +0100
Message-ID: <CAAxsn=GRUuND98s=qwyHTLvpGXcOz0uOODkMKA4SgES8oVKYQw@mail.gmail.com>
Subject: Re: OCaml compiler hacking session
From: Jeremy Yallop <jdy22@cam.ac.uk>
To: Jeremy Yallop <jdy22@cam.ac.uk>
Content-Type: text/plain; charset=UTF-8
Cc: Leo White <lpw25@cam.ac.uk>, cl-cprg-announce@lists.cam.ac.uk,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 14:13:15 -0000
Status: O
Content-Length: 1493
Lines: 37

Quick reminder: the compiler hacking session is taking place tomorrow
(Wednesday).  If you're planning to come along, please add your name
to the Doodle poll:

    http://doodle.com/k6y2tiihkrb5vuw4

On 4 September 2013 11:04, Jeremy Yallop <jdy22@cam.ac.uk> wrote:
> We're organising a second OCaml compiler-hacking session!  Note the
> change of venue: this time we're going to be at Makespace on Mill
> Lane.
>
> If you're planning to come along, it'd be helpful if you could
> indicate interest via Doodle:
>
>    http://doodle.com/k6y2tiihkrb5vuw4
>
> Where: Makespace Cambridge, 16 Mill Lane, Cambridge, CB2 1RX.
>        Directions: http://makespace.org/space/
>
> When: 6pm, Wednesday 18th September
>
> Who: anyone interested in improving OCaml.  Knowledge of OCaml
> programming will obviously be helpful, but prior experience of working
> on OCaml internals isn't necessary.
>
> What: fixing bugs, implementing new features, learning about OCaml internals
>
> We're defining "compiler" pretty broadly, to include anything that's
> part of the standard distribution, which means at least the standard
> library, runtime, tools (ocamldep, ocamllex, ocamlyacc, etc.), camlp4,
> ocamlbuild, the documentation, and the compiler itself.  We'll have
> suggestions for mini-projects for various levels of experience, but
> feel free to come along and work on whatever you fancy.
>
> We'll also be ordering pizza, so if you want to be counted for food
> you should aim to arrive by 6.30pm.


From Chris.Greenhalgh@nottingham.ac.uk Tue Sep 17 15:16:59 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VLw5L-0003Iz-Cw (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Tue, 17 Sep 2013 15:16:59 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1523560 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine02-20433-2.icritical.com ([195.62.217.151]:35958)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VLw5K-0002mk-G5 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Tue, 17 Sep 2013 15:16:59 +0100
Received: (qmail 28754 invoked from network); 17 Sep 2013 14:16:45 -0000
Received: from localhost (127.0.0.1)
	by engine02-20433-2.icritical.com with SMTP; 17 Sep 2013 14:16:45 -0000
Received: from engine02-20433-2.icritical.com ([127.0.0.1])
	by localhost (engine02-20433-2.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 28436-09 for <cl-mirage@lists.cam.ac.uk>;
	Tue, 17 Sep 2013 15:16:43 +0100 (BST)
Received: (qmail 27858 invoked by uid 599); 17 Sep 2013 14:15:38 -0000
Received: from unknown (HELO smtp3.nottingham.ac.uk) (128.243.44.55)
	by engine02-20433-2.icritical.com (qpsmtpd/0.28) with ESMTP;
	Tue, 17 Sep 2013 15:15:38 +0100
Received: from uiwexhub01.ad.nottingham.ac.uk ([128.243.15.133])
	by smtp3.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Chris.Greenhalgh@nottingham.ac.uk>)
	id 1VLw4E-0005iL-Gv; Tue, 17 Sep 2013 15:15:50 +0100
From: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
To: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
Date: Tue, 17 Sep 2013 15:15:49 +0100
Subject: RE: mirage examples running on android
Thread-Topic: mirage examples running on android
Thread-Index: Ac6zmiIRAB01QQniTI2d4Hek9smRGwAAdzQg
Message-ID: <4C20415C7327A849961F3B8421413725010CD5506A6A@EXCHANGE1.ad.nottingham.ac.uk>
References: <4C20415C7327A849961F3B8421413725010CD5506A5E@EXCHANGE1.ad.nottingham.ac.uk>
	<C9318ED6-F7A1-4CE1-A41E-14D525E43E8D@nottingham.ac.uk>
In-Reply-To: <C9318ED6-F7A1-4CE1-A41E-14D525E43E8D@nottingham.ac.uk>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine02-20433-2.icritical.com
Cc: "cl-mirage@lists.cam.ac.uk" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 14:16:59 -0000
Status: O
Content-Length: 1959
Lines: 44

On 17 September 2013 12:36 Richard  Mortier [mailto:Richard.Mortier@notting=
ham.ac.uk] wrote:

> ...was that clear from the mirage wiki install page though? (if not, i'll=
 update.)

Yes, I think if I had followed the mirage wiki one first it would have been=
 OK.

> re running socket examples-- presumably as root, ie., you need to be runn=
ing a rooted phone?

My phone (actually tablet) is rooted but I don't think I used root permissi=
ons doing this; it is also running cyanogenmod 10.1, not a stock 4.2.2 firm=
ware, but again I don't *think* this mattered. The android permissions mode=
l is a little unusual as each application has its own uid to support applic=
ation sandboxing so the only thing I'm not sure about is where the /data/lo=
cal/tmp directory came from originally (only shell - i.e. the adb shell - h=
as write permission to it). The web server was running on port 8080 so no i=
ssues there.

> i wonder if it's worth putting together something for the mirage wiki abo=
ut more advanced build environments/targets?

I've no idea if using ocamlfind toolchain is a sensible general way of doin=
g ocaml cross-compiling; I just followed what Vouillon's example... ;-)

--
Cheers,

R.




This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From Richard.Mortier@nottingham.ac.uk Tue Sep 17 15:52:17 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VLwdV-0004Rx-RQ (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Tue, 17 Sep 2013 15:52:17 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1523560 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine01-20433-1.icritical.com ([93.95.15.169]:51231)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VLwdU-00013R-FX (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Tue, 17 Sep 2013 15:52:17 +0100
Received: (qmail 31972 invoked from network); 17 Sep 2013 14:52:23 -0000
Received: from localhost (127.0.0.1)
	by engine01-20433-1.icritical.com with SMTP; 17 Sep 2013 14:52:23 -0000
Received: from engine01-20433-1.icritical.com ([127.0.0.1])
	by localhost (engine01-20433-1.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 31455-09 for <cl-mirage@lists.cam.ac.uk>;
	Tue, 17 Sep 2013 15:52:22 +0100 (BST)
Received: (qmail 30252 invoked by uid 599); 17 Sep 2013 14:50:56 -0000
Received: from unknown (HELO smtp3.nottingham.ac.uk) (128.243.44.55)
	by engine01-20433-1.icritical.com (qpsmtpd/0.28) with ESMTP;
	Tue, 17 Sep 2013 15:50:56 +0100
Received: from uiwexhub02.ad.nottingham.ac.uk ([128.243.15.132])
	by smtp3.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Richard.Mortier@nottingham.ac.uk>)
	id 1VLwc8-0001BB-IY; Tue, 17 Sep 2013 15:50:52 +0100
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
Date: Tue, 17 Sep 2013 15:50:51 +0100
Subject: Re: mirage examples running on android
Thread-Topic: mirage examples running on android
Thread-Index: Ac6ztU2thxDMn2yQQIeQ1bmaV+XISA==
Message-ID: <01034D0B-2D1E-4643-8E6B-A786A7474818@nottingham.ac.uk>
References: <4C20415C7327A849961F3B8421413725010CD5506A5E@EXCHANGE1.ad.nottingham.ac.uk>
	<C9318ED6-F7A1-4CE1-A41E-14D525E43E8D@nottingham.ac.uk>
	<4C20415C7327A849961F3B8421413725010CD5506A6A@EXCHANGE1.ad.nottingham.ac.uk>
In-Reply-To: <4C20415C7327A849961F3B8421413725010CD5506A6A@EXCHANGE1.ad.nottingham.ac.uk>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine01-20433-1.icritical.com
Cc: "cl-mirage@lists.cam.ac.uk" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 14:52:17 -0000
Status: O
Content-Length: 2329
Lines: 57


On 17 Sep 2013, at 15:15, Christopher Greenhalgh wrote:

> On 17 September 2013 12:36 Richard  Mortier [mailto:Richard.Mortier@notti=
ngham.ac.uk] wrote:
>=20
>> ...was that clear from the mirage wiki install page though? (if not, i'l=
l update.)
>=20
> Yes, I think if I had followed the mirage wiki one first it would have be=
en OK.

cool.

>> re running socket examples-- presumably as root, ie., you need to be run=
ning a rooted phone?
>=20
> My phone (actually tablet) is rooted but I don't think I used root permis=
sions doing this; it is also running cyanogenmod 10.1, not a stock 4.2.2 fi=
rmware, but again I don't *think* this mattered. The android permissions mo=
del is a little unusual as each application has its own uid to support appl=
ication sandboxing so the only thing I'm not sure about is where the /data/=
local/tmp directory came from originally (only shell - i.e. the adb shell -=
 has write permission to it). The web server was running on port 8080 so no=
 issues there.

ah- it was primarily that i thought it defaulted to port 80 that made me th=
ink this. it would be nice to know how far down the line we could go using =
mirage to develop "generic" android apps i guess.

>> i wonder if it's worth putting together something for the mirage wiki ab=
out more advanced build environments/targets?
>=20
> I've no idea if using ocamlfind toolchain is a sensible general way of do=
ing ocaml cross-compiling; I just followed what Vouillon's example... ;-)


fair enough -- maybe after others have some experience too then :)


--=20
Cheers,

R.




This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From warnegia@gmail.com Tue Sep 17 21:48:47 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VM2CV-0003nd-JN (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Tue, 17 Sep 2013 21:48:47 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1523560 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.212.178 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (warnegia[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f178.google.com ([209.85.212.178]:43046)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1VM2CU-0004uj-j7 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Tue, 17 Sep 2013 21:48:47 +0100
Received: by mail-wi0-f178.google.com with SMTP id hn9so5534044wib.17
	for <cl-mirage@lists.cam.ac.uk>; Tue, 17 Sep 2013 13:48:46 -0700 (PDT)
X-Received: by 10.180.74.164 with SMTP id u4mr4035139wiv.17.1379450926739;
	Tue, 17 Sep 2013 13:48:46 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.217.115.65 with HTTP; Tue, 17 Sep 2013 13:48:26 -0700 (PDT)
From: William Le Ferrand <warnegia@gmail.com>
Date: Tue, 17 Sep 2013 13:48:26 -0700
Message-ID: <CAGS5m-=RrjSfqcFbMCoRpYa3OB_x5F=dgDZp3=nMuf0GEWnKPQ@mail.gmail.com>
Subject: mirage Xen microkernel monitoring in EC2
To: cl-mirage <cl-mirage@lists.cam.ac.uk>
Content-Type: multipart/alternative; boundary=f46d043c7f567938c104e69a72de
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 20:48:47 -0000
Status: O
Content-Length: 1864
Lines: 56

--f46d043c7f567938c104e69a72de
Content-Type: text/plain; charset=ISO-8859-1

Dear all,

What would be the best strategy to monitor a Mirage-brewed xen microkernel
running in EC2?

I'm trying to convince a customer to try Mirage, and the first question
they have is "how do we monitor this thing?". Xen has snmp support but it
probably can't be activated in EC2.

Does this question even make sense :) ?

Thanks in advance,

Best,

William


-- 
William Le Ferrand

Mobile : (+1) (415) 683-1484
Web : http://williamleferrand.github.com/
 <http://www.linkedin.com/in/williamleferrand>

--f46d043c7f567938c104e69a72de
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Dear all,<div><br></div><div>What would be the best strate=
gy to monitor a Mirage-brewed xen microkernel running in EC2?=A0</div><div>=
<br></div><div>I&#39;m trying to convince a customer to try Mirage, and the=
 first question they have is &quot;how do we monitor this thing?&quot;. Xen=
 has snmp support but it probably can&#39;t be activated in EC2.=A0</div>

<div><br></div><div>Does this question even make sense :) ?=A0</div><div><b=
r></div><div>Thanks in advance,</div><div><br></div><div>Best,</div><div><b=
r></div><div>William</div><div><br clear=3D"all"><div><br></div>-- <br>Will=
iam Le Ferrand<br>

<br><div><div>Mobile :=A0(+1)=A0<span style=3D"font-family:Arial,sans-serif=
;border-collapse:collapse;color:rgb(51,51,51)">(415) 683-1484</span></div><=
div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"borde=
r-collapse:collapse">Web :=A0<a href=3D"http://williamleferrand.github.com/=
" target=3D"_blank">http://williamleferrand.github.com/</a></span></font></=
div>

<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</div></div>

--f46d043c7f567938c104e69a72de--


From Richard.Mortier@nottingham.ac.uk Tue Sep 17 22:53:01 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VM3Cf-0004b2-KO (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Tue, 17 Sep 2013 22:53:01 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1523560 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine03-20433-8.icritical.com ([93.159.202.52]:36850)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1VM3Cf-0002FI-0t (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Tue, 17 Sep 2013 22:53:01 +0100
Received: (qmail 11631 invoked from network); 17 Sep 2013 21:52:53 -0000
Received: from localhost (127.0.0.1)
	by engine03-20433-8.icritical.com with SMTP; 17 Sep 2013 21:52:53 -0000
Received: from engine03-20433-8.icritical.com ([127.0.0.1])
	by localhost (engine03-20433-8.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 11504-02 for <cl-mirage@lists.cam.ac.uk>;
	Tue, 17 Sep 2013 22:52:52 +0100 (BST)
Received: (qmail 11622 invoked by uid 599); 17 Sep 2013 21:52:52 -0000
Received: from unknown (HELO smtp3.nottingham.ac.uk) (128.243.44.55)
	by engine03-20433-8.icritical.com (qpsmtpd/0.28) with ESMTP;
	Tue, 17 Sep 2013 22:52:52 +0100
Received: from uiwexhub02.ad.nottingham.ac.uk ([128.243.15.132])
	by smtp3.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Richard.Mortier@nottingham.ac.uk>)
	id 1VM3Cc-0007Ni-29
	for cl-mirage@lists.cam.ac.uk; Tue, 17 Sep 2013 22:52:58 +0100
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: William Le Ferrand <warnegia@gmail.com>
Date: Tue, 17 Sep 2013 22:52:57 +0100
Subject: Re: mirage Xen microkernel monitoring in EC2
Thread-Topic: mirage Xen microkernel monitoring in EC2
Thread-Index: Ac6z8EUvdjq05UiVSoWdwFIcfRLppA==
Message-ID: <BA40AD24-2CD8-4070-8804-9BD71C916374@nottingham.ac.uk>
References: <CAGS5m-=RrjSfqcFbMCoRpYa3OB_x5F=dgDZp3=nMuf0GEWnKPQ@mail.gmail.com>
In-Reply-To: <CAGS5m-=RrjSfqcFbMCoRpYa3OB_x5F=dgDZp3=nMuf0GEWnKPQ@mail.gmail.com>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine03-20433-8.icritical.com
Cc: cl-mirage <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 21:53:01 -0000
Status: O
Content-Length: 1477
Lines: 37


On 17 Sep 2013, at 21:48, William Le Ferrand wrote:

> I'm trying to convince a customer to try Mirage,

cool!  would be very interested in any experiences doing that you can share=
 ...

> and the first question they have is "how do we monitor this thing?". Xen =
has snmp support but it probably can't be activated in EC2.=20
>=20
> Does this question even make sense :) ?=20

it does to me; i can't answer the specifics regarding snmp access to microk=
ernels on ec2 through xen, but it does make me think that perhaps we should=
 add an SNMP stack to the list of desirable mirage libraries! :)

(and possibly consider starting to define a "unikernel MIB" given the other=
 activity in this space...)

--=20
Cheers,

R.




This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From scott.dj@gmail.com Tue Sep 17 22:56:24 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VM3Fw-0004eC-OL (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Tue, 17 Sep 2013 22:56:24 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1523560 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.220.44 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (scott.dj[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-pa0-f44.google.com ([209.85.220.44]:36722)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1VM3Fv-0003nL-Er (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Tue, 17 Sep 2013 22:56:24 +0100
Received: by mail-pa0-f44.google.com with SMTP id fz6so7385335pac.17
	for <cl-mirage@lists.cam.ac.uk>; Tue, 17 Sep 2013 14:56:22 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.68.216.33 with SMTP id on1mr37363498pbc.107.1379454982416;
	Tue, 17 Sep 2013 14:56:22 -0700 (PDT)
Received: by 10.70.56.36 with HTTP; Tue, 17 Sep 2013 14:56:22 -0700 (PDT)
In-Reply-To: <CAGS5m-=RrjSfqcFbMCoRpYa3OB_x5F=dgDZp3=nMuf0GEWnKPQ@mail.gmail.com>
References: <CAGS5m-=RrjSfqcFbMCoRpYa3OB_x5F=dgDZp3=nMuf0GEWnKPQ@mail.gmail.com>
Date: Tue, 17 Sep 2013 22:56:22 +0100
Message-ID: <CAG_esB1gqHKH=_fd_4cx1JJvWR2o+psKOtFWwmdPieOxi+z=Og@mail.gmail.com>
Subject: Re: mirage Xen microkernel monitoring in EC2
From: David Scott <scott.dj@gmail.com>
To: William Le Ferrand <warnegia@gmail.com>
Content-Type: multipart/alternative; boundary=047d7b2eda7535f0d004e69b64f1
Cc: cl-mirage <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 21:56:24 -0000
Status: O
Content-Length: 4566
Lines: 117

--047d7b2eda7535f0d004e69b64f1
Content-Type: text/plain; charset=ISO-8859-1

Hi,

I think the question does make sense :)

We're still working on the "mirari" tool which is intended to make both
build and deployment easier. One idea is that "mirari list" would be able
to enumerate and query the status of running Mirage instances-- this could
be used for basic monitoring.

Before "mirari list" is ready, perhaps they could run some external
monitoring tool like nagios? Such a tool could periodically check the
health of the Mirage instance(s) by ping or perhaps a simple HTTP
transaction (depending on how the specific Mirage kernel is configured).
Perhaps in future we should write an SNMP library for Mirage?

Another option would be to write a simple Mirage app to monitor another one
by periodic ping/HTTP. Perhaps Mirage apps could be arranged in
mutually-monitoring pairs. It might be better to start simpler than this
though :)

Cheers,
Dave



On Tue, Sep 17, 2013 at 9:48 PM, William Le Ferrand <warnegia@gmail.com>wrote:

> Dear all,
>
> What would be the best strategy to monitor a Mirage-brewed xen microkernel
> running in EC2?
>
> I'm trying to convince a customer to try Mirage, and the first question
> they have is "how do we monitor this thing?". Xen has snmp support but it
> probably can't be activated in EC2.
>
> Does this question even make sense :) ?
>
> Thanks in advance,
>
> Best,
>
> William
>
>
> --
> William Le Ferrand
>
> Mobile : (+1) (415) 683-1484
> Web : http://williamleferrand.github.com/
>  <http://www.linkedin.com/in/williamleferrand>
>



-- 
Dave Scott

--047d7b2eda7535f0d004e69b64f1
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi,<div><br></div><div>I think the question does make sens=
e :)</div><div><br></div><div>We&#39;re still working on the &quot;mirari&q=
uot; tool which is intended to make both build and deployment easier. One i=
dea is that &quot;mirari list&quot; would be able to enumerate and query th=
e status of running Mirage instances-- this could be used for basic monitor=
ing.</div>
<div><br></div><div>Before &quot;mirari list&quot; is ready, perhaps they c=
ould run some external monitoring tool like nagios? Such a tool could perio=
dically check the health of the Mirage instance(s) by ping or perhaps a sim=
ple HTTP transaction (depending on how the specific Mirage kernel is config=
ured). Perhaps in future we should write an SNMP library for Mirage?</div>
<div><br></div><div>Another option would be to write a simple Mirage app to=
 monitor another one by periodic ping/HTTP. Perhaps Mirage apps could be ar=
ranged in mutually-monitoring pairs. It might be better to start simpler th=
an this though :)</div>
<div><br></div><div>Cheers,</div><div>Dave</div><div><br></div></div><div c=
lass=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On Tue, Sep 17, 201=
3 at 9:48 PM, William Le Ferrand <span dir=3D"ltr">&lt;<a href=3D"mailto:wa=
rnegia@gmail.com" target=3D"_blank">warnegia@gmail.com</a>&gt;</span> wrote=
:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Dear all,<div><br></div><di=
v>What would be the best strategy to monitor a Mirage-brewed xen microkerne=
l running in EC2?=A0</div>
<div><br></div><div>I&#39;m trying to convince a customer to try Mirage, an=
d the first question they have is &quot;how do we monitor this thing?&quot;=
. Xen has snmp support but it probably can&#39;t be activated in EC2.=A0</d=
iv>


<div><br></div><div>Does this question even make sense :) ?=A0</div><div><b=
r></div><div>Thanks in advance,</div><div><br></div><div>Best,</div><div><b=
r></div><div>William</div><span class=3D"HOEnZb"><font color=3D"#888888"><d=
iv>
<br clear=3D"all"><div><br></div>-- <br>William Le Ferrand<br>

<br><div><div>Mobile :=A0(+1)=A0<span style=3D"font-family:Arial,sans-serif=
;border-collapse:collapse;color:rgb(51,51,51)"><a href=3D"tel:%28415%29%206=
83-1484" value=3D"+14156831484" target=3D"_blank">(415) 683-1484</a></span>=
</div><div>
<font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"border-co=
llapse:collapse">Web :=A0<a href=3D"http://williamleferrand.github.com/" ta=
rget=3D"_blank">http://williamleferrand.github.com/</a></span></font></div>

<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</div></font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>Dave Scott
</div>

--047d7b2eda7535f0d004e69b64f1--


From warnegia@gmail.com Tue Sep 17 23:05:07 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VM3ON-0004hs-7z (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Tue, 17 Sep 2013 23:05:07 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1523560 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.212.171 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (warnegia[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
	*  0.0 T_FILL_THIS_FORM_SHORT Fill in a short form with personal
	*      information
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f171.google.com ([209.85.212.171]:43442)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1VM3OM-0005Ss-Di (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Tue, 17 Sep 2013 23:05:07 +0100
Received: by mail-wi0-f171.google.com with SMTP id hm2so5551297wib.16
	for <cl-mirage@lists.cam.ac.uk>; Tue, 17 Sep 2013 15:05:06 -0700 (PDT)
X-Received: by 10.180.160.203 with SMTP id xm11mr4269410wib.17.1379455505926; 
	Tue, 17 Sep 2013 15:05:05 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.217.115.65 with HTTP; Tue, 17 Sep 2013 15:04:45 -0700 (PDT)
In-Reply-To: <CAG_esB1gqHKH=_fd_4cx1JJvWR2o+psKOtFWwmdPieOxi+z=Og@mail.gmail.com>
References: <CAGS5m-=RrjSfqcFbMCoRpYa3OB_x5F=dgDZp3=nMuf0GEWnKPQ@mail.gmail.com>
	<CAG_esB1gqHKH=_fd_4cx1JJvWR2o+psKOtFWwmdPieOxi+z=Og@mail.gmail.com>
From: William Le Ferrand <warnegia@gmail.com>
Date: Tue, 17 Sep 2013 15:04:45 -0700
Message-ID: <CAGS5m-=KO7qjUO5=k4kFAwv_xMTTbhDfOvkkBqWVZiaNFTd9kQ@mail.gmail.com>
Subject: Re: mirage Xen microkernel monitoring in EC2
To: David Scott <scott.dj@gmail.com>
Content-Type: multipart/alternative; boundary=047d7b66f9076a11bc04e69b8352
Cc: cl-mirage <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 22:05:07 -0000
Status: O
Content-Length: 6773
Lines: 184

--047d7b66f9076a11bc04e69b8352
Content-Type: text/plain; charset=ISO-8859-1

Thanks Richard, thanks David.

Yes, basic application-level monitoring could be done via HTTP, but I was
more interested in measuring I/O performance, bandwidth usage - I'm not
sure if/how this can be measured from inside the microkernel. Is the
microkernel even aware of the share of the underlying cpu it has access to?
(again - if this question makes sense :))

Cheers

William



On Tue, Sep 17, 2013 at 2:56 PM, David Scott <scott.dj@gmail.com> wrote:

> Hi,
>
> I think the question does make sense :)
>
> We're still working on the "mirari" tool which is intended to make both
> build and deployment easier. One idea is that "mirari list" would be able
> to enumerate and query the status of running Mirage instances-- this could
> be used for basic monitoring.
>
> Before "mirari list" is ready, perhaps they could run some external
> monitoring tool like nagios? Such a tool could periodically check the
> health of the Mirage instance(s) by ping or perhaps a simple HTTP
> transaction (depending on how the specific Mirage kernel is configured).
> Perhaps in future we should write an SNMP library for Mirage?
>
> Another option would be to write a simple Mirage app to monitor another
> one by periodic ping/HTTP. Perhaps Mirage apps could be arranged in
> mutually-monitoring pairs. It might be better to start simpler than this
> though :)
>
> Cheers,
> Dave
>
>
>
> On Tue, Sep 17, 2013 at 9:48 PM, William Le Ferrand <warnegia@gmail.com>wrote:
>
>> Dear all,
>>
>> What would be the best strategy to monitor a Mirage-brewed xen
>> microkernel running in EC2?
>>
>> I'm trying to convince a customer to try Mirage, and the first question
>> they have is "how do we monitor this thing?". Xen has snmp support but it
>> probably can't be activated in EC2.
>>
>> Does this question even make sense :) ?
>>
>> Thanks in advance,
>>
>> Best,
>>
>> William
>>
>>
>> --
>> William Le Ferrand
>>
>> Mobile : (+1) (415) 683-1484
>> Web : http://williamleferrand.github.com/
>>  <http://www.linkedin.com/in/williamleferrand>
>>
>
>
>
> --
> Dave Scott
>



-- 
William Le Ferrand

Mobile : (+1) (415) 683-1484
Web : http://williamleferrand.github.com/
<http://www.linkedin.com/in/williamleferrand>

--047d7b66f9076a11bc04e69b8352
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Thanks Richard, thanks David.=A0<div><br></div><div>Yes, b=
asic application-level monitoring could be done via HTTP, but I was more in=
terested in measuring I/O performance, bandwidth usage - I&#39;m not sure i=
f/how this can be measured from inside the microkernel. Is the microkernel =
even aware of the share of the underlying cpu it has access to? (again - if=
 this question makes sense :))</div>

<div><br></div><div>Cheers</div><div><br></div><div>William<br><div><br></d=
iv></div></div><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote=
">On Tue, Sep 17, 2013 at 2:56 PM, David Scott <span dir=3D"ltr">&lt;<a hre=
f=3D"mailto:scott.dj@gmail.com" target=3D"_blank">scott.dj@gmail.com</a>&gt=
;</span> wrote:<br>

<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hi,<div><br></div><div>I th=
ink the question does make sense :)</div><div><br></div><div>We&#39;re stil=
l working on the &quot;mirari&quot; tool which is intended to make both bui=
ld and deployment easier. One idea is that &quot;mirari list&quot; would be=
 able to enumerate and query the status of running Mirage instances-- this =
could be used for basic monitoring.</div>


<div><br></div><div>Before &quot;mirari list&quot; is ready, perhaps they c=
ould run some external monitoring tool like nagios? Such a tool could perio=
dically check the health of the Mirage instance(s) by ping or perhaps a sim=
ple HTTP transaction (depending on how the specific Mirage kernel is config=
ured). Perhaps in future we should write an SNMP library for Mirage?</div>


<div><br></div><div>Another option would be to write a simple Mirage app to=
 monitor another one by periodic ping/HTTP. Perhaps Mirage apps could be ar=
ranged in mutually-monitoring pairs. It might be better to start simpler th=
an this though :)</div>


<div><br></div><div>Cheers,</div><div>Dave</div><div><br></div></div><div c=
lass=3D"gmail_extra"><div><div class=3D"h5"><br><br><div class=3D"gmail_quo=
te">On Tue, Sep 17, 2013 at 9:48 PM, William Le Ferrand <span dir=3D"ltr">&=
lt;<a href=3D"mailto:warnegia@gmail.com" target=3D"_blank">warnegia@gmail.c=
om</a>&gt;</span> wrote:<br>


<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Dear all,<div><br></div><di=
v>What would be the best strategy to monitor a Mirage-brewed xen microkerne=
l running in EC2?=A0</div>


<div><br></div><div>I&#39;m trying to convince a customer to try Mirage, an=
d the first question they have is &quot;how do we monitor this thing?&quot;=
. Xen has snmp support but it probably can&#39;t be activated in EC2.=A0</d=
iv>




<div><br></div><div>Does this question even make sense :) ?=A0</div><div><b=
r></div><div>Thanks in advance,</div><div><br></div><div>Best,</div><div><b=
r></div><div>William</div><span><font color=3D"#888888"><div>
<br clear=3D"all"><div><br></div>-- <br>William Le Ferrand<br>

<br><div><div>Mobile :=A0(+1)=A0<span style=3D"font-family:Arial,sans-serif=
;border-collapse:collapse;color:rgb(51,51,51)"><a href=3D"tel:%28415%29%206=
83-1484" value=3D"+14156831484" target=3D"_blank">(415) 683-1484</a></span>=
</div><div>


<font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"border-co=
llapse:collapse">Web :=A0<a href=3D"http://williamleferrand.github.com/" ta=
rget=3D"_blank">http://williamleferrand.github.com/</a></span></font></div>

<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</div></font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div></div></div><span c=
lass=3D"HOEnZb"><font color=3D"#888888">-- <br>Dave Scott
</font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>William Le F=
errand<br><br><div><div>Mobile :=A0(+1)=A0<span style=3D"font-family:Arial,=
sans-serif;border-collapse:collapse;color:rgb(51,51,51)">(415) 683-1484</sp=
an></div>

<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=A0<a href=3D"http://williamleferrand.github.com=
/" target=3D"_blank">http://williamleferrand.github.com/</a></span></font><=
/div><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_bla=
nk"></a></div>


</div>

--047d7b66f9076a11bc04e69b8352--


From warnegia@gmail.com Tue Sep 17 23:10:50 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VM3Tu-0004pv-C6 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Tue, 17 Sep 2013 23:10:50 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1523560 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [74.125.82.51 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (warnegia[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
	*  0.0 T_FILL_THIS_FORM_SHORT Fill in a short form with personal
	*      information
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wg0-f51.google.com ([74.125.82.51]:40832)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1VM3Tt-00073b-Eg (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Tue, 17 Sep 2013 23:10:50 +0100
Received: by mail-wg0-f51.google.com with SMTP id c11so5546780wgh.6
	for <cl-mirage@lists.cam.ac.uk>; Tue, 17 Sep 2013 15:10:49 -0700 (PDT)
X-Received: by 10.180.74.164 with SMTP id u4mr4286779wiv.17.1379455848948;
	Tue, 17 Sep 2013 15:10:48 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.217.115.65 with HTTP; Tue, 17 Sep 2013 15:10:28 -0700 (PDT)
In-Reply-To: <CAGS5m-=KO7qjUO5=k4kFAwv_xMTTbhDfOvkkBqWVZiaNFTd9kQ@mail.gmail.com>
References: <CAGS5m-=RrjSfqcFbMCoRpYa3OB_x5F=dgDZp3=nMuf0GEWnKPQ@mail.gmail.com>
	<CAG_esB1gqHKH=_fd_4cx1JJvWR2o+psKOtFWwmdPieOxi+z=Og@mail.gmail.com>
	<CAGS5m-=KO7qjUO5=k4kFAwv_xMTTbhDfOvkkBqWVZiaNFTd9kQ@mail.gmail.com>
From: William Le Ferrand <warnegia@gmail.com>
Date: Tue, 17 Sep 2013 15:10:28 -0700
Message-ID: <CAGS5m-=Zn3b9LysckPV4ALr0L2e+ogWbq+NbSBFazsGH_aqMCQ@mail.gmail.com>
Subject: Re: mirage Xen microkernel monitoring in EC2
To: David Scott <scott.dj@gmail.com>
Content-Type: multipart/alternative; boundary=f46d043c7f56dc2e2504e69b97af
Cc: cl-mirage <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 22:10:50 -0000
Status: O
Content-Length: 8365
Lines: 232

--f46d043c7f56dc2e2504e69b97af
Content-Type: text/plain; charset=ISO-8859-1

Well, I guess that I could use AWS cloudwatch in my case, for a fee!


On Tue, Sep 17, 2013 at 3:04 PM, William Le Ferrand <warnegia@gmail.com>wrote:

> Thanks Richard, thanks David.
>
> Yes, basic application-level monitoring could be done via HTTP, but I was
> more interested in measuring I/O performance, bandwidth usage - I'm not
> sure if/how this can be measured from inside the microkernel. Is the
> microkernel even aware of the share of the underlying cpu it has access to?
> (again - if this question makes sense :))
>
> Cheers
>
> William
>
>
>
> On Tue, Sep 17, 2013 at 2:56 PM, David Scott <scott.dj@gmail.com> wrote:
>
>> Hi,
>>
>> I think the question does make sense :)
>>
>> We're still working on the "mirari" tool which is intended to make both
>> build and deployment easier. One idea is that "mirari list" would be able
>> to enumerate and query the status of running Mirage instances-- this could
>> be used for basic monitoring.
>>
>> Before "mirari list" is ready, perhaps they could run some external
>> monitoring tool like nagios? Such a tool could periodically check the
>> health of the Mirage instance(s) by ping or perhaps a simple HTTP
>> transaction (depending on how the specific Mirage kernel is configured).
>> Perhaps in future we should write an SNMP library for Mirage?
>>
>> Another option would be to write a simple Mirage app to monitor another
>> one by periodic ping/HTTP. Perhaps Mirage apps could be arranged in
>> mutually-monitoring pairs. It might be better to start simpler than this
>> though :)
>>
>> Cheers,
>> Dave
>>
>>
>>
>> On Tue, Sep 17, 2013 at 9:48 PM, William Le Ferrand <warnegia@gmail.com>wrote:
>>
>>> Dear all,
>>>
>>> What would be the best strategy to monitor a Mirage-brewed xen
>>> microkernel running in EC2?
>>>
>>> I'm trying to convince a customer to try Mirage, and the first question
>>> they have is "how do we monitor this thing?". Xen has snmp support but it
>>> probably can't be activated in EC2.
>>>
>>> Does this question even make sense :) ?
>>>
>>> Thanks in advance,
>>>
>>> Best,
>>>
>>> William
>>>
>>>
>>> --
>>> William Le Ferrand
>>>
>>> Mobile : (+1) (415) 683-1484
>>> Web : http://williamleferrand.github.com/
>>>  <http://www.linkedin.com/in/williamleferrand>
>>>
>>
>>
>>
>> --
>> Dave Scott
>>
>
>
>
> --
> William Le Ferrand
>
> Mobile : (+1) (415) 683-1484
> Web : http://williamleferrand.github.com/
> <http://www.linkedin.com/in/williamleferrand>
>



-- 
William Le Ferrand

Mobile : (+1) (415) 683-1484
Web : http://williamleferrand.github.com/
<http://www.linkedin.com/in/williamleferrand>

--f46d043c7f56dc2e2504e69b97af
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Well, I guess that I could use AWS cloudwatch in my case, =
for a fee!</div><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quot=
e">On Tue, Sep 17, 2013 at 3:04 PM, William Le Ferrand <span dir=3D"ltr">&l=
t;<a href=3D"mailto:warnegia@gmail.com" target=3D"_blank">warnegia@gmail.co=
m</a>&gt;</span> wrote:<br>

<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Thanks Richard, thanks Davi=
d.=A0<div><br></div><div>Yes, basic application-level monitoring could be d=
one via HTTP, but I was more interested in measuring I/O performance, bandw=
idth usage - I&#39;m not sure if/how this can be measured from inside the m=
icrokernel. Is the microkernel even aware of the share of the underlying cp=
u it has access to? (again - if this question makes sense :))</div>


<div><br></div><div>Cheers</div><span class=3D"HOEnZb"><font color=3D"#8888=
88"><div><br></div><div>William<br><div><br></div></div></font></span></div=
><div class=3D"HOEnZb"><div class=3D"h5"><div class=3D"gmail_extra"><br><br=
><div class=3D"gmail_quote">

On Tue, Sep 17, 2013 at 2:56 PM, David Scott <span dir=3D"ltr">&lt;<a href=
=3D"mailto:scott.dj@gmail.com" target=3D"_blank">scott.dj@gmail.com</a>&gt;=
</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hi,<div><br></div><div>I th=
ink the question does make sense :)</div><div><br></div><div>We&#39;re stil=
l working on the &quot;mirari&quot; tool which is intended to make both bui=
ld and deployment easier. One idea is that &quot;mirari list&quot; would be=
 able to enumerate and query the status of running Mirage instances-- this =
could be used for basic monitoring.</div>



<div><br></div><div>Before &quot;mirari list&quot; is ready, perhaps they c=
ould run some external monitoring tool like nagios? Such a tool could perio=
dically check the health of the Mirage instance(s) by ping or perhaps a sim=
ple HTTP transaction (depending on how the specific Mirage kernel is config=
ured). Perhaps in future we should write an SNMP library for Mirage?</div>



<div><br></div><div>Another option would be to write a simple Mirage app to=
 monitor another one by periodic ping/HTTP. Perhaps Mirage apps could be ar=
ranged in mutually-monitoring pairs. It might be better to start simpler th=
an this though :)</div>



<div><br></div><div>Cheers,</div><div>Dave</div><div><br></div></div><div c=
lass=3D"gmail_extra"><div><div><br><br><div class=3D"gmail_quote">On Tue, S=
ep 17, 2013 at 9:48 PM, William Le Ferrand <span dir=3D"ltr">&lt;<a href=3D=
"mailto:warnegia@gmail.com" target=3D"_blank">warnegia@gmail.com</a>&gt;</s=
pan> wrote:<br>



<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Dear all,<div><br></div><di=
v>What would be the best strategy to monitor a Mirage-brewed xen microkerne=
l running in EC2?=A0</div>



<div><br></div><div>I&#39;m trying to convince a customer to try Mirage, an=
d the first question they have is &quot;how do we monitor this thing?&quot;=
. Xen has snmp support but it probably can&#39;t be activated in EC2.=A0</d=
iv>





<div><br></div><div>Does this question even make sense :) ?=A0</div><div><b=
r></div><div>Thanks in advance,</div><div><br></div><div>Best,</div><div><b=
r></div><div>William</div><span><font color=3D"#888888"><div>
<br clear=3D"all"><div><br></div>-- <br>William Le Ferrand<br>

<br><div><div>Mobile :=A0(+1)=A0<span style=3D"font-family:Arial,sans-serif=
;border-collapse:collapse;color:rgb(51,51,51)"><a href=3D"tel:%28415%29%206=
83-1484" value=3D"+14156831484" target=3D"_blank">(415) 683-1484</a></span>=
</div><div>



<font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"border-co=
llapse:collapse">Web :=A0<a href=3D"http://williamleferrand.github.com/" ta=
rget=3D"_blank">http://williamleferrand.github.com/</a></span></font></div>

<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</div></font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div></div></div><span><=
font color=3D"#888888">-- <br>Dave Scott
</font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>William Le F=
errand<br><br><div><div>Mobile :=A0(+1)=A0<span style=3D"font-family:Arial,=
sans-serif;border-collapse:collapse;color:rgb(51,51,51)"><a href=3D"tel:%28=
415%29%20683-1484" value=3D"+14156831484" target=3D"_blank">(415) 683-1484<=
/a></span></div>


<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=A0<a href=3D"http://williamleferrand.github.com=
/" target=3D"_blank">http://williamleferrand.github.com/</a></span></font><=
/div><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_bla=
nk"></a></div>



</div>
</div></div></blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>=
William Le Ferrand<br><br><div><div>Mobile :=A0(+1)=A0<span style=3D"font-f=
amily:Arial,sans-serif;border-collapse:collapse;color:rgb(51,51,51)">(415) =
683-1484</span></div>

<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=A0<a href=3D"http://williamleferrand.github.com=
/" target=3D"_blank">http://williamleferrand.github.com/</a></span></font><=
/div><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_bla=
nk"></a></div>


</div>

--f46d043c7f56dc2e2504e69b97af--


From scott.dj@gmail.com Tue Sep 17 23:14:01 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VM3Wz-0004sN-C2 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Tue, 17 Sep 2013 23:14:01 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1523560 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.160.53 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (scott.dj[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-pb0-f53.google.com ([209.85.160.53]:64653)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VM3Wy-0006vC-1O (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Tue, 17 Sep 2013 23:14:01 +0100
Received: by mail-pb0-f53.google.com with SMTP id up15so6182669pbc.12
	for <cl-mirage@lists.cam.ac.uk>; Tue, 17 Sep 2013 15:13:59 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.68.134.202 with SMTP id pm10mr37639744pbb.2.1379456039203;
	Tue, 17 Sep 2013 15:13:59 -0700 (PDT)
Received: by 10.70.56.36 with HTTP; Tue, 17 Sep 2013 15:13:59 -0700 (PDT)
In-Reply-To: <CAGS5m-=KO7qjUO5=k4kFAwv_xMTTbhDfOvkkBqWVZiaNFTd9kQ@mail.gmail.com>
References: <CAGS5m-=RrjSfqcFbMCoRpYa3OB_x5F=dgDZp3=nMuf0GEWnKPQ@mail.gmail.com>
	<CAG_esB1gqHKH=_fd_4cx1JJvWR2o+psKOtFWwmdPieOxi+z=Og@mail.gmail.com>
	<CAGS5m-=KO7qjUO5=k4kFAwv_xMTTbhDfOvkkBqWVZiaNFTd9kQ@mail.gmail.com>
Date: Tue, 17 Sep 2013 23:13:59 +0100
Message-ID: <CAG_esB3PxNWKfcWWJ77ruxoyVB9J0vY=TDYagLR_yemyfJNk8w@mail.gmail.com>
Subject: Re: mirage Xen microkernel monitoring in EC2
From: David Scott <scott.dj@gmail.com>
To: William Le Ferrand <warnegia@gmail.com>
Content-Type: multipart/alternative; boundary=047d7b10cb37333dc104e69ba399
Cc: cl-mirage <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 22:14:01 -0000
Status: O
Content-Length: 8817
Lines: 238

--047d7b10cb37333dc104e69ba399
Content-Type: text/plain; charset=ISO-8859-1

Hi,

The Mirage block and network drivers are in a position to monitor I/O
throughput... but we've not fully instrumented them with performance
counters yet; it's a bit of a work-in-progress. We should agree on a common
interface soon to query the performance counters and start baking them in.

I'm not totally sure how much you can tell about the underlying physical
cpu -- normally on a xen system you would use a privileged hypercall to
monitor that, on the host side. Perhaps AWS provides some APIs which expose
this information?

Cheers,
Dave


On Tue, Sep 17, 2013 at 11:04 PM, William Le Ferrand <warnegia@gmail.com>wrote:

> Thanks Richard, thanks David.
>
> Yes, basic application-level monitoring could be done via HTTP, but I was
> more interested in measuring I/O performance, bandwidth usage - I'm not
> sure if/how this can be measured from inside the microkernel. Is the
> microkernel even aware of the share of the underlying cpu it has access to?
> (again - if this question makes sense :))
>
> Cheers
>
> William
>
>
>
> On Tue, Sep 17, 2013 at 2:56 PM, David Scott <scott.dj@gmail.com> wrote:
>
>> Hi,
>>
>> I think the question does make sense :)
>>
>> We're still working on the "mirari" tool which is intended to make both
>> build and deployment easier. One idea is that "mirari list" would be able
>> to enumerate and query the status of running Mirage instances-- this could
>> be used for basic monitoring.
>>
>> Before "mirari list" is ready, perhaps they could run some external
>> monitoring tool like nagios? Such a tool could periodically check the
>> health of the Mirage instance(s) by ping or perhaps a simple HTTP
>> transaction (depending on how the specific Mirage kernel is configured).
>> Perhaps in future we should write an SNMP library for Mirage?
>>
>> Another option would be to write a simple Mirage app to monitor another
>> one by periodic ping/HTTP. Perhaps Mirage apps could be arranged in
>> mutually-monitoring pairs. It might be better to start simpler than this
>> though :)
>>
>> Cheers,
>> Dave
>>
>>
>>
>> On Tue, Sep 17, 2013 at 9:48 PM, William Le Ferrand <warnegia@gmail.com>wrote:
>>
>>> Dear all,
>>>
>>> What would be the best strategy to monitor a Mirage-brewed xen
>>> microkernel running in EC2?
>>>
>>> I'm trying to convince a customer to try Mirage, and the first question
>>> they have is "how do we monitor this thing?". Xen has snmp support but it
>>> probably can't be activated in EC2.
>>>
>>> Does this question even make sense :) ?
>>>
>>> Thanks in advance,
>>>
>>> Best,
>>>
>>> William
>>>
>>>
>>> --
>>> William Le Ferrand
>>>
>>> Mobile : (+1) (415) 683-1484
>>> Web : http://williamleferrand.github.com/
>>>  <http://www.linkedin.com/in/williamleferrand>
>>>
>>
>>
>>
>> --
>> Dave Scott
>>
>
>
>
> --
> William Le Ferrand
>
> Mobile : (+1) (415) 683-1484
> Web : http://williamleferrand.github.com/
> <http://www.linkedin.com/in/williamleferrand>
>



-- 
Dave Scott

--047d7b10cb37333dc104e69ba399
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi,<div><br></div><div>The Mirage block and network driver=
s are in a position to monitor I/O throughput... but we&#39;ve not fully in=
strumented them with performance counters yet; it&#39;s a bit of a work-in-=
progress. We should agree on a common interface soon to query the performan=
ce counters and start baking them in.</div>
<div><br></div><div>I&#39;m not totally sure how much you can tell about th=
e underlying physical cpu -- normally on a xen system you would use a privi=
leged hypercall to monitor that, on the host side. Perhaps AWS provides som=
e APIs which expose this information?</div>
<div><br></div><div>Cheers,</div><div>Dave</div></div><div class=3D"gmail_e=
xtra"><br><br><div class=3D"gmail_quote">On Tue, Sep 17, 2013 at 11:04 PM, =
William Le Ferrand <span dir=3D"ltr">&lt;<a href=3D"mailto:warnegia@gmail.c=
om" target=3D"_blank">warnegia@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Thanks Richard, thanks Davi=
d.=A0<div><br></div><div>Yes, basic application-level monitoring could be d=
one via HTTP, but I was more interested in measuring I/O performance, bandw=
idth usage - I&#39;m not sure if/how this can be measured from inside the m=
icrokernel. Is the microkernel even aware of the share of the underlying cp=
u it has access to? (again - if this question makes sense :))</div>


<div><br></div><div>Cheers</div><span class=3D"HOEnZb"><font color=3D"#8888=
88"><div><br></div><div>William<br><div><br></div></div></font></span></div=
><div class=3D"HOEnZb"><div class=3D"h5"><div class=3D"gmail_extra"><br><br=
><div class=3D"gmail_quote">
On Tue, Sep 17, 2013 at 2:56 PM, David Scott <span dir=3D"ltr">&lt;<a href=
=3D"mailto:scott.dj@gmail.com" target=3D"_blank">scott.dj@gmail.com</a>&gt;=
</span> wrote:<br>

<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hi,<div><br></div><div>I th=
ink the question does make sense :)</div><div><br></div><div>We&#39;re stil=
l working on the &quot;mirari&quot; tool which is intended to make both bui=
ld and deployment easier. One idea is that &quot;mirari list&quot; would be=
 able to enumerate and query the status of running Mirage instances-- this =
could be used for basic monitoring.</div>



<div><br></div><div>Before &quot;mirari list&quot; is ready, perhaps they c=
ould run some external monitoring tool like nagios? Such a tool could perio=
dically check the health of the Mirage instance(s) by ping or perhaps a sim=
ple HTTP transaction (depending on how the specific Mirage kernel is config=
ured). Perhaps in future we should write an SNMP library for Mirage?</div>



<div><br></div><div>Another option would be to write a simple Mirage app to=
 monitor another one by periodic ping/HTTP. Perhaps Mirage apps could be ar=
ranged in mutually-monitoring pairs. It might be better to start simpler th=
an this though :)</div>



<div><br></div><div>Cheers,</div><div>Dave</div><div><br></div></div><div c=
lass=3D"gmail_extra"><div><div><br><br><div class=3D"gmail_quote">On Tue, S=
ep 17, 2013 at 9:48 PM, William Le Ferrand <span dir=3D"ltr">&lt;<a href=3D=
"mailto:warnegia@gmail.com" target=3D"_blank">warnegia@gmail.com</a>&gt;</s=
pan> wrote:<br>



<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Dear all,<div><br></div><di=
v>What would be the best strategy to monitor a Mirage-brewed xen microkerne=
l running in EC2?=A0</div>



<div><br></div><div>I&#39;m trying to convince a customer to try Mirage, an=
d the first question they have is &quot;how do we monitor this thing?&quot;=
. Xen has snmp support but it probably can&#39;t be activated in EC2.=A0</d=
iv>





<div><br></div><div>Does this question even make sense :) ?=A0</div><div><b=
r></div><div>Thanks in advance,</div><div><br></div><div>Best,</div><div><b=
r></div><div>William</div><span><font color=3D"#888888"><div>
<br clear=3D"all"><div><br></div>-- <br>William Le Ferrand<br>

<br><div><div>Mobile :=A0(+1)=A0<span style=3D"font-family:Arial,sans-serif=
;border-collapse:collapse;color:rgb(51,51,51)"><a href=3D"tel:%28415%29%206=
83-1484" value=3D"+14156831484" target=3D"_blank">(415) 683-1484</a></span>=
</div><div>



<font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"border-co=
llapse:collapse">Web :=A0<a href=3D"http://williamleferrand.github.com/" ta=
rget=3D"_blank">http://williamleferrand.github.com/</a></span></font></div>

<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</div></font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div></div></div><span><=
font color=3D"#888888">-- <br>Dave Scott
</font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>William Le F=
errand<br><br><div><div>Mobile :=A0(+1)=A0<span style=3D"font-family:Arial,=
sans-serif;border-collapse:collapse;color:rgb(51,51,51)"><a href=3D"tel:%28=
415%29%20683-1484" value=3D"+14156831484" target=3D"_blank">(415) 683-1484<=
/a></span></div>


<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=A0<a href=3D"http://williamleferrand.github.com=
/" target=3D"_blank">http://williamleferrand.github.com/</a></span></font><=
/div><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_bla=
nk"></a></div>



</div>
</div></div></blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>=
Dave Scott
</div>

--047d7b10cb37333dc104e69ba399--


From warnegia@gmail.com Tue Sep 17 23:18:54 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VM3bi-0004vr-9e (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Tue, 17 Sep 2013 23:18:54 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1523560 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.212.181 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (warnegia[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
	*  0.0 T_FILL_THIS_FORM_SHORT Fill in a short form with personal
	*      information
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f181.google.com ([209.85.212.181]:46969)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1VM3bh-0003gu-7v (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Tue, 17 Sep 2013 23:18:54 +0100
Received: by mail-wi0-f181.google.com with SMTP id ex4so5613271wid.8
	for <cl-mirage@lists.cam.ac.uk>; Tue, 17 Sep 2013 15:18:53 -0700 (PDT)
X-Received: by 10.180.212.51 with SMTP id nh19mr4392115wic.14.1379456333168;
	Tue, 17 Sep 2013 15:18:53 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.217.115.65 with HTTP; Tue, 17 Sep 2013 15:18:33 -0700 (PDT)
In-Reply-To: <CAG_esB3PxNWKfcWWJ77ruxoyVB9J0vY=TDYagLR_yemyfJNk8w@mail.gmail.com>
References: <CAGS5m-=RrjSfqcFbMCoRpYa3OB_x5F=dgDZp3=nMuf0GEWnKPQ@mail.gmail.com>
	<CAG_esB1gqHKH=_fd_4cx1JJvWR2o+psKOtFWwmdPieOxi+z=Og@mail.gmail.com>
	<CAGS5m-=KO7qjUO5=k4kFAwv_xMTTbhDfOvkkBqWVZiaNFTd9kQ@mail.gmail.com>
	<CAG_esB3PxNWKfcWWJ77ruxoyVB9J0vY=TDYagLR_yemyfJNk8w@mail.gmail.com>
From: William Le Ferrand <warnegia@gmail.com>
Date: Tue, 17 Sep 2013 15:18:33 -0700
Message-ID: <CAGS5m-maiacDJKQSdktHA+P_qF-Unbmvj5EDXU=PcNbDZ7U6QA@mail.gmail.com>
Subject: Re: mirage Xen microkernel monitoring in EC2
To: David Scott <scott.dj@gmail.com>
Content-Type: multipart/alternative; boundary=001a11c35760b8c90d04e69bb429
Cc: cl-mirage <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 22:18:54 -0000
Status: O
Content-Length: 10984
Lines: 315

--001a11c35760b8c90d04e69bb429
Content-Type: text/plain; charset=ISO-8859-1

Hi, yes, they somehow do; at least each instance type has a well-specified
kind of hardware tied to it.

I have another question: how the microkernel will handle multiple cpu's? Do
we inherit the one-core-one-thread OCaml constraint? In that case, it only
make sense to run the microkernel on "1 virtual core" instances, right?

Many thanks

william


On Tue, Sep 17, 2013 at 3:13 PM, David Scott <scott.dj@gmail.com> wrote:

> Hi,
>
> The Mirage block and network drivers are in a position to monitor I/O
> throughput... but we've not fully instrumented them with performance
> counters yet; it's a bit of a work-in-progress. We should agree on a common
> interface soon to query the performance counters and start baking them in.
>
> I'm not totally sure how much you can tell about the underlying physical
> cpu -- normally on a xen system you would use a privileged hypercall to
> monitor that, on the host side. Perhaps AWS provides some APIs which expose
> this information?
>
> Cheers,
> Dave
>
>
> On Tue, Sep 17, 2013 at 11:04 PM, William Le Ferrand <warnegia@gmail.com>wrote:
>
>> Thanks Richard, thanks David.
>>
>> Yes, basic application-level monitoring could be done via HTTP, but I was
>> more interested in measuring I/O performance, bandwidth usage - I'm not
>> sure if/how this can be measured from inside the microkernel. Is the
>> microkernel even aware of the share of the underlying cpu it has access to?
>> (again - if this question makes sense :))
>>
>> Cheers
>>
>> William
>>
>>
>>
>> On Tue, Sep 17, 2013 at 2:56 PM, David Scott <scott.dj@gmail.com> wrote:
>>
>>> Hi,
>>>
>>> I think the question does make sense :)
>>>
>>> We're still working on the "mirari" tool which is intended to make both
>>> build and deployment easier. One idea is that "mirari list" would be able
>>> to enumerate and query the status of running Mirage instances-- this could
>>> be used for basic monitoring.
>>>
>>> Before "mirari list" is ready, perhaps they could run some external
>>> monitoring tool like nagios? Such a tool could periodically check the
>>> health of the Mirage instance(s) by ping or perhaps a simple HTTP
>>> transaction (depending on how the specific Mirage kernel is configured).
>>> Perhaps in future we should write an SNMP library for Mirage?
>>>
>>> Another option would be to write a simple Mirage app to monitor another
>>> one by periodic ping/HTTP. Perhaps Mirage apps could be arranged in
>>> mutually-monitoring pairs. It might be better to start simpler than this
>>> though :)
>>>
>>> Cheers,
>>> Dave
>>>
>>>
>>>
>>> On Tue, Sep 17, 2013 at 9:48 PM, William Le Ferrand <warnegia@gmail.com>wrote:
>>>
>>>> Dear all,
>>>>
>>>> What would be the best strategy to monitor a Mirage-brewed xen
>>>> microkernel running in EC2?
>>>>
>>>> I'm trying to convince a customer to try Mirage, and the first question
>>>> they have is "how do we monitor this thing?". Xen has snmp support but it
>>>> probably can't be activated in EC2.
>>>>
>>>> Does this question even make sense :) ?
>>>>
>>>> Thanks in advance,
>>>>
>>>> Best,
>>>>
>>>> William
>>>>
>>>>
>>>> --
>>>> William Le Ferrand
>>>>
>>>> Mobile : (+1) (415) 683-1484
>>>> Web : http://williamleferrand.github.com/
>>>>  <http://www.linkedin.com/in/williamleferrand>
>>>>
>>>
>>>
>>>
>>> --
>>> Dave Scott
>>>
>>
>>
>>
>> --
>> William Le Ferrand
>>
>> Mobile : (+1) (415) 683-1484
>> Web : http://williamleferrand.github.com/
>> <http://www.linkedin.com/in/williamleferrand>
>>
>
>
>
> --
> Dave Scott
>



-- 
William Le Ferrand

Mobile : (+1) (415) 683-1484
Web : http://williamleferrand.github.com/
<http://www.linkedin.com/in/williamleferrand>

--001a11c35760b8c90d04e69bb429
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi, yes, they somehow do; at least each instance type has =
a well-specified kind of hardware tied to it.=A0<div><br></div><div>I have =
another question: how the microkernel will handle multiple cpu&#39;s? Do we=
 inherit the one-core-one-thread OCaml constraint? In that case, it only ma=
ke sense to run the microkernel on &quot;1 virtual core&quot; instances, ri=
ght?=A0</div>

<div><br></div><div>Many thanks</div><div><br></div><div>william=A0</div></=
div><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On Tue, S=
ep 17, 2013 at 3:13 PM, David Scott <span dir=3D"ltr">&lt;<a href=3D"mailto=
:scott.dj@gmail.com" target=3D"_blank">scott.dj@gmail.com</a>&gt;</span> wr=
ote:<br>

<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hi,<div><br></div><div>The =
Mirage block and network drivers are in a position to monitor I/O throughpu=
t... but we&#39;ve not fully instrumented them with performance counters ye=
t; it&#39;s a bit of a work-in-progress. We should agree on a common interf=
ace soon to query the performance counters and start baking them in.</div>


<div><br></div><div>I&#39;m not totally sure how much you can tell about th=
e underlying physical cpu -- normally on a xen system you would use a privi=
leged hypercall to monitor that, on the host side. Perhaps AWS provides som=
e APIs which expose this information?</div>


<div><br></div><div>Cheers,</div><div>Dave</div></div><div class=3D"gmail_e=
xtra"><div><div class=3D"h5"><br><br><div class=3D"gmail_quote">On Tue, Sep=
 17, 2013 at 11:04 PM, William Le Ferrand <span dir=3D"ltr">&lt;<a href=3D"=
mailto:warnegia@gmail.com" target=3D"_blank">warnegia@gmail.com</a>&gt;</sp=
an> wrote:<br>


<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Thanks Richard, thanks Davi=
d.=A0<div><br></div><div>Yes, basic application-level monitoring could be d=
one via HTTP, but I was more interested in measuring I/O performance, bandw=
idth usage - I&#39;m not sure if/how this can be measured from inside the m=
icrokernel. Is the microkernel even aware of the share of the underlying cp=
u it has access to? (again - if this question makes sense :))</div>




<div><br></div><div>Cheers</div><span><font color=3D"#888888"><div><br></di=
v><div>William<br><div><br></div></div></font></span></div><div><div><div c=
lass=3D"gmail_extra"><br><br><div class=3D"gmail_quote">
On Tue, Sep 17, 2013 at 2:56 PM, David Scott <span dir=3D"ltr">&lt;<a href=
=3D"mailto:scott.dj@gmail.com" target=3D"_blank">scott.dj@gmail.com</a>&gt;=
</span> wrote:<br>

<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hi,<div><br></div><div>I th=
ink the question does make sense :)</div><div><br></div><div>We&#39;re stil=
l working on the &quot;mirari&quot; tool which is intended to make both bui=
ld and deployment easier. One idea is that &quot;mirari list&quot; would be=
 able to enumerate and query the status of running Mirage instances-- this =
could be used for basic monitoring.</div>





<div><br></div><div>Before &quot;mirari list&quot; is ready, perhaps they c=
ould run some external monitoring tool like nagios? Such a tool could perio=
dically check the health of the Mirage instance(s) by ping or perhaps a sim=
ple HTTP transaction (depending on how the specific Mirage kernel is config=
ured). Perhaps in future we should write an SNMP library for Mirage?</div>





<div><br></div><div>Another option would be to write a simple Mirage app to=
 monitor another one by periodic ping/HTTP. Perhaps Mirage apps could be ar=
ranged in mutually-monitoring pairs. It might be better to start simpler th=
an this though :)</div>





<div><br></div><div>Cheers,</div><div>Dave</div><div><br></div></div><div c=
lass=3D"gmail_extra"><div><div><br><br><div class=3D"gmail_quote">On Tue, S=
ep 17, 2013 at 9:48 PM, William Le Ferrand <span dir=3D"ltr">&lt;<a href=3D=
"mailto:warnegia@gmail.com" target=3D"_blank">warnegia@gmail.com</a>&gt;</s=
pan> wrote:<br>





<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Dear all,<div><br></div><di=
v>What would be the best strategy to monitor a Mirage-brewed xen microkerne=
l running in EC2?=A0</div>





<div><br></div><div>I&#39;m trying to convince a customer to try Mirage, an=
d the first question they have is &quot;how do we monitor this thing?&quot;=
. Xen has snmp support but it probably can&#39;t be activated in EC2.=A0</d=
iv>







<div><br></div><div>Does this question even make sense :) ?=A0</div><div><b=
r></div><div>Thanks in advance,</div><div><br></div><div>Best,</div><div><b=
r></div><div>William</div><span><font color=3D"#888888"><div>
<br clear=3D"all"><div><br></div>-- <br>William Le Ferrand<br>

<br><div><div>Mobile :=A0(+1)=A0<span style=3D"font-family:Arial,sans-serif=
;border-collapse:collapse;color:rgb(51,51,51)"><a href=3D"tel:%28415%29%206=
83-1484" value=3D"+14156831484" target=3D"_blank">(415) 683-1484</a></span>=
</div><div>





<font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"border-co=
llapse:collapse">Web :=A0<a href=3D"http://williamleferrand.github.com/" ta=
rget=3D"_blank">http://williamleferrand.github.com/</a></span></font></div>

<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</div></font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div></div></div><span><=
font color=3D"#888888">-- <br>Dave Scott
</font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>William Le F=
errand<br><br><div><div>Mobile :=A0(+1)=A0<span style=3D"font-family:Arial,=
sans-serif;border-collapse:collapse;color:rgb(51,51,51)"><a href=3D"tel:%28=
415%29%20683-1484" value=3D"+14156831484" target=3D"_blank">(415) 683-1484<=
/a></span></div>




<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=A0<a href=3D"http://williamleferrand.github.com=
/" target=3D"_blank">http://williamleferrand.github.com/</a></span></font><=
/div><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_bla=
nk"></a></div>





</div>
</div></div></blockquote></div><br><br clear=3D"all"><div><br></div></div><=
/div><span class=3D"HOEnZb"><font color=3D"#888888">-- <br>Dave Scott
</font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>William Le F=
errand<br><br><div><div>Mobile :=A0(+1)=A0<span style=3D"font-family:Arial,=
sans-serif;border-collapse:collapse;color:rgb(51,51,51)">(415) 683-1484</sp=
an></div>

<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=A0<a href=3D"http://williamleferrand.github.com=
/" target=3D"_blank">http://williamleferrand.github.com/</a></span></font><=
/div><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_bla=
nk"></a></div>


</div>

--001a11c35760b8c90d04e69bb429--


From Dave.Scott@eu.citrix.com Tue Sep 17 23:31:07 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VM3nX-00056J-9E (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <Dave.Scott@eu.citrix.com>);
	Tue, 17 Sep 2013 23:31:07 +0100
X-Cam-SpamDetails: score -1.4 from SpamAssassin-3.3.2-1523560 
	* -0.7 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [66.165.176.63 listed in list.dnswl.dnsbl.ja.net]
	*  0.0 HTML_MESSAGE BODY: HTML included in message
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from smtp02.citrix.com ([66.165.176.63]:8454)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VM3nV-000225-28 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk (return-path <Dave.Scott@eu.citrix.com>);
	Tue, 17 Sep 2013 23:31:07 +0100
X-IronPort-AV: E=Sophos;i="4.90,926,1371081600"; d="scan'208,217";a="52464875"
Received: from accessns.citrite.net (HELO FTLPEX01CL01.citrite.net)
	([10.9.154.239])
	by FTLPIPO02.CITRIX.COM with ESMTP; 17 Sep 2013 22:31:04 +0000
Received: from AMSPEX01CL02.citrite.net (10.69.46.33) by
	FTLPEX01CL01.citrite.net (10.13.107.78) with Microsoft SMTP Server
	(TLS) id 14.2.342.4; Tue, 17 Sep 2013 18:31:03 -0400
Received: from AMSPEX01CL03.citrite.net ([169.254.8.161]) by
	AMSPEX01CL02.citrite.net ([169.254.7.219]) with mapi id 14.02.0342.004;
	Wed, 18 Sep 2013 00:31:02 +0200
From: Dave Scott <Dave.Scott@eu.citrix.com>
To: William Le Ferrand <warnegia@gmail.com>
Subject: Re: mirage Xen microkernel monitoring in EC2
Thread-Topic: mirage Xen microkernel monitoring in EC2
Thread-Index: AQHOs+dcF+K9SpA3uk6Pi1rlu9fQs5nKWCgAgAACWICAAAKUgIAAAUeAgAAlA8g=
Date: Tue, 17 Sep 2013 22:31:01 +0000
Message-ID: <87A0C928-9B3F-46DB-A2EF-188FFEBB424F@eu.citrix.com>
References: <CAGS5m-=RrjSfqcFbMCoRpYa3OB_x5F=dgDZp3=nMuf0GEWnKPQ@mail.gmail.com>
	<CAG_esB1gqHKH=_fd_4cx1JJvWR2o+psKOtFWwmdPieOxi+z=Og@mail.gmail.com>
	<CAGS5m-=KO7qjUO5=k4kFAwv_xMTTbhDfOvkkBqWVZiaNFTd9kQ@mail.gmail.com>
	<CAG_esB3PxNWKfcWWJ77ruxoyVB9J0vY=TDYagLR_yemyfJNk8w@mail.gmail.com>,
	<CAGS5m-maiacDJKQSdktHA+P_qF-Unbmvj5EDXU=PcNbDZ7U6QA@mail.gmail.com>
In-Reply-To: <CAGS5m-maiacDJKQSdktHA+P_qF-Unbmvj5EDXU=PcNbDZ7U6QA@mail.gmail.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
Content-Type: multipart/alternative;
	boundary="_000_87A0C9289B3F46DBA2EF188FFEBB424Feucitrixcom_"
MIME-Version: 1.0
X-DLP: MIA2
Cc: cl-mirage <cl-mirage@lists.cam.ac.uk>, David Scott <scott.dj@gmail.com>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 22:31:07 -0000
Status: O
Content-Length: 11924
Lines: 404

--_000_87A0C9289B3F46DBA2EF188FFEBB424Feucitrixcom_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hi,

Yep, same as OCaml: it makes sense to assign 1 core to a microkernel and us=
e multiple microkernels if you want multiple cores running computations at =
once.

--
Dave Scott

On Sep 17, 2013, at 11:19 PM, "William Le Ferrand" <warnegia@gmail.com<mail=
to:warnegia@gmail.com>> wrote:

Hi, yes, they somehow do; at least each instance type has a well-specified =
kind of hardware tied to it.

I have another question: how the microkernel will handle multiple cpu's? Do=
 we inherit the one-core-one-thread OCaml constraint? In that case, it only=
 make sense to run the microkernel on "1 virtual core" instances, right?

Many thanks

william


On Tue, Sep 17, 2013 at 3:13 PM, David Scott <scott.dj@gmail.com<mailto:sco=
tt.dj@gmail.com>> wrote:
Hi,

The Mirage block and network drivers are in a position to monitor I/O throu=
ghput... but we've not fully instrumented them with performance counters ye=
t; it's a bit of a work-in-progress. We should agree on a common interface =
soon to query the performance counters and start baking them in.

I'm not totally sure how much you can tell about the underlying physical cp=
u -- normally on a xen system you would use a privileged hypercall to monit=
or that, on the host side. Perhaps AWS provides some APIs which expose this=
 information?

Cheers,
Dave


On Tue, Sep 17, 2013 at 11:04 PM, William Le Ferrand <warnegia@gmail.com<ma=
ilto:warnegia@gmail.com>> wrote:
Thanks Richard, thanks David.

Yes, basic application-level monitoring could be done via HTTP, but I was m=
ore interested in measuring I/O performance, bandwidth usage - I'm not sure=
 if/how this can be measured from inside the microkernel. Is the microkerne=
l even aware of the share of the underlying cpu it has access to? (again - =
if this question makes sense :))

Cheers

William



On Tue, Sep 17, 2013 at 2:56 PM, David Scott <scott.dj@gmail.com<mailto:sco=
tt.dj@gmail.com>> wrote:
Hi,

I think the question does make sense :)

We're still working on the "mirari" tool which is intended to make both bui=
ld and deployment easier. One idea is that "mirari list" would be able to e=
numerate and query the status of running Mirage instances-- this could be u=
sed for basic monitoring.

Before "mirari list" is ready, perhaps they could run some external monitor=
ing tool like nagios? Such a tool could periodically check the health of th=
e Mirage instance(s) by ping or perhaps a simple HTTP transaction (dependin=
g on how the specific Mirage kernel is configured). Perhaps in future we sh=
ould write an SNMP library for Mirage?

Another option would be to write a simple Mirage app to monitor another one=
 by periodic ping/HTTP. Perhaps Mirage apps could be arranged in mutually-m=
onitoring pairs. It might be better to start simpler than this though :)

Cheers,
Dave



On Tue, Sep 17, 2013 at 9:48 PM, William Le Ferrand <warnegia@gmail.com<mai=
lto:warnegia@gmail.com>> wrote:
Dear all,

What would be the best strategy to monitor a Mirage-brewed xen microkernel =
running in EC2?

I'm trying to convince a customer to try Mirage, and the first question the=
y have is "how do we monitor this thing?". Xen has snmp support but it prob=
ably can't be activated in EC2.

Does this question even make sense :) ?

Thanks in advance,

Best,

William


--
William Le Ferrand

Mobile : (+1) (415) 683-1484<tel:%28415%29%20683-1484>
Web : http://williamleferrand.github.com/
<http://www.linkedin.com/in/williamleferrand>



--
Dave Scott



--
William Le Ferrand

Mobile : (+1) (415) 683-1484<tel:%28415%29%20683-1484>
Web : http://williamleferrand.github.com/
<http://www.linkedin.com/in/williamleferrand>



--
Dave Scott



--
William Le Ferrand

Mobile : (+1) (415) 683-1484
Web : http://williamleferrand.github.com/
<http://www.linkedin.com/in/williamleferrand>

--_000_87A0C9289B3F46DBA2EF188FFEBB424Feucitrixcom_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
</head>
<body dir=3D"auto">
<div>Hi,</div>
<div><br>
</div>
<div>Yep, same as OCaml: it makes sense to assign 1 core to a microkernel a=
nd use multiple microkernels if you want multiple cores running computation=
s at once.<br>
<br>
--&nbsp;
<div>Dave Scott</div>
</div>
<div><br>
On Sep 17, 2013, at 11:19 PM, &quot;William Le Ferrand&quot; &lt;<a href=3D=
"mailto:warnegia@gmail.com">warnegia@gmail.com</a>&gt; wrote:<br>
<br>
</div>
<blockquote type=3D"cite">
<div>
<div dir=3D"ltr">Hi, yes, they somehow do; at least each instance type has =
a well-specified kind of hardware tied to it.&nbsp;
<div><br>
</div>
<div>I have another question: how the microkernel will handle multiple cpu'=
s? Do we inherit the one-core-one-thread OCaml constraint? In that case, it=
 only make sense to run the microkernel on &quot;1 virtual core&quot; insta=
nces, right?&nbsp;</div>
<div><br>
</div>
<div>Many thanks</div>
<div><br>
</div>
<div>william&nbsp;</div>
</div>
<div class=3D"gmail_extra"><br>
<br>
<div class=3D"gmail_quote">On Tue, Sep 17, 2013 at 3:13 PM, David Scott <sp=
an dir=3D"ltr">
&lt;<a href=3D"mailto:scott.dj@gmail.com" target=3D"_blank">scott.dj@gmail.=
com</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
<div dir=3D"ltr">Hi,
<div><br>
</div>
<div>The Mirage block and network drivers are in a position to monitor I/O =
throughput... but we've not fully instrumented them with performance counte=
rs yet; it's a bit of a work-in-progress. We should agree on a common inter=
face soon to query the performance
 counters and start baking them in.</div>
<div><br>
</div>
<div>I'm not totally sure how much you can tell about the underlying physic=
al cpu -- normally on a xen system you would use a privileged hypercall to =
monitor that, on the host side. Perhaps AWS provides some APIs which expose=
 this information?</div>
<div><br>
</div>
<div>Cheers,</div>
<div>Dave</div>
</div>
<div class=3D"gmail_extra">
<div>
<div class=3D"h5"><br>
<br>
<div class=3D"gmail_quote">On Tue, Sep 17, 2013 at 11:04 PM, William Le Fer=
rand <span dir=3D"ltr">
&lt;<a href=3D"mailto:warnegia@gmail.com" target=3D"_blank">warnegia@gmail.=
com</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
<div dir=3D"ltr">Thanks Richard, thanks David.&nbsp;
<div><br>
</div>
<div>Yes, basic application-level monitoring could be done via HTTP, but I =
was more interested in measuring I/O performance, bandwidth usage - I'm not=
 sure if/how this can be measured from inside the microkernel. Is the micro=
kernel even aware of the share of
 the underlying cpu it has access to? (again - if this question makes sense=
 :))</div>
<div><br>
</div>
<div>Cheers</div>
<span><font color=3D"#888888">
<div><br>
</div>
<div>William<br>
<div><br>
</div>
</div>
</font></span></div>
<div>
<div>
<div class=3D"gmail_extra"><br>
<br>
<div class=3D"gmail_quote">On Tue, Sep 17, 2013 at 2:56 PM, David Scott <sp=
an dir=3D"ltr">
&lt;<a href=3D"mailto:scott.dj@gmail.com" target=3D"_blank">scott.dj@gmail.=
com</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
<div dir=3D"ltr">Hi,
<div><br>
</div>
<div>I think the question does make sense :)</div>
<div><br>
</div>
<div>We're still working on the &quot;mirari&quot; tool which is intended t=
o make both build and deployment easier. One idea is that &quot;mirari list=
&quot; would be able to enumerate and query the status of running Mirage in=
stances-- this could be used for basic monitoring.</div>
<div><br>
</div>
<div>Before &quot;mirari list&quot; is ready, perhaps they could run some e=
xternal monitoring tool like nagios? Such a tool could periodically check t=
he health of the Mirage instance(s) by ping or perhaps a simple HTTP transa=
ction (depending on how the specific Mirage
 kernel is configured). Perhaps in future we should write an SNMP library f=
or Mirage?</div>
<div><br>
</div>
<div>Another option would be to write a simple Mirage app to monitor anothe=
r one by periodic ping/HTTP. Perhaps Mirage apps could be arranged in mutua=
lly-monitoring pairs. It might be better to start simpler than this though =
:)</div>
<div><br>
</div>
<div>Cheers,</div>
<div>Dave</div>
<div><br>
</div>
</div>
<div class=3D"gmail_extra">
<div>
<div><br>
<br>
<div class=3D"gmail_quote">On Tue, Sep 17, 2013 at 9:48 PM, William Le Ferr=
and <span dir=3D"ltr">
&lt;<a href=3D"mailto:warnegia@gmail.com" target=3D"_blank">warnegia@gmail.=
com</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
<div dir=3D"ltr">Dear all,
<div><br>
</div>
<div>What would be the best strategy to monitor a Mirage-brewed xen microke=
rnel running in EC2?&nbsp;</div>
<div><br>
</div>
<div>I'm trying to convince a customer to try Mirage, and the first questio=
n they have is &quot;how do we monitor this thing?&quot;. Xen has snmp supp=
ort but it probably can't be activated in EC2.&nbsp;</div>
<div><br>
</div>
<div>Does this question even make sense :) ?&nbsp;</div>
<div><br>
</div>
<div>Thanks in advance,</div>
<div><br>
</div>
<div>Best,</div>
<div><br>
</div>
<div>William</div>
<span><font color=3D"#888888">
<div><br clear=3D"all">
<div><br>
</div>
-- <br>
William Le Ferrand<br>
<br>
<div>
<div>Mobile :&nbsp;(&#43;1)&nbsp;<span style=3D"font-family:Arial,sans-seri=
f;border-collapse:collapse;color:rgb(51,51,51)"><a href=3D"tel:%28415%29%20=
683-1484" value=3D"&#43;14156831484" target=3D"_blank">(415) 683-1484</a></=
span></div>
<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :&nbsp;<a href=3D"http://williamleferrand.github.=
com/" target=3D"_blank">http://williamleferrand.github.com/</a></span></fon=
t></div>
<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</div>
</font></span></div>
</blockquote>
</div>
<br>
<br clear=3D"all">
<div><br>
</div>
</div>
</div>
<span><font color=3D"#888888">-- <br>
Dave Scott </font></span></div>
</blockquote>
</div>
<br>
<br clear=3D"all">
<div><br>
</div>
-- <br>
William Le Ferrand<br>
<br>
<div>
<div>Mobile :&nbsp;(&#43;1)&nbsp;<span style=3D"font-family:Arial,sans-seri=
f;border-collapse:collapse;color:rgb(51,51,51)"><a href=3D"tel:%28415%29%20=
683-1484" value=3D"&#43;14156831484" target=3D"_blank">(415) 683-1484</a></=
span></div>
<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :&nbsp;<a href=3D"http://williamleferrand.github.=
com/" target=3D"_blank">http://williamleferrand.github.com/</a></span></fon=
t></div>
<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
<br clear=3D"all">
<div><br>
</div>
</div>
</div>
<span class=3D"HOEnZb"><font color=3D"#888888">-- <br>
Dave Scott </font></span></div>
</blockquote>
</div>
<br>
<br clear=3D"all">
<div><br>
</div>
-- <br>
William Le Ferrand<br>
<br>
<div>
<div>Mobile :&nbsp;(&#43;1)&nbsp;<span style=3D"font-family:Arial,sans-seri=
f;border-collapse:collapse;color:rgb(51,51,51)">(415) 683-1484</span></div>
<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :&nbsp;<a href=3D"http://williamleferrand.github.=
com/" target=3D"_blank">http://williamleferrand.github.com/</a></span></fon=
t></div>
<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</div>
</div>
</blockquote>
</body>
</html>

--_000_87A0C9289B3F46DBA2EF188FFEBB424Feucitrixcom_--


From Richard.Mortier@nottingham.ac.uk Tue Sep 17 23:34:45 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VM3r3-00057w-NF (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Tue, 17 Sep 2013 23:34:45 +0100
X-Cam-SpamScore: s
X-Cam-SpamDetails: score 1.1 from SpamAssassin-3.3.2-1523560 
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  1.1 MIME_HTML_ONLY BODY: Message only has text/html MIME parts
	*  0.0 T_FILL_THIS_FORM_SHORT Fill in a short form with personal
	*      information
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine04-20433-4.icritical.com ([195.62.217.152]:43962)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VM3r2-0003Mz-Fh (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Tue, 17 Sep 2013 23:34:45 +0100
Received: (qmail 8415 invoked from network); 17 Sep 2013 22:34:39 -0000
Received: from localhost (127.0.0.1)
	by engine04-20433-4.icritical.com with SMTP; 17 Sep 2013 22:34:39 -0000
Received: from engine04-20433-4.icritical.com ([127.0.0.1])
	by localhost (engine04-20433-4.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 07965-02 for <cl-mirage@lists.cam.ac.uk>;
	Tue, 17 Sep 2013 23:34:37 +0100 (BST)
Received: (qmail 8400 invoked by uid 599); 17 Sep 2013 22:34:37 -0000
Received: from unknown (HELO smtp4.nottingham.ac.uk) (128.243.220.65)
	by engine04-20433-4.icritical.com (qpsmtpd/0.28) with ESMTP;
	Tue, 17 Sep 2013 23:34:37 +0100
Received: from uiwexhub01.ad.nottingham.ac.uk ([128.243.15.133])
	by smtp4.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Richard.Mortier@nottingham.ac.uk>)
	id 1VM3qz-0003hq-OO; Tue, 17 Sep 2013 23:34:41 +0100
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: "dave.scott@eu.citrix.com" <dave.scott@eu.citrix.com>,
	"warnegia@gmail.com" <warnegia@gmail.com>
Date: Tue, 17 Sep 2013 23:34:41 +0100
Subject: Re: mirage Xen microkernel monitoring in EC2
Thread-Topic: mirage Xen microkernel monitoring in EC2
Thread-Index: AQHOs+dcF+K9SpA3uk6Pi1rlu9fQs5nKWCgAgAACWICAAAKUgIAAAUeAgAAlA8iAAAEGmA==
Message-ID: <aggjndl6i6v1s4erk4q6fm7r.1379457278883@email.android.com>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine04-20433-4.icritical.com
Cc: "richard.mortier@nottingham.ac.uk" <richard.mortier@nottingham.ac.uk>,
	"scott.dj@gmail.com" <scott.dj@gmail.com>,
	"cl-mirage@lists.cam.ac.uk" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 22:34:45 -0000
Status: O
Content-Length: 8846
Lines: 279

<html><head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
</head>
<body dir=3D"auto">
Fwiw there is a very brief examination of doing this in one situation in th=
e asplos paper iirc<br>
<br>
<span style=3D"font-size:87%">Sent from Samsung Mobile</span> <br>
<br>
<br>
Dave Scott &lt;Dave.Scott@eu.citrix.com&gt; wrote: <br>
<br>
<br>
<div>
<div>Hi,</div>
<div><br>
</div>
<div>Yep, same as OCaml: it makes sense to assign 1 core to a microkernel a=
nd use multiple microkernels if you want multiple cores running computation=
s at once.<br>
<br>
--&nbsp;
<div>Dave Scott</div>
</div>
<div><br>
On Sep 17, 2013, at 11:19 PM, &quot;William Le Ferrand&quot; &lt;<a href=3D=
"mailto:warnegia@gmail.com">warnegia@gmail.com</a>&gt; wrote:<br>
<br>
</div>
<blockquote type=3D"cite">
<div>
<div dir=3D"ltr">Hi, yes, they somehow do; at least each instance type has =
a well-specified kind of hardware tied to it.&nbsp;
<div><br>
</div>
<div>I have another question: how the microkernel will handle multiple cpu'=
s? Do we inherit the one-core-one-thread OCaml constraint? In that case, it=
 only make sense to run the microkernel on &quot;1 virtual core&quot; insta=
nces, right?&nbsp;</div>
<div><br>
</div>
<div>Many thanks</div>
<div><br>
</div>
<div>william&nbsp;</div>
</div>
<div class=3D"gmail_extra"><br>
<br>
<div class=3D"gmail_quote">On Tue, Sep 17, 2013 at 3:13 PM, David Scott <sp=
an dir=3D"ltr">
&lt;<a href=3D"mailto:scott.dj@gmail.com" target=3D"_blank">scott.dj@gmail.=
com</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
<div dir=3D"ltr">Hi,
<div><br>
</div>
<div>The Mirage block and network drivers are in a position to monitor I/O =
throughput... but we've not fully instrumented them with performance counte=
rs yet; it's a bit of a work-in-progress. We should agree on a common inter=
face soon to query the performance
 counters and start baking them in.</div>
<div><br>
</div>
<div>I'm not totally sure how much you can tell about the underlying physic=
al cpu -- normally on a xen system you would use a privileged hypercall to =
monitor that, on the host side. Perhaps AWS provides some APIs which expose=
 this information?</div>
<div><br>
</div>
<div>Cheers,</div>
<div>Dave</div>
</div>
<div class=3D"gmail_extra">
<div>
<div class=3D"h5"><br>
<br>
<div class=3D"gmail_quote">On Tue, Sep 17, 2013 at 11:04 PM, William Le Fer=
rand <span dir=3D"ltr">
&lt;<a href=3D"mailto:warnegia@gmail.com" target=3D"_blank">warnegia@gmail.=
com</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
<div dir=3D"ltr">Thanks Richard, thanks David.&nbsp;
<div><br>
</div>
<div>Yes, basic application-level monitoring could be done via HTTP, but I =
was more interested in measuring I/O performance, bandwidth usage - I'm not=
 sure if/how this can be measured from inside the microkernel. Is the micro=
kernel even aware of the share of
 the underlying cpu it has access to? (again - if this question makes sense=
 :))</div>
<div><br>
</div>
<div>Cheers</div>
<span><font color=3D"#888888">
<div><br>
</div>
<div>William<br>
<div><br>
</div>
</div>
</font></span></div>
<div>
<div>
<div class=3D"gmail_extra"><br>
<br>
<div class=3D"gmail_quote">On Tue, Sep 17, 2013 at 2:56 PM, David Scott <sp=
an dir=3D"ltr">
&lt;<a href=3D"mailto:scott.dj@gmail.com" target=3D"_blank">scott.dj@gmail.=
com</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
<div dir=3D"ltr">Hi,
<div><br>
</div>
<div>I think the question does make sense :)</div>
<div><br>
</div>
<div>We're still working on the &quot;mirari&quot; tool which is intended t=
o make both build and deployment easier. One idea is that &quot;mirari list=
&quot; would be able to enumerate and query the status of running Mirage in=
stances-- this could be used for basic monitoring.</div>
<div><br>
</div>
<div>Before &quot;mirari list&quot; is ready, perhaps they could run some e=
xternal monitoring tool like nagios? Such a tool could periodically check t=
he health of the Mirage instance(s) by ping or perhaps a simple HTTP transa=
ction (depending on how the specific Mirage
 kernel is configured). Perhaps in future we should write an SNMP library f=
or Mirage?</div>
<div><br>
</div>
<div>Another option would be to write a simple Mirage app to monitor anothe=
r one by periodic ping/HTTP. Perhaps Mirage apps could be arranged in mutua=
lly-monitoring pairs. It might be better to start simpler than this though =
:)</div>
<div><br>
</div>
<div>Cheers,</div>
<div>Dave</div>
<div><br>
</div>
</div>
<div class=3D"gmail_extra">
<div>
<div><br>
<br>
<div class=3D"gmail_quote">On Tue, Sep 17, 2013 at 9:48 PM, William Le Ferr=
and <span dir=3D"ltr">
&lt;<a href=3D"mailto:warnegia@gmail.com" target=3D"_blank">warnegia@gmail.=
com</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
<div dir=3D"ltr">Dear all,
<div><br>
</div>
<div>What would be the best strategy to monitor a Mirage-brewed xen microke=
rnel running in EC2?&nbsp;</div>
<div><br>
</div>
<div>I'm trying to convince a customer to try Mirage, and the first questio=
n they have is &quot;how do we monitor this thing?&quot;. Xen has snmp supp=
ort but it probably can't be activated in EC2.&nbsp;</div>
<div><br>
</div>
<div>Does this question even make sense :) ?&nbsp;</div>
<div><br>
</div>
<div>Thanks in advance,</div>
<div><br>
</div>
<div>Best,</div>
<div><br>
</div>
<div>William</div>
<span><font color=3D"#888888">
<div><br clear=3D"all">
<div><br>
</div>
-- <br>
William Le Ferrand<br>
<br>
<div>
<div>Mobile :&nbsp;(&#43;1)&nbsp;<span style=3D"font-family:Arial,sans-seri=
f;border-collapse:collapse;color:rgb(51,51,51)"><a href=3D"tel:%28415%29%20=
683-1484" value=3D"&#43;14156831484" target=3D"_blank">(415) 683-1484</a></=
span></div>
<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :&nbsp;<a href=3D"http://williamleferrand.github.=
com/" target=3D"_blank">http://williamleferrand.github.com/</a></span></fon=
t></div>
<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</div>
</font></span></div>
</blockquote>
</div>
<br>
<br clear=3D"all">
<div><br>
</div>
</div>
</div>
<span><font color=3D"#888888">-- <br>
Dave Scott </font></span></div>
</blockquote>
</div>
<br>
<br clear=3D"all">
<div><br>
</div>
-- <br>
William Le Ferrand<br>
<br>
<div>
<div>Mobile :&nbsp;(&#43;1)&nbsp;<span style=3D"font-family:Arial,sans-seri=
f;border-collapse:collapse;color:rgb(51,51,51)"><a href=3D"tel:%28415%29%20=
683-1484" value=3D"&#43;14156831484" target=3D"_blank">(415) 683-1484</a></=
span></div>
<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :&nbsp;<a href=3D"http://williamleferrand.github.=
com/" target=3D"_blank">http://williamleferrand.github.com/</a></span></fon=
t></div>
<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
<br clear=3D"all">
<div><br>
</div>
</div>
</div>
<span class=3D"HOEnZb"><font color=3D"#888888">-- <br>
Dave Scott </font></span></div>
</blockquote>
</div>
<br>
<br clear=3D"all">
<div><br>
</div>
-- <br>
William Le Ferrand<br>
<br>
<div>
<div>Mobile :&nbsp;(&#43;1)&nbsp;<span style=3D"font-family:Arial,sans-seri=
f;border-collapse:collapse;color:rgb(51,51,51)">(415) 683-1484</span></div>
<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :&nbsp;<a href=3D"http://williamleferrand.github.=
com/" target=3D"_blank">http://williamleferrand.github.com/</a></span></fon=
t></div>
<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</div>
</div>
</blockquote>
</div>

<br>=
<p>This message and any attachment are intended solely for the addressee an=
d may contain confidential information. If you have received this message in=
 error, please send it back to me, and immediately delete it.&nbsp;&nbsp; Pl=
ease do not use, copy or disclose the information contained in this message =
or in any attachment.&nbsp; Any views or opinions expressed by the author of=
 this email do not necessarily reflect the views of the University of Nottin=
gham.</p><p>This message has been checked for viruses but the contents of an=
 attachment may still contain software viruses which could damage your compu=
ter system, you are advised to perform your own checks. Email communications=
 with the University of Nottingham may be monitored as permitted by UK legis=
lation.</p>
<br>=
</body>
</html>


From warnegia@gmail.com Wed Sep 18 00:50:22 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VM52E-0005wc-HI (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Wed, 18 Sep 2013 00:50:22 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1523560 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.212.175 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (warnegia[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f175.google.com ([209.85.212.175]:44785)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1VM52D-0001KI-Fq (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Wed, 18 Sep 2013 00:50:22 +0100
Received: by mail-wi0-f175.google.com with SMTP id ez12so5622598wid.8
	for <cl-mirage@lists.cam.ac.uk>; Tue, 17 Sep 2013 16:50:21 -0700 (PDT)
X-Received: by 10.194.78.78 with SMTP id z14mr29147741wjw.32.1379461821508;
	Tue, 17 Sep 2013 16:50:21 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.217.115.65 with HTTP; Tue, 17 Sep 2013 16:50:01 -0700 (PDT)
From: William Le Ferrand <warnegia@gmail.com>
Date: Tue, 17 Sep 2013 16:50:01 -0700
Message-ID: <CAGS5m-n70zFPSktWLfWgPtJeCiAMDacsvOFd1YFAyd81tCmSSg@mail.gmail.com>
Subject: debugging non-working microkernel
To: cl-mirage <cl-mirage@lists.cam.ac.uk>
Content-Type: multipart/alternative; boundary=047d7bf0d524da31d804e69cfb71
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 23:50:22 -0000
Status: O
Content-Length: 1851
Lines: 54

--047d7bf0d524da31d804e69cfb71
Content-Type: text/plain; charset=ISO-8859-1

hello

I followed the mirage-www tutorial and managed to get the website working
on a local linux box.

I also compiled it to a microkernel and launched it on a S3-backed EC2
instance (m1.large), but nothing happens : nothing in the instance logs
("get system logs" in the AWS dashboard) and no website on port 80.

What would you suggest to do next :) ?

Thanks

William


-- 
William Le Ferrand

Mobile : (+1) (415) 683-1484
Web : http://williamleferrand.github.com/
<http://www.linkedin.com/in/williamleferrand>

--047d7bf0d524da31d804e69cfb71
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">hello<div><br></div><div>I followed the mirage-www tutoria=
l and managed to get the website working on a local linux box.=A0</div><div=
><br></div><div>I also compiled it to a microkernel and launched it on a S3=
-backed EC2 instance (m1.large), but nothing happens : nothing in the insta=
nce logs (&quot;get system logs&quot; in the AWS dashboard) and no website =
on port 80.=A0</div>

<div><br></div><div>What would you suggest to do next :) ?=A0</div><div><br=
></div><div>Thanks</div><div><br></div><div>William</div><div><br clear=3D"=
all"><div><br></div>-- <br>William Le Ferrand<br><br><div><div>Mobile :=A0(=
+1)=A0<span style=3D"font-family:Arial,sans-serif;border-collapse:collapse;=
color:rgb(51,51,51)">(415) 683-1484</span></div>

<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=A0<a href=3D"http://williamleferrand.github.com=
/" target=3D"_blank">http://williamleferrand.github.com/</a></span></font><=
/div><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_bla=
nk"></a></div>


</div></div>

--047d7bf0d524da31d804e69cfb71--


From warnegia@gmail.com Wed Sep 18 00:54:32 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VM56G-0005zB-8q (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Wed, 18 Sep 2013 00:54:32 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1523560 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [74.125.82.179 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (warnegia[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
	*  0.0 T_FILL_THIS_FORM_SHORT Fill in a short form with personal
	*      information
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-we0-f179.google.com ([74.125.82.179]:50183)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1VM56F-0003FO-hb (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Wed, 18 Sep 2013 00:54:32 +0100
Received: by mail-we0-f179.google.com with SMTP id x55so5834860wes.10
	for <cl-mirage@lists.cam.ac.uk>; Tue, 17 Sep 2013 16:54:31 -0700 (PDT)
X-Received: by 10.180.212.51 with SMTP id nh19mr4655801wic.14.1379462071262;
	Tue, 17 Sep 2013 16:54:31 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.217.115.65 with HTTP; Tue, 17 Sep 2013 16:54:11 -0700 (PDT)
In-Reply-To: <CAGS5m-n70zFPSktWLfWgPtJeCiAMDacsvOFd1YFAyd81tCmSSg@mail.gmail.com>
References: <CAGS5m-n70zFPSktWLfWgPtJeCiAMDacsvOFd1YFAyd81tCmSSg@mail.gmail.com>
From: William Le Ferrand <warnegia@gmail.com>
Date: Tue, 17 Sep 2013 16:54:11 -0700
Message-ID: <CAGS5m-mURk+fL=VJ_DWOD2e41Wbrh-muwJR4Mte=MM11FiUeig@mail.gmail.com>
Subject: Re: debugging non-working microkernel
To: cl-mirage <cl-mirage@lists.cam.ac.uk>
Content-Type: multipart/alternative; boundary=001a11c35760bd228404e69d0ac8
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 17 Sep 2013 23:54:32 -0000
Status: O
Content-Length: 9026
Lines: 238

--001a11c35760bd228404e69d0ac8
Content-Type: text/plain; charset=ISO-8859-1

Just in case, here is what the ec2.sh script says:

buntu@ip-172-31-29-20:~/dev/mirage/mirage-www/src$
./../../mirari/scripts/ec2.sh _build/main.xen
+ NAME=sumomirage2
+ BUCKET=sumomirage-b1
+ REGION=us-west-2
+ KERNEL=aki-fc37bacc
+ IMG=sumomirage2.img
+ MNT=/mnt/mirage
+ SUDO=sudo
+ '[' '!' -e _build/main.xen ']'
+ sudo mkdir -p /mnt/mirage
+ rm -f sumomirage2.img
+ dd if=/dev/zero of=sumomirage2.img bs=1M count=5
5+0 records in
5+0 records out
5242880 bytes (5.2 MB) copied, 0.00719671 s, 729 MB/s
+ sudo mke2fs -F -j sumomirage2.img
mke2fs 1.42.5 (29-Jul-2012)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
1280 inodes, 5120 blocks
256 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=5242880
1 block group
8192 blocks per group, 8192 fragments per group
1280 inodes per group

Allocating group tables: done
Writing inode tables: done
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done

+ sudo mount -o loop sumomirage2.img /mnt/mirage
+ sudo mkdir -p /mnt/mirage/boot/grub
+ echo default 0
+ echo timeout 1
+ echo title Mirage
+ echo ' root (hd0)'
+ echo ' kernel /boot/mirage-os.gz'
+ sudo mv menu.lst /mnt/mirage/boot/grub/menu.lst
+ sudo sh -c 'gzip -c _build/main.xen > /mnt/mirage/boot/mirage-os.gz'
+ sudo umount -d /mnt/mirage
loop: can't delete device /dev/loop0: No such device or address
+ rm -rf ec2_tmp
+ mkdir ec2_tmp
+ ec2-bundle-image -i sumomirage2.img -k
/home/ubuntu/keys/pk-2XQRC5CZMJFO6AP4WE5MLIWYXGRG4KC7.pem -c
/home/ubuntu/keys/cert-2XQRC5CZMJFO6AP4WE5MLIWYXGRG4KC7.pem -u 655652860901
-d ec2_tmp -r x86_64 --kernel aki-fc37bacc
Bundling image file...
Splitting ec2_tmp/sumomirage2.img.tar.gz.enc...
Created sumomirage2.img.part.0
Generating digests for each part...
Digests generated.
Creating bundle manifest...
ec2-bundle-image complete.
+ ec2-upload-bundle -b sumomirage-b1 -m
ec2_tmp/sumomirage2.img.manifest.xml -a <---> -s <--->
Uploading bundled image parts to the S3 bucket sumomirage-b1 ...
Uploaded sumomirage2.img.part.0
Uploading manifest ...
Uploaded manifest.
Bundle upload completed.
+ rm -rf ec2_tmp
+ ec2-register sumomirage-b1/sumomirage2.img.manifest.xml -n sumomirage2
--region us-west-2






On Tue, Sep 17, 2013 at 4:50 PM, William Le Ferrand <warnegia@gmail.com>wrote:

> hello
>
> I followed the mirage-www tutorial and managed to get the website working
> on a local linux box.
>
> I also compiled it to a microkernel and launched it on a S3-backed EC2
> instance (m1.large), but nothing happens : nothing in the instance logs
> ("get system logs" in the AWS dashboard) and no website on port 80.
>
> What would you suggest to do next :) ?
>
> Thanks
>
> William
>
>
> --
> William Le Ferrand
>
> Mobile : (+1) (415) 683-1484
> Web : http://williamleferrand.github.com/
> <http://www.linkedin.com/in/williamleferrand>
>



-- 
William Le Ferrand

Mobile : (+1) (415) 683-1484
Web : http://williamleferrand.github.com/
<http://www.linkedin.com/in/williamleferrand>

--001a11c35760bd228404e69d0ac8
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Just in case, here is what the ec2.sh script says:=A0<div>=
<br></div><div>buntu@ip-172-31-29-20:~/dev/mirage/mirage-www/src$ ./../../m=
irari/scripts/ec2.sh _build/main.xen=A0</div><div>+ NAME=3Dsumomirage2</div=
><div>

+ BUCKET=3Dsumomirage-b1</div><div>+ REGION=3Dus-west-2</div><div>+ KERNEL=
=3Daki-fc37bacc</div><div>+ IMG=3Dsumomirage2.img</div><div>+ MNT=3D/mnt/mi=
rage</div><div>+ SUDO=3Dsudo</div><div>+ &#39;[&#39; &#39;!&#39; -e _build/=
main.xen &#39;]&#39;</div>

<div>+ sudo mkdir -p /mnt/mirage</div><div>+ rm -f sumomirage2.img</div><di=
v>+ dd if=3D/dev/zero of=3Dsumomirage2.img bs=3D1M count=3D5</div><div>5+0 =
records in</div><div>5+0 records out</div><div>5242880 bytes (5.2 MB) copie=
d, 0.00719671 s, 729 MB/s</div>

<div>+ sudo mke2fs -F -j sumomirage2.img</div><div>mke2fs 1.42.5 (29-Jul-20=
12)</div><div>Discarding device blocks: done =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0</div><div>Filesystem label=3D</div><div>OS type=
: Linux</div><div>Block size=3D1024 (log=3D0)</div>

<div>Fragment size=3D1024 (log=3D0)</div><div>Stride=3D0 blocks, Stripe wid=
th=3D0 blocks</div><div>1280 inodes, 5120 blocks</div><div>256 blocks (5.00=
%) reserved for the super user</div><div>First data block=3D1</div><div>Max=
imum filesystem blocks=3D5242880</div>

<div>1 block group</div><div>8192 blocks per group, 8192 fragments per grou=
p</div><div>1280 inodes per group</div><div><br></div><div>Allocating group=
 tables: done =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0</div>=
<div>Writing inode tables: done =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
 =A0 =A0 =A0</div>

<div>Creating journal (1024 blocks): done</div><div>Writing superblocks and=
 filesystem accounting information: done</div><div><br></div><div>+ sudo mo=
unt -o loop sumomirage2.img /mnt/mirage</div><div>+ sudo mkdir -p /mnt/mira=
ge/boot/grub</div>

<div>+ echo default 0</div><div>+ echo timeout 1</div><div>+ echo title Mir=
age</div><div>+ echo &#39; root (hd0)&#39;</div><div>+ echo &#39; kernel /b=
oot/mirage-os.gz&#39;</div><div>+ sudo mv menu.lst /mnt/mirage/boot/grub/me=
nu.lst</div>

<div>+ sudo sh -c &#39;gzip -c _build/main.xen &gt; /mnt/mirage/boot/mirage=
-os.gz&#39;</div><div>+ sudo umount -d /mnt/mirage</div><div>loop: can&#39;=
t delete device /dev/loop0: No such device or address</div><div>+ rm -rf ec=
2_tmp</div>

<div>+ mkdir ec2_tmp</div><div>+ ec2-bundle-image -i sumomirage2.img -k /ho=
me/ubuntu/keys/pk-2XQRC5CZMJFO6AP4WE5MLIWYXGRG4KC7.pem -c /home/ubuntu/keys=
/cert-2XQRC5CZMJFO6AP4WE5MLIWYXGRG4KC7.pem -u 655652860901 -d ec2_tmp -r x8=
6_64 --kernel aki-fc37bacc</div>

<div>Bundling image file...</div><div>Splitting ec2_tmp/sumomirage2.img.tar=
.gz.enc...</div><div>Created sumomirage2.img.part.0</div><div>Generating di=
gests for each part...</div><div>Digests generated.</div><div>Creating bund=
le manifest...</div>

<div>ec2-bundle-image complete.</div><div>+ ec2-upload-bundle -b sumomirage=
-b1 -m ec2_tmp/sumomirage2.img.manifest.xml -a &lt;---&gt; -s &lt;---&gt;</=
div><div>Uploading bundled image parts to the S3 bucket sumomirage-b1 ...</=
div>

<div>Uploaded sumomirage2.img.part.0</div><div>Uploading manifest ...</div>=
<div>Uploaded manifest.</div><div>Bundle upload completed.</div><div>+ rm -=
rf ec2_tmp</div><div>+ ec2-register sumomirage-b1/sumomirage2.img.manifest.=
xml -n sumomirage2 --region us-west-2</div>

<div><br></div><div><br></div><div><br></div><div><div><br></div></div></di=
v><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On Tue, Sep=
 17, 2013 at 4:50 PM, William Le Ferrand <span dir=3D"ltr">&lt;<a href=3D"m=
ailto:warnegia@gmail.com" target=3D"_blank">warnegia@gmail.com</a>&gt;</spa=
n> wrote:<br>

<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">hello<div><br></div><div>I =
followed the mirage-www tutorial and managed to get the website working on =
a local linux box.=A0</div>

<div><br></div><div>I also compiled it to a microkernel and launched it on =
a S3-backed EC2 instance (m1.large), but nothing happens : nothing in the i=
nstance logs (&quot;get system logs&quot; in the AWS dashboard) and no webs=
ite on port 80.=A0</div>


<div><br></div><div>What would you suggest to do next :) ?=A0</div><div><br=
></div><div>Thanks</div><span class=3D"HOEnZb"><font color=3D"#888888"><div=
><br></div><div>William</div><div><br clear=3D"all"><div><br></div>-- <br>W=
illiam Le Ferrand<br>

<br><div><div>Mobile :=A0(+1)=A0<span style=3D"font-family:Arial,sans-serif=
;border-collapse:collapse;color:rgb(51,51,51)"><a href=3D"tel:%28415%29%206=
83-1484" value=3D"+14156831484" target=3D"_blank">(415) 683-1484</a></span>=
</div>
<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=A0<a href=3D"http://williamleferrand.github.com=
/" target=3D"_blank">http://williamleferrand.github.com/</a></span></font><=
/div><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_bla=
nk"></a></div>



</div></font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>William Le F=
errand<br><br><div><div>Mobile :=A0(+1)=A0<span style=3D"font-family:Arial,=
sans-serif;border-collapse:collapse;color:rgb(51,51,51)">(415) 683-1484</sp=
an></div>

<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=A0<a href=3D"http://williamleferrand.github.com=
/" target=3D"_blank">http://williamleferrand.github.com/</a></span></font><=
/div><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_bla=
nk"></a></div>


</div>

--001a11c35760bd228404e69d0ac8--


From anil@recoil.org Wed Sep 18 11:05:35 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMEdb-0003CA-EX (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 18 Sep 2013 11:05:35 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1523956
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:35028
	helo=dark.recoil.org)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VMEda-0000C9-F6 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 18 Sep 2013 11:05:35 +0100
Received: (qmail 24245 invoked by uid 634); 18 Sep 2013 10:05:34 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from no-dns-yet.demon.co.uk (HELO [192.168.15.157]) (62.49.66.12)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Wed, 18 Sep 2013 11:05:33 +0100
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: mirage Xen microkernel monitoring in EC2
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <87A0C928-9B3F-46DB-A2EF-188FFEBB424F@eu.citrix.com>
Date: Wed, 18 Sep 2013 11:05:33 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <1057E5A7-1A94-4541-979A-1821CFF65AD1@recoil.org>
References: <CAGS5m-=RrjSfqcFbMCoRpYa3OB_x5F=dgDZp3=nMuf0GEWnKPQ@mail.gmail.com>
	<CAG_esB1gqHKH=_fd_4cx1JJvWR2o+psKOtFWwmdPieOxi+z=Og@mail.gmail.com>
	<CAGS5m-=KO7qjUO5=k4kFAwv_xMTTbhDfOvkkBqWVZiaNFTd9kQ@mail.gmail.com>
	<CAG_esB3PxNWKfcWWJ77ruxoyVB9J0vY=TDYagLR_yemyfJNk8w@mail.gmail.com>,
	<CAGS5m-maiacDJKQSdktHA+P_qF-Unbmvj5EDXU=PcNbDZ7U6QA@mail.gmail.com>
	<87A0C928-9B3F-46DB-A2EF-188FFEBB424F@eu.citrix.com>
To: Dave Scott <Dave.Scott@eu.citrix.com>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: David Scott <scott.dj@gmail.com>, cl-mirage <cl-mirage@lists.cam.ac.uk>,
	William Le Ferrand <warnegia@gmail.com>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 18 Sep 2013 10:05:35 -0000
Status: O
Content-Length: 4562
Lines: 154

Do note that it should be possible to adapt our Xen "container" to run =
multiple independent OCaml runtimes fairly easily, without requiring =
process switching.  We can just bind each vCPU to its own runtime with =
some linker magic (or by using the experimental preemptive runtime [1]) =
and route virtual events directly to each vCPU.

The usecase for this hasn't really shown up yet, since it's more =
efficient to just run many single-vCPU guests unless your workloads are =
particularly asymmetric (e.g. CPU heavy and low on memory requirements).

-anil

On 17 Sep 2013, at 23:31, Dave Scott <Dave.Scott@eu.citrix.com> wrote:

> Hi,
>=20
> Yep, same as OCaml: it makes sense to assign 1 core to a microkernel =
and use multiple microkernels if you want multiple cores running =
computations at once.
>=20
> --=20
> Dave Scott
>=20
> On Sep 17, 2013, at 11:19 PM, "William Le Ferrand" =
<warnegia@gmail.com> wrote:
>=20
>> Hi, yes, they somehow do; at least each instance type has a =
well-specified kind of hardware tied to it.=20
>>=20
>> I have another question: how the microkernel will handle multiple =
cpu's? Do we inherit the one-core-one-thread OCaml constraint? In that =
case, it only make sense to run the microkernel on "1 virtual core" =
instances, right?=20
>>=20
>> Many thanks
>>=20
>> william=20
>>=20
>>=20
>> On Tue, Sep 17, 2013 at 3:13 PM, David Scott <scott.dj@gmail.com> =
wrote:
>> Hi,
>>=20
>> The Mirage block and network drivers are in a position to monitor I/O =
throughput... but we've not fully instrumented them with performance =
counters yet; it's a bit of a work-in-progress. We should agree on a =
common interface soon to query the performance counters and start baking =
them in.
>>=20
>> I'm not totally sure how much you can tell about the underlying =
physical cpu -- normally on a xen system you would use a privileged =
hypercall to monitor that, on the host side. Perhaps AWS provides some =
APIs which expose this information?
>>=20
>> Cheers,
>> Dave
>>=20
>>=20
>> On Tue, Sep 17, 2013 at 11:04 PM, William Le Ferrand =
<warnegia@gmail.com> wrote:
>> Thanks Richard, thanks David.=20
>>=20
>> Yes, basic application-level monitoring could be done via HTTP, but I =
was more interested in measuring I/O performance, bandwidth usage - I'm =
not sure if/how this can be measured from inside the microkernel. Is the =
microkernel even aware of the share of the underlying cpu it has access =
to? (again - if this question makes sense :))
>>=20
>> Cheers
>>=20
>> William
>>=20
>>=20
>>=20
>> On Tue, Sep 17, 2013 at 2:56 PM, David Scott <scott.dj@gmail.com> =
wrote:
>> Hi,
>>=20
>> I think the question does make sense :)
>>=20
>> We're still working on the "mirari" tool which is intended to make =
both build and deployment easier. One idea is that "mirari list" would =
be able to enumerate and query the status of running Mirage instances-- =
this could be used for basic monitoring.
>>=20
>> Before "mirari list" is ready, perhaps they could run some external =
monitoring tool like nagios? Such a tool could periodically check the =
health of the Mirage instance(s) by ping or perhaps a simple HTTP =
transaction (depending on how the specific Mirage kernel is configured). =
Perhaps in future we should write an SNMP library for Mirage?
>>=20
>> Another option would be to write a simple Mirage app to monitor =
another one by periodic ping/HTTP. Perhaps Mirage apps could be arranged =
in mutually-monitoring pairs. It might be better to start simpler than =
this though :)
>>=20
>> Cheers,
>> Dave
>>=20
>>=20
>>=20
>> On Tue, Sep 17, 2013 at 9:48 PM, William Le Ferrand =
<warnegia@gmail.com> wrote:
>> Dear all,
>>=20
>> What would be the best strategy to monitor a Mirage-brewed xen =
microkernel running in EC2?=20
>>=20
>> I'm trying to convince a customer to try Mirage, and the first =
question they have is "how do we monitor this thing?". Xen has snmp =
support but it probably can't be activated in EC2.=20
>>=20
>> Does this question even make sense :) ?=20
>>=20
>> Thanks in advance,
>>=20
>> Best,
>>=20
>> William
>>=20
>>=20
>> --=20
>> William Le Ferrand
>>=20
>> Mobile : (+1) (415) 683-1484
>> Web : http://williamleferrand.github.com/
>>=20
>>=20
>>=20
>> --=20
>> Dave Scott
>>=20
>>=20
>>=20
>> --=20
>> William Le Ferrand
>>=20
>> Mobile : (+1) (415) 683-1484
>> Web : http://williamleferrand.github.com/
>>=20
>>=20
>>=20
>> --=20
>> Dave Scott
>>=20
>>=20
>>=20
>> --=20
>> William Le Ferrand
>>=20
>> Mobile : (+1) (415) 683-1484
>> Web : http://williamleferrand.github.com/



From scott.dj@gmail.com Wed Sep 18 11:31:51 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMF31-0004Y5-9V (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Wed, 18 Sep 2013 11:31:51 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1523956 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.160.52 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (scott.dj[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-pb0-f52.google.com ([209.85.160.52]:48973)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VMF30-000371-0i (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Wed, 18 Sep 2013 11:31:51 +0100
Received: by mail-pb0-f52.google.com with SMTP id wz12so6784329pbc.39
	for <cl-mirage@lists.cam.ac.uk>; Wed, 18 Sep 2013 03:31:49 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.68.170.133 with SMTP id am5mr39935595pbc.104.1379500309089; 
	Wed, 18 Sep 2013 03:31:49 -0700 (PDT)
Received: by 10.70.56.36 with HTTP; Wed, 18 Sep 2013 03:31:49 -0700 (PDT)
Date: Wed, 18 Sep 2013 11:31:49 +0100
Message-ID: <CAG_esB3mQAcXKM8bUDbcOKEtmU40VyduqZLpUJBh+wgfA0M=BA@mail.gmail.com>
Subject: Mirage weekly call wednesday (today) 4pm BST
From: David Scott <scott.dj@gmail.com>
To: Mirage List <cl-mirage@lists.cam.ac.uk>
Content-Type: multipart/alternative; boundary=047d7b6d8ea4e4141604e6a5f176
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 18 Sep 2013 10:31:51 -0000
Status: O
Content-Length: 1704
Lines: 43

--047d7b6d8ea4e4141604e6a5f176
Content-Type: text/plain; charset=ISO-8859-1

Fellow Mirage hackers, we have a developer preview 1 to release -- please
join me on the Mirage weekly call today (wednesday) at 4pm BST!

1.  Please join my meeting.
https://www1.gotomeeting.com/join/591890401

2.  Use your microphone and speakers (VoIP) - a headset is recommended.
 Or, call in using your telephone.

United Kingdom (toll-free): 0 808 168 0209 United Kingdom: +44 (0) 207 151
1817

United States (toll-free): 1 877 309 2070 United States: +1 (626) 521-0017

Access Code: 591-890-401
Audio PIN: Shown after joining the meeting

Meeting ID: 591-890-401

--047d7b6d8ea4e4141604e6a5f176
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><br clear=3D"all"><div><div>Fellow Mirage hackers, we have=
 a developer preview 1 to release -- please join me on the Mirage weekly ca=
ll today (wednesday) at 4pm BST!</div><div><br></div><div>1. =A0Please join=
 my meeting.</div>
<div><a href=3D"https://www1.gotomeeting.com/join/591890401">https://www1.g=
otomeeting.com/join/591890401</a></div><div><br></div><div>2. =A0Use your m=
icrophone and speakers (VoIP) - a headset is recommended. =A0Or, call in us=
ing your telephone.</div>
<div><br></div><div>United Kingdom (toll-free): 0 808 168 0209 United Kingd=
om: +44 (0) 207 151 1817</div><div><br></div><div>United States (toll-free)=
: 1 877 309 2070 United States: +1 (626) 521-0017</div><div><br></div><div>
Access Code: 591-890-401</div><div>Audio PIN: Shown after joining the meeti=
ng</div><div><br></div><div>Meeting ID: 591-890-401</div></div><div><br></d=
iv></div>

--047d7b6d8ea4e4141604e6a5f176--


From Chris.Greenhalgh@nottingham.ac.uk Wed Sep 18 12:44:22 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMGBC-0007fD-7y (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Wed, 18 Sep 2013 12:44:22 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1523956 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine04-20433-4.icritical.com ([195.62.217.152]:35804)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VMGBB-0008CB-Da (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Wed, 18 Sep 2013 12:44:22 +0100
Received: (qmail 31483 invoked from network); 18 Sep 2013 11:44:07 -0000
Received: from localhost (127.0.0.1)
	by engine04-20433-4.icritical.com with SMTP; 18 Sep 2013 11:44:07 -0000
Received: from engine04-20433-4.icritical.com ([127.0.0.1])
	by localhost (engine04-20433-4.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 31393-05 for <cl-mirage@lists.cam.ac.uk>;
	Wed, 18 Sep 2013 12:44:06 +0100 (BST)
Received: (qmail 31347 invoked by uid 599); 18 Sep 2013 11:43:56 -0000
Received: from unknown (HELO smtp4.nottingham.ac.uk) (128.243.220.65)
	by engine04-20433-4.icritical.com (qpsmtpd/0.28) with ESMTP;
	Wed, 18 Sep 2013 12:43:56 +0100
Received: from uiwexhub02.ad.nottingham.ac.uk ([128.243.15.132])
	by smtp4.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Chris.Greenhalgh@nottingham.ac.uk>)
	id 1VMGAy-0005It-T6
	for cl-mirage@lists.cam.ac.uk; Wed, 18 Sep 2013 12:44:08 +0100
From: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
To: Anil Madhavapeddy <anil@recoil.org>
Date: Wed, 18 Sep 2013 12:44:06 +0100
Subject: mirage, opam and cross-compiling... ?
Thread-Topic: mirage, opam and cross-compiling... ?
Thread-Index: Ac60VtnoLe2usB2iQXCR7AzYaz0mSgADBREw
Message-ID: <4C20415C7327A849961F3B8421413725010CD5506A81@EXCHANGE1.ad.nottingham.ac.uk>
References: <CAGS5m-=RrjSfqcFbMCoRpYa3OB_x5F=dgDZp3=nMuf0GEWnKPQ@mail.gmail.com>
	<CAG_esB1gqHKH=_fd_4cx1JJvWR2o+psKOtFWwmdPieOxi+z=Og@mail.gmail.com>
	<CAGS5m-=KO7qjUO5=k4kFAwv_xMTTbhDfOvkkBqWVZiaNFTd9kQ@mail.gmail.com>
	<CAG_esB3PxNWKfcWWJ77ruxoyVB9J0vY=TDYagLR_yemyfJNk8w@mail.gmail.com>,
	<CAGS5m-maiacDJKQSdktHA+P_qF-Unbmvj5EDXU=PcNbDZ7U6QA@mail.gmail.com>
	<87A0C928-9B3F-46DB-A2EF-188FFEBB424F@eu.citrix.com>
	<1057E5A7-1A94-4541-979A-1821CFF65AD1@recoil.org>
In-Reply-To: <1057E5A7-1A94-4541-979A-1821CFF65AD1@recoil.org>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine04-20433-4.icritical.com
Cc: cl-mirage <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 18 Sep 2013 11:44:22 -0000
Status: O
Content-Length: 1875
Lines: 35

Is there something that passes for best practice when it comes to cross-com=
piling, ocaml and opam?=20

I've spent the morning looking but ocaml cross-compiling seems to be rather=
 ad hoc at the moment. And the approach I've taken so far following Vouillo=
n with separate target-specific opam packages doesn't seem entirely satisfa=
ctory...

it would seem "better" to be able to switch to a cross-compiler and build s=
tandard (or at least cross-compilation-compatible) packages auto-magically.=
 And it would be super-nice if this didn't require any changes to "simple" =
packages, which in turn implies that cross-compiling tools are the default =
and the cross-compiler's ocamlbuild is wise to cross-compiling. Other build=
 tools (esp. oasis) could then also be extended to turn out sensible defaul=
ts when cross-compiling (e.g. using BuildTools fields).

I added some notes to the end of my mirage-on-android working notes, https:=
//github.com/cgreenhalgh/opensharingtoolkit/blob/master/docs/mirageonandroi=
d.md

But I'm wondering if this is already in hand somewhere or better tackled ot=
herwise?

Cheers
Chris

This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From jdy22@cam.ac.uk Wed Sep 18 16:23:52 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMJbc-0000Kg-1y (Exim 4.70)
	(return-path <jdy22@cam.ac.uk>); Wed, 18 Sep 2013 16:23:52 +0100
X-Cam-AntiVirus: no malware found
X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/
Received: from mail-we0-f173.google.com ([74.125.82.173]:59085)
	by ppsw-32.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.156]:587)
	with esmtpsa (PLAIN:jdy22) (TLSv1:RC4-SHA:128)
	id 1VMJbc-0003zK-05 (Exim 4.80_167-5a66dd3)
	(return-path <jdy22@cam.ac.uk>); Wed, 18 Sep 2013 16:23:52 +0100
Received: by mail-we0-f173.google.com with SMTP id w62so6592215wes.4
	for <multiple recipients>; Wed, 18 Sep 2013 08:23:51 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=mime-version:in-reply-to:references:date:message-id:subject:from:to
	:cc:content-type;
	bh=ACSntT2qtrWDnzZxpu4aofmP49rYETNYXhrC6u+PuC4=;
	b=aF1bDeg+07tTMmmeEWPlz9ZyRGmtAaOZ9AbOfzY2XVijopEdTTRLjDBMx2T6wTD2mK
	q6fgM0Fq0zKiK4yJpn1C7eizbohs2Wh9G3DN+EIpFdfOKbicz14QWdGvE141kpDY1VSo
	Dy5vmV20+FANBUtESrWmR3orG7JrAAJLtTEjcClkLRV16Xt6tLclDUm01zzSquHbQuXZ
	BOu0N8pQkn34C50r6B8IWYMXq700KTGq0W+QXQaGiyLyB3UJW4Am7/G+yGVcL55bE5uD
	BCThYQNWcS9AiUJeRLurv+BGfu66/dM/nHNx/SeBuJloD993nuzjnQZM3EAJiXT+/c7F
	G3yA==
MIME-Version: 1.0
X-Received: by 10.194.235.138 with SMTP id um10mr32889981wjc.30.1379517831812; 
	Wed, 18 Sep 2013 08:23:51 -0700 (PDT)
Received: by 10.216.20.79 with HTTP; Wed, 18 Sep 2013 08:23:51 -0700 (PDT)
In-Reply-To: <CAAxsn=GRUuND98s=qwyHTLvpGXcOz0uOODkMKA4SgES8oVKYQw@mail.gmail.com>
References: <CAAxsn=F-shyH01Pn4n17DnK68P2J5Usq2__p5jF-DFy-G0amiw@mail.gmail.com>
	<CAAxsn=GRUuND98s=qwyHTLvpGXcOz0uOODkMKA4SgES8oVKYQw@mail.gmail.com>
Date: Wed, 18 Sep 2013 16:23:51 +0100
Message-ID: <CAAxsn=EN1LpBkJ5Q4YcOpdv_-SyhRvT1RXUo68YNUiZY4yU-XQ@mail.gmail.com>
Subject: Re: OCaml compiler hacking session
From: Jeremy Yallop <jdy22@cam.ac.uk>
To: Jeremy Yallop <jdy22@cam.ac.uk>
Content-Type: text/plain; charset=UTF-8
Cc: Leo White <lpw25@cam.ac.uk>, cl-cprg-announce@lists.cam.ac.uk,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 18 Sep 2013 15:23:52 -0000
Status: O
Content-Length: 1690
Lines: 41

Reminder: this evening's session is at Makespace on Mill Lane, not in
the Computer Lab.

On 17 September 2013 15:13, Jeremy Yallop <jdy22@cam.ac.uk> wrote:
> Quick reminder: the compiler hacking session is taking place tomorrow
> (Wednesday).  If you're planning to come along, please add your name
> to the Doodle poll:
>
>     http://doodle.com/k6y2tiihkrb5vuw4
>
> On 4 September 2013 11:04, Jeremy Yallop <jdy22@cam.ac.uk> wrote:
>> We're organising a second OCaml compiler-hacking session!  Note the
>> change of venue: this time we're going to be at Makespace on Mill
>> Lane.
>>
>> If you're planning to come along, it'd be helpful if you could
>> indicate interest via Doodle:
>>
>>    http://doodle.com/k6y2tiihkrb5vuw4
>>
>> Where: Makespace Cambridge, 16 Mill Lane, Cambridge, CB2 1RX.
>>        Directions: http://makespace.org/space/
>>
>> When: 6pm, Wednesday 18th September
>>
>> Who: anyone interested in improving OCaml.  Knowledge of OCaml
>> programming will obviously be helpful, but prior experience of working
>> on OCaml internals isn't necessary.
>>
>> What: fixing bugs, implementing new features, learning about OCaml internals
>>
>> We're defining "compiler" pretty broadly, to include anything that's
>> part of the standard distribution, which means at least the standard
>> library, runtime, tools (ocamldep, ocamllex, ocamlyacc, etc.), camlp4,
>> ocamlbuild, the documentation, and the compiler itself.  We'll have
>> suggestions for mini-projects for various levels of experience, but
>> feel free to come along and work on whatever you fancy.
>>
>> We'll also be ordering pizza, so if you want to be counted for food
>> you should aim to arrive by 6.30pm.


From anil@recoil.org Wed Sep 18 16:58:06 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMK8k-0001rg-Gl (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 18 Sep 2013 16:58:06 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1523956
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:20775
	helo=dark.recoil.org)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VMK8j-0005uB-ER (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 18 Sep 2013 16:58:06 +0100
Received: (qmail 18755 invoked by uid 634); 18 Sep 2013 15:58:04 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from host81-149-212-230.in-addr.btopenworld.com (HELO [10.0.1.37])
	(81.149.212.230)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Wed, 18 Sep 2013 16:58:04 +0100
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: mirage, opam and cross-compiling... ?
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <4C20415C7327A849961F3B8421413725010CD5506A81@EXCHANGE1.ad.nottingham.ac.uk>
Date: Wed, 18 Sep 2013 16:58:03 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <8972A91E-F38D-4D98-B100-BAE25D17F987@recoil.org>
References: <CAGS5m-=RrjSfqcFbMCoRpYa3OB_x5F=dgDZp3=nMuf0GEWnKPQ@mail.gmail.com>
	<CAG_esB1gqHKH=_fd_4cx1JJvWR2o+psKOtFWwmdPieOxi+z=Og@mail.gmail.com>
	<CAGS5m-=KO7qjUO5=k4kFAwv_xMTTbhDfOvkkBqWVZiaNFTd9kQ@mail.gmail.com>
	<CAG_esB3PxNWKfcWWJ77ruxoyVB9J0vY=TDYagLR_yemyfJNk8w@mail.gmail.com>,
	<CAGS5m-maiacDJKQSdktHA+P_qF-Unbmvj5EDXU=PcNbDZ7U6QA@mail.gmail.com>
	<87A0C928-9B3F-46DB-A2EF-188FFEBB424F@eu.citrix.com>
	<1057E5A7-1A94-4541-979A-1821CFF65AD1@recoil.org>
	<4C20415C7327A849961F3B8421413725010CD5506A81@EXCHANGE1.ad.nottingham.ac.uk>
To: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: "opam-devel@lists.ocaml.org" <opam-devel@lists.ocaml.org>,
	cl-mirage List <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 18 Sep 2013 15:58:06 -0000
Status: O
Content-Length: 3611
Lines: 80

On 18 Sep 2013, at 12:44, Christopher Greenhalgh =
<Chris.Greenhalgh@nottingham.ac.uk> wrote:

> Is there something that passes for best practice when it comes to =
cross-compiling, ocaml and opam?=20
>=20

[I'm CCing opam-devel on this question, as it's pertinent to ongoing =
work in the trunk of OCaml]

> I've spent the morning looking but ocaml cross-compiling seems to be =
rather ad hoc at the moment. And the approach I've taken so far =
following Vouillon with separate target-specific opam packages doesn't =
seem entirely satisfactory...
>=20
> it would seem "better" to be able to switch to a cross-compiler and =
build standard (or at least cross-compilation-compatible) packages =
auto-magically. And it would be super-nice if this didn't require any =
changes to "simple" packages, which in turn implies that cross-compiling =
tools are the default and the cross-compiler's ocamlbuild is wise to =
cross-compiling. Other build tools (esp. oasis) could then also be =
extended to turn out sensible defaults when cross-compiling (e.g. using =
BuildTools fields).

Right -- the problem with cross-compiling OCaml historically has been a =
few points:

- the OCaml toolchain itself didn't support building cross-tools
- there's no standard for specifying an equivalent to CFLAGS/CC in OCaml =
build systems -- everyone defines their own.

The former is being solved in 4.2 trunk now (I believe not yet fully =
cross-arch, but certainly cross-os).  The latter is why an =
Android-specific OPAM target is what the existing repository does.

However, I think we're in much better to solve this properly now with =
compiler switches, but it will require doing two things:

- define an OPAM switch that generates the cross-libraries.  This switch =
will be incapable of executing the binaries it produces, so it's =
probably best to generate a host toolchain *and* a separate cross =
toolchain with a different prefix.

- add patches to existing build systems to use the cross tools (such as =
OASIS, as you mention).  This still requires an overlay patchset in =
OPAM, but it's far easier to manage and feed upstream that a set of =
ad-hoc patches.

- the annoying ones are usually syntax extensions, which need to be =
built as host libraries and not target libraries.  We have a way to =
sidestep this as of a few weeks ago.  Leo White has built a specialized =
compiler driver that bypasses the usual compiler parse tree, and instead =
statically links in some camlp4 extensions.  This is not only faster, =
but it avoids dynamic linking in the compiler completely!  Most of our =
syntax extension requirements are actually pretty minimal (the Lwt one, =
and perhaps Sexplib and Cow), so we could just link those into one =
mega-compiler-driver that works on all the source code that we care =
about.

https://github.com/lpw25/ocaml-with-pp

I'm playing with this at the moment in order to build a js_of_ocaml =
toplevel for the Real World OCaml website, so let me know how you get =
along with it.

> I added some notes to the end of my mirage-on-android working notes, =
https://github.com/cgreenhalgh/opensharingtoolkit/blob/master/docs/mirageo=
nandroid.md
>=20
> But I'm wondering if this is already in hand somewhere or better =
tackled otherwise?

Your notes are incredibly useful -- I think it's time to kickstart some =
of the cross-compilation work now that the OCaml 4.01 release is out of =
the way.  This also gives us a useful direction in OPAM development in =
terms of build system requirements (if you can cross-architecture =
compile it, then it'll probably work anywhere@)

-anil=


From warnegia@gmail.com Wed Sep 18 19:28:41 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMMUT-0004uo-U7 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Wed, 18 Sep 2013 19:28:41 +0100
X-Cam-SpamDetails: score -0.6 from SpamAssassin-3.3.2-1523956 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [74.125.82.45 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (warnegia[at]gmail.com)
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wg0-f45.google.com ([74.125.82.45]:35934)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1VMMUS-0005hS-j6 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Wed, 18 Sep 2013 19:28:41 +0100
Received: by mail-wg0-f45.google.com with SMTP id y10so6894698wgg.0
	for <cl-mirage@lists.cam.ac.uk>; Wed, 18 Sep 2013 11:28:40 -0700 (PDT)
X-Received: by 10.194.175.193 with SMTP id cc1mr2707322wjc.54.1379528920682;
	Wed, 18 Sep 2013 11:28:40 -0700 (PDT)
MIME-Version: 1.0
Sender: warnegia@gmail.com
Received: by 10.217.115.65 with HTTP; Wed, 18 Sep 2013 11:28:20 -0700 (PDT)
From: William Le Ferrand <William.Le-Ferrand@polytechnique.edu>
Date: Wed, 18 Sep 2013 11:28:20 -0700
X-Google-Sender-Auth: suYhMmtXOx4YUn2ChpWBMfIK75E
Message-ID: <CAGS5m-mYw8jh8kgyQRxu1oaCAoiQgoQqH5cSwZZpAskbJLNFnQ@mail.gmail.com>
Subject: mirage-xen & macos
To: cl-mirage <cl-mirage@lists.cam.ac.uk>
Content-Type: multipart/alternative; boundary=089e01419d1e46572f04e6ac9b7c
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 18 Sep 2013 18:28:42 -0000
Status: O
Content-Length: 1289
Lines: 41

--089e01419d1e46572f04e6ac9b7c
Content-Type: text/plain; charset=ISO-8859-1

hello everyone

It seems that mirage-xen is not usable from MacOS - is it really the case,
is there a workaround that?

thanks!

william

-- 
William Le Ferrand

Mobile : (+1) (415) 683-1484
Web : http://williamleferrand.github.com/
 <http://www.linkedin.com/in/williamleferrand>

--089e01419d1e46572f04e6ac9b7c
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">hello everyone<div><br></div><div>It seems that mirage-xen=
 is not usable from MacOS - is it really the case, is there a workaround th=
at?=A0</div><div><br></div><div>thanks!</div><div><br></div><div>william<br=
 clear=3D"all">

<div><br></div>-- <br>William Le Ferrand<br><br><div>Mobile :=A0(+1)=A0<spa=
n style=3D"font-family:Arial,sans-serif;border-collapse:collapse;color:rgb(=
51,51,51)">(415) 683-1484</span></div><div><font color=3D"#333333" face=3D"=
Arial, sans-serif"><span style=3D"border-collapse:collapse">Web :=A0<a href=
=3D"http://williamleferrand.github.com/" target=3D"_blank">http://williamle=
ferrand.github.com/</a></span></font><br>

<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</div></div>

--089e01419d1e46572f04e6ac9b7c--


From anil@recoil.org Wed Sep 18 19:31:11 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMMWt-0004vv-Sg (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 18 Sep 2013 19:31:11 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1523956
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:47536
	helo=dark.recoil.org)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VMMWt-0007b1-DS (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 18 Sep 2013 19:31:11 +0100
Received: (qmail 25954 invoked by uid 634); 18 Sep 2013 18:31:10 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from host81-149-212-230.in-addr.btopenworld.com (HELO [10.0.1.37])
	(81.149.212.230)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Wed, 18 Sep 2013 19:31:09 +0100
Content-Type: text/plain; charset=iso-8859-1
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: mirage-xen & macos
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <CAGS5m-mYw8jh8kgyQRxu1oaCAoiQgoQqH5cSwZZpAskbJLNFnQ@mail.gmail.com>
Date: Wed, 18 Sep 2013 19:31:07 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <AF5F486B-90C6-4782-A9D8-27CFEAAEADC8@recoil.org>
References: <CAGS5m-mYw8jh8kgyQRxu1oaCAoiQgoQqH5cSwZZpAskbJLNFnQ@mail.gmail.com>
To: William Le Ferrand <William.Le-Ferrand@polytechnique.edu>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: cl-mirage <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 18 Sep 2013 18:31:12 -0000
Status: O
Content-Length: 824
Lines: 31

It's just the final linking command that isn't working right now.  =
Getting this right is a little tricky on MacOS X, since they have been =
transitioning from GCC to an LLVM toolchain.  My 10.9 developer preview =
doesn't even have GDB installed, in fact.

So I'd suggest using a Linux VM for now until their tools settle down.   =
I agree that this support would be quite useful to upload to =
EC2/Rackspace directly from a laptop, though.

-anil


On 18 Sep 2013, at 19:28, William Le Ferrand =
<William.Le-Ferrand@polytechnique.edu> wrote:

> hello everyone
>=20
> It seems that mirage-xen is not usable from MacOS - is it really the =
case, is there a workaround that?=20
>=20
> thanks!
>=20
> william
>=20
> --=20
> William Le Ferrand
>=20
> Mobile : (+1) (415) 683-1484
> Web : http://williamleferrand.github.com/



From warnegia@gmail.com Wed Sep 18 19:33:34 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMMZC-0004wt-Cg (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Wed, 18 Sep 2013 19:33:34 +0100
X-Cam-SpamDetails: score -0.6 from SpamAssassin-3.3.2-1523956 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [74.125.82.43 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (warnegia[at]gmail.com)
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wg0-f43.google.com ([74.125.82.43]:33002)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VMMZB-0004oa-1y (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Wed, 18 Sep 2013 19:33:34 +0100
Received: by mail-wg0-f43.google.com with SMTP id z12so6760719wgg.34
	for <cl-mirage@lists.cam.ac.uk>; Wed, 18 Sep 2013 11:33:33 -0700 (PDT)
X-Received: by 10.180.171.7 with SMTP id aq7mr8194551wic.28.1379529213372;
	Wed, 18 Sep 2013 11:33:33 -0700 (PDT)
MIME-Version: 1.0
Sender: warnegia@gmail.com
Received: by 10.217.115.65 with HTTP; Wed, 18 Sep 2013 11:33:13 -0700 (PDT)
In-Reply-To: <AF5F486B-90C6-4782-A9D8-27CFEAAEADC8@recoil.org>
References: <CAGS5m-mYw8jh8kgyQRxu1oaCAoiQgoQqH5cSwZZpAskbJLNFnQ@mail.gmail.com>
	<AF5F486B-90C6-4782-A9D8-27CFEAAEADC8@recoil.org>
From: William Le Ferrand <William.Le-Ferrand@polytechnique.edu>
Date: Wed, 18 Sep 2013 11:33:13 -0700
X-Google-Sender-Auth: awGWaPMZYiRTJ1HXwQaR1FVWKlE
Message-ID: <CAGS5m-=wD7HxzFjNNY3YdASu57dpa43kAbJ7WNHtEr0YyBeG=w@mail.gmail.com>
Subject: Re: mirage-xen & macos
To: Anil Madhavapeddy <anil@recoil.org>
Content-Type: multipart/alternative; boundary=001a1135faf2b8776704e6acac36
Cc: cl-mirage <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 18 Sep 2013 18:33:34 -0000
Status: O
Content-Length: 3581
Lines: 110

--001a1135faf2b8776704e6acac36
Content-Type: text/plain; charset=ISO-8859-1

Ok, thanks, fair enough :)


On Wed, Sep 18, 2013 at 11:31 AM, Anil Madhavapeddy <anil@recoil.org> wrote:

> It's just the final linking command that isn't working right now.  Getting
> this right is a little tricky on MacOS X, since they have been
> transitioning from GCC to an LLVM toolchain.  My 10.9 developer preview
> doesn't even have GDB installed, in fact.
>
> So I'd suggest using a Linux VM for now until their tools settle down.   I
> agree that this support would be quite useful to upload to EC2/Rackspace
> directly from a laptop, though.
>
> -anil
>
>
> On 18 Sep 2013, at 19:28, William Le Ferrand <
> William.Le-Ferrand@polytechnique.edu> wrote:
>
> > hello everyone
> >
> > It seems that mirage-xen is not usable from MacOS - is it really the
> case, is there a workaround that?
> >
> > thanks!
> >
> > william
> >
> > --
> > William Le Ferrand
> >
> > Mobile : (+1) (415) 683-1484
> > Web : http://williamleferrand.github.com/
>
>


-- 
William Le Ferrand

Mobile : (+1) (415) 683-1484
Web : http://williamleferrand.github.com/
<http://www.linkedin.com/in/williamleferrand>

--001a1135faf2b8776704e6acac36
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Ok, thanks, fair enough :)</div><div class=3D"gmail_extra"=
><br><br><div class=3D"gmail_quote">On Wed, Sep 18, 2013 at 11:31 AM, Anil =
Madhavapeddy <span dir=3D"ltr">&lt;<a href=3D"mailto:anil@recoil.org" targe=
t=3D"_blank">anil@recoil.org</a>&gt;</span> wrote:<br>

<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">It&#39;s just the final linking command that=
 isn&#39;t working right now. =A0Getting this right is a little tricky on M=
acOS X, since they have been transitioning from GCC to an LLVM toolchain. =
=A0My 10.9 developer preview doesn&#39;t even have GDB installed, in fact.<=
br>


<br>
So I&#39;d suggest using a Linux VM for now until their tools settle down. =
=A0 I agree that this support would be quite useful to upload to EC2/Racksp=
ace directly from a laptop, though.<br>
<span class=3D"HOEnZb"><font color=3D"#888888"><br>
-anil<br>
</font></span><div class=3D"HOEnZb"><div class=3D"h5"><br>
<br>
On 18 Sep 2013, at 19:28, William Le Ferrand &lt;<a href=3D"mailto:William.=
Le-Ferrand@polytechnique.edu">William.Le-Ferrand@polytechnique.edu</a>&gt; =
wrote:<br>
<br>
&gt; hello everyone<br>
&gt;<br>
&gt; It seems that mirage-xen is not usable from MacOS - is it really the c=
ase, is there a workaround that?<br>
&gt;<br>
&gt; thanks!<br>
&gt;<br>
&gt; william<br>
&gt;<br>
&gt; --<br>
&gt; William Le Ferrand<br>
&gt;<br>
&gt; Mobile : <a href=3D"tel:%28%2B1%29%20%28415%29%20683-1484" value=3D"+1=
4156831484">(+1) (415) 683-1484</a><br>
&gt; Web : <a href=3D"http://williamleferrand.github.com/" target=3D"_blank=
">http://williamleferrand.github.com/</a><br>
<br>
</div></div></blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>=
William Le Ferrand<br><br><div>Mobile :=A0(+1)=A0<span style=3D"font-family=
:Arial,sans-serif;border-collapse:collapse;color:rgb(51,51,51)">(415) 683-1=
484</span></div>

<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=A0<a href=3D"http://williamleferrand.github.com=
/" target=3D"_blank">http://williamleferrand.github.com/</a></span></font><=
br><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank=
"></a></div>


</div>

--001a1135faf2b8776704e6acac36--


From warnegia@gmail.com Wed Sep 18 21:45:40 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMOd2-0006hK-Cz (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Wed, 18 Sep 2013 21:45:40 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1523956 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [74.125.82.51 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (warnegia[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wg0-f51.google.com ([74.125.82.51]:40611)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VMOd1-0006lG-2C (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Wed, 18 Sep 2013 21:45:40 +0100
Received: by mail-wg0-f51.google.com with SMTP id c11so6913114wgh.6
	for <cl-mirage@lists.cam.ac.uk>; Wed, 18 Sep 2013 13:45:39 -0700 (PDT)
X-Received: by 10.194.123.227 with SMTP id md3mr33383703wjb.17.1379537139456; 
	Wed, 18 Sep 2013 13:45:39 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.217.115.65 with HTTP; Wed, 18 Sep 2013 13:45:19 -0700 (PDT)
From: William Le Ferrand <warnegia@gmail.com>
Date: Wed, 18 Sep 2013 13:45:19 -0700
Message-ID: <CAGS5m-mvT4-Odwb+gYGwn_BT31pCBLaspntwvmgsATg7Qfjiww@mail.gmail.com>
Subject: RX error (microkernel in EC2)
To: cl-mirage <cl-mirage@lists.cam.ac.uk>
Content-Type: multipart/alternative; boundary=089e01229a5826eefd04e6ae8567
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 18 Sep 2013 20:45:40 -0000
Status: O
Content-Length: 2916
Lines: 86

--089e01229a5826eefd04e6ae8567
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

hello everyone

I'm running the simplest cohttp application possible in EC2, the instance
boots but quickly complains :


MAC: 0e:32:89:f8:03:7b
 sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
Manager: plug 0
Manager: plug done, to listener
Manager: Interface 0 to DHCP
DHCP: waiting for first offer
Manager: init done
DHCP: start discovery
Sending DHCP broadcast len 552
DHCP: start discovery
Sending DHCP broadcast len 552
DHCP: input ciaddr 0.0.0.0 yiaddr 172.31.23.46 siaddr 0.0.0.0 giaddr
0.0.0.0 chaddr  2=EF=BF=BD=EF=BF=BD { sname  file
DHCP: offer received: 172.31.23.46
Sending DHCP broadcast len 552
RX exn Invalid_argument("String.sub")


Am I doing something wrong somewhere and what would be a good strategy to
debug this?

Thanks

william

--=20
William Le Ferrand

Mobile : (+1) (415) 683-1484
Web : http://williamleferrand.github.com/
 <http://www.linkedin.com/in/williamleferrand>

--089e01229a5826eefd04e6ae8567
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">hello everyone<div><br></div><div>I&#39;m running the simp=
lest cohttp application possible in EC2, the instance boots but quickly com=
plains :=C2=A0</div><div><br></div><div><pre class=3D"" style=3D"margin-top=
:0px;margin-bottom:0px;padding:10px;font-family:&#39;Courier New&#39;,monos=
pace;line-height:12px;overflow:auto;font-size:12px;background-color:rgb(0,0=
,0);color:rgb(0,255,0);height:1023px">

MAC: 0e:32:89:f8:03:7b
 sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
Manager: plug 0
Manager: plug done, to listener
Manager: Interface 0 to DHCP
DHCP: waiting for first offer
Manager: init done
DHCP: start discovery
Sending DHCP broadcast len 552
DHCP: start discovery
Sending DHCP broadcast len 552
DHCP: input ciaddr 0.0.0.0 yiaddr 172.31.23.46 siaddr 0.0.0.0 giaddr 0.0.0.=
0 chaddr  2=EF=BF=BD=EF=BF=BD { sname  file=20
DHCP: offer received: 172.31.23.46
Sending DHCP broadcast len 552
RX exn Invalid_argument(&quot;String.sub&quot;)</pre><div><br></div><div>Am=
 I doing something wrong somewhere and what would be a good strategy to deb=
ug this?=C2=A0</div><div><br></div><div>Thanks</div><div><br></div><div>wil=
liam=C2=A0</div>

<div><br></div>-- <br>William Le Ferrand<br><br><div><div>Mobile :=C2=A0(+1=
)=C2=A0<span style=3D"font-family:Arial,sans-serif;border-collapse:collapse=
;color:rgb(51,51,51)">(415) 683-1484</span></div><div><font color=3D"#33333=
3" face=3D"Arial, sans-serif"><span style=3D"border-collapse:collapse">Web =
:=C2=A0<a href=3D"http://williamleferrand.github.com/" target=3D"_blank">ht=
tp://williamleferrand.github.com/</a></span></font></div>

<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</div></div>

--089e01229a5826eefd04e6ae8567--


From scott.dj@gmail.com Wed Sep 18 22:12:35 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMP35-00073r-Jc (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Wed, 18 Sep 2013 22:12:35 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1523956 
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (scott.dj[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.160.51 listed in list.dnswl.dnsbl.ja.net]
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-pb0-f51.google.com ([209.85.160.51]:42530)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1VMP34-0002Qb-8x (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Wed, 18 Sep 2013 22:12:35 +0100
Received: by mail-pb0-f51.google.com with SMTP id jt11so7506973pbb.24
	for <cl-mirage@lists.cam.ac.uk>; Wed, 18 Sep 2013 14:12:33 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.68.170.133 with SMTP id am5mr43010660pbc.104.1379538753717; 
	Wed, 18 Sep 2013 14:12:33 -0700 (PDT)
Received: by 10.70.56.36 with HTTP; Wed, 18 Sep 2013 14:12:33 -0700 (PDT)
In-Reply-To: <CAGS5m-mvT4-Odwb+gYGwn_BT31pCBLaspntwvmgsATg7Qfjiww@mail.gmail.com>
References: <CAGS5m-mvT4-Odwb+gYGwn_BT31pCBLaspntwvmgsATg7Qfjiww@mail.gmail.com>
Date: Wed, 18 Sep 2013 22:12:33 +0100
Message-ID: <CAG_esB0LGMw2NQJfP5rEnsoqj4KrT+CKcD-mWkFMpKXvSdfTvw@mail.gmail.com>
Subject: Re: RX error (microkernel in EC2)
From: David Scott <scott.dj@gmail.com>
To: William Le Ferrand <warnegia@gmail.com>
Content-Type: multipart/alternative; boundary=047d7b6d8ea45e8bb604e6aee59c
Cc: cl-mirage <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 18 Sep 2013 21:12:35 -0000
Status: O
Content-Length: 4668
Lines: 129

--047d7b6d8ea45e8bb604e6aee59c
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Hi,

I usually start by recompiling the app as a Unix process (using
"mirage-unix" rather than "mirage-xen"). Assuming the bug manifests there
(probably: I suspect the String.sub problem is coming from the http-level
rather than the xen driver-level) then you can use regular debugging tools,
set OCAMLRUNPARAM=3Db etc.

Debugging in-situ on EC2 is currently a matter of inserting printf's and
reading the code-- not ideal.

HTH
Dave


On Wed, Sep 18, 2013 at 9:45 PM, William Le Ferrand <warnegia@gmail.com>wro=
te:

> hello everyone
>
> I'm running the simplest cohttp application possible in EC2, the instance
> boots but quickly complains :
>
>
> MAC: 0e:32:89:f8:03:7b
>  sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
> Manager: plug 0
> Manager: plug done, to listener
> Manager: Interface 0 to DHCP
> DHCP: waiting for first offer
> Manager: init done
> DHCP: start discovery
> Sending DHCP broadcast len 552
> DHCP: start discovery
> Sending DHCP broadcast len 552
> DHCP: input ciaddr 0.0.0.0 yiaddr 172.31.23.46 siaddr 0.0.0.0 giaddr 0.0.=
0.0 chaddr  2=EF=BF=BD=EF=BF=BD { sname  file
> DHCP: offer received: 172.31.23.46
> Sending DHCP broadcast len 552
> RX exn Invalid_argument("String.sub")
>
>
> Am I doing something wrong somewhere and what would be a good strategy to
> debug this?
>
> Thanks
>
> william
>
> --
> William Le Ferrand
>
> Mobile : (+1) (415) 683-1484
> Web : http://williamleferrand.github.com/
>  <http://www.linkedin.com/in/williamleferrand>
>



--=20
Dave Scott

--047d7b6d8ea45e8bb604e6aee59c
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi,<div><br></div><div>I usually start by recompiling the =
app as a Unix process (using &quot;mirage-unix&quot; rather than &quot;mira=
ge-xen&quot;). Assuming the bug manifests there (probably: I suspect the St=
ring.sub problem is coming from the http-level rather than the xen driver-l=
evel) then you can use regular debugging tools, set OCAMLRUNPARAM=3Db etc.<=
/div>
<div><br></div><div>Debugging in-situ on EC2 is currently a matter of inser=
ting printf&#39;s and reading the code-- not ideal.</div><div><br></div><di=
v>HTH</div><div>Dave</div></div><div class=3D"gmail_extra"><br><br><div cla=
ss=3D"gmail_quote">
On Wed, Sep 18, 2013 at 9:45 PM, William Le Ferrand <span dir=3D"ltr">&lt;<=
a href=3D"mailto:warnegia@gmail.com" target=3D"_blank">warnegia@gmail.com</=
a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0=
 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir=3D"ltr">hello everyone<div><br></div><div>I&#39;m running the simp=
lest cohttp application possible in EC2, the instance boots but quickly com=
plains :=C2=A0</div><div><br></div><div><pre style=3D"margin-top:0px;margin=
-bottom:0px;padding:10px;font-family:&#39;Courier New&#39;,monospace;line-h=
eight:12px;overflow:auto;font-size:12px;background-color:rgb(0,0,0);color:r=
gb(0,255,0);min-height:1023px">

MAC: 0e:32:89:f8:03:7b
 sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
Manager: plug 0
Manager: plug done, to listener
Manager: Interface 0 to DHCP
DHCP: waiting for first offer
Manager: init done
DHCP: start discovery
Sending DHCP broadcast len 552
DHCP: start discovery
Sending DHCP broadcast len 552
DHCP: input ciaddr 0.0.0.0 yiaddr 172.31.23.46 siaddr 0.0.0.0 giaddr 0.0.0.=
0 chaddr  2=EF=BF=BD=EF=BF=BD { sname  file=20
DHCP: offer received: 172.31.23.46
Sending DHCP broadcast len 552
RX exn Invalid_argument(&quot;String.sub&quot;)</pre><div><br></div><div>Am=
 I doing something wrong somewhere and what would be a good strategy to deb=
ug this?=C2=A0</div><div><br></div><div>Thanks</div><span class=3D"HOEnZb">=
<font color=3D"#888888"><div>
<br></div><div>william=C2=A0</div>

<div><br></div>-- <br>William Le Ferrand<br><br><div><div>Mobile :=C2=A0(+1=
)=C2=A0<span style=3D"font-family:Arial,sans-serif;border-collapse:collapse=
;color:rgb(51,51,51)"><a href=3D"tel:%28415%29%20683-1484" value=3D"+141568=
31484" target=3D"_blank">(415) 683-1484</a></span></div>
<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=C2=A0<a href=3D"http://williamleferrand.github.=
com/" target=3D"_blank">http://williamleferrand.github.com/</a></span></fon=
t></div>

<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</font></span></div></div>
</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>Dave Scott
</div>

--047d7b6d8ea45e8bb604e6aee59c--


From warnegia@gmail.com Wed Sep 18 23:57:36 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMQgi-0000FP-Tz (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Wed, 18 Sep 2013 23:57:36 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1523956 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [74.125.82.178 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (warnegia[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-we0-f178.google.com ([74.125.82.178]:57619)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1VMQgi-0000g7-7F (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Wed, 18 Sep 2013 23:57:36 +0100
Received: by mail-we0-f178.google.com with SMTP id u57so7293341wes.9
	for <cl-mirage@lists.cam.ac.uk>; Wed, 18 Sep 2013 15:57:36 -0700 (PDT)
X-Received: by 10.180.160.203 with SMTP id xm11mr9044891wib.17.1379545055587; 
	Wed, 18 Sep 2013 15:57:35 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.217.115.65 with HTTP; Wed, 18 Sep 2013 15:57:15 -0700 (PDT)
In-Reply-To: <CAG_esB0LGMw2NQJfP5rEnsoqj4KrT+CKcD-mWkFMpKXvSdfTvw@mail.gmail.com>
References: <CAGS5m-mvT4-Odwb+gYGwn_BT31pCBLaspntwvmgsATg7Qfjiww@mail.gmail.com>
	<CAG_esB0LGMw2NQJfP5rEnsoqj4KrT+CKcD-mWkFMpKXvSdfTvw@mail.gmail.com>
From: William Le Ferrand <warnegia@gmail.com>
Date: Wed, 18 Sep 2013 15:57:15 -0700
Message-ID: <CAGS5m-ny83zMEWSTCZuwSEBV6CGcdCLMho4qLS3164qS7zsvPA@mail.gmail.com>
Subject: Re: RX error (microkernel in EC2)
To: David Scott <scott.dj@gmail.com>
Content-Type: multipart/alternative; boundary=047d7b66f907fd75ef04e6b05cc9
Cc: cl-mirage <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 18 Sep 2013 22:57:37 -0000
Status: O
Content-Length: 6228
Lines: 181

--047d7b66f907fd75ef04e6b05cc9
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Yes, I tried that but the error only occurs in EC2; it's raised somewhere
in the DHCP module it seems ..


On Wed, Sep 18, 2013 at 2:12 PM, David Scott <scott.dj@gmail.com> wrote:

> Hi,
>
> I usually start by recompiling the app as a Unix process (using
> "mirage-unix" rather than "mirage-xen"). Assuming the bug manifests there
> (probably: I suspect the String.sub problem is coming from the http-level
> rather than the xen driver-level) then you can use regular debugging tool=
s,
> set OCAMLRUNPARAM=3Db etc.
>
> Debugging in-situ on EC2 is currently a matter of inserting printf's and
> reading the code-- not ideal.
>
> HTH
> Dave
>
>
> On Wed, Sep 18, 2013 at 9:45 PM, William Le Ferrand <warnegia@gmail.com>w=
rote:
>
>> hello everyone
>>
>> I'm running the simplest cohttp application possible in EC2, the instanc=
e
>> boots but quickly complains :
>>
>>
>>
>> MAC: 0e:32:89:f8:03:7b
>>  sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
>> Manager: plug 0
>> Manager: plug done, to listener
>> Manager: Interface 0 to DHCP
>> DHCP: waiting for first offer
>> Manager: init done
>> DHCP: start discovery
>> Sending DHCP broadcast len 552
>> DHCP: start discovery
>> Sending DHCP broadcast len 552
>> DHCP: input ciaddr 0.0.0.0 yiaddr 172.31.23.46 siaddr 0.0.0.0 giaddr 0.0=
.0.0 chaddr  2=EF=BF=BD=EF=BF=BD { sname  file
>> DHCP: offer received: 172.31.23.46
>> Sending DHCP broadcast len 552
>> RX exn Invalid_argument("String.sub")
>>
>>
>> Am I doing something wrong somewhere and what would be a good strategy t=
o
>> debug this?
>>
>> Thanks
>>
>> william
>>
>> --
>> William Le Ferrand
>>
>> Mobile : (+1) (415) 683-1484
>> Web : http://williamleferrand.github.com/
>>  <http://www.linkedin.com/in/williamleferrand>
>>
>
>
>
> --
> Dave Scott
>



--=20
William Le Ferrand

Mobile : (+1) (415) 683-1484
Web : http://williamleferrand.github.com/
<http://www.linkedin.com/in/williamleferrand>

--047d7b66f907fd75ef04e6b05cc9
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Yes, I tried that but the error only occurs in EC2; it&#39=
;s raised somewhere in the DHCP module it seems ..</div><div class=3D"gmail=
_extra"><br><br><div class=3D"gmail_quote">On Wed, Sep 18, 2013 at 2:12 PM,=
 David Scott <span dir=3D"ltr">&lt;<a href=3D"mailto:scott.dj@gmail.com" ta=
rget=3D"_blank">scott.dj@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hi,<div><br></div><div>I us=
ually start by recompiling the app as a Unix process (using &quot;mirage-un=
ix&quot; rather than &quot;mirage-xen&quot;). Assuming the bug manifests th=
ere (probably: I suspect the String.sub problem is coming from the http-lev=
el rather than the xen driver-level) then you can use regular debugging too=
ls, set OCAMLRUNPARAM=3Db etc.</div>


<div><br></div><div>Debugging in-situ on EC2 is currently a matter of inser=
ting printf&#39;s and reading the code-- not ideal.</div><div><br></div><di=
v>HTH</div><div>Dave</div></div><div class=3D"gmail_extra"><div><div class=
=3D"h5">

<br><br><div class=3D"gmail_quote">
On Wed, Sep 18, 2013 at 9:45 PM, William Le Ferrand <span dir=3D"ltr">&lt;<=
a href=3D"mailto:warnegia@gmail.com" target=3D"_blank">warnegia@gmail.com</=
a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0=
 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div dir=3D"ltr">hello everyone<div><br></div><div>I&#39;m running the simp=
lest cohttp application possible in EC2, the instance boots but quickly com=
plains :=C2=A0</div><div><br></div><div><pre style=3D"margin-top:0px;margin=
-bottom:0px;padding:10px;font-family:&#39;Courier New&#39;,monospace;line-h=
eight:12px;overflow:auto;font-size:12px;background-color:rgb(0,0,0);color:r=
gb(0,255,0);min-height:1023px">


MAC: 0e:32:89:f8:03:7b
 sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
Manager: plug 0
Manager: plug done, to listener
Manager: Interface 0 to DHCP
DHCP: waiting for first offer
Manager: init done
DHCP: start discovery
Sending DHCP broadcast len 552
DHCP: start discovery
Sending DHCP broadcast len 552
DHCP: input ciaddr 0.0.0.0 yiaddr 172.31.23.46 siaddr 0.0.0.0 giaddr 0.0.0.=
0 chaddr  2=EF=BF=BD=EF=BF=BD { sname  file=20
DHCP: offer received: 172.31.23.46
Sending DHCP broadcast len 552
RX exn Invalid_argument(&quot;String.sub&quot;)</pre><div><br></div><div>Am=
 I doing something wrong somewhere and what would be a good strategy to deb=
ug this?=C2=A0</div><div><br></div><div>Thanks</div><span><font color=3D"#8=
88888"><div>


<br></div><div>william=C2=A0</div>

<div><br></div>-- <br>William Le Ferrand<br><br><div><div>Mobile :=C2=A0(+1=
)=C2=A0<span style=3D"font-family:Arial,sans-serif;border-collapse:collapse=
;color:rgb(51,51,51)"><a href=3D"tel:%28415%29%20683-1484" value=3D"+141568=
31484" target=3D"_blank">(415) 683-1484</a></span></div>


<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=C2=A0<a href=3D"http://williamleferrand.github.=
com/" target=3D"_blank">http://williamleferrand.github.com/</a></span></fon=
t></div>

<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</font></span></div></div>
</blockquote></div><br><br clear=3D"all"><div><br></div></div></div><span c=
lass=3D"HOEnZb"><font color=3D"#888888">-- <br>Dave Scott
</font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>William Le F=
errand<br><br><div><div>Mobile :=C2=A0(+1)=C2=A0<span style=3D"font-family:=
Arial,sans-serif;border-collapse:collapse;color:rgb(51,51,51)">(415) 683-14=
84</span></div>

<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=C2=A0<a href=3D"http://williamleferrand.github.=
com/" target=3D"_blank">http://williamleferrand.github.com/</a></span></fon=
t></div><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_=
blank"></a></div>


</div>

--047d7b66f907fd75ef04e6b05cc9--


From warnegia@gmail.com Thu Sep 19 00:54:30 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMRZm-0000sR-IF (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Thu, 19 Sep 2013 00:54:30 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1523956 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.212.180 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (warnegia[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f180.google.com ([209.85.212.180]:61126)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1VMRZl-0003DD-j2 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Thu, 19 Sep 2013 00:54:30 +0100
Received: by mail-wi0-f180.google.com with SMTP id hj3so7275504wib.7
	for <cl-mirage@lists.cam.ac.uk>; Wed, 18 Sep 2013 16:54:29 -0700 (PDT)
X-Received: by 10.180.187.169 with SMTP id ft9mr9297564wic.14.1379548469660;
	Wed, 18 Sep 2013 16:54:29 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.217.115.65 with HTTP; Wed, 18 Sep 2013 16:54:09 -0700 (PDT)
From: William Le Ferrand <warnegia@gmail.com>
Date: Wed, 18 Sep 2013 16:54:09 -0700
Message-ID: <CAGS5m-=YxV9xiHuSb_gZE37xJ+V_2R1wQ2mc5M7uuxvOw9-W3A@mail.gmail.com>
Subject: cohttp_lwt_mirage.ml / client
To: cl-mirage <cl-mirage@lists.cam.ac.uk>
Content-Type: multipart/alternative; boundary=001a11c337587c12e904e6b1286d
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 18 Sep 2013 23:54:30 -0000
Status: O
Content-Length: 1581
Lines: 51

--001a11c337587c12e904e6b1286d
Content-Type: text/plain; charset=ISO-8859-1

Hello everyone

Is there a version of Cohttp_lwt_mirage.Client that works somewhere? Is
there any special difficulties with it? The one on github has fail "no
implemented" here and there.

Thanks!

William

-- 
William Le Ferrand

Mobile : (+1) (415) 683-1484
Web : http://williamleferrand.github.com/
<http://www.linkedin.com/in/williamleferrand>

<http://www.linkedin.com/in/williamleferrand>

--001a11c337587c12e904e6b1286d
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hello everyone<div><br></div><div>Is there a version of Co=
http_lwt_mirage.Client that works somewhere? Is there any special difficult=
ies with it? The one on github has fail &quot;no implemented&quot; here and=
 there.=A0</div>


<div><br></div><div>Thanks!</div><div><br></div><div>William<br clear=3D"al=
l"><div><br></div>-- <br>William Le Ferrand<br><br><div><div>Mobile :=A0(+1=
)=A0<span style=3D"font-family:Arial,sans-serif;border-collapse:collapse;co=
lor:rgb(51,51,51)">(415) 683-1484</span></div>

<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=A0<a href=3D"http://williamleferrand.github.com=
/" target=3D"_blank">http://williamleferrand.github.com/</a></span></font><=
/div><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_bla=
nk"></a></div>


<br><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blan=
k"></a></div>

</div>

--001a11c337587c12e904e6b1286d--


From anil@recoil.org Thu Sep 19 00:56:13 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMRbR-0000tH-LQ (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 19 Sep 2013 00:56:13 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1523956
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:22334
	helo=dark.recoil.org)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with smtp id 1VMRbR-0003R3-gB (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 19 Sep 2013 00:56:13 +0100
Received: (qmail 14593 invoked by uid 634); 18 Sep 2013 23:56:11 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from cpc7-cmbg14-2-0-cust238.5-4.cable.virginmedia.com (HELO
	[192.168.1.68]) (86.30.244.239)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Thu, 19 Sep 2013 00:56:11 +0100
Content-Type: text/plain; charset=iso-8859-1
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: cohttp_lwt_mirage.ml / client
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <CAGS5m-=YxV9xiHuSb_gZE37xJ+V_2R1wQ2mc5M7uuxvOw9-W3A@mail.gmail.com>
Date: Thu, 19 Sep 2013 00:56:10 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <CE9A5C40-C924-4195-ABEC-17FCB1521C67@recoil.org>
References: <CAGS5m-=YxV9xiHuSb_gZE37xJ+V_2R1wQ2mc5M7uuxvOw9-W3A@mail.gmail.com>
To: William Le Ferrand <warnegia@gmail.com>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: Balraj Singh <balraj.singh@cl.cam.ac.uk>,
	cl-mirage List <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 18 Sep 2013 23:56:13 -0000
Status: O
Content-Length: 621
Lines: 26

I didn't fill it out as I was waiting for Balraj's TCP connect state =
machine to be tested (we were mainly just testing servers before).  =
Balraj: is that in trunk in mirage-net now?

-anil

On 19 Sep 2013, at 00:54, William Le Ferrand <warnegia@gmail.com> wrote:

> Hello everyone
>=20
> Is there a version of Cohttp_lwt_mirage.Client that works somewhere? =
Is there any special difficulties with it? The one on github has fail =
"no implemented" here and there.=20
>=20
> Thanks!
>=20
> William
>=20
> --=20
> William Le Ferrand
>=20
> Mobile : (+1) (415) 683-1484
> Web : http://williamleferrand.github.com/
>=20



From vb@luminar.eu.org Thu Sep 19 08:55:51 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMZ5b-00014j-S9 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <vb@luminar.eu.org>); Thu, 19 Sep 2013 08:55:51 +0100
X-Cam-SpamDetails: score -0.6 from SpamAssassin-3.3.2-1524337 
	* -0.6 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from luminar.eu.org ([94.23.24.152]:46446)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VMZ5b-0004Sa-0v (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <vb@luminar.eu.org>); Thu, 19 Sep 2013 08:55:51 +0100
Received: from [192.168.1.109] (vb.fdn.fr [80.67.176.29])
	(using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by luminar.eu.org (Postfix) with ESMTPSA id 1236C6186F
	for <cl-mirage@lists.cam.ac.uk>; Thu, 19 Sep 2013 09:55:50 +0200 (CEST)
Message-ID: <523AAE05.8080103@luminar.eu.org>
Date: Thu, 19 Sep 2013 09:55:49 +0200
From: "Vincent B." <vb@luminar.eu.org>
User-Agent: Mozilla/5.0 (X11; Linux x86_64;
	rv:17.0) Gecko/20130806 Thunderbird/17.0.8
MIME-Version: 1.0
To: cl-mirage@lists.cam.ac.uk
Subject: Re: opam install vchan failed
References: <CALZQg1bnk2dZibq3EBKhKFa9y=CHywipsHgjobnu_Yh1ht29WA@mail.gmail.com>
	<F85826DC-7349-4D05-8CBC-9170A3C4769B@recoil.org>
In-Reply-To: <F85826DC-7349-4D05-8CBC-9170A3C4769B@recoil.org>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 19 Sep 2013 07:55:51 -0000
Status: O
Content-Length: 415
Lines: 16

On 16/09/2013 17:22, Anil Madhavapeddy wrote:
> I don't believe Vchan has been released to OPAM yet (or at least, I
> don't recall merging it).
>
> Dave, Jon?
>
> -anil
>

The OPAM package for vchan is not released yet indeed. For now 
everything is in git://github.com/vbmithr/ocaml-vchan (or 
git://github.com/mirage/ocaml-vchan) if mirage has been sync-ed with my 
repo (which was not the case AFAIR).

Vincent


From Chris.Greenhalgh@nottingham.ac.uk Thu Sep 19 10:08:35 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMaDz-0004SO-9w (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Thu, 19 Sep 2013 10:08:35 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1524337 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine05-20433-5.icritical.com ([93.95.15.171]:36558)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1VMaDy-0003We-2J (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Chris.Greenhalgh@nottingham.ac.uk>);
	Thu, 19 Sep 2013 10:08:35 +0100
Received: (qmail 29619 invoked from network); 19 Sep 2013 09:08:36 -0000
Received: from localhost (127.0.0.1)
	by engine05-20433-5.icritical.com with SMTP; 19 Sep 2013 09:08:36 -0000
Received: from engine05-20433-5.icritical.com ([127.0.0.1])
	by localhost (engine05-20433-5.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 29344-05 for <cl-mirage@lists.cam.ac.uk>;
	Thu, 19 Sep 2013 10:08:26 +0100 (BST)
Received: (qmail 26811 invoked by uid 599); 19 Sep 2013 08:55:52 -0000
Received: from unknown (HELO smtp4.nottingham.ac.uk) (128.243.220.65)
	by engine05-20433-5.icritical.com (qpsmtpd/0.28) with ESMTP;
	Thu, 19 Sep 2013 09:55:52 +0100
Received: from uiwexhub02.ad.nottingham.ac.uk ([128.243.15.132])
	by smtp4.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Chris.Greenhalgh@nottingham.ac.uk>)
	id 1VMa1k-0006N3-PA
	for cl-mirage@lists.cam.ac.uk; Thu, 19 Sep 2013 09:55:56 +0100
From: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
To: Anil Madhavapeddy <anil@recoil.org>
Date: Thu, 19 Sep 2013 09:55:55 +0100
Subject: RE: mirage, opam and cross-compiling... ?
Thread-Topic: mirage, opam and cross-compiling... ?
Thread-Index: Ac60h+DzXC7NgxHjReOAGIa61u+AOgAjMY5g
Message-ID: <4C20415C7327A849961F3B8421413725010CD5506A95@EXCHANGE1.ad.nottingham.ac.uk>
References: <CAGS5m-=RrjSfqcFbMCoRpYa3OB_x5F=dgDZp3=nMuf0GEWnKPQ@mail.gmail.com>
	<CAG_esB1gqHKH=_fd_4cx1JJvWR2o+psKOtFWwmdPieOxi+z=Og@mail.gmail.com>
	<CAGS5m-=KO7qjUO5=k4kFAwv_xMTTbhDfOvkkBqWVZiaNFTd9kQ@mail.gmail.com>
	<CAG_esB3PxNWKfcWWJ77ruxoyVB9J0vY=TDYagLR_yemyfJNk8w@mail.gmail.com>,
	<CAGS5m-maiacDJKQSdktHA+P_qF-Unbmvj5EDXU=PcNbDZ7U6QA@mail.gmail.com>
	<87A0C928-9B3F-46DB-A2EF-188FFEBB424F@eu.citrix.com>
	<1057E5A7-1A94-4541-979A-1821CFF65AD1@recoil.org>
	<4C20415C7327A849961F3B8421413725010CD5506A81@EXCHANGE1.ad.nottingham.ac.uk>
	<8972A91E-F38D-4D98-B100-BAE25D17F987@recoil.org>
In-Reply-To: <8972A91E-F38D-4D98-B100-BAE25D17F987@recoil.org>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine05-20433-5.icritical.com
Cc: "opam-devel@lists.ocaml.org" <opam-devel@lists.ocaml.org>,
	cl-mirage List <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 19 Sep 2013 09:08:35 -0000
Status: O
Content-Length: 2392
Lines: 42

On 18 September 2013 16:58 Anil Madhavapeddy wrote:

>- there's no standard for specifying an equivalent to CFLAGS/CC in OCaml b=
uild systems -- everyone defines their own.

I did some thinking about (something that turned out to be equivalent to) t=
his and I came up with what - to me - seems like a sensible scheme; for pos=
terity I've noted it here: https://github.com/cgreenhalgh/ocaml-crosscompil=
ing/blob/master/docs/toolchainproposal.md=20
but probably it should be fed somewhere else as it would involve a new flag=
 in all the ocaml commands...

>- the annoying ones are usually syntax extensions, which need to be built =
as host libraries and not target libraries.  We have a way to sidestep this=
 as of a few weeks ago.  Leo White has built a specialized compiler driver =
that bypasses the usual compiler parse tree, and instead statically links i=
n some camlp4 extensions.  This is not only faster, but it avoids dynamic l=
inking in the compiler completely!  Most of our syntax extension requiremen=
ts are actually pretty minimal (the Lwt one, and perhaps Sexplib and Cow), =
so we could just link those into one mega-compiler-driver that works on all=
 the source code that we care about.

With and ocaml-android cross-compiler this seems to have 'just worked' so f=
ar, presumably because it is using the syntax extensions as bytecode only a=
nd they have no dependencies on native libraries. (I haven't dug enough to =
see exactly what is going on yet). Potentially fragile, though...

p.s.  I've left a link but moved my notes to a new git repo, https://github=
.com/cgreenhalgh/ocaml-crosscompiling )

Cheers
Chris

This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From hohoangphi@gmail.com Thu Sep 19 10:10:09 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMaFV-0004We-0z (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Thu, 19 Sep 2013 10:10:09 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1524337 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.215.50 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (hohoangphi[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-la0-f50.google.com ([209.85.215.50]:36115)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1VMaFT-0004ur-Dl (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Thu, 19 Sep 2013 10:10:08 +0100
Received: by mail-la0-f50.google.com with SMTP id gx14so1722368lab.37
	for <cl-mirage@lists.cam.ac.uk>; Thu, 19 Sep 2013 02:10:06 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.152.120.37 with SMTP id kz5mr397871lab.21.1379581806683;
	Thu, 19 Sep 2013 02:10:06 -0700 (PDT)
Received: by 10.112.72.4 with HTTP; Thu, 19 Sep 2013 02:10:06 -0700 (PDT)
In-Reply-To: <523AAE05.8080103@luminar.eu.org>
References: <CALZQg1bnk2dZibq3EBKhKFa9y=CHywipsHgjobnu_Yh1ht29WA@mail.gmail.com>
	<F85826DC-7349-4D05-8CBC-9170A3C4769B@recoil.org>
	<523AAE05.8080103@luminar.eu.org>
Date: Thu, 19 Sep 2013 05:10:06 -0400
Message-ID: <CALZQg1bcWe4KPtwYTCh+JEQFNxqwDoEnGYgnHQ2bTBnpwbjuYw@mail.gmail.com>
Subject: Re: opam install vchan failed
From: Phiho Hoang <hohoangphi@gmail.com>
To: "Vincent B." <vb@luminar.eu.org>
Content-Type: multipart/alternative; boundary=089e0122814886ab9904e6b8ebb9
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 19 Sep 2013 09:10:09 -0000
Status: O
Content-Length: 6508
Lines: 153

--089e0122814886ab9904e6b8ebb9
Content-Type: text/plain; charset=ISO-8859-1

Hi,

Thank you for the info.

I performed the following steps:

$ git clone https://github.com/mirage/ocaml-vchan.git
$ cd ocaml-vchan
$ make
$ make install

# Following instructions from here http://openmirage.org/blog/
$ cd test
$ mirari configure --xen --no-install
$ mirari build --xen
[mirari] Using scanned config file node.conf
[mirari] + Executing: make build
rm -rf _build
mkdir -p _build/lib
ocamlbuild -classic-display -use-ocamlfind -lflag -linkpkg -lflag -dontlink
-lflag unix -pkgs lwt.syntax,vchan -tags "syntax(camlp4o)" main.native.o
ocamlfind ocamlopt -I /usr/lib/ocaml/ocamlbuild unix.cmxa
/usr/lib/ocaml/ocamlbuild/ocamlbuildlib.cmxa
myocamlbuild.ml/usr/lib/ocaml/ocamlbuild/ocamlbuild.cmx
-o myocamlbuild
ocamlfind ocamldep -package vchan -package lwt.syntax -syntax camlp4o
-modules main.ml > main.ml.depends
ocamlfind ocamldep -package vchan -package lwt.syntax -syntax camlp4o
-modules backend.ml > backend.ml.depends
ocamlfind ocamldep -package vchan -package lwt.syntax -syntax camlp4o
-modules node_mirage.ml > node_mirage.ml.depends
ocamlfind ocamldep -package vchan -package lwt.syntax -syntax camlp4o
-modules node.ml > node.ml.depends
ocamlfind ocamldep -package vchan -package lwt.syntax -syntax camlp4o
-modules xs.ml > xs.ml.depends
ocamlfind ocamlc -c -package vchan -package lwt.syntax -syntax camlp4o -o
xs.cmo xs.ml
+ ocamlfind ocamlc -c -package vchan -package lwt.syntax -syntax camlp4o -o
xs.cmo xs.ml
File "xs.ml", line 1, characters 29-57:
Error: Unbound module Xs_transport_lwt_unix_client
Command exited with code 2.
make: *** [main.native] Error 10
[mirari] ERROR: The command "make build" exited with code 2.

Apparently I missed some steps here.

Thank you for your help.

PhiHo



On Thu, Sep 19, 2013 at 3:55 AM, Vincent B. <vb@luminar.eu.org> wrote:

> On 16/09/2013 17:22, Anil Madhavapeddy wrote:
>
>> I don't believe Vchan has been released to OPAM yet (or at least, I
>> don't recall merging it).
>>
>> Dave, Jon?
>>
>> -anil
>>
>>
> The OPAM package for vchan is not released yet indeed. For now everything
> is in git://github.com/vbmithr/**ocaml-vchan<http://github.com/vbmithr/ocaml-vchan>(or git://
> github.com/mirage/ocaml-**vchan <http://github.com/mirage/ocaml-vchan>)
> if mirage has been sync-ed with my repo (which was not the case AFAIR).
>
> Vincent
>
>

--089e0122814886ab9904e6b8ebb9
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi,<div><br></div><div>Thank you for the info.</div><div><=
br></div><div>I performed the following steps:</div><div><br></div><div>$ g=
it clone <a href=3D"https://github.com/mirage/ocaml-vchan.git">https://gith=
ub.com/mirage/ocaml-vchan.git</a>=A0</div>
<div>$ cd ocaml-vchan</div><div>$ make</div><div>$ make install<br></div><d=
iv><br></div><div># Following instructions from here=A0<a href=3D"http://op=
enmirage.org/blog/">http://openmirage.org/blog/</a></div><div>$ cd test</di=
v>
<div><div>$ mirari configure --xen --no-install</div><div>$ mirari build --=
xen</div></div><div><div>[mirari] Using scanned config file node.conf</div>=
<div>[mirari] + Executing: make build</div><div>rm -rf _build</div><div>
mkdir -p _build/lib</div><div>ocamlbuild -classic-display -use-ocamlfind -l=
flag -linkpkg -lflag -dontlink -lflag unix -pkgs lwt.syntax,vchan -tags &qu=
ot;syntax(camlp4o)&quot; main.native.o</div><div>ocamlfind ocamlopt -I /usr=
/lib/ocaml/ocamlbuild unix.cmxa /usr/lib/ocaml/ocamlbuild/ocamlbuildlib.cmx=
a <a href=3D"http://myocamlbuild.ml">myocamlbuild.ml</a> /usr/lib/ocaml/oca=
mlbuild/ocamlbuild.cmx =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0-o myocamlbuild</div>
<div>ocamlfind ocamldep -package vchan -package lwt.syntax -syntax camlp4o =
-modules <a href=3D"http://main.ml">main.ml</a> &gt; main.ml.depends</div><=
div>ocamlfind ocamldep -package vchan -package lwt.syntax -syntax camlp4o -=
modules <a href=3D"http://backend.ml">backend.ml</a> &gt; backend.ml.depend=
s</div>
<div>ocamlfind ocamldep -package vchan -package lwt.syntax -syntax camlp4o =
-modules <a href=3D"http://node_mirage.ml">node_mirage.ml</a> &gt; node_mir=
age.ml.depends</div><div>ocamlfind ocamldep -package vchan -package lwt.syn=
tax -syntax camlp4o -modules <a href=3D"http://node.ml">node.ml</a> &gt; no=
de.ml.depends</div>
<div>ocamlfind ocamldep -package vchan -package lwt.syntax -syntax camlp4o =
-modules <a href=3D"http://xs.ml">xs.ml</a> &gt; xs.ml.depends</div><div>oc=
amlfind ocamlc -c -package vchan -package lwt.syntax -syntax camlp4o -o xs.=
cmo <a href=3D"http://xs.ml">xs.ml</a></div>
<div>+ ocamlfind ocamlc -c -package vchan -package lwt.syntax -syntax camlp=
4o -o xs.cmo <a href=3D"http://xs.ml">xs.ml</a></div><div>File &quot;<a hre=
f=3D"http://xs.ml">xs.ml</a>&quot;, line 1, characters 29-57:</div><div>Err=
or: Unbound module Xs_transport_lwt_unix_client</div>
<div>Command exited with code 2.</div><div>make: *** [main.native] Error 10=
</div><div>[mirari] ERROR: The command &quot;make build&quot; exited with c=
ode 2.</div></div><div><br></div><div>Apparently I missed some steps here.<=
/div>
<div><br></div><div>Thank you for your help.</div><div><br></div><div>PhiHo=
</div><div><br></div></div><div class=3D"gmail_extra"><br><br><div class=3D=
"gmail_quote">On Thu, Sep 19, 2013 at 3:55 AM, Vincent B. <span dir=3D"ltr"=
>&lt;<a href=3D"mailto:vb@luminar.eu.org" target=3D"_blank">vb@luminar.eu.o=
rg</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div class=3D"im">On 16/09/2013 17:22, Anil =
Madhavapeddy wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
I don&#39;t believe Vchan has been released to OPAM yet (or at least, I<br>
don&#39;t recall merging it).<br>
<br>
Dave, Jon?<br>
<br>
-anil<br>
<br>
</blockquote>
<br></div>
The OPAM package for vchan is not released yet indeed. For now everything i=
s in git://<a href=3D"http://github.com/vbmithr/ocaml-vchan" target=3D"_bla=
nk">github.com/vbmithr/<u></u>ocaml-vchan</a> (or git://<a href=3D"http://g=
ithub.com/mirage/ocaml-vchan" target=3D"_blank">github.com/mirage/ocaml-<u>=
</u>vchan</a>) if mirage has been sync-ed with my repo (which was not the c=
ase AFAIR).<span class=3D"HOEnZb"><font color=3D"#888888"><br>

<br>
Vincent<br>
<br>
</font></span></blockquote></div><br></div>

--089e0122814886ab9904e6b8ebb9--


From vb@luminar.eu.org Thu Sep 19 10:21:40 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMaQe-0004qa-Nv (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <vb@luminar.eu.org>); Thu, 19 Sep 2013 10:21:40 +0100
X-Cam-SpamDetails: score -0.6 from SpamAssassin-3.3.2-1524337 
	* -0.6 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from luminar.eu.org ([94.23.24.152]:34644)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VMaQe-0001Nf-1T (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <vb@luminar.eu.org>); Thu, 19 Sep 2013 10:21:40 +0100
Received: from [192.168.1.103] (haramis.fdn.org [80.67.176.29])
	(using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by luminar.eu.org (Postfix) with ESMTPSA id 342A3602CB
	for <cl-mirage@lists.cam.ac.uk>; Thu, 19 Sep 2013 11:21:40 +0200 (CEST)
Message-ID: <523AC223.7020005@luminar.eu.org>
Date: Thu, 19 Sep 2013 11:21:39 +0200
From: "Vincent B." <vb@luminar.eu.org>
User-Agent: Mozilla/5.0 (X11; Linux x86_64;
	rv:17.0) Gecko/20130806 Thunderbird/17.0.8
MIME-Version: 1.0
To: cl-mirage@lists.cam.ac.uk
Subject: Re: opam install vchan failed
References: <CALZQg1bnk2dZibq3EBKhKFa9y=CHywipsHgjobnu_Yh1ht29WA@mail.gmail.com>
	<F85826DC-7349-4D05-8CBC-9170A3C4769B@recoil.org>
	<523AAE05.8080103@luminar.eu.org>
	<CALZQg1bcWe4KPtwYTCh+JEQFNxqwDoEnGYgnHQ2bTBnpwbjuYw@mail.gmail.com>
In-Reply-To: <CALZQg1bcWe4KPtwYTCh+JEQFNxqwDoEnGYgnHQ2bTBnpwbjuYw@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 19 Sep 2013 09:21:40 -0000
Status: O
Content-Length: 290
Lines: 18

On 19/09/2013 11:10, Phiho Hoang wrote:
> Hi,
>
> Thank you for the info.
>
> I performed the following steps:

[...]

> Apparently I missed some steps here.
>

You miss the xenstore package (and/or xenstore_transport).
Try installing those two packages with OPAM and try again.

Vincent



From hohoangphi@gmail.com Thu Sep 19 10:51:38 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMate-0006B5-QA (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Thu, 19 Sep 2013 10:51:38 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1524337 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.217.173 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (hohoangphi[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-lb0-f173.google.com ([209.85.217.173]:37253)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1VMatd-0006MI-9I (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <hohoangphi@gmail.com>); Thu, 19 Sep 2013 10:51:38 +0100
Received: by mail-lb0-f173.google.com with SMTP id o14so7519080lbi.4
	for <cl-mirage@lists.cam.ac.uk>; Thu, 19 Sep 2013 02:51:37 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.112.167.3 with SMTP id zk3mr1093844lbb.23.1379584297313;
	Thu, 19 Sep 2013 02:51:37 -0700 (PDT)
Received: by 10.112.72.4 with HTTP; Thu, 19 Sep 2013 02:51:37 -0700 (PDT)
In-Reply-To: <523AC223.7020005@luminar.eu.org>
References: <CALZQg1bnk2dZibq3EBKhKFa9y=CHywipsHgjobnu_Yh1ht29WA@mail.gmail.com>
	<F85826DC-7349-4D05-8CBC-9170A3C4769B@recoil.org>
	<523AAE05.8080103@luminar.eu.org>
	<CALZQg1bcWe4KPtwYTCh+JEQFNxqwDoEnGYgnHQ2bTBnpwbjuYw@mail.gmail.com>
	<523AC223.7020005@luminar.eu.org>
Date: Thu, 19 Sep 2013 05:51:37 -0400
Message-ID: <CALZQg1aA3u=pe5TLSaVOjCcnxAzpCLa_Dsz66n0VwkJWCovkXg@mail.gmail.com>
Subject: Re: opam install vchan failed
From: Phiho Hoang <hohoangphi@gmail.com>
To: "Vincent B." <vb@luminar.eu.org>
Content-Type: multipart/alternative; boundary=001a11c264a4faa97104e6b97f6d
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 19 Sep 2013 09:51:38 -0000
Status: O
Content-Length: 4767
Lines: 141

--001a11c264a4faa97104e6b97f6d
Content-Type: text/plain; charset=ISO-8859-1

$ opam install xenstore
Adding xenstore.1.2.3 to the list of installed roots.

...
$ opam update
...
...
$ opam upgrade
...

$ opam install xenstore_transport
The following actions will be performed:
 - install xenstore_transport.0.9.2
1 to install | 0 to reinstall | 0 to upgrade | 0 to downgrade | 0 to remove

=-=-= Installing xenstore_transport.0.9.2 =-=-=
...
...

Building xenstore_transport.0.9.2:
  make all
  make install
Installing xenstore_transport.0.9.2.
$ mirari build --xen
[mirari] Using scanned config file node.conf
[mirari] + Executing: make build
ocamlbuild -classic-display -use-ocamlfind -lflag -linkpkg -lflag -dontlink
-lflag unix -pkgs lwt.syntax,vchan -tags "syntax(camlp4o)" main.native.o
ocamlfind ocamlc -c -package vchan -package lwt.syntax -syntax camlp4o -o
xs.cmo xs.ml
+ ocamlfind ocamlc -c -package vchan -package lwt.syntax -syntax camlp4o -o
xs.cmo xs.ml
File "xs.ml", line 1, characters 29-57:
Error: Unbound module Xs_transport_lwt_unix_client
Command exited with code 2.
make: *** [main.native] Error 10
[mirari] ERROR: The command "make build" exited with code 2.

I am getting closer but not quite there yet.

Thank you for your help.

PhiHo



On Thu, Sep 19, 2013 at 5:21 AM, Vincent B. <vb@luminar.eu.org> wrote:

> On 19/09/2013 11:10, Phiho Hoang wrote:
>
>> Hi,
>>
>> Thank you for the info.
>>
>> I performed the following steps:
>>
>
> [...]
>
>
>  Apparently I missed some steps here.
>>
>>
> You miss the xenstore package (and/or xenstore_transport).
> Try installing those two packages with OPAM and try again.
>
> Vincent
>
>
>

--001a11c264a4faa97104e6b97f6d
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>$ opam install xenstore</div><div>Adding xenstore.1.2=
.3 to the list of installed roots.</div><div><br></div><div><div>...</div><=
div>$ opam update</div><div>...</div><div>...</div><div>$ opam upgrade</div=
>
<div>...</div></div><div><br></div><div><div>$ opam install xenstore_transp=
ort</div><div>The following actions will be performed:</div><div>=A0- insta=
ll xenstore_transport.0.9.2</div><div>1 to install | 0 to reinstall | 0 to =
upgrade | 0 to downgrade | 0 to remove</div>
<div><br></div><div>=3D-=3D-=3D Installing xenstore_transport.0.9.2 =3D-=3D=
-=3D</div></div><div>...</div><div>...<br></div><div><br></div><div><div>Bu=
ilding xenstore_transport.0.9.2:</div><div>=A0 make all</div><div>=A0 make =
install</div>
<div>Installing xenstore_transport.0.9.2.</div><div>$ mirari build --xen</d=
iv><div>[mirari] Using scanned config file node.conf</div><div>[mirari] + E=
xecuting: make build</div><div>ocamlbuild -classic-display -use-ocamlfind -=
lflag -linkpkg -lflag -dontlink -lflag unix -pkgs lwt.syntax,vchan -tags &q=
uot;syntax(camlp4o)&quot; main.native.o</div>
<div>ocamlfind ocamlc -c -package vchan -package lwt.syntax -syntax camlp4o=
 -o xs.cmo <a href=3D"http://xs.ml">xs.ml</a></div><div>+ ocamlfind ocamlc =
-c -package vchan -package lwt.syntax -syntax camlp4o -o xs.cmo <a href=3D"=
http://xs.ml">xs.ml</a></div>
<div>File &quot;<a href=3D"http://xs.ml">xs.ml</a>&quot;, line 1, character=
s 29-57:</div><div>Error: Unbound module Xs_transport_lwt_unix_client</div>=
<div>Command exited with code 2.</div><div>make: *** [main.native] Error 10=
</div>
<div>[mirari] ERROR: The command &quot;make build&quot; exited with code 2.=
</div></div><div><br></div><div>I am getting closer but not quite there yet=
.</div><div><br></div><div>Thank you for your help.</div><div><br></div>
<div>PhiHo</div><div><br></div></div><div class=3D"gmail_extra"><br><br><di=
v class=3D"gmail_quote">On Thu, Sep 19, 2013 at 5:21 AM, Vincent B. <span d=
ir=3D"ltr">&lt;<a href=3D"mailto:vb@luminar.eu.org" target=3D"_blank">vb@lu=
minar.eu.org</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div class=3D"im">On 19/09/2013 11:10, Phiho=
 Hoang wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
Hi,<br>
<br>
Thank you for the info.<br>
<br>
I performed the following steps:<br>
</blockquote>
<br></div>
[...]<div class=3D"im"><br>
<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
Apparently I missed some steps here.<br>
<br>
</blockquote>
<br></div>
You miss the xenstore package (and/or xenstore_transport).<br>
Try installing those two packages with OPAM and try again.<span class=3D"HO=
EnZb"><font color=3D"#888888"><br>
<br>
Vincent<br>
<br>
<br>
</font></span></blockquote></div><br></div>

--001a11c264a4faa97104e6b97f6d--


From scott.dj@gmail.com Thu Sep 19 11:02:05 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMb3l-0006kJ-AP (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Thu, 19 Sep 2013 11:02:05 +0100
X-Cam-SpamScore: s
X-Cam-SpamDetails: score 1.3 from SpamAssassin-3.3.2-1524337 
	* -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/,
	no *      trust
	*      [209.85.192.169 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (scott.dj[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-pd0-f169.google.com ([209.85.192.169]:47781)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1VMb3j-0002qe-6v (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Thu, 19 Sep 2013 11:02:05 +0100
Received: by mail-pd0-f169.google.com with SMTP id r10so8244717pdi.14
	for <cl-mirage@lists.cam.ac.uk>; Thu, 19 Sep 2013 03:02:02 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.66.162.167 with SMTP id yb7mr1786830pab.16.1379584922105;
	Thu, 19 Sep 2013 03:02:02 -0700 (PDT)
Received: by 10.70.56.36 with HTTP; Thu, 19 Sep 2013 03:02:02 -0700 (PDT)
In-Reply-To: <5233969C.1080802@cl.cam.ac.uk>
References: <5233969C.1080802@cl.cam.ac.uk>
Date: Thu, 19 Sep 2013 11:02:02 +0100
Message-ID: <CAG_esB1gT7uxjBag37ue9E809Og5bhBnbNG=hK=xpCaOFkOyMw@mail.gmail.com>
Subject: Re: Improving the network-stack performance over Xen
From: David Scott <scott.dj@gmail.com>
To: Dimosthenis Pediaditakis <dimosthenis.pediaditakis@cl.cam.ac.uk>
Content-Type: multipart/alternative; boundary=047d7bacbe7038402d04e6b9a596
Cc: Mirage List <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 19 Sep 2013 10:02:05 -0000
Status: O
Content-Length: 23347
Lines: 539

--047d7bacbe7038402d04e6b9a596
Content-Type: text/plain; charset=ISO-8859-1

Hi Dimos,

Thanks for looking into this! Thinking about it, I think we have several
problems.

1. I think the Activations.wait API is difficult to use / unsafe:

(* Block waiting for an event to occur on a particular port *)
let wait evtchn =
  if Eventchn.is_valid evtchn then begin
          let port = Eventchn.to_int evtchn in
          let th, u = Lwt.task () in
          let node = Lwt_sequence.add_l u event_cb.(port) in
          Lwt.on_cancel th (fun _ -> Lwt_sequence.remove node);
          th
  end else Lwt.fail Generation.Invalid

When you call Activations.wait you are added to a 'sequence' (like a list)
of people to wake up when the next event occurs. A typical driver would
call Activations.wait in a loop, block for an event, wake up, signal some
other thread to do work and then block again. However if the thread running
the loop blocks anywhere else, then the thread will not be added to the
sequence straight away and any notifications that arrive during the gap
will be dropped. I noticed this when debugging my block backend
implementation. I think netif has this problem:

let listen nf fn =
  (* Listen for the activation to poll the interface *)
  let rec poll_t t =
    lwt () = refill_requests t in
    ^^^ blocks here, can miss events

    rx_poll t fn;
    tx_poll t;
    (* Evtchn.notify nf.t.evtchn; *)
    lwt new_t =
      try_lwt
        Activations.wait t.evtchn >> return t
      with
      | Generation.Invalid ->
        Console.log_s "Waiting for plug in listen" >>
        wait_for_plug nf >>
        Console.log_s "Done..." >>
        return nf.t
    in poll_t new_t
  in
  poll_t nf.t


I think we should change the semantics of Activations.wait to be more
level-triggered rather than edge-triggered (i.e. more like the underlying
behaviour of xen) like this:

 type event
 (** a particular event *)

 val wait: Evtchn.t -> event option -> event Lwt.t
 (** [wait evtchn None] returns [Some e] where [e] is the latest event.
     [wait evtchn (Some e)] returns [Some e'] where [e'] is a later event
than [e] *)

In the implementation we could have "type event = int" and maintain a
counter of "number of times this event has been signalled". When you call
Activations.wait, you would pass in the number of the last event you saw,
and the thread would block until a new event is available. This way you
wouldn't have to be registered in the table when the event arrives.

2. SCHEDOP_poll has a low (arbitrary) nr_ports limit

http://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=xen/common/schedule.c;h=a8398bd9ed4827564bed4346e1fdfbb98ec5907e;hb=c5e9596cd095e3b96a090002d9e6629a980904eb#l712

 704 static long do_poll(struct sched_poll *sched_poll)
 705 {
 706     struct vcpu   *v = current;
 707     struct domain *d = v->domain;
 708     evtchn_port_t  port;
 709     long           rc;
 710     unsigned int   i;
 711
 712     /* Fairly arbitrary limit. */
 713     if ( sched_poll->nr_ports > 128 )
 714         return -EINVAL;

The total number of available event channels for a 64-bit guest is 4096
using the current ABI (a new interface is under development which allows
even more). The limit of 128 is probably imposed to limit the amount of
time the hypercall takes, to avoid hitting scalability limits like you do
in userspace with select().

One of the use-cases I'd like to use Mirage for is to run backend services
(like xenstore or blkback) for all the domains on a host. This requires at
least one event channel per client domain. We routinely run ~300 VMs/host,
so the 128 limit is too small. Plus a quick grep around Linux shows that it
doesn't use SCHEDOP_poll very much-- I think we should focus on using the
hypercalls that other OSes are using, for maximum chance of success.

So I think we should switch from select()-like behaviour using SCHEDOP_poll
to interrupt-based delivery using SCHEDOP_block. I note that upstream
mini-os does this by default too. I'll take a look at this.

Cheers,
Dave



On Fri, Sep 13, 2013 at 11:50 PM, Dimosthenis Pediaditakis <
dimosthenis.pediaditakis@cl.cam.ac.uk> wrote:

>  Hi all,
> The last few days I've been trying to pin-down the performance issues of
> the Mirage network stack, when running over Xen.
> When trying to push net-direct to its limits, random transmissions stall
> for anywhere between 0.1sec-4sec (especially at the sender).
>
> After some experimentation, I believe that those time-outs occur because
> netif is not (always) notified (via Activations) about freed TX-ring slots.
> It seems that these events (intermittently) don't reach the guest domain's
> front-end driver.
>
> AFAIK Activations.wait() currently blocks waiting for an event on the port
> belonging to the event channel for the netif.
> This event is delivered to Activations.run via Main.run.aux which is
> invoked via the callback in app_main() of runtime/kernel/main.c
> The problem I observed was that using "SCHEDOP_poll" without masking the
> intended events, the hypervisor didn't "wake-up" the blocked domain upon
> new event availability.
> The requirement for event-masking when using "SCHEDOP_poll" is also
> mentioned in the Xen documentation.
>
> I've produced a patch that seems to fix the above erratic behavior.
> Now I am able to consistently achieve higher speeds (up to 2.75Gbps
> DomU2Domu). Please, have a look at my repo:
> https://github.com/dimosped/mirage-platform
> It will be helpful to use big-enough txqueuelen values for your VIFs, as
> the current TCP implementation doesn't like much losses at high datarates.
> The default size in my system was only 32.
>
> I have also modified the mirage-net-direct by adding per-flow TCP debug
> logging. This has helped me to better understand and pin-down the problem.
> You can grab the modified sources here:
> https://github.com/dimosped/mirage-net
> Be aware that logging big volumes of data for a TCP flow will require big
> enough memory. Nevertheless, it only barely affects performance.
>
> The iperf benchmark sources can be found here:
> https://github.com/dimosped/iperf-mirage
> I've included as much info as possible in the README file. This should be
> sufficient to get you started and replicate my experiments.
>
> In the iperf-mirage repo there is also a Python tool, which you can use to
> automatically generate plots based on the collected TCP debug info (I
> include also a sample dataset in data/ ):
> https://github.com/dimosped/iperf-mirage/tree/master/tools/MirageTcpVis
> For really large datasets, the script might be slow. I need to switch into
> using NumPy arrays at some point...
>
> Please keep in mind that I am a newbie in Xen/Mirage so your
> comments/input are more than welcome.
>
> Regards,
> Dimos
>
>
>
>
> ------------------------------------------------
>    MORE TECHNICAL DETAILS
> ------------------------------------------------
>
>
> -----------------------------------------------------------------
> === How (I think) Mirage and XEN scheduling works ===
> -----------------------------------------------------------------
>  - When Netif receives a writev request, it checks if the TX ring has
> enough empty space (for the producer) for the data
>     - If there is not enough space, it block-waits (via Activations.wait)
> for an event on the port mapped to the netif (and bound to the backend
> driver)
>     - Otherwise it pushes the request.
> -  Activations are notified (via run) from "aux ()" in Main.run. Once
> notified, it means that the waiting netif can proceed, check again the ring
> for free space, write a new request, and send an event to the backend.
> - Main.run.aux is registered as a callback (under name "OS.Main.run") and
> is invoked in xen/runtime/kernel/main.c (in app_main() loop). As long as
> the Mirage guest domain is scheduled, this loop keeps running.
> - However, in Main.run.aux, the Mirage guest domain is blocked via
> "block_domain timeout" if the main thread has no task to perform.
> - In turn, "block_domain" invokes caml_block_domain()  found in
> xen/runtime/kernel/main.c, which issues a
> "HYPERVISOR_sched_op(SCHEDOP_poll, &sched_poll);" hypercall
>
> -------------------------------------
> === Polling mode issue ===
> -------------------------------------
> In my opinion, and based on debug information, it seems that the problem
> is that Mirage uses "SCHEDOP_poll" without masking the event channels.
> The XEN documentation clearly states that with "SCHEDOP_poll" the domain
> would yield until either
>   a) an event is pending on the polled channels and
>   b) the timeout time (given in nanoseconds, is not duration but absolute
> system time) is reached
> It also states that this SCHEDOP_poll can only be be executed when the
> guest has delivery of events disabled.
>
> In Mirage, netif events are not masked and therefore they never "wakeup"
> the guest domain.
> The guest only wakes-up whenever a thread is scheduled to  wakeup in
> Time.SleepQueue (e.g. a TCP timer).
> Once the guest is scheduled again, it completes any outstanding tasks,
> sends any packets pending, and whenever a) the TX ring gets full, or  b)the
> hypervisor  it, c)  it will sleep again.
> To further support the above, whenever I press buttons via XEN-console
> while the mirage-sender is running, the execution completes faster.
>
> ----------------
> === Fix ===
> ----------------
> There are multiple ways to mask events (e.g. at VCPU level, event level
> etc).
> As a quick hack I replaced "Eventchn.unmask h evtchn;" in Netif.plug_inner
> with  Eventchn.mask h evtchn (which I had to create, both in Eventchn and
> as a stub in xen/runtime/kernel/eventchn_stubs.c).
> See:
>
> https://github.com/dimosped/mirage-platform/commit/6d4d3f0403497f07fde4db6f4cb63665a8bf8e26
>
>
>
>
>
>


-- 
Dave Scott

--047d7bacbe7038402d04e6b9a596
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi Dimos,<div><br></div><div>Thanks for looking into this!=
 Thinking about it, I think we have several problems.</div><div><br></div><=
div>1. I think the Activations.wait API is difficult to use / unsafe:</div>

<div><br></div><div><div>(* Block waiting for an event to occur on a partic=
ular port *)</div><div>let wait evtchn =3D</div><div>=A0 if Eventchn.is_val=
id evtchn then begin</div><div>=A0 =A0 =A0 =A0 =A0 let port =3D Eventchn.to=
_int evtchn in</div>

<div>=A0 =A0 =A0 =A0 =A0 let th, u =3D Lwt.task () in</div><div>=A0 =A0 =A0=
 =A0 =A0 let node =3D Lwt_sequence.add_l u event_cb.(port) in</div><div>=A0=
 =A0 =A0 =A0 =A0 Lwt.on_cancel th (fun _ -&gt; Lwt_sequence.remove node);</=
div><div>=A0 =A0 =A0 =A0 =A0 th</div><div>

=A0 end else Lwt.fail Generation.Invalid</div></div><div><br></div><div>Whe=
n you call Activations.wait you are added to a &#39;sequence&#39; (like a l=
ist) of people to wake up when the next event occurs. A typical driver woul=
d call Activations.wait in a loop, block for an event, wake up, signal some=
 other thread to do work and then block again. However if the thread runnin=
g the loop blocks anywhere else, then the thread will not be added to the s=
equence straight away and any notifications that arrive during the gap will=
 be dropped. I noticed this when debugging my block backend implementation.=
 I think netif has this problem:</div>

<div><br></div><div><div>let listen nf fn =3D</div><div>=A0 (* Listen for t=
he activation to poll the interface *)</div><div>=A0 let rec poll_t t =3D</=
div><div>=A0 =A0 lwt () =3D refill_requests t in</div><div>=A0 =A0 ^^^ bloc=
ks here, can miss events</div>

<div><br></div><div>=A0 =A0 rx_poll t fn;</div><div>=A0 =A0 tx_poll t;</div=
><div>=A0 =A0 (* Evtchn.notify nf.t.evtchn; *)</div><div>=A0 =A0 lwt new_t =
=3D</div><div>=A0 =A0 =A0 try_lwt</div><div>=A0 =A0 =A0 =A0 Activations.wai=
t t.evtchn &gt;&gt; return t</div>

<div>=A0 =A0 =A0 with</div><div>=A0 =A0 =A0 | Generation.Invalid -&gt;</div=
><div>=A0 =A0 =A0 =A0 Console.log_s &quot;Waiting for plug in listen&quot; =
&gt;&gt;</div><div>=A0 =A0 =A0 =A0 wait_for_plug nf &gt;&gt;</div><div>=A0 =
=A0 =A0 =A0 Console.log_s &quot;Done...&quot; &gt;&gt;</div>

<div>=A0 =A0 =A0 =A0 return nf.t</div><div>=A0 =A0 in poll_t new_t</div><di=
v>=A0 in</div><div>=A0 poll_t nf.t</div></div><div><br></div><div><br></div=
><div>I think we should change the semantics of Activations.wait to be more=
 level-triggered rather than edge-triggered (i.e. more like the underlying =
behaviour of xen) like this:</div>

<div><br></div><div>=A0type event</div><div>=A0(** a particular event *)</d=
iv><div><br></div><div>=A0val wait: Evtchn.t -&gt; event option -&gt; event=
 Lwt.t</div><div>=A0(** [wait evtchn None] returns [Some e] where [e] is th=
e latest event.</div>

<div>=A0 =A0 =A0[wait evtchn (Some e)] returns [Some e&#39;] where [e&#39;]=
 is a later event than [e] *)</div><div><br></div><div>In the implementatio=
n we could have &quot;type event =3D int&quot; and maintain a counter of &q=
uot;number of times this event has been signalled&quot;. When you call Acti=
vations.wait, you would pass in the number of the last event you saw, and t=
he thread would block until a new event is available. This way you wouldn&#=
39;t have to be registered in the table when the event arrives.</div>
<div><br></div><div>2. SCHEDOP_poll has a low (arbitrary) nr_ports limit</d=
iv><div><br></div><div><a href=3D"http://xenbits.xen.org/gitweb/?p=3Dxen.gi=
t;a=3Dblob;f=3Dxen/common/schedule.c;h=3Da8398bd9ed4827564bed4346e1fdfbb98e=
c5907e;hb=3Dc5e9596cd095e3b96a090002d9e6629a980904eb#l712">http://xenbits.x=
en.org/gitweb/?p=3Dxen.git;a=3Dblob;f=3Dxen/common/schedule.c;h=3Da8398bd9e=
d4827564bed4346e1fdfbb98ec5907e;hb=3Dc5e9596cd095e3b96a090002d9e6629a980904=
eb#l712</a><br>
</div><div><br></div><div><div>=A0704 static long do_poll(struct sched_poll=
 *sched_poll)</div><div>=A0705 {</div><div>=A0706 =A0 =A0 struct vcpu =A0 *=
v =3D current;</div><div>=A0707 =A0 =A0 struct domain *d =3D v-&gt;domain;<=
/div><div>=A0708 =A0 =A0 evtchn_port_t =A0port;</div>
<div>=A0709 =A0 =A0 long =A0 =A0 =A0 =A0 =A0 rc;</div><div>=A0710 =A0 =A0 u=
nsigned int =A0 i;</div><div>=A0711=A0</div><div>=A0712 =A0 =A0 /* Fairly a=
rbitrary limit. */</div><div>=A0713 =A0 =A0 if ( sched_poll-&gt;nr_ports &g=
t; 128 )</div><div>=A0714 =A0 =A0 =A0 =A0 return -EINVAL;</div>
</div><div><br></div><div>The total number of available event channels for =
a 64-bit guest is 4096 using the current ABI (a new interface is under deve=
lopment which allows even more). The limit of 128 is probably imposed to li=
mit the amount of time the hypercall takes, to avoid hitting scalability li=
mits like you do in userspace with select().</div>
<div><br></div><div>One of the use-cases I&#39;d like to use Mirage for is =
to run backend services (like xenstore or blkback) for all the domains on a=
 host. This requires at least one event channel per client domain. We routi=
nely run ~300 VMs/host, so the 128 limit is too small. Plus a quick grep ar=
ound Linux shows that it doesn&#39;t use SCHEDOP_poll very much-- I think w=
e should focus on using the hypercalls that other OSes are using, for maxim=
um chance of success.</div>
<div><br></div><div>So I think we should switch from select()-like behaviou=
r using SCHEDOP_poll to interrupt-based delivery using SCHEDOP_block. I not=
e that upstream mini-os does this by default too. I&#39;ll take a look at t=
his.</div>
<div><br></div><div>Cheers,</div><div>Dave</div><div><br></div></div><div c=
lass=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On Fri, Sep 13, 201=
3 at 11:50 PM, Dimosthenis Pediaditakis <span dir=3D"ltr">&lt;<a href=3D"ma=
ilto:dimosthenis.pediaditakis@cl.cam.ac.uk" target=3D"_blank">dimosthenis.p=
ediaditakis@cl.cam.ac.uk</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
 =20

   =20
 =20
  <div bgcolor=3D"#FFFFFF" text=3D"#000000">
    Hi all,
    <br>
    The last few days I&#39;ve been trying to pin-down the performance
    issues of the Mirage network stack, when running over Xen.<br>
    When trying to push net-direct to its limits, random transmissions
    stall for anywhere between 0.1sec-4sec (especially at the sender).<br>
    <br>
    After some experimentation, I believe that those time-outs occur
    because netif is not (always) notified (via Activations) about freed
    TX-ring slots. <br>
    It seems that these events (intermittently) don&#39;t reach the guest
    domain&#39;s front-end driver.
    <br>
    <br>
    AFAIK Activations.wait() currently blocks waiting for an event on
    the port belonging to the event channel for the netif.
    <br>
    This event is delivered to Activations.run via Main.run.aux which is
    invoked via the callback in app_main() of runtime/kernel/main.c
    <br>
    The problem I observed was that using &quot;SCHEDOP_poll&quot; without =
masking
    the intended events, the hypervisor didn&#39;t &quot;wake-up&quot; the =
blocked
    domain upon new event availability.
    <br>
    The requirement for event-masking when using &quot;SCHEDOP_poll&quot; i=
s also
    mentioned in the Xen documentation.<br>
    <br>
    I&#39;ve produced a patch that seems to fix the above erratic behavior.
    <br>
    Now I am able to consistently achieve higher speeds (up to 2.75Gbps
    DomU2Domu). Please, have a look at my repo:<br>
   =20
    <a href=3D"https://github.com/dimosped/mirage-platform" target=3D"_blan=
k">https://github.com/dimosped/mirage-platform</a><br>
    It will be helpful to use big-enough txqueuelen values for your
    VIFs, as the current TCP implementation doesn&#39;t like much losses at
    high datarates. The default size in my system was only 32.<br>
    <br>
    I have also modified the mirage-net-direct by adding per-flow TCP
    debug logging. This has helped me to better understand and pin-down
    the problem.<br>
    You can grab the modified sources here:<br>
   =20
    <a href=3D"https://github.com/dimosped/mirage-net" target=3D"_blank">ht=
tps://github.com/dimosped/mirage-net</a><br>
    Be aware that logging big volumes of data for a TCP flow will
    require big enough memory. Nevertheless, it only barely affects
    performance.<br>
    <br>
    The iperf benchmark sources can be found here:<br>
   =20
    <a href=3D"https://github.com/dimosped/iperf-mirage" target=3D"_blank">=
https://github.com/dimosped/iperf-mirage</a><br>
    I&#39;ve included as much info as possible in the README file. This
    should be sufficient to get you started and replicate my
    experiments.<br>
    <br>
    In the iperf-mirage repo there is also a Python tool, which you can
    use to automatically generate plots based on the collected TCP debug
    info (I include also a sample dataset in data/ ):<br>
   =20
    <a href=3D"https://github.com/dimosped/iperf-mirage/tree/master/tools/M=
irageTcpVis" target=3D"_blank">https://github.com/dimosped/iperf-mirage/tre=
e/master/tools/MirageTcpVis</a><br>
    For really large datasets, the script might be slow. I need to
    switch into using NumPy arrays at some point...<br>
    <br>
    Please keep in mind that I am a newbie in Xen/Mirage so your
    comments/input are more than welcome.<br>
    =A0<br>
    Regards,
    <br>
    Dimos
    <br>
    <br>
    <br>
    <br>
    <br>
    ------------------------------------------------<br>
    =A0=A0 MORE TECHNICAL DETAILS<br>
    ------------------------------------------------<br>
    <br>
    <br>
    -----------------------------------------------------------------
    <br>
    =3D=3D=3D How (I think) Mirage and XEN scheduling works =3D=3D=3D
    <br>
    -----------------------------------------------------------------
    <br>
    =A0- When Netif receives a writev request, it checks if the TX ring
    has enough empty space (for the producer) for the data
    <br>
    =A0=A0=A0 - If there is not enough space, it block-waits (via
    Activations.wait) for an event on the port mapped to the netif (and
    bound to the backend driver)
    <br>
    =A0=A0=A0 - Otherwise it pushes the request.
    <br>
    -=A0 Activations are notified (via run) from &quot;aux ()&quot; in Main=
.run.
    Once notified, it means that the waiting netif can proceed, check
    again the ring for free space, write a new request, and send an
    event to the backend.
    <br>
    - Main.run.aux is registered as a callback (under name
    &quot;OS.Main.run&quot;) and is invoked in xen/runtime/kernel/main.c (i=
n
    app_main() loop). As long as the Mirage guest domain is scheduled,
    this loop keeps running.
    <br>
    - However, in Main.run.aux, the Mirage guest domain is blocked via
    &quot;block_domain timeout&quot; if the main thread has no task to perf=
orm.
    <br>
    - In turn, &quot;block_domain&quot; invokes caml_block_domain()=A0 foun=
d in
    xen/runtime/kernel/main.c, which issues a
    &quot;HYPERVISOR_sched_op(SCHEDOP_poll, &amp;sched_poll);&quot; hyperca=
ll
    <br>
    <br>
    -------------------------------------
    <br>
    =3D=3D=3D Polling mode issue =3D=3D=3D
    <br>
    -------------------------------------
    <br>
    In my opinion, and based on debug information, it seems that the
    problem is that Mirage uses &quot;SCHEDOP_poll&quot; without masking th=
e event
    channels.
    <br>
    The XEN documentation clearly states that with &quot;SCHEDOP_poll&quot;=
 the
    domain would yield until either
    <br>
    =A0 a) an event is pending on the polled channels and
    <br>
    =A0 b) the timeout time (given in nanoseconds, is not duration but
    absolute system time) is reached
    <br>
    It also states that this SCHEDOP_poll can only be be executed when
    the guest has delivery of events disabled.
    <br>
    <br>
    In Mirage, netif events are not masked and therefore they never
    &quot;wakeup&quot; the guest domain.
    <br>
    The guest only wakes-up whenever a thread is scheduled to=A0 wakeup in
    Time.SleepQueue (e.g. a TCP timer).
    <br>
    Once the guest is scheduled again, it completes any outstanding
    tasks, sends any packets pending, and whenever a) the TX ring gets
    full, or=A0 b)the hypervisor=A0 it, c)=A0 it will sleep again.
    <br>
    To further support the above, whenever I press buttons via
    XEN-console while the mirage-sender is running, the execution
    completes faster.
    <br>
    <br>
    ----------------
    <br>
    =3D=3D=3D Fix =3D=3D=3D
    <br>
    ----------------
    <br>
    There are multiple ways to mask events (e.g. at VCPU level, event
    level etc).
    <br>
    As a quick hack I replaced &quot;Eventchn.unmask h evtchn;&quot; in
    Netif.plug_inner with=A0 Eventchn.mask h evtchn (which I had to
    create, both in Eventchn and=A0 as a stub in
    xen/runtime/kernel/eventchn_stubs.c).
    <br>
    See:<br>
   =20
   =20
    <a href=3D"https://github.com/dimosped/mirage-platform/commit/6d4d3f040=
3497f07fde4db6f4cb63665a8bf8e26" target=3D"_blank">https://github.com/dimos=
ped/mirage-platform/commit/6d4d3f0403497f07fde4db6f4cb63665a8bf8e26</a><br>

    <br>
    <br>
    <br>
    <br>
    <br>
  </div>

</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>Dave Scott
</div>

--047d7bacbe7038402d04e6b9a596--


From amc79@cam.ac.uk Thu Sep 19 11:09:22 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMbAo-00076z-5t (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <amc79@cam.ac.uk>); Thu, 19 Sep 2013 11:09:22 +0100
X-Cam-AntiVirus: no malware found
X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/
Received: from host81-149-102-120.in-addr.btopenworld.com
	([81.149.102.120]:61285 helo=amirmacbook.home)
	by ppsw-52.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.158]:587)
	with esmtpsa (PLAIN:amc79) (TLSv1:AES128-SHA:128)
	id 1VMbAo-0000FB-DE (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <amc79@cam.ac.uk>); Thu, 19 Sep 2013 11:09:22 +0100
From: Amir Chaudhry <amc79@cam.ac.uk>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Subject: FYI: Mirage as top comment in discussion about OSv 
Message-Id: <8BFF2A7B-7FAC-4CAE-A52D-5234DFD59506@cam.ac.uk>
Date: Thu, 19 Sep 2013 11:09:27 +0100
To: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
X-Mailer: Apple Mail (2.1508)
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 19 Sep 2013 10:09:22 -0000
Status: O
Content-Length: 433
Lines: 13

OSv is the top news story on Hacker News and Mirage is the top comment =
in that thread:
https://news.ycombinator.com/item?id=3D6410312

This is just for interest but we can expect way way more =
news/discussion/blogs once the PR takes hold after the Mirage release.  =
That people are (largely) pointing to Mirage unprompted in such threads =
is a great sign and that others vote that comment to the top is even =
better :)

Amir



From anil@recoil.org Thu Sep 19 11:57:59 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMbvr-0001CP-Kc (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 19 Sep 2013 11:57:59 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1524337 
	*  0.0 HTML_MESSAGE BODY: HTML included in message
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:32503
	helo=dark.recoil.org)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1VMbvq-0000VQ-2x (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 19 Sep 2013 11:57:59 +0100
Received: (qmail 26952 invoked by uid 634); 19 Sep 2013 10:57:58 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED,HTML_MESSAGE
X-Spam-Check-By: dark.recoil.org
Received: from host81-149-102-120.in-addr.btopenworld.com (HELO clink.home)
	(81.149.102.120)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Thu, 19 Sep 2013 11:57:58 +0100
Content-Type: multipart/alternative;
	boundary="Apple-Mail=_E27C98E6-3623-4C2F-A315-796FFB2057C1"
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: RX error (microkernel in EC2)
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <CAGS5m-ny83zMEWSTCZuwSEBV6CGcdCLMho4qLS3164qS7zsvPA@mail.gmail.com>
Date: Thu, 19 Sep 2013 11:57:55 +0100
Message-Id: <11A052D6-F076-4B60-9EA1-93A4E07C4732@recoil.org>
References: <CAGS5m-mvT4-Odwb+gYGwn_BT31pCBLaspntwvmgsATg7Qfjiww@mail.gmail.com>
	<CAG_esB0LGMw2NQJfP5rEnsoqj4KrT+CKcD-mWkFMpKXvSdfTvw@mail.gmail.com>
	<CAGS5m-ny83zMEWSTCZuwSEBV6CGcdCLMho4qLS3164qS7zsvPA@mail.gmail.com>
To: William Le Ferrand <warnegia@gmail.com>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: cl-mirage <cl-mirage@lists.cam.ac.uk>, David Scott <scott.dj@gmail.com>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 19 Sep 2013 10:57:59 -0000
Status: O
Content-Length: 7183
Lines: 201


--Apple-Mail=_E27C98E6-3623-4C2F-A315-796FFB2057C1
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

I'll take a look at this -- which script did you use to wrap up the EC2 =
kernel for upload William? (just curious if you've been using the AWS =
OCaml bindings for this, or doing it manually)

-anil

On 18 Sep 2013, at 23:57, William Le Ferrand <warnegia@gmail.com> wrote:

> Yes, I tried that but the error only occurs in EC2; it's raised =
somewhere in the DHCP module it seems ..
>=20
>=20
> On Wed, Sep 18, 2013 at 2:12 PM, David Scott <scott.dj@gmail.com> =
wrote:
> Hi,
>=20
> I usually start by recompiling the app as a Unix process (using =
"mirage-unix" rather than "mirage-xen"). Assuming the bug manifests =
there (probably: I suspect the String.sub problem is coming from the =
http-level rather than the xen driver-level) then you can use regular =
debugging tools, set OCAMLRUNPARAM=3Db etc.
>=20
> Debugging in-situ on EC2 is currently a matter of inserting printf's =
and reading the code-- not ideal.
>=20
> HTH
> Dave
>=20
>=20
> On Wed, Sep 18, 2013 at 9:45 PM, William Le Ferrand =
<warnegia@gmail.com> wrote:
> hello everyone
>=20
> I'm running the simplest cohttp application possible in EC2, the =
instance boots but quickly complains :=20
>=20
>=20
>=20
> MAC: 0e:32:89:f8:03:7b
>  sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
> Manager: plug 0
> Manager: plug done, to listener
> Manager: Interface 0 to DHCP
> DHCP: waiting for first offer
> Manager: init done
> DHCP: start discovery
> Sending DHCP broadcast len 552
> DHCP: start discovery
> Sending DHCP broadcast len 552
> DHCP: input ciaddr 0.0.0.0 yiaddr 172.31.23.46 siaddr 0.0.0.0 giaddr =
0.0.0.0 chaddr  2=EF=BF=BD=EF=BF=BD { sname  file=20
> DHCP: offer received: 172.31.23.46
> Sending DHCP broadcast len 552
> RX exn Invalid_argument("String.sub")
>=20
> Am I doing something wrong somewhere and what would be a good strategy =
to debug this?=20
>=20
> Thanks
>=20
> william=20
>=20
> --=20
> William Le Ferrand
>=20
> Mobile : (+1) (415) 683-1484
> Web : http://williamleferrand.github.com/
>=20
>=20
>=20
> --=20
> Dave Scott
>=20
>=20
>=20
> --=20
> William Le Ferrand
>=20
> Mobile : (+1) (415) 683-1484
> Web : http://williamleferrand.github.com/


--Apple-Mail=_E27C98E6-3623-4C2F-A315-796FFB2057C1
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=utf-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">I'll =
take a look at this -- which script did you use to wrap up the EC2 =
kernel for upload William? (just curious if you've been using the AWS =
OCaml bindings for this, or doing it =
manually)<div><br></div><div>-anil</div><div><br><div><div>On 18 Sep =
2013, at 23:57, William Le Ferrand &lt;<a =
href=3D"mailto:warnegia@gmail.com">warnegia@gmail.com</a>&gt; =
wrote:</div><br class=3D"Apple-interchange-newline"><blockquote =
type=3D"cite"><div dir=3D"ltr">Yes, I tried that but the error only =
occurs in EC2; it's raised somewhere in the DHCP module it seems =
..</div><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On =
Wed, Sep 18, 2013 at 2:12 PM, David Scott <span dir=3D"ltr">&lt;<a =
href=3D"mailto:scott.dj@gmail.com" =
target=3D"_blank">scott.dj@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 =
.8ex;border-left:1px #ccc solid;padding-left:1ex"><div =
dir=3D"ltr">Hi,<div><br></div><div>I usually start by recompiling the =
app as a Unix process (using "mirage-unix" rather than "mirage-xen"). =
Assuming the bug manifests there (probably: I suspect the String.sub =
problem is coming from the http-level rather than the xen driver-level) =
then you can use regular debugging tools, set OCAMLRUNPARAM=3Db =
etc.</div>


<div><br></div><div>Debugging in-situ on EC2 is currently a matter of =
inserting printf's and reading the code-- not =
ideal.</div><div><br></div><div>HTH</div><div>Dave</div></div><div =
class=3D"gmail_extra"><div><div class=3D"h5">

<br><br><div class=3D"gmail_quote">
On Wed, Sep 18, 2013 at 9:45 PM, William Le Ferrand <span =
dir=3D"ltr">&lt;<a href=3D"mailto:warnegia@gmail.com" =
target=3D"_blank">warnegia@gmail.com</a>&gt;</span> =
wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 =
.8ex;border-left:1px #ccc solid;padding-left:1ex">


<div dir=3D"ltr">hello everyone<div><br></div><div>I'm running the =
simplest cohttp application possible in EC2, the instance boots but =
quickly complains :&nbsp;</div><div><br></div><div><pre =
style=3D"margin-top:0px;margin-bottom:0px;padding:10px;font-family:'Courie=
r =
New',monospace;line-height:12px;overflow:auto;font-size:12px;background-co=
lor:rgb(0,0,0);color:rgb(0,255,0);min-height:1023px">

MAC: 0e:32:89:f8:03:7b
 sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
Manager: plug 0
Manager: plug done, to listener
Manager: Interface 0 to DHCP
DHCP: waiting for first offer
Manager: init done
DHCP: start discovery
Sending DHCP broadcast len 552
DHCP: start discovery
Sending DHCP broadcast len 552
DHCP: input ciaddr 0.0.0.0 yiaddr 172.31.23.46 siaddr 0.0.0.0 giaddr =
0.0.0.0 chaddr  2=EF=BF=BD=EF=BF=BD { sname  file=20
DHCP: offer received: 172.31.23.46
Sending DHCP broadcast len 552
RX exn Invalid_argument("String.sub")</pre><div><br></div><div>Am I =
doing something wrong somewhere and what would be a good strategy to =
debug this?&nbsp;</div><div><br></div><div>Thanks</div><span><font =
color=3D"#888888"><div>


<br></div><div>william&nbsp;</div>

<div><br></div>-- <br>William Le Ferrand<br><br><div><div>Mobile =
:&nbsp;(+1)&nbsp;<span =
style=3D"font-family:Arial,sans-serif;border-collapse:collapse;color:rgb(5=
1,51,51)"><a href=3D"tel:%28415%29%20683-1484" value=3D"+14156831484" =
target=3D"_blank">(415) 683-1484</a></span></div>


<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span =
style=3D"border-collapse:collapse">Web :&nbsp;<a =
href=3D"http://williamleferrand.github.com/" =
target=3D"_blank">http://williamleferrand.github.com/</a></span></font></d=
iv>

<a href=3D"http://www.linkedin.com/in/williamleferrand" =
target=3D"_blank"></a></div>
</font></span></div></div>
</blockquote></div><br><br clear=3D"all"><div><br></div></div></div><span =
class=3D"HOEnZb"><font color=3D"#888888">-- <br>Dave Scott
</font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>William =
Le Ferrand<br><br><div><div>Mobile :&nbsp;(+1)&nbsp;<span =
style=3D"font-family:Arial,sans-serif;border-collapse:collapse;color:rgb(5=
1,51,51)">(415) 683-1484</span></div>

<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span =
style=3D"border-collapse:collapse">Web :&nbsp;<a =
href=3D"http://williamleferrand.github.com/" =
target=3D"_blank">http://williamleferrand.github.com/</a></span></font></d=
iv><a href=3D"http://www.linkedin.com/in/williamleferrand" =
target=3D"_blank"></a></div>


</div>
</blockquote></div><br></div></body></html>=

--Apple-Mail=_E27C98E6-3623-4C2F-A315-796FFB2057C1--


From warnegia@gmail.com Thu Sep 19 14:56:37 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMeij-0000Aw-MW (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Thu, 19 Sep 2013 14:56:37 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1524337 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.212.176 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (warnegia[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 NORMAL_HTTP_TO_IP URI: Uses a dotted-decimal IP address in URL
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f176.google.com ([209.85.212.176]:54659)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1VMeii-0003MR-im (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Thu, 19 Sep 2013 14:56:37 +0100
Received: by mail-wi0-f176.google.com with SMTP id cb5so7998373wib.3
	for <cl-mirage@lists.cam.ac.uk>; Thu, 19 Sep 2013 06:56:36 -0700 (PDT)
X-Received: by 10.180.171.7 with SMTP id aq7mr1486753wic.28.1379598994882;
	Thu, 19 Sep 2013 06:56:34 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.217.115.65 with HTTP; Thu, 19 Sep 2013 06:56:14 -0700 (PDT)
In-Reply-To: <11A052D6-F076-4B60-9EA1-93A4E07C4732@recoil.org>
References: <CAGS5m-mvT4-Odwb+gYGwn_BT31pCBLaspntwvmgsATg7Qfjiww@mail.gmail.com>
	<CAG_esB0LGMw2NQJfP5rEnsoqj4KrT+CKcD-mWkFMpKXvSdfTvw@mail.gmail.com>
	<CAGS5m-ny83zMEWSTCZuwSEBV6CGcdCLMho4qLS3164qS7zsvPA@mail.gmail.com>
	<11A052D6-F076-4B60-9EA1-93A4E07C4732@recoil.org>
From: William Le Ferrand <warnegia@gmail.com>
Date: Thu, 19 Sep 2013 06:56:14 -0700
Message-ID: <CAGS5m-mL8Q1UPUpurGu-V8YaKKbxDOGkWTriu3zZ+5+esRTfMw@mail.gmail.com>
Subject: Re: RX error (microkernel in EC2)
To: Anil Madhavapeddy <anil@recoil.org>
Content-Type: multipart/alternative; boundary=001a1135faf205c70f04e6bcec26
Cc: cl-mirage <cl-mirage@lists.cam.ac.uk>, David Scott <scott.dj@gmail.com>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 19 Sep 2013 13:56:37 -0000
Status: O
Content-Length: 9249
Lines: 262

--001a1135faf205c70f04e6bcec26
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

I used the ec2.sh script, but I think that I was on the wrong track anyway
as local IP should be retrieved from the instance using "*GET
http://169.254.169.254/latest/meta-data/local-ipv4" *rather than DHCP,
shouldn't it? That's why I inquired about the status of client functions in
cohttp


On Thu, Sep 19, 2013 at 3:57 AM, Anil Madhavapeddy <anil@recoil.org> wrote:

> I'll take a look at this -- which script did you use to wrap up the EC2
> kernel for upload William? (just curious if you've been using the AWS OCa=
ml
> bindings for this, or doing it manually)
>
> -anil
>
> On 18 Sep 2013, at 23:57, William Le Ferrand <warnegia@gmail.com> wrote:
>
> Yes, I tried that but the error only occurs in EC2; it's raised somewhere
> in the DHCP module it seems ..
>
>
> On Wed, Sep 18, 2013 at 2:12 PM, David Scott <scott.dj@gmail.com> wrote:
>
>> Hi,
>>
>> I usually start by recompiling the app as a Unix process (using
>> "mirage-unix" rather than "mirage-xen"). Assuming the bug manifests ther=
e
>> (probably: I suspect the String.sub problem is coming from the http-leve=
l
>> rather than the xen driver-level) then you can use regular debugging too=
ls,
>> set OCAMLRUNPARAM=3Db etc.
>>
>> Debugging in-situ on EC2 is currently a matter of inserting printf's and
>> reading the code-- not ideal.
>>
>> HTH
>> Dave
>>
>>
>> On Wed, Sep 18, 2013 at 9:45 PM, William Le Ferrand <warnegia@gmail.com>=
wrote:
>>
>>> hello everyone
>>>
>>> I'm running the simplest cohttp application possible in EC2, the
>>> instance boots but quickly complains :
>>>
>>>
>>>
>>> MAC: 0e:32:89:f8:03:7b
>>>  sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
>>> Manager: plug 0
>>> Manager: plug done, to listener
>>> Manager: Interface 0 to DHCP
>>> DHCP: waiting for first offer
>>> Manager: init done
>>> DHCP: start discovery
>>> Sending DHCP broadcast len 552
>>> DHCP: start discovery
>>> Sending DHCP broadcast len 552
>>> DHCP: input ciaddr 0.0.0.0 yiaddr 172.31.23.46 siaddr 0.0.0.0 giaddr 0.=
0.0.0 chaddr  2=EF=BF=BD=EF=BF=BD { sname  file
>>> DHCP: offer received: 172.31.23.46
>>> Sending DHCP broadcast len 552
>>> RX exn Invalid_argument("String.sub")
>>>
>>>
>>> Am I doing something wrong somewhere and what would be a good strategy
>>> to debug this?
>>>
>>> Thanks
>>>
>>> william
>>>
>>> --
>>> William Le Ferrand
>>>
>>> Mobile : (+1) (415) 683-1484
>>> Web : http://williamleferrand.github.com/
>>>  <http://www.linkedin.com/in/williamleferrand>
>>>
>>
>>
>>
>> --
>> Dave Scott
>>
>
>
>
> --
> William Le Ferrand
>
> Mobile : (+1) (415) 683-1484
> Web : http://williamleferrand.github.com/
> <http://www.linkedin.com/in/williamleferrand>
>
>
>


--=20
William Le Ferrand

Mobile : (+1) (415) 683-1484
Web : http://williamleferrand.github.com/
<http://www.linkedin.com/in/williamleferrand>

--001a1135faf205c70f04e6bcec26
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">I used the ec2.sh script, but I think that I was on the wr=
ong track anyway as local IP should be retrieved from the instance using &q=
uot;<strong class=3D"" style=3D"color:rgb(0,0,102);font-family:&#39;Courier=
 New&#39;,Courier,mono;font-size:12px">GET <a href=3D"http://169.254.169.25=
4/latest/meta-data/local-ipv4">http://169.254.169.254/latest/meta-data/loca=
l-ipv4</a>&quot;=C2=A0</strong>rather than DHCP, shouldn&#39;t it? That&#39=
;s why I inquired about the status of client functions in cohttp</div>

<div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On Thu, Sep 1=
9, 2013 at 3:57 AM, Anil Madhavapeddy <span dir=3D"ltr">&lt;<a href=3D"mail=
to:anil@recoil.org" target=3D"_blank">anil@recoil.org</a>&gt;</span> wrote:=
<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-lef=
t:1px #ccc solid;padding-left:1ex">

<div style=3D"word-wrap:break-word">I&#39;ll take a look at this -- which s=
cript did you use to wrap up the EC2 kernel for upload William? (just curio=
us if you&#39;ve been using the AWS OCaml bindings for this, or doing it ma=
nually)<span class=3D"HOEnZb"><font color=3D"#888888"><div>

<br></div><div>-anil</div></font></span><div><div class=3D"h5"><div><br><di=
v><div>On 18 Sep 2013, at 23:57, William Le Ferrand &lt;<a href=3D"mailto:w=
arnegia@gmail.com" target=3D"_blank">warnegia@gmail.com</a>&gt; wrote:</div=
>
<br>
<blockquote type=3D"cite"><div dir=3D"ltr">Yes, I tried that but the error =
only occurs in EC2; it&#39;s raised somewhere in the DHCP module it seems .=
.</div><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On Wed=
, Sep 18, 2013 at 2:12 PM, David Scott <span dir=3D"ltr">&lt;<a href=3D"mai=
lto:scott.dj@gmail.com" target=3D"_blank">scott.dj@gmail.com</a>&gt;</span>=
 wrote:<br>



<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hi,<div><br></div><div>I us=
ually start by recompiling the app as a Unix process (using &quot;mirage-un=
ix&quot; rather than &quot;mirage-xen&quot;). Assuming the bug manifests th=
ere (probably: I suspect the String.sub problem is coming from the http-lev=
el rather than the xen driver-level) then you can use regular debugging too=
ls, set OCAMLRUNPARAM=3Db etc.</div>




<div><br></div><div>Debugging in-situ on EC2 is currently a matter of inser=
ting printf&#39;s and reading the code-- not ideal.</div><div><br></div><di=
v>HTH</div><div>Dave</div></div><div class=3D"gmail_extra"><div><div>

<br><br><div class=3D"gmail_quote">
On Wed, Sep 18, 2013 at 9:45 PM, William Le Ferrand <span dir=3D"ltr">&lt;<=
a href=3D"mailto:warnegia@gmail.com" target=3D"_blank">warnegia@gmail.com</=
a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0=
 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




<div dir=3D"ltr">hello everyone<div><br></div><div>I&#39;m running the simp=
lest cohttp application possible in EC2, the instance boots but quickly com=
plains :=C2=A0</div><div><br></div><div><pre style=3D"margin-top:0px;margin=
-bottom:0px;padding:10px;font-family:&#39;Courier New&#39;,monospace;line-h=
eight:12px;overflow:auto;font-size:12px;background-color:rgb(0,0,0);color:r=
gb(0,255,0);min-height:1023px">


MAC: 0e:32:89:f8:03:7b
 sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
Manager: plug 0
Manager: plug done, to listener
Manager: Interface 0 to DHCP
DHCP: waiting for first offer
Manager: init done
DHCP: start discovery
Sending DHCP broadcast len 552
DHCP: start discovery
Sending DHCP broadcast len 552
DHCP: input ciaddr 0.0.0.0 yiaddr 172.31.23.46 siaddr 0.0.0.0 giaddr 0.0.0.=
0 chaddr  2=EF=BF=BD=EF=BF=BD { sname  file=20
DHCP: offer received: 172.31.23.46
Sending DHCP broadcast len 552
RX exn Invalid_argument(&quot;String.sub&quot;)</pre><div><br></div><div>Am=
 I doing something wrong somewhere and what would be a good strategy to deb=
ug this?=C2=A0</div><div><br></div><div>Thanks</div><span><font color=3D"#8=
88888"><div>




<br></div><div>william=C2=A0</div>

<div><br></div>-- <br>William Le Ferrand<br><br><div><div>Mobile :=C2=A0(+1=
)=C2=A0<span style=3D"font-family:Arial,sans-serif;border-collapse:collapse=
;color:rgb(51,51,51)"><a href=3D"tel:%28415%29%20683-1484" value=3D"+141568=
31484" target=3D"_blank">(415) 683-1484</a></span></div>




<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=C2=A0<a href=3D"http://williamleferrand.github.=
com/" target=3D"_blank">http://williamleferrand.github.com/</a></span></fon=
t></div>

<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</font></span></div></div>
</blockquote></div><br><br clear=3D"all"><div><br></div></div></div><span><=
font color=3D"#888888">-- <br>Dave Scott
</font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>William Le F=
errand<br><br><div><div>Mobile :=C2=A0(+1)=C2=A0<span style=3D"font-family:=
Arial,sans-serif;border-collapse:collapse;color:rgb(51,51,51)"><a href=3D"t=
el:%28415%29%20683-1484" value=3D"+14156831484" target=3D"_blank">(415) 683=
-1484</a></span></div>



<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=C2=A0<a href=3D"http://williamleferrand.github.=
com/" target=3D"_blank">http://williamleferrand.github.com/</a></span></fon=
t></div><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_=
blank"></a></div>




</div>
</blockquote></div><br></div></div></div></div></blockquote></div><br><br c=
lear=3D"all"><div><br></div>-- <br>William Le Ferrand<br><br><div><div>Mobi=
le :=C2=A0(+1)=C2=A0<span style=3D"font-family:Arial,sans-serif;border-coll=
apse:collapse;color:rgb(51,51,51)">(415) 683-1484</span></div>

<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=C2=A0<a href=3D"http://williamleferrand.github.=
com/" target=3D"_blank">http://williamleferrand.github.com/</a></span></fon=
t></div><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_=
blank"></a></div>


</div>

--001a1135faf205c70f04e6bcec26--


From anil@recoil.org Thu Sep 19 14:59:48 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMelo-0000Tu-HX (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 19 Sep 2013 14:59:48 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1524337 
	*  0.0 NORMAL_HTTP_TO_IP URI: Uses a dotted-decimal IP address in URL
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.0 T_FILL_THIS_FORM_SHORT Fill in a short form with personal
	*      information
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:47301
	helo=dark.recoil.org)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1VMeln-0001kc-8t (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 19 Sep 2013 14:59:48 +0100
Received: (qmail 20392 invoked by uid 634); 19 Sep 2013 13:59:46 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED, HTML_MESSAGE, NORMAL_HTTP_TO_IP,
	T_FILL_THIS_FORM_SHORT
X-Spam-Check-By: dark.recoil.org
Received: from volstagg-0.srg.cl.cam.ac.uk (HELO clink.office) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Thu, 19 Sep 2013 14:59:46 +0100
Content-Type: multipart/alternative;
	boundary="Apple-Mail=_BE2CD5AC-F133-4441-8231-6889E456829C"
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: RX error (microkernel in EC2)
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <CAGS5m-mL8Q1UPUpurGu-V8YaKKbxDOGkWTriu3zZ+5+esRTfMw@mail.gmail.com>
Date: Thu, 19 Sep 2013 14:59:43 +0100
Message-Id: <A151D6C7-D0E7-428D-B5BE-E2FAFCD25364@recoil.org>
References: <CAGS5m-mvT4-Odwb+gYGwn_BT31pCBLaspntwvmgsATg7Qfjiww@mail.gmail.com>
	<CAG_esB0LGMw2NQJfP5rEnsoqj4KrT+CKcD-mWkFMpKXvSdfTvw@mail.gmail.com>
	<CAGS5m-ny83zMEWSTCZuwSEBV6CGcdCLMho4qLS3164qS7zsvPA@mail.gmail.com>
	<11A052D6-F076-4B60-9EA1-93A4E07C4732@recoil.org>
	<CAGS5m-mL8Q1UPUpurGu-V8YaKKbxDOGkWTriu3zZ+5+esRTfMw@mail.gmail.com>
To: William Le Ferrand <warnegia@gmail.com>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: David Scott <scott.dj@gmail.com>, cl-mirage <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 19 Sep 2013 13:59:48 -0000
Status: O
Content-Length: 10002
Lines: 283


--Apple-Mail=_BE2CD5AC-F133-4441-8231-6889E456829C
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

DHCP should work too (and has worked in the past, so this is no doubt a =
minor issue, despite being difficult to debug).

-anil

On 19 Sep 2013, at 14:56, William Le Ferrand <warnegia@gmail.com> wrote:

> I used the ec2.sh script, but I think that I was on the wrong track =
anyway as local IP should be retrieved from the instance using "GET =
http://169.254.169.254/latest/meta-data/local-ipv4" rather than DHCP, =
shouldn't it? That's why I inquired about the status of client functions =
in cohttp
>=20
>=20
> On Thu, Sep 19, 2013 at 3:57 AM, Anil Madhavapeddy <anil@recoil.org> =
wrote:
> I'll take a look at this -- which script did you use to wrap up the =
EC2 kernel for upload William? (just curious if you've been using the =
AWS OCaml bindings for this, or doing it manually)
>=20
> -anil
>=20
> On 18 Sep 2013, at 23:57, William Le Ferrand <warnegia@gmail.com> =
wrote:
>=20
>> Yes, I tried that but the error only occurs in EC2; it's raised =
somewhere in the DHCP module it seems ..
>>=20
>>=20
>> On Wed, Sep 18, 2013 at 2:12 PM, David Scott <scott.dj@gmail.com> =
wrote:
>> Hi,
>>=20
>> I usually start by recompiling the app as a Unix process (using =
"mirage-unix" rather than "mirage-xen"). Assuming the bug manifests =
there (probably: I suspect the String.sub problem is coming from the =
http-level rather than the xen driver-level) then you can use regular =
debugging tools, set OCAMLRUNPARAM=3Db etc.
>>=20
>> Debugging in-situ on EC2 is currently a matter of inserting printf's =
and reading the code-- not ideal.
>>=20
>> HTH
>> Dave
>>=20
>>=20
>> On Wed, Sep 18, 2013 at 9:45 PM, William Le Ferrand =
<warnegia@gmail.com> wrote:
>> hello everyone
>>=20
>> I'm running the simplest cohttp application possible in EC2, the =
instance boots but quickly complains :=20
>>=20
>>=20
>>=20
>> MAC: 0e:32:89:f8:03:7b
>>  sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
>> Manager: plug 0
>> Manager: plug done, to listener
>> Manager: Interface 0 to DHCP
>> DHCP: waiting for first offer
>> Manager: init done
>> DHCP: start discovery
>> Sending DHCP broadcast len 552
>> DHCP: start discovery
>> Sending DHCP broadcast len 552
>> DHCP: input ciaddr 0.0.0.0 yiaddr 172.31.23.46 siaddr 0.0.0.0 giaddr =
0.0.0.0 chaddr  2=EF=BF=BD=EF=BF=BD { sname  file=20
>> DHCP: offer received: 172.31.23.46
>> Sending DHCP broadcast len 552
>> RX exn Invalid_argument("String.sub")
>>=20
>> Am I doing something wrong somewhere and what would be a good =
strategy to debug this?=20
>>=20
>> Thanks
>>=20
>> william=20
>>=20
>> --=20
>> William Le Ferrand
>>=20
>> Mobile : (+1) (415) 683-1484
>> Web : http://williamleferrand.github.com/
>>=20
>>=20
>>=20
>> --=20
>> Dave Scott
>>=20
>>=20
>>=20
>> --=20
>> William Le Ferrand
>>=20
>> Mobile : (+1) (415) 683-1484
>> Web : http://williamleferrand.github.com/
>=20
>=20
>=20
>=20
> --=20
> William Le Ferrand
>=20
> Mobile : (+1) (415) 683-1484
> Web : http://williamleferrand.github.com/


--Apple-Mail=_BE2CD5AC-F133-4441-8231-6889E456829C
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=utf-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">DHCP =
should work too (and has worked in the past, so this is no doubt a minor =
issue, despite being difficult to =
debug).<div><br></div><div>-anil</div><div><br><div><div>On 19 Sep 2013, =
at 14:56, William Le Ferrand &lt;<a =
href=3D"mailto:warnegia@gmail.com">warnegia@gmail.com</a>&gt; =
wrote:</div><br class=3D"Apple-interchange-newline"><blockquote =
type=3D"cite"><div dir=3D"ltr">I used the ec2.sh script, but I think =
that I was on the wrong track anyway as local IP should be retrieved =
from the instance using "<strong class=3D"" =
style=3D"color:rgb(0,0,102);font-family:'Courier =
New',Courier,mono;font-size:12px">GET <a =
href=3D"http://169.254.169.254/latest/meta-data/local-ipv4">http://169.254=
.169.254/latest/meta-data/local-ipv4</a>"&nbsp;</strong>rather than =
DHCP, shouldn't it? That's why I inquired about the status of client =
functions in cohttp</div>

<div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On Thu, =
Sep 19, 2013 at 3:57 AM, Anil Madhavapeddy <span dir=3D"ltr">&lt;<a =
href=3D"mailto:anil@recoil.org" =
target=3D"_blank">anil@recoil.org</a>&gt;</span> wrote:<br><blockquote =
class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc =
solid;padding-left:1ex">

<div style=3D"word-wrap:break-word">I'll take a look at this -- which =
script did you use to wrap up the EC2 kernel for upload William? (just =
curious if you've been using the AWS OCaml bindings for this, or doing =
it manually)<span class=3D"HOEnZb"><font color=3D"#888888"><div>

<br></div><div>-anil</div></font></span><div><div =
class=3D"h5"><br><div><div>On 18 Sep 2013, at 23:57, William Le Ferrand =
&lt;<a href=3D"mailto:warnegia@gmail.com" =
target=3D"_blank">warnegia@gmail.com</a>&gt; wrote:</div>
<br>
<blockquote type=3D"cite"><div dir=3D"ltr">Yes, I tried that but the =
error only occurs in EC2; it's raised somewhere in the DHCP module it =
seems ..</div><div class=3D"gmail_extra"><br><br><div =
class=3D"gmail_quote">On Wed, Sep 18, 2013 at 2:12 PM, David Scott <span =
dir=3D"ltr">&lt;<a href=3D"mailto:scott.dj@gmail.com" =
target=3D"_blank">scott.dj@gmail.com</a>&gt;</span> wrote:<br>



<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 =
.8ex;border-left:1px #ccc solid;padding-left:1ex"><div =
dir=3D"ltr">Hi,<div><br></div><div>I usually start by recompiling the =
app as a Unix process (using "mirage-unix" rather than "mirage-xen"). =
Assuming the bug manifests there (probably: I suspect the String.sub =
problem is coming from the http-level rather than the xen driver-level) =
then you can use regular debugging tools, set OCAMLRUNPARAM=3Db =
etc.</div>




<div><br></div><div>Debugging in-situ on EC2 is currently a matter of =
inserting printf's and reading the code-- not =
ideal.</div><div><br></div><div>HTH</div><div>Dave</div></div><div =
class=3D"gmail_extra"><div>

<br><br><div class=3D"gmail_quote">
On Wed, Sep 18, 2013 at 9:45 PM, William Le Ferrand <span =
dir=3D"ltr">&lt;<a href=3D"mailto:warnegia@gmail.com" =
target=3D"_blank">warnegia@gmail.com</a>&gt;</span> =
wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 =
.8ex;border-left:1px #ccc solid;padding-left:1ex">




<div dir=3D"ltr">hello everyone<div><br></div><div>I'm running the =
simplest cohttp application possible in EC2, the instance boots but =
quickly complains :&nbsp;</div><div><br></div><div><pre =
style=3D"margin-top:0px;margin-bottom:0px;padding:10px;font-family:'Courie=
r =
New',monospace;line-height:12px;overflow:auto;font-size:12px;background-co=
lor:rgb(0,0,0);color:rgb(0,255,0);min-height:1023px">

MAC: 0e:32:89:f8:03:7b
 sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
Manager: plug 0
Manager: plug done, to listener
Manager: Interface 0 to DHCP
DHCP: waiting for first offer
Manager: init done
DHCP: start discovery
Sending DHCP broadcast len 552
DHCP: start discovery
Sending DHCP broadcast len 552
DHCP: input ciaddr 0.0.0.0 yiaddr 172.31.23.46 siaddr 0.0.0.0 giaddr =
0.0.0.0 chaddr  2=EF=BF=BD=EF=BF=BD { sname  file=20
DHCP: offer received: 172.31.23.46
Sending DHCP broadcast len 552
RX exn Invalid_argument("String.sub")</pre><div><br></div><div>Am I =
doing something wrong somewhere and what would be a good strategy to =
debug this?&nbsp;</div><div><br></div><div>Thanks</div><span><font =
color=3D"#888888"><div>




<br></div><div>william&nbsp;</div>

<div><br></div>-- <br>William Le Ferrand<br><br><div><div>Mobile =
:&nbsp;(+1)&nbsp;<span =
style=3D"font-family:Arial,sans-serif;border-collapse:collapse;color:rgb(5=
1,51,51)"><a href=3D"tel:%28415%29%20683-1484" value=3D"+14156831484" =
target=3D"_blank">(415) 683-1484</a></span></div>




<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span =
style=3D"border-collapse:collapse">Web :&nbsp;<a =
href=3D"http://williamleferrand.github.com/" =
target=3D"_blank">http://williamleferrand.github.com/</a></span></font></d=
iv>

<a href=3D"http://www.linkedin.com/in/williamleferrand" =
target=3D"_blank"></a></div>
</font></span></div></div>
</blockquote></div><br><br clear=3D"all"><div><br></div></div><span><font =
color=3D"#888888">-- <br>Dave Scott
</font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>William =
Le Ferrand<br><br><div><div>Mobile :&nbsp;(+1)&nbsp;<span =
style=3D"font-family:Arial,sans-serif;border-collapse:collapse;color:rgb(5=
1,51,51)"><a href=3D"tel:%28415%29%20683-1484" value=3D"+14156831484" =
target=3D"_blank">(415) 683-1484</a></span></div>



<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span =
style=3D"border-collapse:collapse">Web :&nbsp;<a =
href=3D"http://williamleferrand.github.com/" =
target=3D"_blank">http://williamleferrand.github.com/</a></span></font></d=
iv><a href=3D"http://www.linkedin.com/in/williamleferrand" =
target=3D"_blank"></a></div>




</div>
</blockquote></div><br></div></div></div></blockquote></div><br><br =
clear=3D"all"><div><br></div>-- <br>William Le =
Ferrand<br><br><div><div>Mobile :&nbsp;(+1)&nbsp;<span =
style=3D"font-family:Arial,sans-serif;border-collapse:collapse;color:rgb(5=
1,51,51)">(415) 683-1484</span></div>

<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span =
style=3D"border-collapse:collapse">Web :&nbsp;<a =
href=3D"http://williamleferrand.github.com/" =
target=3D"_blank">http://williamleferrand.github.com/</a></span></font></d=
iv><a href=3D"http://www.linkedin.com/in/williamleferrand" =
target=3D"_blank"></a></div>


</div>
</blockquote></div><br></div></body></html>=

--Apple-Mail=_BE2CD5AC-F133-4441-8231-6889E456829C--


From anil@recoil.org Thu Sep 19 16:13:15 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMfut-0004at-HN (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 19 Sep 2013 16:13:15 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1524337
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:35898
	helo=dark.recoil.org)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1VMfus-0001eW-9K (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 19 Sep 2013 16:13:15 +0100
Received: (qmail 22749 invoked by uid 634); 19 Sep 2013 15:13:14 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from volstagg-0.srg.cl.cam.ac.uk (HELO clink.office) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Thu, 19 Sep 2013 16:13:14 +0100
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: Notes on Mirage meeting - 11 Sep
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <4C20415C7327A849961F3B8421413725010CD5506A57@EXCHANGE1.ad.nottingham.ac.uk>
Date: Thu, 19 Sep 2013 16:13:12 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <F8FAD56D-3A8D-4B54-BCC9-9596C52B9045@recoil.org>
References: <4AF38AA2-7AA6-4DCF-8366-69FD7AF29DD6@cam.ac.uk>
	<A6FDF2B2-AE49-4AE9-9F4F-F6C8562A3534@cam.ac.uk>
	<3F45424F-C350-4E1A-A6F8-1B67709FF1AF@cam.ac.uk>
	<9140F71E-EB61-4CE2-8712-02B1FC2C2378@nottingham.ac.uk>
	<4C20415C7327A849961F3B8421413725010CD55069DE@EXCHANGE1.ad.nottingham.ac.uk>
	<DD9A06FE-C5B7-4E5F-B00A-9F8228740709@recoil.org>
	<4C20415C7327A849961F3B8421413725010CD5506A57@EXCHANGE1.ad.nottingham.ac.uk>
To: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	Amir Chaudhry <amc79@cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 19 Sep 2013 15:13:15 -0000
Status: O
Content-Length: 1463
Lines: 33

On 17 Sep 2013, at 08:49, Christopher Greenhalgh =
<Chris.Greenhalgh@nottingham.ac.uk> wrote:

> On 16 September 2013 15:05 Anil Madhavapeddy [mailto:anil@recoil.org] =
wrote:
>=20
>> A newbie question in return from someone who's never owned an =
Android: what's the best tablet I can buy that is easy to develop for =
and test your patches under?  I can rotate it into the OCamlot pool [1] =
when it's stable too...
>=20
> Android devices with a "google" badge are usually a good bet for =
development, e.g. you can be confident of unlocking the boot loader - =
they are the devices google uses to drive evolution in the platform.=20
>=20
> Currently I'm working with a Google Nexus 7 (i.e. 7 in tablet); there =
are versions with & without GSM. I believe its made by asus. I know that =
its USB-OTG support works (which I need). Larger format would be the =
Google Nexus 10, which is completely different hardware, possibly made =
by Samsung (can't remember). But anything reasonably supported by custom =
firmware (e.g. http://www.cyanogenmod.org/ ) is likely to be ok.

Thanks -- I've ordered a Nexus 7.  =46rom a recent discussion on the =
OCaml list, it sounds like targeting Mirage as an 'on-device server' is =
the best way to go, and stick to using the native SDKs for building UIs =
against it.

The same holds for the iPhone too, where OCaml can cross-compile pretty =
well but the Objective-C bindings are themselves a moving target.

cheers,
Anil=


From Richard.Mortier@nottingham.ac.uk Thu Sep 19 16:17:12 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMfyi-0004jl-55 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Thu, 19 Sep 2013 16:17:12 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1524337 
	* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine04-20433-4.icritical.com ([195.62.217.152]:46635)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with smtp id 1VMfyh-0007Hl-gd (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Thu, 19 Sep 2013 16:17:12 +0100
Received: (qmail 17707 invoked from network); 19 Sep 2013 15:16:55 -0000
Received: from localhost (127.0.0.1)
	by engine04-20433-4.icritical.com with SMTP; 19 Sep 2013 15:16:55 -0000
Received: from engine04-20433-4.icritical.com ([127.0.0.1])
	by localhost (engine04-20433-4.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 17122-06 for <cl-mirage@lists.cam.ac.uk>;
	Thu, 19 Sep 2013 16:16:55 +0100 (BST)
Received: (qmail 17693 invoked by uid 599); 19 Sep 2013 15:16:54 -0000
Received: from unknown (HELO smtp3.nottingham.ac.uk) (128.243.44.55)
	by engine04-20433-4.icritical.com (qpsmtpd/0.28) with ESMTP;
	Thu, 19 Sep 2013 16:16:54 +0100
Received: from uiwexhub01.ad.nottingham.ac.uk ([128.243.15.133])
	by smtp3.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Richard.Mortier@nottingham.ac.uk>)
	id 1VMfyb-0001aI-QI; Thu, 19 Sep 2013 16:17:05 +0100
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Anil Madhavapeddy <anil@recoil.org>
Date: Thu, 19 Sep 2013 16:17:04 +0100
Subject: Re: Notes on Mirage meeting - 11 Sep
Thread-Topic: Notes on Mirage meeting - 11 Sep
Thread-Index: Ac61S0wxF6HJfL3yQVC23L1EP8ZSag==
Message-ID: <BB7EEF47-7D1B-4E66-88F2-F47A8AF35DE3@nottingham.ac.uk>
References: <4AF38AA2-7AA6-4DCF-8366-69FD7AF29DD6@cam.ac.uk>
	<A6FDF2B2-AE49-4AE9-9F4F-F6C8562A3534@cam.ac.uk>
	<3F45424F-C350-4E1A-A6F8-1B67709FF1AF@cam.ac.uk>
	<9140F71E-EB61-4CE2-8712-02B1FC2C2378@nottingham.ac.uk>
	<4C20415C7327A849961F3B8421413725010CD55069DE@EXCHANGE1.ad.nottingham.ac.uk>
	<DD9A06FE-C5B7-4E5F-B00A-9F8228740709@recoil.org>
	<4C20415C7327A849961F3B8421413725010CD5506A57@EXCHANGE1.ad.nottingham.ac.uk>
	<F8FAD56D-3A8D-4B54-BCC9-9596C52B9045@recoil.org>
In-Reply-To: <F8FAD56D-3A8D-4B54-BCC9-9596C52B9045@recoil.org>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine04-20433-4.icritical.com
Cc: Christopher Greenhalgh <Chris.Greenhalgh@nottingham.ac.uk>,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	Amir Chaudhry <amc79@cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 19 Sep 2013 15:17:12 -0000
Status: O
Content-Length: 1271
Lines: 28


On 19 Sep 2013, at 16:13, Anil Madhavapeddy wrote:

> Thanks -- I've ordered a Nexus 7.  From a recent discussion on the OCaml =
list, it sounds like targeting Mirage as an 'on-device server' is the best =
way to go, and stick to using the native SDKs for building UIs against it.

fwiw, that makes complete sense to me -- UIs can presumably then be built u=
sing native sdks or embedding a webserver+js libs in the mirage app...?  al=
so naturally fits the same code on device and in cloud model.

--=20
Cheers,

R.




This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please send it back to me, and immediately delete it.   Please do not use, copy or disclose the information contained in this message or in any attachment.  Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham.

This message has been checked for viruses but the contents of an attachment
may still contain software viruses which could damage your computer system, you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.






From warnegia@gmail.com Thu Sep 19 16:28:21 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMg9V-0005Cp-PH (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Thu, 19 Sep 2013 16:28:21 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1524337 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.212.172 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (warnegia[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 NORMAL_HTTP_TO_IP URI: Uses a dotted-decimal IP address in URL
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f172.google.com ([209.85.212.172]:50197)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1VMg9U-0000MI-9K (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <warnegia@gmail.com>); Thu, 19 Sep 2013 16:28:21 +0100
Received: by mail-wi0-f172.google.com with SMTP id hn9so5795987wib.11
	for <cl-mirage@lists.cam.ac.uk>; Thu, 19 Sep 2013 08:28:20 -0700 (PDT)
X-Received: by 10.180.74.164 with SMTP id u4mr1795956wiv.17.1379604500586;
	Thu, 19 Sep 2013 08:28:20 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.217.115.65 with HTTP; Thu, 19 Sep 2013 08:28:00 -0700 (PDT)
In-Reply-To: <A151D6C7-D0E7-428D-B5BE-E2FAFCD25364@recoil.org>
References: <CAGS5m-mvT4-Odwb+gYGwn_BT31pCBLaspntwvmgsATg7Qfjiww@mail.gmail.com>
	<CAG_esB0LGMw2NQJfP5rEnsoqj4KrT+CKcD-mWkFMpKXvSdfTvw@mail.gmail.com>
	<CAGS5m-ny83zMEWSTCZuwSEBV6CGcdCLMho4qLS3164qS7zsvPA@mail.gmail.com>
	<11A052D6-F076-4B60-9EA1-93A4E07C4732@recoil.org>
	<CAGS5m-mL8Q1UPUpurGu-V8YaKKbxDOGkWTriu3zZ+5+esRTfMw@mail.gmail.com>
	<A151D6C7-D0E7-428D-B5BE-E2FAFCD25364@recoil.org>
From: William Le Ferrand <warnegia@gmail.com>
Date: Thu, 19 Sep 2013 08:28:00 -0700
Message-ID: <CAGS5m-msiuvsegirVgnOV=41qJstPQ=Su7A+xdtEipbRdaeokg@mail.gmail.com>
Subject: Re: RX error (microkernel in EC2)
To: Anil Madhavapeddy <anil@recoil.org>
Content-Type: multipart/alternative; boundary=f46d043c7f56302d1504e6be3489
Cc: David Scott <scott.dj@gmail.com>, cl-mirage <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 19 Sep 2013 15:28:21 -0000
Status: O
Content-Length: 11935
Lines: 353

--f46d043c7f56302d1504e6be3489
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

ok great. fyi I'm doing consulting work for someone who is storing &
indexing > 8 Tb/day in AWS and looking to scale to 250 Tb/day. It's full
scala, but I'd love to benchmark a mirage-based solution on my spare time
and to push them in this direction if the figures make sense


On Thu, Sep 19, 2013 at 6:59 AM, Anil Madhavapeddy <anil@recoil.org> wrote:

> DHCP should work too (and has worked in the past, so this is no doubt a
> minor issue, despite being difficult to debug).
>
> -anil
>
> On 19 Sep 2013, at 14:56, William Le Ferrand <warnegia@gmail.com> wrote:
>
> I used the ec2.sh script, but I think that I was on the wrong track anywa=
y
> as local IP should be retrieved from the instance using "*GET
> http://169.254.169.254/latest/meta-data/local-ipv4" *rather than DHCP,
> shouldn't it? That's why I inquired about the status of client functions =
in
> cohttp
>
>
> On Thu, Sep 19, 2013 at 3:57 AM, Anil Madhavapeddy <anil@recoil.org>wrote=
:
>
>> I'll take a look at this -- which script did you use to wrap up the EC2
>> kernel for upload William? (just curious if you've been using the AWS OC=
aml
>> bindings for this, or doing it manually)
>>
>> -anil
>>
>> On 18 Sep 2013, at 23:57, William Le Ferrand <warnegia@gmail.com> wrote:
>>
>> Yes, I tried that but the error only occurs in EC2; it's raised somewher=
e
>> in the DHCP module it seems ..
>>
>>
>> On Wed, Sep 18, 2013 at 2:12 PM, David Scott <scott.dj@gmail.com> wrote:
>>
>>> Hi,
>>>
>>> I usually start by recompiling the app as a Unix process (using
>>> "mirage-unix" rather than "mirage-xen"). Assuming the bug manifests the=
re
>>> (probably: I suspect the String.sub problem is coming from the http-lev=
el
>>> rather than the xen driver-level) then you can use regular debugging to=
ols,
>>> set OCAMLRUNPARAM=3Db etc.
>>>
>>> Debugging in-situ on EC2 is currently a matter of inserting printf's an=
d
>>> reading the code-- not ideal.
>>>
>>> HTH
>>> Dave
>>>
>>>
>>> On Wed, Sep 18, 2013 at 9:45 PM, William Le Ferrand <warnegia@gmail.com=
>wrote:
>>>
>>>> hello everyone
>>>>
>>>> I'm running the simplest cohttp application possible in EC2, the
>>>> instance boots but quickly complains :
>>>>
>>>>
>>>>
>>>> MAC: 0e:32:89:f8:03:7b
>>>>  sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
>>>> Manager: plug 0
>>>> Manager: plug done, to listener
>>>> Manager: Interface 0 to DHCP
>>>> DHCP: waiting for first offer
>>>> Manager: init done
>>>> DHCP: start discovery
>>>> Sending DHCP broadcast len 552
>>>> DHCP: start discovery
>>>> Sending DHCP broadcast len 552
>>>> DHCP: input ciaddr 0.0.0.0 yiaddr 172.31.23.46 siaddr 0.0.0.0 giaddr 0=
.0.0.0 chaddr  2=EF=BF=BD=EF=BF=BD { sname  file
>>>> DHCP: offer received: 172.31.23.46
>>>> Sending DHCP broadcast len 552
>>>> RX exn Invalid_argument("String.sub")
>>>>
>>>>
>>>> Am I doing something wrong somewhere and what would be a good strategy
>>>> to debug this?
>>>>
>>>> Thanks
>>>>
>>>> william
>>>>
>>>> --
>>>> William Le Ferrand
>>>>
>>>> Mobile : (+1) (415) 683-1484
>>>> Web : http://williamleferrand.github.com/
>>>>  <http://www.linkedin.com/in/williamleferrand>
>>>>
>>>
>>>
>>>
>>> --
>>> Dave Scott
>>>
>>
>>
>>
>> --
>> William Le Ferrand
>>
>> Mobile : (+1) (415) 683-1484
>> Web : http://williamleferrand.github.com/
>> <http://www.linkedin.com/in/williamleferrand>
>>
>>
>>
>
>
> --
> William Le Ferrand
>
> Mobile : (+1) (415) 683-1484
> Web : http://williamleferrand.github.com/
> <http://www.linkedin.com/in/williamleferrand>
>
>
>


--=20
William Le Ferrand

Mobile : (+1) (415) 683-1484
Web : http://williamleferrand.github.com/
<http://www.linkedin.com/in/williamleferrand>

--f46d043c7f56302d1504e6be3489
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">ok great. fyi I&#39;m doing consulting work for someone wh=
o is storing &amp; indexing &gt; 8 Tb/day in AWS and looking to scale to 25=
0 Tb/day. It&#39;s full scala, but I&#39;d love to benchmark a mirage-based=
 solution on my spare time and to push them in this direction if the figure=
s make sense</div>

<div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On Thu, Sep 1=
9, 2013 at 6:59 AM, Anil Madhavapeddy <span dir=3D"ltr">&lt;<a href=3D"mail=
to:anil@recoil.org" target=3D"_blank">anil@recoil.org</a>&gt;</span> wrote:=
<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-lef=
t:1px #ccc solid;padding-left:1ex">

<div style=3D"word-wrap:break-word">DHCP should work too (and has worked in=
 the past, so this is no doubt a minor issue, despite being difficult to de=
bug).<span class=3D"HOEnZb"><font color=3D"#888888"><div><br></div><div>-an=
il</div>

</font></span><div><div class=3D"h5"><div><br><div><div>On 19 Sep 2013, at =
14:56, William Le Ferrand &lt;<a href=3D"mailto:warnegia@gmail.com" target=
=3D"_blank">warnegia@gmail.com</a>&gt; wrote:</div><br><blockquote type=3D"=
cite">

<div dir=3D"ltr">I used the ec2.sh script, but I think that I was on the wr=
ong track anyway as local IP should be retrieved from the instance using &q=
uot;<strong style=3D"color:rgb(0,0,102);font-family:&#39;Courier New&#39;,C=
ourier,mono;font-size:12px">GET <a href=3D"http://169.254.169.254/latest/me=
ta-data/local-ipv4" target=3D"_blank">http://169.254.169.254/latest/meta-da=
ta/local-ipv4</a>&quot;=C2=A0</strong>rather than DHCP, shouldn&#39;t it? T=
hat&#39;s why I inquired about the status of client functions in cohttp</di=
v>



<div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On Thu, Sep 1=
9, 2013 at 3:57 AM, Anil Madhavapeddy <span dir=3D"ltr">&lt;<a href=3D"mail=
to:anil@recoil.org" target=3D"_blank">anil@recoil.org</a>&gt;</span> wrote:=
<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-lef=
t:1px #ccc solid;padding-left:1ex">



<div style=3D"word-wrap:break-word">I&#39;ll take a look at this -- which s=
cript did you use to wrap up the EC2 kernel for upload William? (just curio=
us if you&#39;ve been using the AWS OCaml bindings for this, or doing it ma=
nually)<span><font color=3D"#888888"><div>



<br></div><div>-anil</div></font></span><div><div><br><div><div>On 18 Sep 2=
013, at 23:57, William Le Ferrand &lt;<a href=3D"mailto:warnegia@gmail.com"=
 target=3D"_blank">warnegia@gmail.com</a>&gt; wrote:</div>
<br>
<blockquote type=3D"cite"><div dir=3D"ltr">Yes, I tried that but the error =
only occurs in EC2; it&#39;s raised somewhere in the DHCP module it seems .=
.</div><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On Wed=
, Sep 18, 2013 at 2:12 PM, David Scott <span dir=3D"ltr">&lt;<a href=3D"mai=
lto:scott.dj@gmail.com" target=3D"_blank">scott.dj@gmail.com</a>&gt;</span>=
 wrote:<br>





<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hi,<div><br></div><div>I us=
ually start by recompiling the app as a Unix process (using &quot;mirage-un=
ix&quot; rather than &quot;mirage-xen&quot;). Assuming the bug manifests th=
ere (probably: I suspect the String.sub problem is coming from the http-lev=
el rather than the xen driver-level) then you can use regular debugging too=
ls, set OCAMLRUNPARAM=3Db etc.</div>






<div><br></div><div>Debugging in-situ on EC2 is currently a matter of inser=
ting printf&#39;s and reading the code-- not ideal.</div><div><br></div><di=
v>HTH</div><div>Dave</div></div><div class=3D"gmail_extra"><div>

<br><br><div class=3D"gmail_quote">
On Wed, Sep 18, 2013 at 9:45 PM, William Le Ferrand <span dir=3D"ltr">&lt;<=
a href=3D"mailto:warnegia@gmail.com" target=3D"_blank">warnegia@gmail.com</=
a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0=
 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">






<div dir=3D"ltr">hello everyone<div><br></div><div>I&#39;m running the simp=
lest cohttp application possible in EC2, the instance boots but quickly com=
plains :=C2=A0</div><div><br></div><div><pre style=3D"margin-top:0px;margin=
-bottom:0px;padding:10px;font-family:&#39;Courier New&#39;,monospace;line-h=
eight:12px;overflow:auto;font-size:12px;background-color:rgb(0,0,0);color:r=
gb(0,255,0);min-height:1023px">


MAC: 0e:32:89:f8:03:7b
 sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
Manager: plug 0
Manager: plug done, to listener
Manager: Interface 0 to DHCP
DHCP: waiting for first offer
Manager: init done
DHCP: start discovery
Sending DHCP broadcast len 552
DHCP: start discovery
Sending DHCP broadcast len 552
DHCP: input ciaddr 0.0.0.0 yiaddr 172.31.23.46 siaddr 0.0.0.0 giaddr 0.0.0.=
0 chaddr  2=EF=BF=BD=EF=BF=BD { sname  file=20
DHCP: offer received: 172.31.23.46
Sending DHCP broadcast len 552
RX exn Invalid_argument(&quot;String.sub&quot;)</pre><div><br></div><div>Am=
 I doing something wrong somewhere and what would be a good strategy to deb=
ug this?=C2=A0</div><div><br></div><div>Thanks</div><span><font color=3D"#8=
88888"><div>






<br></div><div>william=C2=A0</div>

<div><br></div>-- <br>William Le Ferrand<br><br><div><div>Mobile :=C2=A0(+1=
)=C2=A0<span style=3D"font-family:Arial,sans-serif;border-collapse:collapse=
;color:rgb(51,51,51)"><a href=3D"tel:%28415%29%20683-1484" value=3D"+141568=
31484" target=3D"_blank">(415) 683-1484</a></span></div>






<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=C2=A0<a href=3D"http://williamleferrand.github.=
com/" target=3D"_blank">http://williamleferrand.github.com/</a></span></fon=
t></div>

<a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_blank"><=
/a></div>
</font></span></div></div>
</blockquote></div><br><br clear=3D"all"><div><br></div></div><span><font c=
olor=3D"#888888">-- <br>Dave Scott
</font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>William Le F=
errand<br><br><div><div>Mobile :=C2=A0(+1)=C2=A0<span style=3D"font-family:=
Arial,sans-serif;border-collapse:collapse;color:rgb(51,51,51)"><a href=3D"t=
el:%28415%29%20683-1484" value=3D"+14156831484" target=3D"_blank">(415) 683=
-1484</a></span></div>





<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=C2=A0<a href=3D"http://williamleferrand.github.=
com/" target=3D"_blank">http://williamleferrand.github.com/</a></span></fon=
t></div><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_=
blank"></a></div>






</div>
</blockquote></div><br></div></div></div></blockquote></div><br><br clear=
=3D"all"><div><br></div>-- <br>William Le Ferrand<br><br><div><div>Mobile :=
=C2=A0(+1)=C2=A0<span style=3D"font-family:Arial,sans-serif;border-collapse=
:collapse;color:rgb(51,51,51)"><a href=3D"tel:%28415%29%20683-1484" value=
=3D"+14156831484" target=3D"_blank">(415) 683-1484</a></span></div>



<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=C2=A0<a href=3D"http://williamleferrand.github.=
com/" target=3D"_blank">http://williamleferrand.github.com/</a></span></fon=
t></div><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_=
blank"></a></div>




</div>
</blockquote></div><br></div></div></div></div></blockquote></div><br><br c=
lear=3D"all"><div><br></div>-- <br>William Le Ferrand<br><br><div><div>Mobi=
le :=C2=A0(+1)=C2=A0<span style=3D"font-family:Arial,sans-serif;border-coll=
apse:collapse;color:rgb(51,51,51)">(415) 683-1484</span></div>

<div><font color=3D"#333333" face=3D"Arial, sans-serif"><span style=3D"bord=
er-collapse:collapse">Web :=C2=A0<a href=3D"http://williamleferrand.github.=
com/" target=3D"_blank">http://williamleferrand.github.com/</a></span></fon=
t></div><a href=3D"http://www.linkedin.com/in/williamleferrand" target=3D"_=
blank"></a></div>


</div>

--f46d043c7f56302d1504e6be3489--


From anil@recoil.org Thu Sep 19 16:44:08 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMgOm-0005hD-3E (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 19 Sep 2013 16:44:08 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1524337 
	*  0.0 HTML_MESSAGE BODY: HTML included in message
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:1052
	helo=dark.recoil.org)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1VMgOk-0006tN-8t (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 19 Sep 2013 16:44:08 +0100
Received: (qmail 2345 invoked by uid 634); 19 Sep 2013 15:44:06 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED,HTML_MESSAGE
X-Spam-Check-By: dark.recoil.org
Received: from volstagg-0.srg.cl.cam.ac.uk (HELO clink.office) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Thu, 19 Sep 2013 16:44:04 +0100
Content-Type: multipart/alternative;
	boundary="Apple-Mail=_E2C5AF14-3D99-453A-BC70-2B9D32B6E65B"
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
Subject: Re: mirage support for dynamically loaded modules
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <CAPVzHcZ5TQMvrbo3xvHSkVGQksQZ_mvpcDAnbg6te0d+HmmUpA@mail.gmail.com>
Date: Thu, 19 Sep 2013 16:44:03 +0100
Message-Id: <D7A8CB41-6E87-4D9D-BAE5-37DD1AD65CB8@recoil.org>
References: <CAPVzHcbAZrpaML97+AGVe28ihNAS64ZDzXHMPgE+c2gXxibGDw@mail.gmail.com>
	<CB902C95-CCF3-4ADD-8AE6-11DDA878442C@recoil.org>
	<CAPVzHcaA1A2BM7bkqSeBZjWLcCcUrjgzxtzLPkYYWWPr0UEFWQ@mail.gmail.com>
	<0A5C21A3-5333-409B-AD35-4D2E66042F78@recoil.org>
	<CAPVzHcZRR2r-YYuEhV8Rx+uuER49CHW7YidhCvYNU7qU_k10Jg@mail.gmail.com>
	<2F4D8F1A-B39E-4FC6-BE54-9CED6E1B14DD@recoil.org>
	<CAPVzHcZ5TQMvrbo3xvHSkVGQksQZ_mvpcDAnbg6te0d+HmmUpA@mail.gmail.com>
To: Andrew Lekar <sam.and.tetris@gmail.com>
X-Mailer: Apple Mail (2.1508)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: cl-mirage@lists.cam.ac.uk
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 19 Sep 2013 15:44:08 -0000
Status: O
Content-Length: 20034
Lines: 419


--Apple-Mail=_E2C5AF14-3D99-453A-BC70-2B9D32B6E65B
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=iso-8859-1

Great, let us know how you get along with Snowflake!

We do indeed have a toplevel almost working with Mirage.  The =
difficulties with this are getting a terminal emulator (now almost =
sorted by Dave, who went a bit further than expected and also has a VNC =
library).

For a native code toplevel, however, we need to use some JIT techniques =
to be able to compile code without having an assembler available.  =
Benedikt Maurer has already done some work on this [1], so his patches =
need to be investigated and adapted to Mirage (not difficult, but on the =
stack!)

[1] http://arxiv.org/pdf/1110.1029.pdf

-anil

On 10 Sep 2013, at 17:34, Andrew Lekar <sam.and.tetris@gmail.com> wrote:

> Anil, this is just awesome! Snowflake is exactly the same I intended =
to do. It even has dynamically loaded modules, shell, filesystem =
support. Do you intend to implement shell or toplevel in mirage? It =
should ease os management very much.
>=20
>=20
> 2013/9/10 Anil Madhavapeddy <anil@recoil.org>
> Ah, I see.  One first step here might be to add support for HVM =
booting of normal guests.  The HVM mode is very similar to PV boot, =
except:
>=20
> - you need to configure a hardware timer
> - the boot process goes through normal 16-bit bootstrap instead of =
direct PV boot
> - page table manipulation is direct instead of via hypercalls.
> - you can interact with emulated device drivers for block/net.
>=20
> The last point is most important -- it would be easiest to get the =
scaffolding for device drivers working by being able to evaluate the =
rest of the system against the PV equivalents.
>=20
> Another way to go is to investigate Snowflock's hardware device =
drivers that were written in OCaml: =
https://github.com/jessicah/snowflake-svn/tree/master/kernel (the =
license should be clarified with the author first, however, as I didn't =
spot any LICENSE files in there).
>=20
> There's another approach which doesn't involve Xen at all -- have you =
considered taking one of the Raspberry Pi ARM mini operating systems and =
porting the Mirage libraries to it?  They compile in ARM fine, and it =
should be possible to adapt Dave's VNC library to rasterise onto HDMI. =
The advantage of this is that there's a fairly small hardware HDL to =
port, vs the incredible number of x86 drivers that would need to be =
supported.  (this isn't relevant if you have a specific x86 hardware set =
to support, but in general there's no easy way out of x86 support except =
for re-using kernel drivers in interesting ways).
>=20
> Finally, you should also check out rump kernels: it should be easy to =
re-use portions of the NetBSD rump infrastructure to interface with =
Mirage management -- http://www.netbsd.org/docs/rump/.
>=20
> cheers
> Anil
>=20
>=20
> On 10 Sep 2013, at 11:22, Andrew Lekar <sam.and.tetris@gmail.com> =
wrote:
>=20
>> "Got it -- so you want to interface with hardware drivers via =
passthrough to a driver domain, I think."
>>=20
>> No! I do not have any domains with drivers or kernels - only dom0 =
with mirage. So I have to implement hardware interaction all by myself =
with a thin layer of xen.
>> For now I've got working baremetal ocaml runtime and I teared off =
xenstore support from mirage to run it on dom0. You can think of it as a =
true baremetal mirage since xen does not offer anything but some debug =
io and timer support.
>> Therefore I'm interested in deploying hardware drivers separately =
from mirage kernel and I'd prefer to have in theese drivers as less C =
code as possible. Will you give me any suggestions about such mirage =
configuration?
>>=20
>>=20
>> 2013/9/10 Anil Madhavapeddy <anil@recoil.org>
>> Got it -- so you want to interface with hardware drivers via =
passthrough to a driver domain, I think.
>>=20
>> The best way to think of Mirage is as a growing bunch of libraries, =
glued together by a minimal runtime for whatever platform is targetted =
and an increasingly sophisticated constraint-based package manager =
(OPAM).
>>=20
>> For example, consider these backends:
>>=20
>> - UNIX --- the compiler output is an ELF executable, and =
started/stopped via a helper binary that passes it file descriptors and =
performs privileged operations.  It can be passed raw packets via =
tuntap, or invoke kernel sockets, depending on how it's built.
>>=20
>> - Xen -- the compiler output is an object file that is linked to a =
minimal Xen OS with a linker script to make it PV bootable.  All the =
drivers are normal OCaml libraries (including the shared memory ring =
handling).
>>=20
>> - Javascript -- the compiler output is a JS blob which has externals =
that are satisfied via other Javascript functions made available, and =
the runtime used is the Javascript one.
>>=20
>> - kFreeBSD -- the compiler output is linked with the OCaml GC and =
fixed-point floating point and kernel module scaffolding.  The internal =
kernel APIs are bound as OCaml libraries.
>>=20
>> The final one is the most relevant to you...the easiest way to manage =
hardware in the first instance is to use FreeBSD as a driver domain (no =
userspace), and take advantage of existing Mirage libraries to manage =
the kernel lifecycle.
>>=20
>> The most immediate thing to get working in the kernel guest is =
Xenstore.  This is exposed to a HVM guest via a special MSR which gives =
you the shared_info page, which in turns gives access to hypercalls and =
the Xenstore event channel.  Once this is set up, you can use the =
existing OCaml Xenstore library to handle all the communication to/from =
the driver domain, without having to worry about reimplementing the =
protocol in the kernel.  The same goes for other virtual devices such as =
Netfront, Blkfront, and (thanks to Dave) even a VNC framebuffer if you =
want a PV framebuffer.
>>=20
>> On your other points about filesystems -- Thomas Gazagnaire is =
working on a Mirage filesystem at the moment (a branch-consistent one =
dubbed Irminsule), and Dave has a FAT32 implementation, and I wrote a =
simple static one (in mirage-fs).  We're finding that filesystems aren't =
often required by our current applications, however.
>>=20
>> Hope this helps -- if you let us know more specific use-cases, I can =
guide you towards more specific solutions. =20
>>=20
>> cheers,
>> Anil
>>=20
>> On 9 Sep 2013, at 18:21, Andrew Lekar <sam.and.tetris@gmail.com> =
wrote:
>>=20
>>> Thank you Anil.
>>>=20
>>> I am working with baremetal port of mirage (well on top of xen in =
dom0 domain) and I'm expecting to have a lot of hardware drivers which =
I'd like to deploy and debug without rebuild of entire mirage image. =
Also I'd like to have a way of upgrading software and it is better done =
with in-system compiler or bytecode interpreter. As far as I understood =
your answer mirage ocaml does have bytecode interpreter but does not =
support filesystem or other modules sources, am I right?
>>> Unikernel solution is good for me for now but it is way too long to =
debug anything with unikernel and I expect it to become worse in future.
>>>=20
>>>=20
>>> 2013/9/9 Anil Madhavapeddy <anil@recoil.org>
>>> On 8 Sep 2013, at 20:25, Andrew Lekar <sam.and.tetris@gmail.com> =
wrote:
>>>=20
>>> > Hello everyone.
>>> >
>>> > Is it possible to support dynamically load ocaml modules in =
mirage? So that I do not rebuild entire mirage kernel but make it once =
and add additional drivers later. What are the steps required to make it =
possible? I guess to make it work I should implement filesystem support, =
bytecode interpreter or ocaml compiler in mirage.
>>>=20
>>> Hi Andrew,
>>>=20
>>> It depends which backend you're thinking of.  In Xen, we have some =
patches to further make the address space immutable post-boot (by =
dropping the ability to alter the guest page tables or switch CR3).  In =
that case, you can't do dynamic loading by design.
>>>=20
>>> However, without this patch, and with a suitable filesystem, network =
or vchan source for the dynamic module, you could do dynamic loading.  =
The real question is why you'd want that at all, given it's easier to =
recompile a Mirage instance and redeploy it rather than go through all =
the trouble of dynamic loading.  In many ways, that's the whole point of =
the Xen backend ;-)
>>>=20
>>> -anil
>>>=20
>>=20
>>=20
>=20
>=20


--Apple-Mail=_E2C5AF14-3D99-453A-BC70-2B9D32B6E65B
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=iso-8859-1

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Diso-8859-1"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space; =
">Great, let us know how you get along with =
Snowflake!<div><br></div><div>We do indeed have a toplevel almost =
working with Mirage. &nbsp;The difficulties with this are getting a =
terminal emulator (now almost sorted by Dave, who went a bit further =
than expected and also has a VNC library).</div><div><br></div><div>For =
a native code toplevel, however, we need to use some JIT techniques to =
be able to compile code without having an assembler available. =
&nbsp;Benedikt Maurer has already done some work on this [1], so his =
patches need to be investigated and adapted to Mirage (not difficult, =
but on the stack!)</div><div><br></div><div>[1] <a =
href=3D"http://arxiv.org/pdf/1110.1029.pdf">http://arxiv.org/pdf/1110.1029=
.pdf</a></div><div><br></div><div>-anil</div><div><br></div><div><div><div=
>On 10 Sep 2013, at 17:34, Andrew Lekar &lt;<a =
href=3D"mailto:sam.and.tetris@gmail.com">sam.and.tetris@gmail.com</a>&gt; =
wrote:</div><br class=3D"Apple-interchange-newline"><blockquote =
type=3D"cite"><div dir=3D"ltr">Anil, this is just awesome! Snowflake is =
exactly the same I intended to do. It even has dynamically loaded =
modules, shell, filesystem support. Do you intend to implement shell or =
toplevel in mirage? It should ease os management very much.</div>
<div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">2013/9/10 =
Anil Madhavapeddy <span dir=3D"ltr">&lt;<a href=3D"mailto:anil@recoil.org"=
 target=3D"_blank">anil@recoil.org</a>&gt;</span><br><blockquote =
class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc =
solid;padding-left:1ex">
<div style=3D"word-wrap:break-word">Ah, I see. &nbsp;One first step here =
might be to add support for HVM booting of normal guests. &nbsp;The HVM =
mode is very similar to PV boot, except:<div><br></div><div>- you need =
to configure a hardware timer</div>
<div>- the boot process goes through normal 16-bit bootstrap instead of =
direct PV boot</div><div>- page table manipulation is direct instead of =
via hypercalls.</div><div>- you can interact with emulated device =
drivers for block/net.</div>
<div><br></div><div>The last point is most important -- it would be =
easiest to get the scaffolding for device drivers working by being able =
to evaluate the rest of the system against the PV =
equivalents.</div><div><br></div>
<div>Another way to go is to investigate Snowflock's hardware device =
drivers that were written in OCaml:&nbsp;<a =
href=3D"https://github.com/jessicah/snowflake-svn/tree/master/kernel" =
target=3D"_blank">https://github.com/jessicah/snowflake-svn/tree/master/ke=
rnel</a> (the license should be clarified with the author first, =
however, as I didn't spot any LICENSE files in there).</div>
<div><br></div><div>There's another approach which doesn't involve Xen =
at all -- have you considered taking one of the Raspberry Pi ARM mini =
operating systems and porting the Mirage libraries to it? &nbsp;They =
compile in ARM fine, and it should be possible to adapt Dave's VNC =
library to rasterise onto HDMI. The advantage of this is that there's a =
fairly small hardware HDL to port, vs the incredible number of x86 =
drivers that would need to be supported. &nbsp;(this isn't relevant if =
you have a specific x86 hardware set to support, but in general there's =
no easy way out of x86 support except for re-using kernel drivers in =
interesting ways).</div>
<div><br></div><div>Finally, you should also check out rump kernels: it =
should be easy to re-use portions of the NetBSD rump infrastructure to =
interface with Mirage management --&nbsp;<a =
href=3D"http://www.netbsd.org/docs/rump/" =
target=3D"_blank">http://www.netbsd.org/docs/rump/</a>.</div>
<div><br></div><div>cheers</div><span class=3D"HOEnZb"><font =
color=3D"#888888">Anil</font></span><div><div =
class=3D"h5"><div><br></div><div><br><div><div>On 10 Sep 2013, at 11:22, =
Andrew Lekar &lt;<a href=3D"mailto:sam.and.tetris@gmail.com" =
target=3D"_blank">sam.and.tetris@gmail.com</a>&gt; wrote:</div>
<br><blockquote type=3D"cite"><div dir=3D"ltr">"<span =
style=3D"font-family:arial,sans-serif;font-size:13px">Got it -- so you =
want to interface with hardware drivers via passthrough to a driver =
domain, I think."</span><div>
<span style=3D"font-family:arial,sans-serif;font-size:13px"><br>
</span></div><div><span =
style=3D"font-family:arial,sans-serif;font-size:13px">No! I do not have =
any domains with drivers or kernels - only dom0 with mirage. So I have =
to implement hardware interaction all by myself with a thin layer of =
xen.</span></div>

<div><span style=3D"font-family:arial,sans-serif;font-size:13px">For now =
I've got working baremetal ocaml runtime and I teared off xenstore =
support from mirage to run it on dom0. You can think of it as a true =
baremetal mirage since xen does not offer anything but some debug io and =
timer support.</span></div>

<div><span style=3D"font-family:arial,sans-serif;font-size:13px">Therefore=
 I'm interested in deploying hardware drivers separately from mirage =
kernel and I'd prefer to have in theese drivers as less C code as =
possible. Will you give me any suggestions about such mirage =
configuration?</span></div>

</div><div class=3D"gmail_extra"><br><br><div =
class=3D"gmail_quote">2013/9/10 Anil Madhavapeddy <span dir=3D"ltr">&lt;<a=
 href=3D"mailto:anil@recoil.org" =
target=3D"_blank">anil@recoil.org</a>&gt;</span><br><blockquote =
class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc =
solid;padding-left:1ex">

<div style=3D"word-wrap:break-word">Got it -- so you want to interface =
with hardware drivers via passthrough to a driver domain, I =
think.<div><br></div><div>The best way to think of Mirage is as a =
growing bunch of libraries, glued together by a minimal runtime for =
whatever platform is targetted and an increasingly sophisticated =
constraint-based package manager (OPAM).</div>

<div><br></div><div>For example, consider these =
backends:</div><div><br></div><div>- UNIX --- the compiler output is an =
ELF executable, and started/stopped via a helper binary that passes it =
file descriptors and performs privileged operations. &nbsp;It can be =
passed raw packets via tuntap, or invoke kernel sockets, depending on =
how it's built.</div>

<div><br></div><div>- Xen -- the compiler output is an object file that =
is linked to a minimal Xen OS with a linker script to make it PV =
bootable. &nbsp;All the drivers are normal OCaml libraries (including =
the shared memory ring handling).</div>

<div><br></div><div>- Javascript -- the compiler output is a JS blob =
which has externals that are satisfied via other Javascript functions =
made available, and the runtime used is the Javascript =
one.</div><div><br></div><div>

- kFreeBSD -- the compiler output is linked with the OCaml GC and =
fixed-point floating point and kernel module scaffolding. &nbsp;The =
internal kernel APIs are bound as OCaml =
libraries.</div><div><br></div><div>The final one is the most relevant =
to you...the easiest way to manage hardware in the first instance is to =
use FreeBSD as a driver domain (no userspace), and take advantage of =
existing Mirage libraries to manage the kernel lifecycle.</div>

<div><br></div><div>The most immediate thing to get working in the =
kernel guest is Xenstore. &nbsp;This is exposed to a HVM guest via a =
special MSR which gives you the shared_info page, which in turns gives =
access to hypercalls and the Xenstore event channel. &nbsp;Once this is =
set up, you can use the existing OCaml Xenstore library to handle all =
the communication to/from the driver domain, without having to worry =
about reimplementing the protocol in the kernel. &nbsp;The same goes for =
other virtual devices such as Netfront, Blkfront, and (thanks to Dave) =
even a VNC framebuffer if you want a PV framebuffer.</div>

<div><br></div><div>On your other points about filesystems -- Thomas =
Gazagnaire is working on a Mirage filesystem at the moment (a =
branch-consistent one dubbed Irminsule), and Dave has a FAT32 =
implementation, and I wrote a simple static one (in mirage-fs). =
&nbsp;We're finding that filesystems aren't often required by our =
current applications, however.</div>

<div><br></div><div>Hope this helps -- if you let us know more specific =
use-cases, I can guide you towards more specific solutions. =
&nbsp;</div><div><br></div><div>cheers,</div><div>Anil</div><div><br><div>=

<div>On 9 Sep 2013, at 18:21, Andrew Lekar &lt;<a =
href=3D"mailto:sam.and.tetris@gmail.com" =
target=3D"_blank">sam.and.tetris@gmail.com</a>&gt; =
wrote:</div><br><blockquote type=3D"cite"><div dir=3D"ltr">Thank you =
Anil.<div><br></div>

<div>I am working with baremetal port of mirage (well on top of xen in =
dom0 domain) and I'm expecting to have a lot of hardware drivers which =
I'd like to deploy and debug without rebuild of entire mirage image. =
Also I'd like to have a way of upgrading software and it is better done =
with in-system compiler or bytecode interpreter. As far as I understood =
your answer mirage ocaml does have bytecode interpreter but does not =
support filesystem or other modules sources, am I right?</div>


<div>Unikernel solution is good for me for now but it is way too long to =
debug anything with unikernel and I expect it to become worse in =
future.</div></div><div class=3D"gmail_extra"><br><br><div =
class=3D"gmail_quote">2013/9/9 Anil Madhavapeddy <span dir=3D"ltr">&lt;<a =
href=3D"mailto:anil@recoil.org" =
target=3D"_blank">anil@recoil.org</a>&gt;</span><br>


<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 =
.8ex;border-left:1px #ccc solid;padding-left:1ex"><div>On 8 Sep 2013, at =
20:25, Andrew Lekar &lt;<a href=3D"mailto:sam.and.tetris@gmail.com" =
target=3D"_blank">sam.and.tetris@gmail.com</a>&gt; wrote:<br>



<br>
&gt; Hello everyone.<br>
&gt;<br>
&gt; Is it possible to support dynamically load ocaml modules in mirage? =
So that I do not rebuild entire mirage kernel but make it once and add =
additional drivers later. What are the steps required to make it =
possible? I guess to make it work I should implement filesystem support, =
bytecode interpreter or ocaml compiler in mirage.<br>



<br>
</div>Hi Andrew,<br>
<br>
It depends which backend you're thinking of. &nbsp;In Xen, we have some =
patches to further make the address space immutable post-boot (by =
dropping the ability to alter the guest page tables or switch CR3). =
&nbsp;In that case, you can't do dynamic loading by design.<br>



<br>
However, without this patch, and with a suitable filesystem, network or =
vchan source for the dynamic module, you could do dynamic loading. =
&nbsp;The real question is why you'd want that at all, given it's easier =
to recompile a Mirage instance and redeploy it rather than go through =
all the trouble of dynamic loading. &nbsp;In many ways, that's the whole =
point of the Xen backend ;-)<br>



<span><font color=3D"#888888"><br>
-anil</font></span></blockquote></div><br></div>
</blockquote></div><br></div></div></blockquote></div><br></div>
=
</blockquote></div><br></div></div></div></div></blockquote></div><br></di=
v>
</blockquote></div><br></div></body></html>=

--Apple-Mail=_E2C5AF14-3D99-453A-BC70-2B9D32B6E65B--


From scott.dj@gmail.com Thu Sep 19 22:41:15 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VMlyN-0004rn-Ep (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Thu, 19 Sep 2013 22:41:15 +0100
X-Cam-SpamDetails: score 0.6 from SpamAssassin-3.3.2-1524337 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.220.41 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (scott.dj[at]gmail.com)
	*  0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
	*      CUSTOM_MED
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
	*  1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing
	*      list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-pa0-f41.google.com ([209.85.220.41]:62809)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1VMlyL-0000Qd-iG (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Thu, 19 Sep 2013 22:41:15 +0100
Received: by mail-pa0-f41.google.com with SMTP id bj1so10236996pad.28
	for <cl-mirage@lists.cam.ac.uk>; Thu, 19 Sep 2013 14:41:12 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.68.135.132 with SMTP id ps4mr4024080pbb.171.1379626872487;
	Thu, 19 Sep 2013 14:41:12 -0700 (PDT)
Received: by 10.70.56.36 with HTTP; Thu, 19 Sep 2013 14:41:12 -0700 (PDT)
In-Reply-To: <CAG_esB1gT7uxjBag37ue9E809Og5bhBnbNG=hK=xpCaOFkOyMw@mail.gmail.com>
References: <5233969C.1080802@cl.cam.ac.uk>
	<CAG_esB1gT7uxjBag37ue9E809Og5bhBnbNG=hK=xpCaOFkOyMw@mail.gmail.com>
Date: Thu, 19 Sep 2013 22:41:12 +0100
Message-ID: <CAG_esB1O_ea9gKcU8K44+Gg0f9tE4TN8SyRCz5d2eSNxQjHO1w@mail.gmail.com>
Subject: Re: Improving the network-stack performance over Xen
From: David Scott <scott.dj@gmail.com>
To: Dimosthenis Pediaditakis <dimosthenis.pediaditakis@cl.cam.ac.uk>
Content-Type: multipart/alternative; boundary=e89a8ffbad61a8476f04e6c3699e
Cc: Mirage List <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 19 Sep 2013 21:41:15 -0000
Status: O
Content-Length: 27221
Lines: 627

--e89a8ffbad61a8476f04e6c3699e
Content-Type: text/plain; charset=ISO-8859-1

Hi Dimos,

I've created a new patch set based on a mix of your ideas and mine:

https://github.com/mirage/mirage-platform/pull/58

I've proposed switching to SCHEDOP_block with interrupts enabled. Unlike in
regular Mini-OS I don't think we need to do anything in the
hypervisor_callback, because we already have code to poll the evtchn
pending bits in evtchn_poll-- so we're a bit of a hybrid: interrupts on for
wakeups but the whole OS is still based around a select/poll-style loop.
I've left all event channels unmasked and used the event_upcall_mask to
turn on/off event delivery globally. I've revamped the OCaml Activations
interface to remove one source of missing events.

So far the code is working ok in my testing. I ran mirage-iperf and am
getting 1642002 KBit/sec on my test hardware -- I don't know if this is
considered good or bad! I ran your instrumented version (thanks for the
exhaustive instructions btw) and it drew some pretty graphs, but I'm not
enough of a TCP expert to interpret them properly.

Could you give this a go in your test environment and let me know what you
think?

I'm extremely suspicious of the console code -- it shouldn't be necessary
to include a delay in the print loop; that's definitely worth investigating.

Cheers,
Dave


On Thu, Sep 19, 2013 at 11:02 AM, David Scott <scott.dj@gmail.com> wrote:

> Hi Dimos,
>
> Thanks for looking into this! Thinking about it, I think we have several
> problems.
>
> 1. I think the Activations.wait API is difficult to use / unsafe:
>
> (* Block waiting for an event to occur on a particular port *)
> let wait evtchn =
>   if Eventchn.is_valid evtchn then begin
>           let port = Eventchn.to_int evtchn in
>           let th, u = Lwt.task () in
>           let node = Lwt_sequence.add_l u event_cb.(port) in
>           Lwt.on_cancel th (fun _ -> Lwt_sequence.remove node);
>           th
>   end else Lwt.fail Generation.Invalid
>
> When you call Activations.wait you are added to a 'sequence' (like a list)
> of people to wake up when the next event occurs. A typical driver would
> call Activations.wait in a loop, block for an event, wake up, signal some
> other thread to do work and then block again. However if the thread running
> the loop blocks anywhere else, then the thread will not be added to the
> sequence straight away and any notifications that arrive during the gap
> will be dropped. I noticed this when debugging my block backend
> implementation. I think netif has this problem:
>
> let listen nf fn =
>   (* Listen for the activation to poll the interface *)
>   let rec poll_t t =
>     lwt () = refill_requests t in
>     ^^^ blocks here, can miss events
>
>     rx_poll t fn;
>     tx_poll t;
>     (* Evtchn.notify nf.t.evtchn; *)
>     lwt new_t =
>       try_lwt
>         Activations.wait t.evtchn >> return t
>       with
>       | Generation.Invalid ->
>         Console.log_s "Waiting for plug in listen" >>
>         wait_for_plug nf >>
>         Console.log_s "Done..." >>
>         return nf.t
>     in poll_t new_t
>   in
>   poll_t nf.t
>
>
> I think we should change the semantics of Activations.wait to be more
> level-triggered rather than edge-triggered (i.e. more like the underlying
> behaviour of xen) like this:
>
>  type event
>  (** a particular event *)
>
>  val wait: Evtchn.t -> event option -> event Lwt.t
>  (** [wait evtchn None] returns [Some e] where [e] is the latest event.
>      [wait evtchn (Some e)] returns [Some e'] where [e'] is a later event
> than [e] *)
>
> In the implementation we could have "type event = int" and maintain a
> counter of "number of times this event has been signalled". When you call
> Activations.wait, you would pass in the number of the last event you saw,
> and the thread would block until a new event is available. This way you
> wouldn't have to be registered in the table when the event arrives.
>
> 2. SCHEDOP_poll has a low (arbitrary) nr_ports limit
>
>
> http://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=xen/common/schedule.c;h=a8398bd9ed4827564bed4346e1fdfbb98ec5907e;hb=c5e9596cd095e3b96a090002d9e6629a980904eb#l712
>
>  704 static long do_poll(struct sched_poll *sched_poll)
>  705 {
>  706     struct vcpu   *v = current;
>  707     struct domain *d = v->domain;
>  708     evtchn_port_t  port;
>  709     long           rc;
>  710     unsigned int   i;
>  711
>  712     /* Fairly arbitrary limit. */
>  713     if ( sched_poll->nr_ports > 128 )
>  714         return -EINVAL;
>
> The total number of available event channels for a 64-bit guest is 4096
> using the current ABI (a new interface is under development which allows
> even more). The limit of 128 is probably imposed to limit the amount of
> time the hypercall takes, to avoid hitting scalability limits like you do
> in userspace with select().
>
> One of the use-cases I'd like to use Mirage for is to run backend services
> (like xenstore or blkback) for all the domains on a host. This requires at
> least one event channel per client domain. We routinely run ~300 VMs/host,
> so the 128 limit is too small. Plus a quick grep around Linux shows that it
> doesn't use SCHEDOP_poll very much-- I think we should focus on using the
> hypercalls that other OSes are using, for maximum chance of success.
>
> So I think we should switch from select()-like behaviour using
> SCHEDOP_poll to interrupt-based delivery using SCHEDOP_block. I note that
> upstream mini-os does this by default too. I'll take a look at this.
>
> Cheers,
> Dave
>
>
>
> On Fri, Sep 13, 2013 at 11:50 PM, Dimosthenis Pediaditakis <
> dimosthenis.pediaditakis@cl.cam.ac.uk> wrote:
>
>>  Hi all,
>> The last few days I've been trying to pin-down the performance issues of
>> the Mirage network stack, when running over Xen.
>> When trying to push net-direct to its limits, random transmissions stall
>> for anywhere between 0.1sec-4sec (especially at the sender).
>>
>> After some experimentation, I believe that those time-outs occur because
>> netif is not (always) notified (via Activations) about freed TX-ring slots.
>> It seems that these events (intermittently) don't reach the guest
>> domain's front-end driver.
>>
>> AFAIK Activations.wait() currently blocks waiting for an event on the
>> port belonging to the event channel for the netif.
>> This event is delivered to Activations.run via Main.run.aux which is
>> invoked via the callback in app_main() of runtime/kernel/main.c
>> The problem I observed was that using "SCHEDOP_poll" without masking the
>> intended events, the hypervisor didn't "wake-up" the blocked domain upon
>> new event availability.
>> The requirement for event-masking when using "SCHEDOP_poll" is also
>> mentioned in the Xen documentation.
>>
>> I've produced a patch that seems to fix the above erratic behavior.
>> Now I am able to consistently achieve higher speeds (up to 2.75Gbps
>> DomU2Domu). Please, have a look at my repo:
>> https://github.com/dimosped/mirage-platform
>> It will be helpful to use big-enough txqueuelen values for your VIFs, as
>> the current TCP implementation doesn't like much losses at high datarates.
>> The default size in my system was only 32.
>>
>> I have also modified the mirage-net-direct by adding per-flow TCP debug
>> logging. This has helped me to better understand and pin-down the problem.
>> You can grab the modified sources here:
>> https://github.com/dimosped/mirage-net
>> Be aware that logging big volumes of data for a TCP flow will require big
>> enough memory. Nevertheless, it only barely affects performance.
>>
>> The iperf benchmark sources can be found here:
>> https://github.com/dimosped/iperf-mirage
>> I've included as much info as possible in the README file. This should be
>> sufficient to get you started and replicate my experiments.
>>
>> In the iperf-mirage repo there is also a Python tool, which you can use
>> to automatically generate plots based on the collected TCP debug info (I
>> include also a sample dataset in data/ ):
>> https://github.com/dimosped/iperf-mirage/tree/master/tools/MirageTcpVis
>> For really large datasets, the script might be slow. I need to switch
>> into using NumPy arrays at some point...
>>
>> Please keep in mind that I am a newbie in Xen/Mirage so your
>> comments/input are more than welcome.
>>
>> Regards,
>> Dimos
>>
>>
>>
>>
>> ------------------------------------------------
>>    MORE TECHNICAL DETAILS
>> ------------------------------------------------
>>
>>
>> -----------------------------------------------------------------
>> === How (I think) Mirage and XEN scheduling works ===
>> -----------------------------------------------------------------
>>  - When Netif receives a writev request, it checks if the TX ring has
>> enough empty space (for the producer) for the data
>>     - If there is not enough space, it block-waits (via Activations.wait)
>> for an event on the port mapped to the netif (and bound to the backend
>> driver)
>>     - Otherwise it pushes the request.
>> -  Activations are notified (via run) from "aux ()" in Main.run. Once
>> notified, it means that the waiting netif can proceed, check again the ring
>> for free space, write a new request, and send an event to the backend.
>> - Main.run.aux is registered as a callback (under name "OS.Main.run") and
>> is invoked in xen/runtime/kernel/main.c (in app_main() loop). As long as
>> the Mirage guest domain is scheduled, this loop keeps running.
>> - However, in Main.run.aux, the Mirage guest domain is blocked via
>> "block_domain timeout" if the main thread has no task to perform.
>> - In turn, "block_domain" invokes caml_block_domain()  found in
>> xen/runtime/kernel/main.c, which issues a
>> "HYPERVISOR_sched_op(SCHEDOP_poll, &sched_poll);" hypercall
>>
>> -------------------------------------
>> === Polling mode issue ===
>> -------------------------------------
>> In my opinion, and based on debug information, it seems that the problem
>> is that Mirage uses "SCHEDOP_poll" without masking the event channels.
>> The XEN documentation clearly states that with "SCHEDOP_poll" the domain
>> would yield until either
>>   a) an event is pending on the polled channels and
>>   b) the timeout time (given in nanoseconds, is not duration but absolute
>> system time) is reached
>> It also states that this SCHEDOP_poll can only be be executed when the
>> guest has delivery of events disabled.
>>
>> In Mirage, netif events are not masked and therefore they never "wakeup"
>> the guest domain.
>> The guest only wakes-up whenever a thread is scheduled to  wakeup in
>> Time.SleepQueue (e.g. a TCP timer).
>> Once the guest is scheduled again, it completes any outstanding tasks,
>> sends any packets pending, and whenever a) the TX ring gets full, or  b)the
>> hypervisor  it, c)  it will sleep again.
>> To further support the above, whenever I press buttons via XEN-console
>> while the mirage-sender is running, the execution completes faster.
>>
>> ----------------
>> === Fix ===
>> ----------------
>> There are multiple ways to mask events (e.g. at VCPU level, event level
>> etc).
>> As a quick hack I replaced "Eventchn.unmask h evtchn;" in
>> Netif.plug_inner with  Eventchn.mask h evtchn (which I had to create, both
>> in Eventchn and  as a stub in xen/runtime/kernel/eventchn_stubs.c).
>> See:
>>
>> https://github.com/dimosped/mirage-platform/commit/6d4d3f0403497f07fde4db6f4cb63665a8bf8e26
>>
>>
>>
>>
>>
>>
>
>
> --
> Dave Scott
>



-- 
Dave Scott

--e89a8ffbad61a8476f04e6c3699e
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi Dimos,<div><br></div><div>I&#39;ve created a new patch =
set based on a mix of your ideas and mine:</div><div><br></div><div><a href=
=3D"https://github.com/mirage/mirage-platform/pull/58">https://github.com/m=
irage/mirage-platform/pull/58</a><br>
</div><div><br></div><div>I&#39;ve proposed switching to SCHEDOP_block with=
 interrupts enabled. Unlike in regular Mini-OS I don&#39;t think we need to=
 do anything in the hypervisor_callback, because we already have code to po=
ll the evtchn pending bits in evtchn_poll-- so we&#39;re a bit of a hybrid:=
 interrupts on for wakeups but the whole OS is still based around a select/=
poll-style loop. I&#39;ve left all event channels unmasked and used the eve=
nt_upcall_mask to turn on/off event delivery globally. I&#39;ve revamped th=
e OCaml Activations interface to remove one source of missing events.</div>
<div><br></div><div>So far the code is working ok in my testing. I ran mira=
ge-iperf and am getting 1642002 KBit/sec on my test hardware -- I don&#39;t=
 know if this is considered good or bad! I ran your instrumented version (t=
hanks for the exhaustive instructions btw) and it drew some pretty graphs, =
but I&#39;m not enough of a TCP expert to interpret them properly.</div>
<div><br></div><div>Could you give this a go in your test environment and l=
et me know what you think?</div><div><br></div><div>I&#39;m extremely suspi=
cious of the console code -- it shouldn&#39;t be necessary to include a del=
ay in the print loop; that&#39;s definitely worth investigating.</div>
<div><br></div><div>Cheers,</div><div>Dave</div></div><div class=3D"gmail_e=
xtra"><br><br><div class=3D"gmail_quote">On Thu, Sep 19, 2013 at 11:02 AM, =
David Scott <span dir=3D"ltr">&lt;<a href=3D"mailto:scott.dj@gmail.com" tar=
get=3D"_blank">scott.dj@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hi Dimos,<div><br></div><di=
v>Thanks for looking into this! Thinking about it, I think we have several =
problems.</div>
<div><br></div><div>1. I think the Activations.wait API is difficult to use=
 / unsafe:</div>

<div><br></div><div><div>(* Block waiting for an event to occur on a partic=
ular port *)</div><div>let wait evtchn =3D</div><div>=A0 if Eventchn.is_val=
id evtchn then begin</div><div>=A0 =A0 =A0 =A0 =A0 let port =3D Eventchn.to=
_int evtchn in</div>


<div>=A0 =A0 =A0 =A0 =A0 let th, u =3D Lwt.task () in</div><div>=A0 =A0 =A0=
 =A0 =A0 let node =3D Lwt_sequence.add_l u event_cb.(port) in</div><div>=A0=
 =A0 =A0 =A0 =A0 Lwt.on_cancel th (fun _ -&gt; Lwt_sequence.remove node);</=
div><div>=A0 =A0 =A0 =A0 =A0 th</div><div>


=A0 end else Lwt.fail Generation.Invalid</div></div><div><br></div><div>Whe=
n you call Activations.wait you are added to a &#39;sequence&#39; (like a l=
ist) of people to wake up when the next event occurs. A typical driver woul=
d call Activations.wait in a loop, block for an event, wake up, signal some=
 other thread to do work and then block again. However if the thread runnin=
g the loop blocks anywhere else, then the thread will not be added to the s=
equence straight away and any notifications that arrive during the gap will=
 be dropped. I noticed this when debugging my block backend implementation.=
 I think netif has this problem:</div>


<div><br></div><div><div>let listen nf fn =3D</div><div>=A0 (* Listen for t=
he activation to poll the interface *)</div><div>=A0 let rec poll_t t =3D</=
div><div>=A0 =A0 lwt () =3D refill_requests t in</div><div>=A0 =A0 ^^^ bloc=
ks here, can miss events</div>


<div><br></div><div>=A0 =A0 rx_poll t fn;</div><div>=A0 =A0 tx_poll t;</div=
><div>=A0 =A0 (* Evtchn.notify nf.t.evtchn; *)</div><div>=A0 =A0 lwt new_t =
=3D</div><div>=A0 =A0 =A0 try_lwt</div><div>=A0 =A0 =A0 =A0 Activations.wai=
t t.evtchn &gt;&gt; return t</div>


<div>=A0 =A0 =A0 with</div><div>=A0 =A0 =A0 | Generation.Invalid -&gt;</div=
><div>=A0 =A0 =A0 =A0 Console.log_s &quot;Waiting for plug in listen&quot; =
&gt;&gt;</div><div>=A0 =A0 =A0 =A0 wait_for_plug nf &gt;&gt;</div><div>=A0 =
=A0 =A0 =A0 Console.log_s &quot;Done...&quot; &gt;&gt;</div>


<div>=A0 =A0 =A0 =A0 return nf.t</div><div>=A0 =A0 in poll_t new_t</div><di=
v>=A0 in</div><div>=A0 poll_t nf.t</div></div><div><br></div><div><br></div=
><div>I think we should change the semantics of Activations.wait to be more=
 level-triggered rather than edge-triggered (i.e. more like the underlying =
behaviour of xen) like this:</div>


<div><br></div><div>=A0type event</div><div>=A0(** a particular event *)</d=
iv><div><br></div><div>=A0val wait: Evtchn.t -&gt; event option -&gt; event=
 Lwt.t</div><div>=A0(** [wait evtchn None] returns [Some e] where [e] is th=
e latest event.</div>


<div>=A0 =A0 =A0[wait evtchn (Some e)] returns [Some e&#39;] where [e&#39;]=
 is a later event than [e] *)</div><div><br></div><div>In the implementatio=
n we could have &quot;type event =3D int&quot; and maintain a counter of &q=
uot;number of times this event has been signalled&quot;. When you call Acti=
vations.wait, you would pass in the number of the last event you saw, and t=
he thread would block until a new event is available. This way you wouldn&#=
39;t have to be registered in the table when the event arrives.</div>

<div><br></div><div>2. SCHEDOP_poll has a low (arbitrary) nr_ports limit</d=
iv><div><br></div><div><a href=3D"http://xenbits.xen.org/gitweb/?p=3Dxen.gi=
t;a=3Dblob;f=3Dxen/common/schedule.c;h=3Da8398bd9ed4827564bed4346e1fdfbb98e=
c5907e;hb=3Dc5e9596cd095e3b96a090002d9e6629a980904eb#l712" target=3D"_blank=
">http://xenbits.xen.org/gitweb/?p=3Dxen.git;a=3Dblob;f=3Dxen/common/schedu=
le.c;h=3Da8398bd9ed4827564bed4346e1fdfbb98ec5907e;hb=3Dc5e9596cd095e3b96a09=
0002d9e6629a980904eb#l712</a><br>

</div><div><br></div><div><div>=A0704 static long do_poll(struct sched_poll=
 *sched_poll)</div><div>=A0705 {</div><div>=A0706 =A0 =A0 struct vcpu =A0 *=
v =3D current;</div><div>=A0707 =A0 =A0 struct domain *d =3D v-&gt;domain;<=
/div><div>=A0708 =A0 =A0 evtchn_port_t =A0port;</div>

<div>=A0709 =A0 =A0 long =A0 =A0 =A0 =A0 =A0 rc;</div><div>=A0710 =A0 =A0 u=
nsigned int =A0 i;</div><div>=A0711=A0</div><div>=A0712 =A0 =A0 /* Fairly a=
rbitrary limit. */</div><div>=A0713 =A0 =A0 if ( sched_poll-&gt;nr_ports &g=
t; 128 )</div><div>=A0714 =A0 =A0 =A0 =A0 return -EINVAL;</div>

</div><div><br></div><div>The total number of available event channels for =
a 64-bit guest is 4096 using the current ABI (a new interface is under deve=
lopment which allows even more). The limit of 128 is probably imposed to li=
mit the amount of time the hypercall takes, to avoid hitting scalability li=
mits like you do in userspace with select().</div>

<div><br></div><div>One of the use-cases I&#39;d like to use Mirage for is =
to run backend services (like xenstore or blkback) for all the domains on a=
 host. This requires at least one event channel per client domain. We routi=
nely run ~300 VMs/host, so the 128 limit is too small. Plus a quick grep ar=
ound Linux shows that it doesn&#39;t use SCHEDOP_poll very much-- I think w=
e should focus on using the hypercalls that other OSes are using, for maxim=
um chance of success.</div>

<div><br></div><div>So I think we should switch from select()-like behaviou=
r using SCHEDOP_poll to interrupt-based delivery using SCHEDOP_block. I not=
e that upstream mini-os does this by default too. I&#39;ll take a look at t=
his.</div>

<div><br></div><div>Cheers,</div><div>Dave</div><div><br></div></div><div c=
lass=3D"gmail_extra"><div><div class=3D"h5"><br><br><div class=3D"gmail_quo=
te">On Fri, Sep 13, 2013 at 11:50 PM, Dimosthenis Pediaditakis <span dir=3D=
"ltr">&lt;<a href=3D"mailto:dimosthenis.pediaditakis@cl.cam.ac.uk" target=
=3D"_blank">dimosthenis.pediaditakis@cl.cam.ac.uk</a>&gt;</span> wrote:<br>

<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
 =20

   =20
 =20
  <div bgcolor=3D"#FFFFFF" text=3D"#000000">
    Hi all,
    <br>
    The last few days I&#39;ve been trying to pin-down the performance
    issues of the Mirage network stack, when running over Xen.<br>
    When trying to push net-direct to its limits, random transmissions
    stall for anywhere between 0.1sec-4sec (especially at the sender).<br>
    <br>
    After some experimentation, I believe that those time-outs occur
    because netif is not (always) notified (via Activations) about freed
    TX-ring slots. <br>
    It seems that these events (intermittently) don&#39;t reach the guest
    domain&#39;s front-end driver.
    <br>
    <br>
    AFAIK Activations.wait() currently blocks waiting for an event on
    the port belonging to the event channel for the netif.
    <br>
    This event is delivered to Activations.run via Main.run.aux which is
    invoked via the callback in app_main() of runtime/kernel/main.c
    <br>
    The problem I observed was that using &quot;SCHEDOP_poll&quot; without =
masking
    the intended events, the hypervisor didn&#39;t &quot;wake-up&quot; the =
blocked
    domain upon new event availability.
    <br>
    The requirement for event-masking when using &quot;SCHEDOP_poll&quot; i=
s also
    mentioned in the Xen documentation.<br>
    <br>
    I&#39;ve produced a patch that seems to fix the above erratic behavior.
    <br>
    Now I am able to consistently achieve higher speeds (up to 2.75Gbps
    DomU2Domu). Please, have a look at my repo:<br>
   =20
    <a href=3D"https://github.com/dimosped/mirage-platform" target=3D"_blan=
k">https://github.com/dimosped/mirage-platform</a><br>
    It will be helpful to use big-enough txqueuelen values for your
    VIFs, as the current TCP implementation doesn&#39;t like much losses at
    high datarates. The default size in my system was only 32.<br>
    <br>
    I have also modified the mirage-net-direct by adding per-flow TCP
    debug logging. This has helped me to better understand and pin-down
    the problem.<br>
    You can grab the modified sources here:<br>
   =20
    <a href=3D"https://github.com/dimosped/mirage-net" target=3D"_blank">ht=
tps://github.com/dimosped/mirage-net</a><br>
    Be aware that logging big volumes of data for a TCP flow will
    require big enough memory. Nevertheless, it only barely affects
    performance.<br>
    <br>
    The iperf benchmark sources can be found here:<br>
   =20
    <a href=3D"https://github.com/dimosped/iperf-mirage" target=3D"_blank">=
https://github.com/dimosped/iperf-mirage</a><br>
    I&#39;ve included as much info as possible in the README file. This
    should be sufficient to get you started and replicate my
    experiments.<br>
    <br>
    In the iperf-mirage repo there is also a Python tool, which you can
    use to automatically generate plots based on the collected TCP debug
    info (I include also a sample dataset in data/ ):<br>
   =20
    <a href=3D"https://github.com/dimosped/iperf-mirage/tree/master/tools/M=
irageTcpVis" target=3D"_blank">https://github.com/dimosped/iperf-mirage/tre=
e/master/tools/MirageTcpVis</a><br>
    For really large datasets, the script might be slow. I need to
    switch into using NumPy arrays at some point...<br>
    <br>
    Please keep in mind that I am a newbie in Xen/Mirage so your
    comments/input are more than welcome.<br>
    =A0<br>
    Regards,
    <br>
    Dimos
    <br>
    <br>
    <br>
    <br>
    <br>
    ------------------------------------------------<br>
    =A0=A0 MORE TECHNICAL DETAILS<br>
    ------------------------------------------------<br>
    <br>
    <br>
    -----------------------------------------------------------------
    <br>
    =3D=3D=3D How (I think) Mirage and XEN scheduling works =3D=3D=3D
    <br>
    -----------------------------------------------------------------
    <br>
    =A0- When Netif receives a writev request, it checks if the TX ring
    has enough empty space (for the producer) for the data
    <br>
    =A0=A0=A0 - If there is not enough space, it block-waits (via
    Activations.wait) for an event on the port mapped to the netif (and
    bound to the backend driver)
    <br>
    =A0=A0=A0 - Otherwise it pushes the request.
    <br>
    -=A0 Activations are notified (via run) from &quot;aux ()&quot; in Main=
.run.
    Once notified, it means that the waiting netif can proceed, check
    again the ring for free space, write a new request, and send an
    event to the backend.
    <br>
    - Main.run.aux is registered as a callback (under name
    &quot;OS.Main.run&quot;) and is invoked in xen/runtime/kernel/main.c (i=
n
    app_main() loop). As long as the Mirage guest domain is scheduled,
    this loop keeps running.
    <br>
    - However, in Main.run.aux, the Mirage guest domain is blocked via
    &quot;block_domain timeout&quot; if the main thread has no task to perf=
orm.
    <br>
    - In turn, &quot;block_domain&quot; invokes caml_block_domain()=A0 foun=
d in
    xen/runtime/kernel/main.c, which issues a
    &quot;HYPERVISOR_sched_op(SCHEDOP_poll, &amp;sched_poll);&quot; hyperca=
ll
    <br>
    <br>
    -------------------------------------
    <br>
    =3D=3D=3D Polling mode issue =3D=3D=3D
    <br>
    -------------------------------------
    <br>
    In my opinion, and based on debug information, it seems that the
    problem is that Mirage uses &quot;SCHEDOP_poll&quot; without masking th=
e event
    channels.
    <br>
    The XEN documentation clearly states that with &quot;SCHEDOP_poll&quot;=
 the
    domain would yield until either
    <br>
    =A0 a) an event is pending on the polled channels and
    <br>
    =A0 b) the timeout time (given in nanoseconds, is not duration but
    absolute system time) is reached
    <br>
    It also states that this SCHEDOP_poll can only be be executed when
    the guest has delivery of events disabled.
    <br>
    <br>
    In Mirage, netif events are not masked and therefore they never
    &quot;wakeup&quot; the guest domain.
    <br>
    The guest only wakes-up whenever a thread is scheduled to=A0 wakeup in
    Time.SleepQueue (e.g. a TCP timer).
    <br>
    Once the guest is scheduled again, it completes any outstanding
    tasks, sends any packets pending, and whenever a) the TX ring gets
    full, or=A0 b)the hypervisor=A0 it, c)=A0 it will sleep again.
    <br>
    To further support the above, whenever I press buttons via
    XEN-console while the mirage-sender is running, the execution
    completes faster.
    <br>
    <br>
    ----------------
    <br>
    =3D=3D=3D Fix =3D=3D=3D
    <br>
    ----------------
    <br>
    There are multiple ways to mask events (e.g. at VCPU level, event
    level etc).
    <br>
    As a quick hack I replaced &quot;Eventchn.unmask h evtchn;&quot; in
    Netif.plug_inner with=A0 Eventchn.mask h evtchn (which I had to
    create, both in Eventchn and=A0 as a stub in
    xen/runtime/kernel/eventchn_stubs.c).
    <br>
    See:<br>
   =20
   =20
    <a href=3D"https://github.com/dimosped/mirage-platform/commit/6d4d3f040=
3497f07fde4db6f4cb63665a8bf8e26" target=3D"_blank">https://github.com/dimos=
ped/mirage-platform/commit/6d4d3f0403497f07fde4db6f4cb63665a8bf8e26</a><br>


    <br>
    <br>
    <br>
    <br>
    <br>
  </div>

</blockquote></div><br><br clear=3D"all"><div><br></div></div></div><span c=
lass=3D"HOEnZb"><font color=3D"#888888">-- <br>Dave Scott
</font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>Dave Scott
</div>

--e89a8ffbad61a8476f04e6c3699e--


From anil@recoil.org Mon Sep 23 22:10:20 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VODOe-0002yK-P6 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 23 Sep 2013 22:10:20 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1525332
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:17636
	helo=dark.recoil.org)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VODOd-0007fv-DA (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 23 Sep 2013 22:10:20 +0100
Received: (qmail 8304 invoked by uid 634); 23 Sep 2013 21:10:18 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED,TVD_RCVD_IP
X-Spam-Check-By: dark.recoil.org
Received: from 209-117-69-2.ptr.hilton.com (HELO [172.28.175.222])
	(209.117.69.2)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Mon, 23 Sep 2013 22:10:18 +0100
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 7.0 \(1811\))
Subject: Re: [Caml-list] Ocaml on an embedded arm system (no linux)
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <20130923123029.GA25427@frosties>
Date: Mon, 23 Sep 2013 17:10:12 -0400
Content-Transfer-Encoding: 7bit
Message-Id: <24C4E9C9-EE7B-4D20-9F89-61EDC5BD2F88@recoil.org>
References: <CAKdt_-YTk2gfc6P2-jyLVzTbp7heueC+M3t=p_LJWaNMC_zR7Q@mail.gmail.com>
	<20130923123029.GA25427@frosties>
To: Goswin von Brederlow <goswin-v-b@web.de>
X-Mailer: Apple Mail (2.1811)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: Ocaml Mailing List <caml-list@inria.fr>,
	"cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 23 Sep 2013 21:10:20 -0000
Status: O
Content-Length: 2402
Lines: 56

On 23 Sep 2013, at 08:30, Goswin von Brederlow <goswin-v-b@web.de> wrote:

> On Fri, Sep 20, 2013 at 09:13:26AM -0500, Dwight Schauer wrote:
>> Hi,
>> 
>> I'm looking at the feasibility of targetting a couple ARM processeors in a
>> similar manner to ocapic at its core.
>> ... 
>> The ARM processors I'm looking to target are:
>> STM32F407ZGT6 ARM Cortex-M4, 1MB Flash, 196KB RAM (Has floating point)
>> STM32F103RB ARM Cortex-M3, 128 KB Flash, 20K RAM (No floating point)
>> 
>> On both I'd like to be able to run bytecode both out of Flash and RAM.
>> (Primarily flash, but RAM for debugging).
>> 
>> Speed is on overly important as long as I can control when the garbage
>> collection is run (could be done in C in the multitasker?).
>> 
>> Dwight
> 
> I'm looking at the same, but for seriously different specs.
> 
> My interest would be to run ocaml apps on a Raspberry PI baremetal.
> Basically what openmirage does for the cloud (x86 VMs) but for
> Raspberry PI and similar dimensioned arm boards.

Mirage is just a collection of libraries that implement useful
kernel functionality (e.g. a TCP/IP stack), so you can quite easily
retarget it to bare metal rPis with a suitable mini operating system.

There are several such available (or just start from uBoot), and
then get a basic console working to get some output.  Dave Scott
has written a VNC library in OCaml that's available from his Github,
so you could work on some framebuffer rasterization after that.

The essential approach is to start in small steps: get serial console
working, then basic timer integration, and then hook in higher level
libraries from those.

(We're working on a Xen/ARM Mirage backend at the moment, but only
because we can't be bothered to write all the physical device drivers
that an rPi would need -- I'd be happy to merge in a "bare-metal"
ARM backend for the rPi as well).

> I'm familiar with the hardware side, how to boot, how to initialize
> the devices, how to get a picture to show on the HDMI and so on. What
> I lack is knowledge in creating a new runtime library for ocaml that
> runs directly on the hardware, or with just a verry thin hardware
> abstraction layer.

You don't really need a new runtime library; just a barebones C library.
Gabor Pali has a variant of Mirage that compiles into a FreeBSD kernel
module, for example, which operates in a similar "baremetal" environment.

-anil


From dp463@hermes.cam.ac.uk Tue Sep 24 02:44:53 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VOHgL-0005ft-9C (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <dp463@hermes.cam.ac.uk>); Tue, 24 Sep 2013 02:44:53 +0100
X-Cam-AntiVirus: no malware found
X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/
Received: from [5.44.248.36] (port=43036 helo=localhost)
	by ppsw-52.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.158]:587)
	with esmtpsa (PLAIN:dp463) (TLSv1:DHE-RSA-CAMELLIA256-SHA:256)
	id 1VOHgK-0001Xr-Et (Exim 4.80_167-5a66dd3)
	(return-path <dp463@hermes.cam.ac.uk>); Tue, 24 Sep 2013 02:44:53 +0100
Message-ID: <5240EC98.3060509@cl.cam.ac.uk>
Date: Tue, 24 Sep 2013 02:36:24 +0100
From: Dimosthenis Pediaditakis <dimosthenis.pediaditakis@cl.cam.ac.uk>
User-Agent: Mozilla/5.0 (X11; Linux x86_64;
	rv:17.0) Gecko/20130803 Thunderbird/17.0.8
MIME-Version: 1.0
To: David Scott <scott.dj@gmail.com>
Subject: Re: Improving the network-stack performance over Xen
References: <5233969C.1080802@cl.cam.ac.uk>
	<CAG_esB1gT7uxjBag37ue9E809Og5bhBnbNG=hK=xpCaOFkOyMw@mail.gmail.com>
	<CAG_esB1O_ea9gKcU8K44+Gg0f9tE4TN8SyRCz5d2eSNxQjHO1w@mail.gmail.com>
In-Reply-To: <CAG_esB1O_ea9gKcU8K44+Gg0f9tE4TN8SyRCz5d2eSNxQjHO1w@mail.gmail.com>
Content-Type: multipart/alternative;
	boundary="------------050902070402060703020502"
Sender: "D. Pediaditakis" <dp463@hermes.cam.ac.uk>
Cc: Mirage List <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 24 Sep 2013 01:44:53 -0000
Status: O
Content-Length: 39653
Lines: 826

This is a multi-part message in MIME format.
--------------050902070402060703020502
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hi David,
sorry for the absence. I attended a Workshop on SDN last week, and today 
was quite a busy day.
I had a look in the interrupt branch of your mirage-platform repo, 
cloned it and ran a few experiments.
The speeds I got were consistently between 2.45-2.6Gbps on my machine 
(i7-3770, dual ch. DDR3 1600), which is a very good number.
Unfortunatelly, I didn't have the time to further stress test it and 
generate any TCP stack plots. This is the top item in my TODO list.

I also went briefly through the additions/modifications in hypervisor.c, 
main.c, activations.ml, netif.ml, main.ml
It seems that SCHEDOP_block + no-op handling + evtchn_poll  + 
VIRQ_TIMER-bind  along with the rewriting of Activations (fix for the 
silently dropped events) have done the trick.

A couple of questions:
  - In file hypervisor.c, what is the purpose of " 
force_evtchn_callback" ? I've seen it only being invoked via "__sti()" 
and "__restore_flags()"

  - In the updated design, when an event is received, then:
     SCHEDOP_block returns,
     event_poll is then invoked, and
     finally Main.aux() is called.
   Activations.run() is invoked in Main.aux() if no threads are 
scheduled, and subsequently the domain is blocked again (until a timer 
interrupt, or reception of another event).  My question is why don't we 
re-check right after "Activations.run()" the state of t ?  For example 
if packets are waiting to be sent, and netif gets unblocked, why we 
block the domain directly again?

Also, thanks thanks for the credits in you updates :-)

D.



On 19/09/13 22:41, David Scott wrote:
> Hi Dimos,
>
> I've created a new patch set based on a mix of your ideas and mine:
>
> https://github.com/mirage/mirage-platform/pull/58
>
> I've proposed switching to SCHEDOP_block with interrupts enabled. 
> Unlike in regular Mini-OS I don't think we need to do anything in the 
> hypervisor_callback, because we already have code to poll the evtchn 
> pending bits in evtchn_poll-- so we're a bit of a hybrid: interrupts 
> on for wakeups but the whole OS is still based around a 
> select/poll-style loop. I've left all event channels unmasked and used 
> the event_upcall_mask to turn on/off event delivery globally. I've 
> revamped the OCaml Activations interface to remove one source of 
> missing events.
>
> So far the code is working ok in my testing. I ran mirage-iperf and am 
> getting 1642002 KBit/sec on my test hardware -- I don't know if this 
> is considered good or bad! I ran your instrumented version (thanks for 
> the exhaustive instructions btw) and it drew some pretty graphs, but 
> I'm not enough of a TCP expert to interpret them properly.
>
> Could you give this a go in your test environment and let me know what 
> you think?
>
> I'm extremely suspicious of the console code -- it shouldn't be 
> necessary to include a delay in the print loop; that's definitely 
> worth investigating.
>
> Cheers,
> Dave
>
>
> On Thu, Sep 19, 2013 at 11:02 AM, David Scott <scott.dj@gmail.com 
> <mailto:scott.dj@gmail.com>> wrote:
>
>     Hi Dimos,
>
>     Thanks for looking into this! Thinking about it, I think we have
>     several problems.
>
>     1. I think the Activations.wait API is difficult to use / unsafe:
>
>     (* Block waiting for an event to occur on a particular port *)
>     let wait evtchn =
>       if Eventchn.is_valid evtchn then begin
>               let port = Eventchn.to_int evtchn in
>               let th, u = Lwt.task () in
>               let node = Lwt_sequence.add_l u event_cb.(port) in
>               Lwt.on_cancel th (fun _ -> Lwt_sequence.remove node);
>               th
>       end else Lwt.fail Generation.Invalid
>
>     When you call Activations.wait you are added to a 'sequence' (like
>     a list) of people to wake up when the next event occurs. A typical
>     driver would call Activations.wait in a loop, block for an event,
>     wake up, signal some other thread to do work and then block again.
>     However if the thread running the loop blocks anywhere else, then
>     the thread will not be added to the sequence straight away and any
>     notifications that arrive during the gap will be dropped. I
>     noticed this when debugging my block backend implementation. I
>     think netif has this problem:
>
>     let listen nf fn =
>       (* Listen for the activation to poll the interface *)
>       let rec poll_t t =
>         lwt () = refill_requests t in
>         ^^^ blocks here, can miss events
>
>         rx_poll t fn;
>         tx_poll t;
>         (* Evtchn.notify nf.t.evtchn; *)
>         lwt new_t =
>           try_lwt
>             Activations.wait t.evtchn >> return t
>           with
>           | Generation.Invalid ->
>             Console.log_s "Waiting for plug in listen" >>
>             wait_for_plug nf >>
>             Console.log_s "Done..." >>
>             return nf.t
>         in poll_t new_t
>       in
>       poll_t nf.t
>
>
>     I think we should change the semantics of Activations.wait to be
>     more level-triggered rather than edge-triggered (i.e. more like
>     the underlying behaviour of xen) like this:
>
>      type event
>      (** a particular event *)
>
>      val wait: Evtchn.t -> event option -> event Lwt.t
>      (** [wait evtchn None] returns [Some e] where [e] is the latest
>     event.
>          [wait evtchn (Some e)] returns [Some e'] where [e'] is a
>     later event than [e] *)
>
>     In the implementation we could have "type event = int" and
>     maintain a counter of "number of times this event has been
>     signalled". When you call Activations.wait, you would pass in the
>     number of the last event you saw, and the thread would block until
>     a new event is available. This way you wouldn't have to be
>     registered in the table when the event arrives.
>
>     2. SCHEDOP_poll has a low (arbitrary) nr_ports limit
>
>     http://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=xen/common/schedule.c;h=a8398bd9ed4827564bed4346e1fdfbb98ec5907e;hb=c5e9596cd095e3b96a090002d9e6629a980904eb#l712
>
>      704 static long do_poll(struct sched_poll *sched_poll)
>      705 {
>      706     struct vcpu   *v = current;
>      707     struct domain *d = v->domain;
>      708     evtchn_port_t  port;
>      709     long           rc;
>      710     unsigned int   i;
>      711
>      712     /* Fairly arbitrary limit. */
>      713     if ( sched_poll->nr_ports > 128 )
>      714         return -EINVAL;
>
>     The total number of available event channels for a 64-bit guest is
>     4096 using the current ABI (a new interface is under development
>     which allows even more). The limit of 128 is probably imposed to
>     limit the amount of time the hypercall takes, to avoid hitting
>     scalability limits like you do in userspace with select().
>
>     One of the use-cases I'd like to use Mirage for is to run backend
>     services (like xenstore or blkback) for all the domains on a host.
>     This requires at least one event channel per client domain. We
>     routinely run ~300 VMs/host, so the 128 limit is too small. Plus a
>     quick grep around Linux shows that it doesn't use SCHEDOP_poll
>     very much-- I think we should focus on using the hypercalls that
>     other OSes are using, for maximum chance of success.
>
>     So I think we should switch from select()-like behaviour using
>     SCHEDOP_poll to interrupt-based delivery using SCHEDOP_block. I
>     note that upstream mini-os does this by default too. I'll take a
>     look at this.
>
>     Cheers,
>     Dave
>
>
>
>     On Fri, Sep 13, 2013 at 11:50 PM, Dimosthenis Pediaditakis
>     <dimosthenis.pediaditakis@cl.cam.ac.uk
>     <mailto:dimosthenis.pediaditakis@cl.cam.ac.uk>> wrote:
>
>         Hi all,
>         The last few days I've been trying to pin-down the performance
>         issues of the Mirage network stack, when running over Xen.
>         When trying to push net-direct to its limits, random
>         transmissions stall for anywhere between 0.1sec-4sec
>         (especially at the sender).
>
>         After some experimentation, I believe that those time-outs
>         occur because netif is not (always) notified (via Activations)
>         about freed TX-ring slots.
>         It seems that these events (intermittently) don't reach the
>         guest domain's front-end driver.
>
>         AFAIK Activations.wait() currently blocks waiting for an event
>         on the port belonging to the event channel for the netif.
>         This event is delivered to Activations.run via Main.run.aux
>         which is invoked via the callback in app_main() of
>         runtime/kernel/main.c
>         The problem I observed was that using "SCHEDOP_poll" without
>         masking the intended events, the hypervisor didn't "wake-up"
>         the blocked domain upon new event availability.
>         The requirement for event-masking when using "SCHEDOP_poll" is
>         also mentioned in the Xen documentation.
>
>         I've produced a patch that seems to fix the above erratic
>         behavior.
>         Now I am able to consistently achieve higher speeds (up to
>         2.75Gbps DomU2Domu). Please, have a look at my repo:
>         https://github.com/dimosped/mirage-platform
>         It will be helpful to use big-enough txqueuelen values for
>         your VIFs, as the current TCP implementation doesn't like much
>         losses at high datarates. The default size in my system was
>         only 32.
>
>         I have also modified the mirage-net-direct by adding per-flow
>         TCP debug logging. This has helped me to better understand and
>         pin-down the problem.
>         You can grab the modified sources here:
>         https://github.com/dimosped/mirage-net
>         Be aware that logging big volumes of data for a TCP flow will
>         require big enough memory. Nevertheless, it only barely
>         affects performance.
>
>         The iperf benchmark sources can be found here:
>         https://github.com/dimosped/iperf-mirage
>         I've included as much info as possible in the README file.
>         This should be sufficient to get you started and replicate my
>         experiments.
>
>         In the iperf-mirage repo there is also a Python tool, which
>         you can use to automatically generate plots based on the
>         collected TCP debug info (I include also a sample dataset in
>         data/ ):
>         https://github.com/dimosped/iperf-mirage/tree/master/tools/MirageTcpVis
>         For really large datasets, the script might be slow. I need to
>         switch into using NumPy arrays at some point...
>
>         Please keep in mind that I am a newbie in Xen/Mirage so your
>         comments/input are more than welcome.
>
>         Regards,
>         Dimos
>
>
>
>
>         ------------------------------------------------
>            MORE TECHNICAL DETAILS
>         ------------------------------------------------
>
>
>         -----------------------------------------------------------------
>         === How (I think) Mirage and XEN scheduling works ===
>         -----------------------------------------------------------------
>          - When Netif receives a writev request, it checks if the TX
>         ring has enough empty space (for the producer) for the data
>             - If there is not enough space, it block-waits (via
>         Activations.wait) for an event on the port mapped to the netif
>         (and bound to the backend driver)
>             - Otherwise it pushes the request.
>         -  Activations are notified (via run) from "aux ()" in
>         Main.run. Once notified, it means that the waiting netif can
>         proceed, check again the ring for free space, write a new
>         request, and send an event to the backend.
>         - Main.run.aux is registered as a callback (under name
>         "OS.Main.run") and is invoked in xen/runtime/kernel/main.c (in
>         app_main() loop). As long as the Mirage guest domain is
>         scheduled, this loop keeps running.
>         - However, in Main.run.aux, the Mirage guest domain is blocked
>         via "block_domain timeout" if the main thread has no task to
>         perform.
>         - In turn, "block_domain" invokes caml_block_domain()  found
>         in xen/runtime/kernel/main.c, which issues a
>         "HYPERVISOR_sched_op(SCHEDOP_poll, &sched_poll);" hypercall
>
>         -------------------------------------
>         === Polling mode issue ===
>         -------------------------------------
>         In my opinion, and based on debug information, it seems that
>         the problem is that Mirage uses "SCHEDOP_poll" without masking
>         the event channels.
>         The XEN documentation clearly states that with "SCHEDOP_poll"
>         the domain would yield until either
>           a) an event is pending on the polled channels and
>           b) the timeout time (given in nanoseconds, is not duration
>         but absolute system time) is reached
>         It also states that this SCHEDOP_poll can only be be executed
>         when the guest has delivery of events disabled.
>
>         In Mirage, netif events are not masked and therefore they
>         never "wakeup" the guest domain.
>         The guest only wakes-up whenever a thread is scheduled to 
>         wakeup in Time.SleepQueue (e.g. a TCP timer).
>         Once the guest is scheduled again, it completes any
>         outstanding tasks, sends any packets pending, and whenever a)
>         the TX ring gets full, or  b)the hypervisor  it, c)  it will
>         sleep again.
>         To further support the above, whenever I press buttons via
>         XEN-console while the mirage-sender is running, the execution
>         completes faster.
>
>         ----------------
>         === Fix ===
>         ----------------
>         There are multiple ways to mask events (e.g. at VCPU level,
>         event level etc).
>         As a quick hack I replaced "Eventchn.unmask h evtchn;" in
>         Netif.plug_inner with  Eventchn.mask h evtchn (which I had to
>         create, both in Eventchn and  as a stub in
>         xen/runtime/kernel/eventchn_stubs.c).
>         See:
>         https://github.com/dimosped/mirage-platform/commit/6d4d3f0403497f07fde4db6f4cb63665a8bf8e26
>
>
>
>
>
>
>
>
>     -- 
>     Dave Scott
>
>
>
>
> -- 
> Dave Scott


--------------050902070402060703020502
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Hi David,<br>
      sorry for the absence. I attended a Workshop on SDN last week, and
      today was quite a busy day.<br>
      I had a look in the interrupt branch of your mirage-platform repo,
      cloned it and ran a few experiments.<br>
      The speeds I got were consistently between 2.45-2.6Gbps on my
      machine (i7-3770, dual ch. DDR3 1600), which is a very good
      number.<br>
      Unfortunatelly, I didn't have the time to further stress test it
      and generate any TCP stack plots. This is the top item in my TODO
      list.<br>
      <br>
      I also went briefly through the additions/modifications in
      hypervisor.c, main.c, activations.ml, netif.ml, main.ml <br>
      It seems that SCHEDOP_block + no-op handling + evtchn_poll&nbsp; +
      VIRQ_TIMER-bind&nbsp; along with the rewriting of Activations (fix for
      the silently dropped events) have done the trick. <br>
      <br>
      A couple of questions:<br>
      &nbsp;- In file hypervisor.c, what is the purpose of "
      <meta http-equiv="content-type" content="text/html;
        charset=ISO-8859-1">
      force_evtchn_callback" ? I've seen it only being invoked via
      "__sti()" and "__restore_flags()"<br>
      <br>
      &nbsp;- In the updated design, when an event is received, then:<br>
      &nbsp;&nbsp;&nbsp; SCHEDOP_block returns, <br>
      &nbsp;&nbsp;&nbsp; event_poll is then invoked, and <br>
      &nbsp;&nbsp;&nbsp; finally Main.aux() is called. <br>
      &nbsp; Activations.run() is invoked in Main.aux() if no threads are
      scheduled, and subsequently the domain is blocked again (until a
      timer interrupt, or reception of another event).&nbsp; My question is
      why don't we re-check right after "Activations.run()" the state of
      t ?&nbsp; For example if packets are waiting to be sent, and netif gets
      unblocked, why we block the domain directly again?<br>
      <br>
      Also, thanks thanks for the credits in you updates :-)<br>
      <br>
      D.<br>
      <br>
      <br>
      <br>
      On 19/09/13 22:41, David Scott wrote:<br>
    </div>
    <blockquote
cite="mid:CAG_esB1O_ea9gKcU8K44+Gg0f9tE4TN8SyRCz5d2eSNxQjHO1w@mail.gmail.com"
      type="cite">
      <div dir="ltr">Hi Dimos,
        <div><br>
        </div>
        <div>I've created a new patch set based on a mix of your ideas
          and mine:</div>
        <div><br>
        </div>
        <div><a moz-do-not-send="true"
            href="https://github.com/mirage/mirage-platform/pull/58">https://github.com/mirage/mirage-platform/pull/58</a><br>
        </div>
        <div><br>
        </div>
        <div>I've proposed switching to SCHEDOP_block with interrupts
          enabled. Unlike in regular Mini-OS I don't think we need to do
          anything in the hypervisor_callback, because we already have
          code to poll the evtchn pending bits in evtchn_poll-- so we're
          a bit of a hybrid: interrupts on for wakeups but the whole OS
          is still based around a select/poll-style loop. I've left all
          event channels unmasked and used the event_upcall_mask to turn
          on/off event delivery globally. I've revamped the OCaml
          Activations interface to remove one source of missing events.</div>
        <div><br>
        </div>
        <div>So far the code is working ok in my testing. I ran
          mirage-iperf and am getting 1642002 KBit/sec on my test
          hardware -- I don't know if this is considered good or bad! I
          ran your instrumented version (thanks for the exhaustive
          instructions btw) and it drew some pretty graphs, but I'm not
          enough of a TCP expert to interpret them properly.</div>
        <div><br>
        </div>
        <div>Could you give this a go in your test environment and let
          me know what you think?</div>
        <div><br>
        </div>
        <div>I'm extremely suspicious of the console code -- it
          shouldn't be necessary to include a delay in the print loop;
          that's definitely worth investigating.</div>
        <div><br>
        </div>
        <div>Cheers,</div>
        <div>Dave</div>
      </div>
      <div class="gmail_extra"><br>
        <br>
        <div class="gmail_quote">On Thu, Sep 19, 2013 at 11:02 AM, David
          Scott <span dir="ltr">&lt;<a moz-do-not-send="true"
              href="mailto:scott.dj@gmail.com" target="_blank">scott.dj@gmail.com</a>&gt;</span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div dir="ltr">Hi Dimos,
              <div><br>
              </div>
              <div>Thanks for looking into this! Thinking about it, I
                think we have several problems.</div>
              <div><br>
              </div>
              <div>1. I think the Activations.wait API is difficult to
                use / unsafe:</div>
              <div><br>
              </div>
              <div>
                <div>(* Block waiting for an event to occur on a
                  particular port *)</div>
                <div>let wait evtchn =</div>
                <div>&nbsp; if Eventchn.is_valid evtchn then begin</div>
                <div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let port = Eventchn.to_int evtchn in</div>
                <div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let th, u = Lwt.task () in</div>
                <div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let node = Lwt_sequence.add_l u
                  event_cb.(port) in</div>
                <div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Lwt.on_cancel th (fun _ -&gt;
                  Lwt_sequence.remove node);</div>
                <div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; th</div>
                <div>
                  &nbsp; end else Lwt.fail Generation.Invalid</div>
              </div>
              <div><br>
              </div>
              <div>When you call Activations.wait you are added to a
                'sequence' (like a list) of people to wake up when the
                next event occurs. A typical driver would call
                Activations.wait in a loop, block for an event, wake up,
                signal some other thread to do work and then block
                again. However if the thread running the loop blocks
                anywhere else, then the thread will not be added to the
                sequence straight away and any notifications that arrive
                during the gap will be dropped. I noticed this when
                debugging my block backend implementation. I think netif
                has this problem:</div>
              <div><br>
              </div>
              <div>
                <div>let listen nf fn =</div>
                <div>&nbsp; (* Listen for the activation to poll the
                  interface *)</div>
                <div>&nbsp; let rec poll_t t =</div>
                <div>&nbsp; &nbsp; lwt () = refill_requests t in</div>
                <div>&nbsp; &nbsp; ^^^ blocks here, can miss events</div>
                <div><br>
                </div>
                <div>&nbsp; &nbsp; rx_poll t fn;</div>
                <div>&nbsp; &nbsp; tx_poll t;</div>
                <div>&nbsp; &nbsp; (* Evtchn.notify nf.t.evtchn; *)</div>
                <div>&nbsp; &nbsp; lwt new_t =</div>
                <div>&nbsp; &nbsp; &nbsp; try_lwt</div>
                <div>&nbsp; &nbsp; &nbsp; &nbsp; Activations.wait t.evtchn &gt;&gt; return t</div>
                <div>&nbsp; &nbsp; &nbsp; with</div>
                <div>&nbsp; &nbsp; &nbsp; | Generation.Invalid -&gt;</div>
                <div>&nbsp; &nbsp; &nbsp; &nbsp; Console.log_s "Waiting for plug in listen"
                  &gt;&gt;</div>
                <div>&nbsp; &nbsp; &nbsp; &nbsp; wait_for_plug nf &gt;&gt;</div>
                <div>&nbsp; &nbsp; &nbsp; &nbsp; Console.log_s "Done..." &gt;&gt;</div>
                <div>&nbsp; &nbsp; &nbsp; &nbsp; return nf.t</div>
                <div>&nbsp; &nbsp; in poll_t new_t</div>
                <div>&nbsp; in</div>
                <div>&nbsp; poll_t nf.t</div>
              </div>
              <div><br>
              </div>
              <div><br>
              </div>
              <div>I think we should change the semantics of
                Activations.wait to be more level-triggered rather than
                edge-triggered (i.e. more like the underlying behaviour
                of xen) like this:</div>
              <div><br>
              </div>
              <div>&nbsp;type event</div>
              <div>&nbsp;(** a particular event *)</div>
              <div><br>
              </div>
              <div>&nbsp;val wait: Evtchn.t -&gt; event option -&gt; event
                Lwt.t</div>
              <div>&nbsp;(** [wait evtchn None] returns [Some e] where [e] is
                the latest event.</div>
              <div>&nbsp; &nbsp; &nbsp;[wait evtchn (Some e)] returns [Some e'] where
                [e'] is a later event than [e] *)</div>
              <div><br>
              </div>
              <div>In the implementation we could have "type event =
                int" and maintain a counter of "number of times this
                event has been signalled". When you call
                Activations.wait, you would pass in the number of the
                last event you saw, and the thread would block until a
                new event is available. This way you wouldn't have to be
                registered in the table when the event arrives.</div>
              <div><br>
              </div>
              <div>2. SCHEDOP_poll has a low (arbitrary) nr_ports limit</div>
              <div><br>
              </div>
              <div><a moz-do-not-send="true"
href="http://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=xen/common/schedule.c;h=a8398bd9ed4827564bed4346e1fdfbb98ec5907e;hb=c5e9596cd095e3b96a090002d9e6629a980904eb#l712"
                  target="_blank">http://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=xen/common/schedule.c;h=a8398bd9ed4827564bed4346e1fdfbb98ec5907e;hb=c5e9596cd095e3b96a090002d9e6629a980904eb#l712</a><br>
              </div>
              <div><br>
              </div>
              <div>
                <div>&nbsp;704 static long do_poll(struct sched_poll
                  *sched_poll)</div>
                <div>&nbsp;705 {</div>
                <div>&nbsp;706 &nbsp; &nbsp; struct vcpu &nbsp; *v = current;</div>
                <div>&nbsp;707 &nbsp; &nbsp; struct domain *d = v-&gt;domain;</div>
                <div>&nbsp;708 &nbsp; &nbsp; evtchn_port_t &nbsp;port;</div>
                <div>&nbsp;709 &nbsp; &nbsp; long &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rc;</div>
                <div>&nbsp;710 &nbsp; &nbsp; unsigned int &nbsp; i;</div>
                <div>&nbsp;711&nbsp;</div>
                <div>&nbsp;712 &nbsp; &nbsp; /* Fairly arbitrary limit. */</div>
                <div>&nbsp;713 &nbsp; &nbsp; if ( sched_poll-&gt;nr_ports &gt; 128 )</div>
                <div>&nbsp;714 &nbsp; &nbsp; &nbsp; &nbsp; return -EINVAL;</div>
              </div>
              <div><br>
              </div>
              <div>The total number of available event channels for a
                64-bit guest is 4096 using the current ABI (a new
                interface is under development which allows even more).
                The limit of 128 is probably imposed to limit the amount
                of time the hypercall takes, to avoid hitting
                scalability limits like you do in userspace with
                select().</div>
              <div><br>
              </div>
              <div>One of the use-cases I'd like to use Mirage for is to
                run backend services (like xenstore or blkback) for all
                the domains on a host. This requires at least one event
                channel per client domain. We routinely run ~300
                VMs/host, so the 128 limit is too small. Plus a quick
                grep around Linux shows that it doesn't use SCHEDOP_poll
                very much-- I think we should focus on using the
                hypercalls that other OSes are using, for maximum chance
                of success.</div>
              <div><br>
              </div>
              <div>So I think we should switch from select()-like
                behaviour using SCHEDOP_poll to interrupt-based delivery
                using SCHEDOP_block. I note that upstream mini-os does
                this by default too. I'll take a look at this.</div>
              <div><br>
              </div>
              <div>Cheers,</div>
              <div>Dave</div>
              <div><br>
              </div>
            </div>
            <div class="gmail_extra">
              <div>
                <div class="h5"><br>
                  <br>
                  <div class="gmail_quote">On Fri, Sep 13, 2013 at 11:50
                    PM, Dimosthenis Pediaditakis <span dir="ltr">&lt;<a
                        moz-do-not-send="true"
                        href="mailto:dimosthenis.pediaditakis@cl.cam.ac.uk"
                        target="_blank">dimosthenis.pediaditakis@cl.cam.ac.uk</a>&gt;</span>
                    wrote:<br>
                    <blockquote class="gmail_quote" style="margin:0 0 0
                      .8ex;border-left:1px #ccc solid;padding-left:1ex">
                      <div bgcolor="#FFFFFF" text="#000000"> Hi all, <br>
                        The last few days I've been trying to pin-down
                        the performance issues of the Mirage network
                        stack, when running over Xen.<br>
                        When trying to push net-direct to its limits,
                        random transmissions stall for anywhere between
                        0.1sec-4sec (especially at the sender).<br>
                        <br>
                        After some experimentation, I believe that those
                        time-outs occur because netif is not (always)
                        notified (via Activations) about freed TX-ring
                        slots. <br>
                        It seems that these events (intermittently)
                        don't reach the guest domain's front-end driver.
                        <br>
                        <br>
                        AFAIK Activations.wait() currently blocks
                        waiting for an event on the port belonging to
                        the event channel for the netif. <br>
                        This event is delivered to Activations.run via
                        Main.run.aux which is invoked via the callback
                        in app_main() of runtime/kernel/main.c <br>
                        The problem I observed was that using
                        "SCHEDOP_poll" without masking the intended
                        events, the hypervisor didn't "wake-up" the
                        blocked domain upon new event availability. <br>
                        The requirement for event-masking when using
                        "SCHEDOP_poll" is also mentioned in the Xen
                        documentation.<br>
                        <br>
                        I've produced a patch that seems to fix the
                        above erratic behavior. <br>
                        Now I am able to consistently achieve higher
                        speeds (up to 2.75Gbps DomU2Domu). Please, have
                        a look at my repo:<br>
                        <a moz-do-not-send="true"
                          href="https://github.com/dimosped/mirage-platform"
                          target="_blank">https://github.com/dimosped/mirage-platform</a><br>
                        It will be helpful to use big-enough txqueuelen
                        values for your VIFs, as the current TCP
                        implementation doesn't like much losses at high
                        datarates. The default size in my system was
                        only 32.<br>
                        <br>
                        I have also modified the mirage-net-direct by
                        adding per-flow TCP debug logging. This has
                        helped me to better understand and pin-down the
                        problem.<br>
                        You can grab the modified sources here:<br>
                        <a moz-do-not-send="true"
                          href="https://github.com/dimosped/mirage-net"
                          target="_blank">https://github.com/dimosped/mirage-net</a><br>
                        Be aware that logging big volumes of data for a
                        TCP flow will require big enough memory.
                        Nevertheless, it only barely affects
                        performance.<br>
                        <br>
                        The iperf benchmark sources can be found here:<br>
                        <a moz-do-not-send="true"
                          href="https://github.com/dimosped/iperf-mirage"
                          target="_blank">https://github.com/dimosped/iperf-mirage</a><br>
                        I've included as much info as possible in the
                        README file. This should be sufficient to get
                        you started and replicate my experiments.<br>
                        <br>
                        In the iperf-mirage repo there is also a Python
                        tool, which you can use to automatically
                        generate plots based on the collected TCP debug
                        info (I include also a sample dataset in data/
                        ):<br>
                        <a moz-do-not-send="true"
href="https://github.com/dimosped/iperf-mirage/tree/master/tools/MirageTcpVis"
                          target="_blank">https://github.com/dimosped/iperf-mirage/tree/master/tools/MirageTcpVis</a><br>
                        For really large datasets, the script might be
                        slow. I need to switch into using NumPy arrays
                        at some point...<br>
                        <br>
                        Please keep in mind that I am a newbie in
                        Xen/Mirage so your comments/input are more than
                        welcome.<br>
                        &nbsp;<br>
                        Regards, <br>
                        Dimos <br>
                        <br>
                        <br>
                        <br>
                        <br>
                        ------------------------------------------------<br>
                        &nbsp;&nbsp; MORE TECHNICAL DETAILS<br>
                        ------------------------------------------------<br>
                        <br>
                        <br>
                        -----------------------------------------------------------------

                        <br>
                        === How (I think) Mirage and XEN scheduling
                        works === <br>
                        -----------------------------------------------------------------

                        <br>
                        &nbsp;- When Netif receives a writev request, it
                        checks if the TX ring has enough empty space
                        (for the producer) for the data <br>
                        &nbsp;&nbsp;&nbsp; - If there is not enough space, it
                        block-waits (via Activations.wait) for an event
                        on the port mapped to the netif (and bound to
                        the backend driver) <br>
                        &nbsp;&nbsp;&nbsp; - Otherwise it pushes the request. <br>
                        -&nbsp; Activations are notified (via run) from "aux
                        ()" in Main.run. Once notified, it means that
                        the waiting netif can proceed, check again the
                        ring for free space, write a new request, and
                        send an event to the backend. <br>
                        - Main.run.aux is registered as a callback
                        (under name "OS.Main.run") and is invoked in
                        xen/runtime/kernel/main.c (in app_main() loop).
                        As long as the Mirage guest domain is scheduled,
                        this loop keeps running. <br>
                        - However, in Main.run.aux, the Mirage guest
                        domain is blocked via "block_domain timeout" if
                        the main thread has no task to perform. <br>
                        - In turn, "block_domain" invokes
                        caml_block_domain()&nbsp; found in
                        xen/runtime/kernel/main.c, which issues a
                        "HYPERVISOR_sched_op(SCHEDOP_poll,
                        &amp;sched_poll);" hypercall <br>
                        <br>
                        ------------------------------------- <br>
                        === Polling mode issue === <br>
                        ------------------------------------- <br>
                        In my opinion, and based on debug information,
                        it seems that the problem is that Mirage uses
                        "SCHEDOP_poll" without masking the event
                        channels. <br>
                        The XEN documentation clearly states that with
                        "SCHEDOP_poll" the domain would yield until
                        either <br>
                        &nbsp; a) an event is pending on the polled channels
                        and <br>
                        &nbsp; b) the timeout time (given in nanoseconds, is
                        not duration but absolute system time) is
                        reached <br>
                        It also states that this SCHEDOP_poll can only
                        be be executed when the guest has delivery of
                        events disabled. <br>
                        <br>
                        In Mirage, netif events are not masked and
                        therefore they never "wakeup" the guest domain.
                        <br>
                        The guest only wakes-up whenever a thread is
                        scheduled to&nbsp; wakeup in Time.SleepQueue (e.g. a
                        TCP timer). <br>
                        Once the guest is scheduled again, it completes
                        any outstanding tasks, sends any packets
                        pending, and whenever a) the TX ring gets full,
                        or&nbsp; b)the hypervisor&nbsp; it, c)&nbsp; it will sleep
                        again. <br>
                        To further support the above, whenever I press
                        buttons via XEN-console while the mirage-sender
                        is running, the execution completes faster. <br>
                        <br>
                        ---------------- <br>
                        === Fix === <br>
                        ---------------- <br>
                        There are multiple ways to mask events (e.g. at
                        VCPU level, event level etc). <br>
                        As a quick hack I replaced "Eventchn.unmask h
                        evtchn;" in Netif.plug_inner with&nbsp; Eventchn.mask
                        h evtchn (which I had to create, both in
                        Eventchn and&nbsp; as a stub in
                        xen/runtime/kernel/eventchn_stubs.c). <br>
                        See:<br>
                        <a moz-do-not-send="true"
href="https://github.com/dimosped/mirage-platform/commit/6d4d3f0403497f07fde4db6f4cb63665a8bf8e26"
                          target="_blank">https://github.com/dimosped/mirage-platform/commit/6d4d3f0403497f07fde4db6f4cb63665a8bf8e26</a><br>
                        <br>
                        <br>
                        <br>
                        <br>
                        <br>
                      </div>
                    </blockquote>
                  </div>
                  <br>
                  <br clear="all">
                  <div><br>
                  </div>
                </div>
              </div>
              <span class="HOEnZb"><font color="#888888">-- <br>
                  Dave Scott
                </font></span></div>
          </blockquote>
        </div>
        <br>
        <br clear="all">
        <div><br>
        </div>
        -- <br>
        Dave Scott
      </div>
    </blockquote>
    <br>
  </body>
</html>

--------------050902070402060703020502--


From dp463@hermes.cam.ac.uk Tue Sep 24 16:29:55 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VOUYl-00032c-DN (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <dp463@hermes.cam.ac.uk>); Tue, 24 Sep 2013 16:29:55 +0100
X-Cam-AntiVirus: no malware found
X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/
Received: from cosmic.cl.cam.ac.uk ([128.232.10.197]:54702 helo=localhost)
	by ppsw-32.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.156]:587)
	with esmtpsa (PLAIN:dp463) (TLSv1:DHE-RSA-CAMELLIA256-SHA:256)
	id 1VOUYl-0006Vx-0Y (Exim 4.80_167-5a66dd3)
	(return-path <dp463@hermes.cam.ac.uk>); Tue, 24 Sep 2013 16:29:55 +0100
Message-ID: <5241AFF2.5070001@cl.cam.ac.uk>
Date: Tue, 24 Sep 2013 16:29:54 +0100
From: Dimosthenis Pediaditakis <dimosthenis.pediaditakis@cl.cam.ac.uk>
User-Agent: Mozilla/5.0 (X11; Linux x86_64;
	rv:24.0) Gecko/20100101 Thunderbird/24.0
MIME-Version: 1.0
To: David Scott <scott.dj@gmail.com>
Subject: Re: Improving the network-stack performance over Xen
References: <5233969C.1080802@cl.cam.ac.uk>
	<CAG_esB1gT7uxjBag37ue9E809Og5bhBnbNG=hK=xpCaOFkOyMw@mail.gmail.com>
	<CAG_esB1O_ea9gKcU8K44+Gg0f9tE4TN8SyRCz5d2eSNxQjHO1w@mail.gmail.com>
	<5240EC98.3060509@cl.cam.ac.uk>
In-Reply-To: <5240EC98.3060509@cl.cam.ac.uk>
Content-Type: multipart/alternative;
	boundary="------------050103010604050407010307"
Sender: "D. Pediaditakis" <dp463@hermes.cam.ac.uk>
Cc: Mirage List <cl-mirage@lists.cam.ac.uk>
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Tue, 24 Sep 2013 15:29:55 -0000
Status: O
Content-Length: 42396
Lines: 876

This is a multi-part message in MIME format.
--------------050103010604050407010307
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hi again,
as promised, here are some data from a DomU-2-DomU iperf flow, pushing 
0.8Gbits in 0.38sec (~2.1Gbps):
http://www.cl.cam.ac.uk/~dp463/files/mirageNetData.tar.gz

Note that I've used a txqueuelen of 500 for each VIF in dom0.
Also, with TCP debug disabled, speeds reach >= 2.5Gbps.

Everythin seems smoother. Didn't observe any odd TX delay spikes caused 
by netif blocking.

Regards,
D.



On 24/09/13 02:36, Dimosthenis Pediaditakis wrote:
> Hi David,
> sorry for the absence. I attended a Workshop on SDN last week, and 
> today was quite a busy day.
> I had a look in the interrupt branch of your mirage-platform repo, 
> cloned it and ran a few experiments.
> The speeds I got were consistently between 2.45-2.6Gbps on my machine 
> (i7-3770, dual ch. DDR3 1600), which is a very good number.
> Unfortunatelly, I didn't have the time to further stress test it and 
> generate any TCP stack plots. This is the top item in my TODO list.
>
> I also went briefly through the additions/modifications in 
> hypervisor.c, main.c, activations.ml, netif.ml, main.ml
> It seems that SCHEDOP_block + no-op handling + evtchn_poll  + 
> VIRQ_TIMER-bind  along with the rewriting of Activations (fix for the 
> silently dropped events) have done the trick.
>
> A couple of questions:
>  - In file hypervisor.c, what is the purpose of " 
> force_evtchn_callback" ? I've seen it only being invoked via "__sti()" 
> and "__restore_flags()"
>
>  - In the updated design, when an event is received, then:
>     SCHEDOP_block returns,
>     event_poll is then invoked, and
>     finally Main.aux() is called.
>   Activations.run() is invoked in Main.aux() if no threads are 
> scheduled, and subsequently the domain is blocked again (until a timer 
> interrupt, or reception of another event).  My question is why don't 
> we re-check right after "Activations.run()" the state of t ?  For 
> example if packets are waiting to be sent, and netif gets unblocked, 
> why we block the domain directly again?
>
> Also, thanks thanks for the credits in you updates :-)
>
> D.
>
>
>
> On 19/09/13 22:41, David Scott wrote:
>> Hi Dimos,
>>
>> I've created a new patch set based on a mix of your ideas and mine:
>>
>> https://github.com/mirage/mirage-platform/pull/58
>>
>> I've proposed switching to SCHEDOP_block with interrupts enabled. 
>> Unlike in regular Mini-OS I don't think we need to do anything in the 
>> hypervisor_callback, because we already have code to poll the evtchn 
>> pending bits in evtchn_poll-- so we're a bit of a hybrid: interrupts 
>> on for wakeups but the whole OS is still based around a 
>> select/poll-style loop. I've left all event channels unmasked and 
>> used the event_upcall_mask to turn on/off event delivery globally. 
>> I've revamped the OCaml Activations interface to remove one source of 
>> missing events.
>>
>> So far the code is working ok in my testing. I ran mirage-iperf and 
>> am getting 1642002 KBit/sec on my test hardware -- I don't know if 
>> this is considered good or bad! I ran your instrumented version 
>> (thanks for the exhaustive instructions btw) and it drew some pretty 
>> graphs, but I'm not enough of a TCP expert to interpret them properly.
>>
>> Could you give this a go in your test environment and let me know 
>> what you think?
>>
>> I'm extremely suspicious of the console code -- it shouldn't be 
>> necessary to include a delay in the print loop; that's definitely 
>> worth investigating.
>>
>> Cheers,
>> Dave
>>
>>
>> On Thu, Sep 19, 2013 at 11:02 AM, David Scott <scott.dj@gmail.com 
>> <mailto:scott.dj@gmail.com>> wrote:
>>
>>     Hi Dimos,
>>
>>     Thanks for looking into this! Thinking about it, I think we have
>>     several problems.
>>
>>     1. I think the Activations.wait API is difficult to use / unsafe:
>>
>>     (* Block waiting for an event to occur on a particular port *)
>>     let wait evtchn =
>>       if Eventchn.is_valid evtchn then begin
>>               let port = Eventchn.to_int evtchn in
>>               let th, u = Lwt.task () in
>>               let node = Lwt_sequence.add_l u event_cb.(port) in
>>               Lwt.on_cancel th (fun _ -> Lwt_sequence.remove node);
>>               th
>>       end else Lwt.fail Generation.Invalid
>>
>>     When you call Activations.wait you are added to a 'sequence'
>>     (like a list) of people to wake up when the next event occurs. A
>>     typical driver would call Activations.wait in a loop, block for
>>     an event, wake up, signal some other thread to do work and then
>>     block again. However if the thread running the loop blocks
>>     anywhere else, then the thread will not be added to the sequence
>>     straight away and any notifications that arrive during the gap
>>     will be dropped. I noticed this when debugging my block backend
>>     implementation. I think netif has this problem:
>>
>>     let listen nf fn =
>>       (* Listen for the activation to poll the interface *)
>>       let rec poll_t t =
>>         lwt () = refill_requests t in
>>         ^^^ blocks here, can miss events
>>
>>         rx_poll t fn;
>>         tx_poll t;
>>         (* Evtchn.notify nf.t.evtchn; *)
>>         lwt new_t =
>>           try_lwt
>>             Activations.wait t.evtchn >> return t
>>           with
>>           | Generation.Invalid ->
>>             Console.log_s "Waiting for plug in listen" >>
>>             wait_for_plug nf >>
>>             Console.log_s "Done..." >>
>>             return nf.t
>>         in poll_t new_t
>>       in
>>       poll_t nf.t
>>
>>
>>     I think we should change the semantics of Activations.wait to be
>>     more level-triggered rather than edge-triggered (i.e. more like
>>     the underlying behaviour of xen) like this:
>>
>>      type event
>>      (** a particular event *)
>>
>>      val wait: Evtchn.t -> event option -> event Lwt.t
>>      (** [wait evtchn None] returns [Some e] where [e] is the latest
>>     event.
>>          [wait evtchn (Some e)] returns [Some e'] where [e'] is a
>>     later event than [e] *)
>>
>>     In the implementation we could have "type event = int" and
>>     maintain a counter of "number of times this event has been
>>     signalled". When you call Activations.wait, you would pass in the
>>     number of the last event you saw, and the thread would block
>>     until a new event is available. This way you wouldn't have to be
>>     registered in the table when the event arrives.
>>
>>     2. SCHEDOP_poll has a low (arbitrary) nr_ports limit
>>
>>     http://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=xen/common/schedule.c;h=a8398bd9ed4827564bed4346e1fdfbb98ec5907e;hb=c5e9596cd095e3b96a090002d9e6629a980904eb#l712
>>
>>      704 static long do_poll(struct sched_poll *sched_poll)
>>      705 {
>>      706     struct vcpu   *v = current;
>>      707     struct domain *d = v->domain;
>>      708     evtchn_port_t  port;
>>      709     long           rc;
>>      710     unsigned int   i;
>>      711
>>      712     /* Fairly arbitrary limit. */
>>      713     if ( sched_poll->nr_ports > 128 )
>>      714         return -EINVAL;
>>
>>     The total number of available event channels for a 64-bit guest
>>     is 4096 using the current ABI (a new interface is under
>>     development which allows even more). The limit of 128 is probably
>>     imposed to limit the amount of time the hypercall takes, to avoid
>>     hitting scalability limits like you do in userspace with select().
>>
>>     One of the use-cases I'd like to use Mirage for is to run backend
>>     services (like xenstore or blkback) for all the domains on a
>>     host. This requires at least one event channel per client domain.
>>     We routinely run ~300 VMs/host, so the 128 limit is too small.
>>     Plus a quick grep around Linux shows that it doesn't use
>>     SCHEDOP_poll very much-- I think we should focus on using the
>>     hypercalls that other OSes are using, for maximum chance of success.
>>
>>     So I think we should switch from select()-like behaviour using
>>     SCHEDOP_poll to interrupt-based delivery using SCHEDOP_block. I
>>     note that upstream mini-os does this by default too. I'll take a
>>     look at this.
>>
>>     Cheers,
>>     Dave
>>
>>
>>
>>     On Fri, Sep 13, 2013 at 11:50 PM, Dimosthenis Pediaditakis
>>     <dimosthenis.pediaditakis@cl.cam.ac.uk
>>     <mailto:dimosthenis.pediaditakis@cl.cam.ac.uk>> wrote:
>>
>>         Hi all,
>>         The last few days I've been trying to pin-down the
>>         performance issues of the Mirage network stack, when running
>>         over Xen.
>>         When trying to push net-direct to its limits, random
>>         transmissions stall for anywhere between 0.1sec-4sec
>>         (especially at the sender).
>>
>>         After some experimentation, I believe that those time-outs
>>         occur because netif is not (always) notified (via
>>         Activations) about freed TX-ring slots.
>>         It seems that these events (intermittently) don't reach the
>>         guest domain's front-end driver.
>>
>>         AFAIK Activations.wait() currently blocks waiting for an
>>         event on the port belonging to the event channel for the netif.
>>         This event is delivered to Activations.run via Main.run.aux
>>         which is invoked via the callback in app_main() of
>>         runtime/kernel/main.c
>>         The problem I observed was that using "SCHEDOP_poll" without
>>         masking the intended events, the hypervisor didn't "wake-up"
>>         the blocked domain upon new event availability.
>>         The requirement for event-masking when using "SCHEDOP_poll"
>>         is also mentioned in the Xen documentation.
>>
>>         I've produced a patch that seems to fix the above erratic
>>         behavior.
>>         Now I am able to consistently achieve higher speeds (up to
>>         2.75Gbps DomU2Domu). Please, have a look at my repo:
>>         https://github.com/dimosped/mirage-platform
>>         It will be helpful to use big-enough txqueuelen values for
>>         your VIFs, as the current TCP implementation doesn't like
>>         much losses at high datarates. The default size in my system
>>         was only 32.
>>
>>         I have also modified the mirage-net-direct by adding per-flow
>>         TCP debug logging. This has helped me to better understand
>>         and pin-down the problem.
>>         You can grab the modified sources here:
>>         https://github.com/dimosped/mirage-net
>>         Be aware that logging big volumes of data for a TCP flow will
>>         require big enough memory. Nevertheless, it only barely
>>         affects performance.
>>
>>         The iperf benchmark sources can be found here:
>>         https://github.com/dimosped/iperf-mirage
>>         I've included as much info as possible in the README file.
>>         This should be sufficient to get you started and replicate my
>>         experiments.
>>
>>         In the iperf-mirage repo there is also a Python tool, which
>>         you can use to automatically generate plots based on the
>>         collected TCP debug info (I include also a sample dataset in
>>         data/ ):
>>         https://github.com/dimosped/iperf-mirage/tree/master/tools/MirageTcpVis
>>         For really large datasets, the script might be slow. I need
>>         to switch into using NumPy arrays at some point...
>>
>>         Please keep in mind that I am a newbie in Xen/Mirage so your
>>         comments/input are more than welcome.
>>
>>         Regards,
>>         Dimos
>>
>>
>>
>>
>>         ------------------------------------------------
>>            MORE TECHNICAL DETAILS
>>         ------------------------------------------------
>>
>>
>>         -----------------------------------------------------------------
>>
>>         === How (I think) Mirage and XEN scheduling works ===
>>         -----------------------------------------------------------------
>>
>>          - When Netif receives a writev request, it checks if the TX
>>         ring has enough empty space (for the producer) for the data
>>             - If there is not enough space, it block-waits (via
>>         Activations.wait) for an event on the port mapped to the
>>         netif (and bound to the backend driver)
>>             - Otherwise it pushes the request.
>>         -  Activations are notified (via run) from "aux ()" in
>>         Main.run. Once notified, it means that the waiting netif can
>>         proceed, check again the ring for free space, write a new
>>         request, and send an event to the backend.
>>         - Main.run.aux is registered as a callback (under name
>>         "OS.Main.run") and is invoked in xen/runtime/kernel/main.c
>>         (in app_main() loop). As long as the Mirage guest domain is
>>         scheduled, this loop keeps running.
>>         - However, in Main.run.aux, the Mirage guest domain is
>>         blocked via "block_domain timeout" if the main thread has no
>>         task to perform.
>>         - In turn, "block_domain" invokes caml_block_domain()  found
>>         in xen/runtime/kernel/main.c, which issues a
>>         "HYPERVISOR_sched_op(SCHEDOP_poll, &sched_poll);" hypercall
>>
>>         -------------------------------------
>>         === Polling mode issue ===
>>         -------------------------------------
>>         In my opinion, and based on debug information, it seems that
>>         the problem is that Mirage uses "SCHEDOP_poll" without
>>         masking the event channels.
>>         The XEN documentation clearly states that with "SCHEDOP_poll"
>>         the domain would yield until either
>>           a) an event is pending on the polled channels and
>>           b) the timeout time (given in nanoseconds, is not duration
>>         but absolute system time) is reached
>>         It also states that this SCHEDOP_poll can only be be executed
>>         when the guest has delivery of events disabled.
>>
>>         In Mirage, netif events are not masked and therefore they
>>         never "wakeup" the guest domain.
>>         The guest only wakes-up whenever a thread is scheduled to 
>>         wakeup in Time.SleepQueue (e.g. a TCP timer).
>>         Once the guest is scheduled again, it completes any
>>         outstanding tasks, sends any packets pending, and whenever a)
>>         the TX ring gets full, or  b)the hypervisor  it, c)  it will
>>         sleep again.
>>         To further support the above, whenever I press buttons via
>>         XEN-console while the mirage-sender is running, the execution
>>         completes faster.
>>
>>         ----------------
>>         === Fix ===
>>         ----------------
>>         There are multiple ways to mask events (e.g. at VCPU level,
>>         event level etc).
>>         As a quick hack I replaced "Eventchn.unmask h evtchn;" in
>>         Netif.plug_inner with Eventchn.mask h evtchn (which I had to
>>         create, both in Eventchn and  as a stub in
>>         xen/runtime/kernel/eventchn_stubs.c).
>>         See:
>>         https://github.com/dimosped/mirage-platform/commit/6d4d3f0403497f07fde4db6f4cb63665a8bf8e26
>>
>>
>>
>>
>>
>>
>>
>>
>>     -- 
>>     Dave Scott
>>
>>
>>
>>
>> -- 
>> Dave Scott
>


--------------050103010604050407010307
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Hi again,<br>
      as promised, here are some data from a DomU-2-DomU iperf flow,
      pushing 0.8Gbits in 0.38sec (~2.1Gbps):<br>
      <a class="moz-txt-link-freetext" href="http://www.cl.cam.ac.uk/~dp463/files/mirageNetData.tar.gz">http://www.cl.cam.ac.uk/~dp463/files/mirageNetData.tar.gz</a><br>
      <br>
      Note that I've used a txqueuelen of 500 for each VIF in dom0.<br>
      Also, with TCP debug disabled, speeds reach &gt;= 2.5Gbps.<br>
      <br>
      Everythin seems smoother. Didn't observe any odd TX delay spikes
      caused by netif blocking.<br>
      <br>
      Regards,<br>
      D.<br>
      <br>
      &nbsp;<br>
      <br>
      On 24/09/13 02:36, Dimosthenis Pediaditakis wrote:<br>
    </div>
    <blockquote cite="mid:5240EC98.3060509@cl.cam.ac.uk" type="cite">
      <meta content="text/html; charset=ISO-8859-1"
        http-equiv="Content-Type">
      <div class="moz-cite-prefix">Hi David,<br>
        sorry for the absence. I attended a Workshop on SDN last week,
        and today was quite a busy day.<br>
        I had a look in the interrupt branch of your mirage-platform
        repo, cloned it and ran a few experiments.<br>
        The speeds I got were consistently between 2.45-2.6Gbps on my
        machine (i7-3770, dual ch. DDR3 1600), which is a very good
        number.<br>
        Unfortunatelly, I didn't have the time to further stress test it
        and generate any TCP stack plots. This is the top item in my
        TODO list.<br>
        <br>
        I also went briefly through the additions/modifications in
        hypervisor.c, main.c, activations.ml, netif.ml, main.ml <br>
        It seems that SCHEDOP_block + no-op handling + evtchn_poll&nbsp; +
        VIRQ_TIMER-bind&nbsp; along with the rewriting of Activations (fix
        for the silently dropped events) have done the trick. <br>
        <br>
        A couple of questions:<br>
        &nbsp;- In file hypervisor.c, what is the purpose of "
        <meta http-equiv="content-type" content="text/html;
          charset=ISO-8859-1">
        force_evtchn_callback" ? I've seen it only being invoked via
        "__sti()" and "__restore_flags()"<br>
        <br>
        &nbsp;- In the updated design, when an event is received, then:<br>
        &nbsp;&nbsp;&nbsp; SCHEDOP_block returns, <br>
        &nbsp;&nbsp;&nbsp; event_poll is then invoked, and <br>
        &nbsp;&nbsp;&nbsp; finally Main.aux() is called. <br>
        &nbsp; Activations.run() is invoked in Main.aux() if no threads are
        scheduled, and subsequently the domain is blocked again (until a
        timer interrupt, or reception of another event).&nbsp; My question is
        why don't we re-check right after "Activations.run()" the state
        of t ?&nbsp; For example if packets are waiting to be sent, and netif
        gets unblocked, why we block the domain directly again?<br>
        <br>
        Also, thanks thanks for the credits in you updates :-)<br>
        <br>
        D.<br>
        <br>
        <br>
        <br>
        On 19/09/13 22:41, David Scott wrote:<br>
      </div>
      <blockquote
cite="mid:CAG_esB1O_ea9gKcU8K44+Gg0f9tE4TN8SyRCz5d2eSNxQjHO1w@mail.gmail.com"
        type="cite">
        <div dir="ltr">Hi Dimos,
          <div><br>
          </div>
          <div>I've created a new patch set based on a mix of your ideas
            and mine:</div>
          <div><br>
          </div>
          <div><a moz-do-not-send="true"
              href="https://github.com/mirage/mirage-platform/pull/58">https://github.com/mirage/mirage-platform/pull/58</a><br>
          </div>
          <div><br>
          </div>
          <div>I've proposed switching to SCHEDOP_block with interrupts
            enabled. Unlike in regular Mini-OS I don't think we need to
            do anything in the hypervisor_callback, because we already
            have code to poll the evtchn pending bits in evtchn_poll--
            so we're a bit of a hybrid: interrupts on for wakeups but
            the whole OS is still based around a select/poll-style loop.
            I've left all event channels unmasked and used the
            event_upcall_mask to turn on/off event delivery globally.
            I've revamped the OCaml Activations interface to remove one
            source of missing events.</div>
          <div><br>
          </div>
          <div>So far the code is working ok in my testing. I ran
            mirage-iperf and am getting 1642002 KBit/sec on my test
            hardware -- I don't know if this is considered good or bad!
            I ran your instrumented version (thanks for the exhaustive
            instructions btw) and it drew some pretty graphs, but I'm
            not enough of a TCP expert to interpret them properly.</div>
          <div><br>
          </div>
          <div>Could you give this a go in your test environment and let
            me know what you think?</div>
          <div><br>
          </div>
          <div>I'm extremely suspicious of the console code -- it
            shouldn't be necessary to include a delay in the print loop;
            that's definitely worth investigating.</div>
          <div><br>
          </div>
          <div>Cheers,</div>
          <div>Dave</div>
        </div>
        <div class="gmail_extra"><br>
          <br>
          <div class="gmail_quote">On Thu, Sep 19, 2013 at 11:02 AM,
            David Scott <span dir="ltr">&lt;<a moz-do-not-send="true"
                href="mailto:scott.dj@gmail.com" target="_blank">scott.dj@gmail.com</a>&gt;</span>
            wrote:<br>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div dir="ltr">Hi Dimos,
                <div><br>
                </div>
                <div>Thanks for looking into this! Thinking about it, I
                  think we have several problems.</div>
                <div><br>
                </div>
                <div>1. I think the Activations.wait API is difficult to
                  use / unsafe:</div>
                <div><br>
                </div>
                <div>
                  <div>(* Block waiting for an event to occur on a
                    particular port *)</div>
                  <div>let wait evtchn =</div>
                  <div>&nbsp; if Eventchn.is_valid evtchn then begin</div>
                  <div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let port = Eventchn.to_int evtchn in</div>
                  <div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let th, u = Lwt.task () in</div>
                  <div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let node = Lwt_sequence.add_l u
                    event_cb.(port) in</div>
                  <div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Lwt.on_cancel th (fun _ -&gt;
                    Lwt_sequence.remove node);</div>
                  <div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; th</div>
                  <div> &nbsp; end else Lwt.fail Generation.Invalid</div>
                </div>
                <div><br>
                </div>
                <div>When you call Activations.wait you are added to a
                  'sequence' (like a list) of people to wake up when the
                  next event occurs. A typical driver would call
                  Activations.wait in a loop, block for an event, wake
                  up, signal some other thread to do work and then block
                  again. However if the thread running the loop blocks
                  anywhere else, then the thread will not be added to
                  the sequence straight away and any notifications that
                  arrive during the gap will be dropped. I noticed this
                  when debugging my block backend implementation. I
                  think netif has this problem:</div>
                <div><br>
                </div>
                <div>
                  <div>let listen nf fn =</div>
                  <div>&nbsp; (* Listen for the activation to poll the
                    interface *)</div>
                  <div>&nbsp; let rec poll_t t =</div>
                  <div>&nbsp; &nbsp; lwt () = refill_requests t in</div>
                  <div>&nbsp; &nbsp; ^^^ blocks here, can miss events</div>
                  <div><br>
                  </div>
                  <div>&nbsp; &nbsp; rx_poll t fn;</div>
                  <div>&nbsp; &nbsp; tx_poll t;</div>
                  <div>&nbsp; &nbsp; (* Evtchn.notify nf.t.evtchn; *)</div>
                  <div>&nbsp; &nbsp; lwt new_t =</div>
                  <div>&nbsp; &nbsp; &nbsp; try_lwt</div>
                  <div>&nbsp; &nbsp; &nbsp; &nbsp; Activations.wait t.evtchn &gt;&gt; return
                    t</div>
                  <div>&nbsp; &nbsp; &nbsp; with</div>
                  <div>&nbsp; &nbsp; &nbsp; | Generation.Invalid -&gt;</div>
                  <div>&nbsp; &nbsp; &nbsp; &nbsp; Console.log_s "Waiting for plug in
                    listen" &gt;&gt;</div>
                  <div>&nbsp; &nbsp; &nbsp; &nbsp; wait_for_plug nf &gt;&gt;</div>
                  <div>&nbsp; &nbsp; &nbsp; &nbsp; Console.log_s "Done..." &gt;&gt;</div>
                  <div>&nbsp; &nbsp; &nbsp; &nbsp; return nf.t</div>
                  <div>&nbsp; &nbsp; in poll_t new_t</div>
                  <div>&nbsp; in</div>
                  <div>&nbsp; poll_t nf.t</div>
                </div>
                <div><br>
                </div>
                <div><br>
                </div>
                <div>I think we should change the semantics of
                  Activations.wait to be more level-triggered rather
                  than edge-triggered (i.e. more like the underlying
                  behaviour of xen) like this:</div>
                <div><br>
                </div>
                <div>&nbsp;type event</div>
                <div>&nbsp;(** a particular event *)</div>
                <div><br>
                </div>
                <div>&nbsp;val wait: Evtchn.t -&gt; event option -&gt; event
                  Lwt.t</div>
                <div>&nbsp;(** [wait evtchn None] returns [Some e] where [e]
                  is the latest event.</div>
                <div>&nbsp; &nbsp; &nbsp;[wait evtchn (Some e)] returns [Some e'] where
                  [e'] is a later event than [e] *)</div>
                <div><br>
                </div>
                <div>In the implementation we could have "type event =
                  int" and maintain a counter of "number of times this
                  event has been signalled". When you call
                  Activations.wait, you would pass in the number of the
                  last event you saw, and the thread would block until a
                  new event is available. This way you wouldn't have to
                  be registered in the table when the event arrives.</div>
                <div><br>
                </div>
                <div>2. SCHEDOP_poll has a low (arbitrary) nr_ports
                  limit</div>
                <div><br>
                </div>
                <div><a moz-do-not-send="true"
href="http://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=xen/common/schedule.c;h=a8398bd9ed4827564bed4346e1fdfbb98ec5907e;hb=c5e9596cd095e3b96a090002d9e6629a980904eb#l712"
                    target="_blank">http://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=xen/common/schedule.c;h=a8398bd9ed4827564bed4346e1fdfbb98ec5907e;hb=c5e9596cd095e3b96a090002d9e6629a980904eb#l712</a><br>
                </div>
                <div><br>
                </div>
                <div>
                  <div>&nbsp;704 static long do_poll(struct sched_poll
                    *sched_poll)</div>
                  <div>&nbsp;705 {</div>
                  <div>&nbsp;706 &nbsp; &nbsp; struct vcpu &nbsp; *v = current;</div>
                  <div>&nbsp;707 &nbsp; &nbsp; struct domain *d = v-&gt;domain;</div>
                  <div>&nbsp;708 &nbsp; &nbsp; evtchn_port_t &nbsp;port;</div>
                  <div>&nbsp;709 &nbsp; &nbsp; long &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rc;</div>
                  <div>&nbsp;710 &nbsp; &nbsp; unsigned int &nbsp; i;</div>
                  <div>&nbsp;711&nbsp;</div>
                  <div>&nbsp;712 &nbsp; &nbsp; /* Fairly arbitrary limit. */</div>
                  <div>&nbsp;713 &nbsp; &nbsp; if ( sched_poll-&gt;nr_ports &gt; 128 )</div>
                  <div>&nbsp;714 &nbsp; &nbsp; &nbsp; &nbsp; return -EINVAL;</div>
                </div>
                <div><br>
                </div>
                <div>The total number of available event channels for a
                  64-bit guest is 4096 using the current ABI (a new
                  interface is under development which allows even
                  more). The limit of 128 is probably imposed to limit
                  the amount of time the hypercall takes, to avoid
                  hitting scalability limits like you do in userspace
                  with select().</div>
                <div><br>
                </div>
                <div>One of the use-cases I'd like to use Mirage for is
                  to run backend services (like xenstore or blkback) for
                  all the domains on a host. This requires at least one
                  event channel per client domain. We routinely run ~300
                  VMs/host, so the 128 limit is too small. Plus a quick
                  grep around Linux shows that it doesn't use
                  SCHEDOP_poll very much-- I think we should focus on
                  using the hypercalls that other OSes are using, for
                  maximum chance of success.</div>
                <div><br>
                </div>
                <div>So I think we should switch from select()-like
                  behaviour using SCHEDOP_poll to interrupt-based
                  delivery using SCHEDOP_block. I note that upstream
                  mini-os does this by default too. I'll take a look at
                  this.</div>
                <div><br>
                </div>
                <div>Cheers,</div>
                <div>Dave</div>
                <div><br>
                </div>
              </div>
              <div class="gmail_extra">
                <div>
                  <div class="h5"><br>
                    <br>
                    <div class="gmail_quote">On Fri, Sep 13, 2013 at
                      11:50 PM, Dimosthenis Pediaditakis <span
                        dir="ltr">&lt;<a moz-do-not-send="true"
                          href="mailto:dimosthenis.pediaditakis@cl.cam.ac.uk"
                          target="_blank">dimosthenis.pediaditakis@cl.cam.ac.uk</a>&gt;</span>
                      wrote:<br>
                      <blockquote class="gmail_quote" style="margin:0 0
                        0 .8ex;border-left:1px #ccc
                        solid;padding-left:1ex">
                        <div bgcolor="#FFFFFF" text="#000000"> Hi all, <br>
                          The last few days I've been trying to pin-down
                          the performance issues of the Mirage network
                          stack, when running over Xen.<br>
                          When trying to push net-direct to its limits,
                          random transmissions stall for anywhere
                          between 0.1sec-4sec (especially at the
                          sender).<br>
                          <br>
                          After some experimentation, I believe that
                          those time-outs occur because netif is not
                          (always) notified (via Activations) about
                          freed TX-ring slots. <br>
                          It seems that these events (intermittently)
                          don't reach the guest domain's front-end
                          driver. <br>
                          <br>
                          AFAIK Activations.wait() currently blocks
                          waiting for an event on the port belonging to
                          the event channel for the netif. <br>
                          This event is delivered to Activations.run via
                          Main.run.aux which is invoked via the callback
                          in app_main() of runtime/kernel/main.c <br>
                          The problem I observed was that using
                          "SCHEDOP_poll" without masking the intended
                          events, the hypervisor didn't "wake-up" the
                          blocked domain upon new event availability. <br>
                          The requirement for event-masking when using
                          "SCHEDOP_poll" is also mentioned in the Xen
                          documentation.<br>
                          <br>
                          I've produced a patch that seems to fix the
                          above erratic behavior. <br>
                          Now I am able to consistently achieve higher
                          speeds (up to 2.75Gbps DomU2Domu). Please,
                          have a look at my repo:<br>
                          <a moz-do-not-send="true"
                            href="https://github.com/dimosped/mirage-platform"
                            target="_blank">https://github.com/dimosped/mirage-platform</a><br>
                          It will be helpful to use big-enough
                          txqueuelen values for your VIFs, as the
                          current TCP implementation doesn't like much
                          losses at high datarates. The default size in
                          my system was only 32.<br>
                          <br>
                          I have also modified the mirage-net-direct by
                          adding per-flow TCP debug logging. This has
                          helped me to better understand and pin-down
                          the problem.<br>
                          You can grab the modified sources here:<br>
                          <a moz-do-not-send="true"
                            href="https://github.com/dimosped/mirage-net"
                            target="_blank">https://github.com/dimosped/mirage-net</a><br>
                          Be aware that logging big volumes of data for
                          a TCP flow will require big enough memory.
                          Nevertheless, it only barely affects
                          performance.<br>
                          <br>
                          The iperf benchmark sources can be found here:<br>
                          <a moz-do-not-send="true"
                            href="https://github.com/dimosped/iperf-mirage"
                            target="_blank">https://github.com/dimosped/iperf-mirage</a><br>
                          I've included as much info as possible in the
                          README file. This should be sufficient to get
                          you started and replicate my experiments.<br>
                          <br>
                          In the iperf-mirage repo there is also a
                          Python tool, which you can use to
                          automatically generate plots based on the
                          collected TCP debug info (I include also a
                          sample dataset in data/ ):<br>
                          <a moz-do-not-send="true"
href="https://github.com/dimosped/iperf-mirage/tree/master/tools/MirageTcpVis"
                            target="_blank">https://github.com/dimosped/iperf-mirage/tree/master/tools/MirageTcpVis</a><br>
                          For really large datasets, the script might be
                          slow. I need to switch into using NumPy arrays
                          at some point...<br>
                          <br>
                          Please keep in mind that I am a newbie in
                          Xen/Mirage so your comments/input are more
                          than welcome.<br>
                          &nbsp;<br>
                          Regards, <br>
                          Dimos <br>
                          <br>
                          <br>
                          <br>
                          <br>
------------------------------------------------<br>
                          &nbsp;&nbsp; MORE TECHNICAL DETAILS<br>
------------------------------------------------<br>
                          <br>
                          <br>
                          -----------------------------------------------------------------


                          <br>
                          === How (I think) Mirage and XEN scheduling
                          works === <br>
                          -----------------------------------------------------------------


                          <br>
                          &nbsp;- When Netif receives a writev request, it
                          checks if the TX ring has enough empty space
                          (for the producer) for the data <br>
                          &nbsp;&nbsp;&nbsp; - If there is not enough space, it
                          block-waits (via Activations.wait) for an
                          event on the port mapped to the netif (and
                          bound to the backend driver) <br>
                          &nbsp;&nbsp;&nbsp; - Otherwise it pushes the request. <br>
                          -&nbsp; Activations are notified (via run) from
                          "aux ()" in Main.run. Once notified, it means
                          that the waiting netif can proceed, check
                          again the ring for free space, write a new
                          request, and send an event to the backend. <br>
                          - Main.run.aux is registered as a callback
                          (under name "OS.Main.run") and is invoked in
                          xen/runtime/kernel/main.c (in app_main()
                          loop). As long as the Mirage guest domain is
                          scheduled, this loop keeps running. <br>
                          - However, in Main.run.aux, the Mirage guest
                          domain is blocked via "block_domain timeout"
                          if the main thread has no task to perform. <br>
                          - In turn, "block_domain" invokes
                          caml_block_domain()&nbsp; found in
                          xen/runtime/kernel/main.c, which issues a
                          "HYPERVISOR_sched_op(SCHEDOP_poll,
                          &amp;sched_poll);" hypercall <br>
                          <br>
                          ------------------------------------- <br>
                          === Polling mode issue === <br>
                          ------------------------------------- <br>
                          In my opinion, and based on debug information,
                          it seems that the problem is that Mirage uses
                          "SCHEDOP_poll" without masking the event
                          channels. <br>
                          The XEN documentation clearly states that with
                          "SCHEDOP_poll" the domain would yield until
                          either <br>
                          &nbsp; a) an event is pending on the polled
                          channels and <br>
                          &nbsp; b) the timeout time (given in nanoseconds,
                          is not duration but absolute system time) is
                          reached <br>
                          It also states that this SCHEDOP_poll can only
                          be be executed when the guest has delivery of
                          events disabled. <br>
                          <br>
                          In Mirage, netif events are not masked and
                          therefore they never "wakeup" the guest
                          domain. <br>
                          The guest only wakes-up whenever a thread is
                          scheduled to&nbsp; wakeup in Time.SleepQueue (e.g.
                          a TCP timer). <br>
                          Once the guest is scheduled again, it
                          completes any outstanding tasks, sends any
                          packets pending, and whenever a) the TX ring
                          gets full, or&nbsp; b)the hypervisor&nbsp; it, c)&nbsp; it
                          will sleep again. <br>
                          To further support the above, whenever I press
                          buttons via XEN-console while the
                          mirage-sender is running, the execution
                          completes faster. <br>
                          <br>
                          ---------------- <br>
                          === Fix === <br>
                          ---------------- <br>
                          There are multiple ways to mask events (e.g.
                          at VCPU level, event level etc). <br>
                          As a quick hack I replaced "Eventchn.unmask h
                          evtchn;" in Netif.plug_inner with&nbsp;
                          Eventchn.mask h evtchn (which I had to create,
                          both in Eventchn and&nbsp; as a stub in
                          xen/runtime/kernel/eventchn_stubs.c). <br>
                          See:<br>
                          <a moz-do-not-send="true"
href="https://github.com/dimosped/mirage-platform/commit/6d4d3f0403497f07fde4db6f4cb63665a8bf8e26"
                            target="_blank">https://github.com/dimosped/mirage-platform/commit/6d4d3f0403497f07fde4db6f4cb63665a8bf8e26</a><br>
                          <br>
                          <br>
                          <br>
                          <br>
                          <br>
                        </div>
                      </blockquote>
                    </div>
                    <br>
                    <br clear="all">
                    <div><br>
                    </div>
                  </div>
                </div>
                <span class="HOEnZb"><font color="#888888">-- <br>
                    Dave Scott </font></span></div>
            </blockquote>
          </div>
          <br>
          <br clear="all">
          <div><br>
          </div>
          -- <br>
          Dave Scott </div>
      </blockquote>
      <br>
    </blockquote>
    <br>
  </body>
</html>

--------------050103010604050407010307--


From russell.pavlicek.xen@gmail.com Wed Sep 25 15:49:31 2013
Received: from ppsw-mx-f.csi.cam.ac.uk ([131.111.8.149]
	helo=ppsw-42.csi.cam.ac.uk)
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VOqPD-0000l6-Lv (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <russell.pavlicek.xen@gmail.com>);
	Wed, 25 Sep 2013 15:49:31 +0100
X-Cam-SpamScore: s
X-Cam-SpamDetails: score 1.9 from SpamAssassin-3.3.2-1525816 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.215.45 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (russell.pavlicek.xen[at]gmail.com)
	*  2.5 SUSPICIOUS_RECIPS Similar addresses in recipient list
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	*  0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-la0-f45.google.com ([209.85.215.45]:33822)
	by ppsw-42.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1VOqPB-0001xH-6t (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <russell.pavlicek.xen@gmail.com>);
	Wed, 25 Sep 2013 15:49:29 +0100
Received: by mail-la0-f45.google.com with SMTP id eh20so5055795lab.32
	for <cl-mirage@lists.cam.ac.uk>; Wed, 25 Sep 2013 07:49:28 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.152.22.65 with SMTP id b1mr781149laf.46.1380120568613; Wed,
	25 Sep 2013 07:49:28 -0700 (PDT)
Sender: russell.pavlicek.xen@gmail.com
Received: by 10.112.77.103 with HTTP; Wed, 25 Sep 2013 07:49:28 -0700 (PDT)
Date: Wed, 25 Sep 2013 10:49:28 -0400
X-Google-Sender-Auth: RRzXc5DuOgHs9j6LfRQo_jwJ7Do
Message-ID: <CAHehzX273WVUZm-cLvpZfpw4+ssqW14eXhdNkxMxa2_6S5vsQA@mail.gmail.com>
Subject: REMINDER: Xen Project Document Day is Monday Sept 30
From: Russ Pavlicek <russell.pavlicek@xenproject.org>
To: xen-devel@lists.xen.org, xen-users@lists.xen.org, xen-api@lists.xen.org, 
	xs-devel@lists.xenserver.org, cl-mirage@lists.cam.ac.uk
Content-Type: text/plain; charset=ISO-8859-1
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Wed, 25 Sep 2013 14:49:31 -0000
Status: O
Content-Length: 1196
Lines: 35

Next Monday, September 30, is our next Xen Project Document Day.

Xen Document Days are for people who care about Xen Documentation and
want to improve it.

We introduced Documentation Days, because working on documentation in
parallel with like minded-people is just more fun than working alone.

Also, this is the perfect way for people who are not contributing code
to support the Xen Project.  If you are a Xen user and had to dig to
find useful information, consider improving the documentation so that
the next person doesn't have to work so hard to figure out what you
learned.

For a list of items that need work, check out the community maintained
TODO list at http://wiki.xen.org/wiki/Xen_Document_Days/TODO .  Of
course, you can work on anything you'd like; the TODO list provides a
handy list of documents needing attention.


How to join in:
===========

- Join us on IRC: freenode channel #xendocs
- Tell people what you intend to work on (to avoid doing something
somebody else is already working on)
- Fix some documentation
- Help others
- And above all: have fun!

It all happens next Monday, so mark your calendars.  See you on #xendocs!

Russ Pavlicek
Xen Project Evangelist


From Richard.Mortier@nottingham.ac.uk Thu Sep 26 10:42:13 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VP85N-0007O4-2X (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Thu, 26 Sep 2013 10:42:13 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1526135
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine03-20433-10.icritical.com ([93.159.202.53]:36811)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with smtp id 1VP85M-0003R7-i2 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Thu, 26 Sep 2013 10:42:13 +0100
Received: (qmail 26246 invoked from network); 26 Sep 2013 09:42:07 -0000
Received: from localhost (127.0.0.1)
	by engine03-20433-10.icritical.com with SMTP; 26 Sep 2013 09:42:07 -0000
Received: from engine03-20433-10.icritical.com ([127.0.0.1])
	by localhost (engine03-20433-10.icritical.com [127.0.0.1]) (amavisd-new,
	port 10024) with SMTP id 26146-04 for <cl-mirage@lists.cam.ac.uk>;
	Thu, 26 Sep 2013 10:42:06 +0100 (BST)
Received: (qmail 25173 invoked by uid 599); 26 Sep 2013 09:40:57 -0000
Received: from unknown (HELO smtp4.nottingham.ac.uk) (128.243.220.65)
	by engine03-20433-10.icritical.com (qpsmtpd/0.28) with ESMTP;
	Thu, 26 Sep 2013 10:40:57 +0100
Received: from uiwexhub01.ad.nottingham.ac.uk ([128.243.15.133])
	by smtp4.nottingham.ac.uk with esmtps (TLSv1:AES128-SHA:128)
	(Exim 4.77) (envelope-from <Richard.Mortier@nottingham.ac.uk>)
	id 1VP84D-0005EN-4z
	for cl-mirage@lists.cam.ac.uk; Thu, 26 Sep 2013 10:41:01 +0100
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: =?gb2312?B?zrrM+g==?= <weitie018@gmail.com>, "cl-mirage@lists.cam.ac.uk
	List" <cl-mirage@lists.cam.ac.uk>
Date: Thu, 26 Sep 2013 10:40:59 +0100
Subject: Re: some problems about installing mirage-www
Thread-Topic: some problems about installing mirage-www
Thread-Index: Ac66nIHjNuU+rLpqS1eL2sIFpPKFCg==
Message-ID: <A88E1FD5-B007-4319-ABC9-E0B584E845F9@nottingham.ac.uk>
References: <CAHorp4xSeJRWrtSFtNo6660Lr1Q=z06Cxp54tb3KSz82nb4z+Q@mail.gmail.com>
In-Reply-To: <CAHorp4xSeJRWrtSFtNo6660Lr1Q=z06Cxp54tb3KSz82nb4z+Q@mail.gmail.com>
Accept-Language: en-US, en-GB
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-GB
Content-Type: text/plain; charset="gb2312"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine03-20433-10.icritical.com
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Thu, 26 Sep 2013 09:42:13 -0000
Status: O
Content-Length: 1635
Lines: 23

DQpPbiAyNiBTZXAgMjAxMywgYXQgMTA6MjAsIM66zPogd3JvdGU6DQoNCj4gd2hlbiBJIGluc3Rh
bGwgIm1pcmFnZS13d3ciLA0KPiBJIGZvbGxvdyB0aGUgIHN0ZXBzo7oNCj4gJA0KPiAgb3BhbSBz
d2l0Y2ggbWlyYWdlLXhlbg0KPiANCj4gJA0KPiAgZXZhbCBgb3BhbSBjb25maWcgZW52YA0KPiAN
Cj4gJA0KPiAgb3BhbSBpbnN0YWxsIG1pcmFyaQ0KPiANCj4gJCBtYWtlIGNsZWFuIHhlbi1idWls
ZA0KPiBCdXQgd2hlbiA6Im9wYW0gaW5zdGFsbCBjb2h0dHAiLCBpdCBpcyBzdWdnZXN0ZWQgdGhh
dCB0aGUgbGFjayBmaWxlcyBvZiChsGNhbWxwNG9yZqGxDQo+IA0KPiB0aGVuIEkgIGZpbmQgdGhl
cmUgaXMgdGhlIGZpbGUgaW4gIi5vcGFtLzQuMDAuMSttaXJhZ2UteGVuL2Jpbi9jYW1scDRvcmYq
Ii4NCg0KdGhhdCBzb3VuZHMgbGlrZSBpJ3ZlIG1hZGUgYW5vdGhlciBlcnJvciBpbiB0aGUgaW5z
dHJ1Y3Rpb25zIHdoZW4gaSBzd2l0Y2ggYmV0d2VlbiBjYWxsaW5nIHRoZSBjb21waWxlciBzd2l0
Y2ggIjQuMDAuMSttaXJhZ2UteGVuIiBhbmQganVzdCAibWlyYWdlLXhlbiIuIGknbGwgY2hlY2sg
YWdhaW4gYW5kIHVwZGF0ZS4NCg0KPiBTbyBJIHVzZToNCj4gLT4kIG9wYW0gc3dpdGNoIDQuMDAu
MSttaXJhZ2UteGVuDQo+IC0+JCBtYWtlIHhlbi1idWlsZA0KPiAtPiRtaXJhcmkgY29uZmlndXJl
IC0teGVuIHd3dy5jb25mDQo+IC0+JG1pcmFyaSBydW4gLS14ZW4NCj4gDQo+IHRoZSByZXN1bHQg
aW4gInhsIGxpc3QiOg0KPiAjeGwgbGlzdA0KPiBOYW1lICAgICAgICAgICBJRCAgICAgICBNZW0g
ICAgIFZDUFVzICAgICAgIFN0YXRlICAgICBUaW1lKHMpDQo+IERvbWFpbi0wICAgICAgMCAgICAg
ICAxODM3ICAgICAgICAgIDEgICAgICAgICAgICAgICByLS0tLS0gICAgIDE5OTAuNg0KPiB3d3cg
ICAgICAgICAgICAgMSAgICAgICAgICAzMiAgICAgICAgICAgMSAgICAgICAgICAgICAgLWItLS0t
ICAgICAgICAgMC4xDQo+IA0KPiBCdXQgSSBjYW5ub3QgYWNjZXNzIHRvICIxMC4wLjAuMiIgaW4g
RG9tYWluLTANCj4gV2hhdCBzaG91bGQgSSBkbz8NCg0KdGhyb3dpbmcgdGhpcyBvbmUgdG8gdGhl
IGxpc3QgYXMgaXQncyBtaXJhcmkveGVuIHJlbGF0ZWQgYW5kIGkga25vdyBzb21lIG9mIHRoYXQg
dG9vbGNoYWluIGlzIGluIGZsdXggYXQgdGhlIG1vbWVudC4NCg0KLS0gDQpDaGVlcnMsDQoNClIu
DQoNCg0KDQoNCg==


From sales.mmpl@mirajgroup.in Sun Sep 29 01:50:07 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VQ5D5-0007QV-8u (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <sales.mmpl@mirajgroup.in>);
	Sun, 29 Sep 2013 01:50:07 +0100
X-Cam-SpamScore: sssss
X-Cam-SpamDetails: score 5.4 from SpamAssassin-3.3.2-1526833 
	*  2.5 MILLION_USD BODY: Talks about millions of dollars
	*  1.6 RCVD_IN_BRBL_LASTEXT RBL: RCVD_IN_BRBL_LASTEXT
	*      [182.19.6.180 listed in bb.barracudacentral.org]
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.0 LOTS_OF_MONEY Huge... sums of money
	*  1.3 RDNS_NONE Delivered to internal network by a host with no rDNS
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from [182.19.6.180] (port=56561 helo=mail.santkripa.in)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VQ5Cz-0001XG-1F (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk (return-path <sales.mmpl@mirajgroup.in>);
	Sun, 29 Sep 2013 01:50:07 +0100
Received: from localhost (localhost.localdomain [127.0.0.1])
	by mail.santkripa.in (Postfix) with ESMTP id 99CB539968382;
	Sun, 29 Sep 2013 06:21:57 +0530 (IST)
X-Virus-Scanned: amavisd-new at santkripa.in
Received: from mail.santkripa.in ([127.0.0.1])
	by localhost (mail.santkripa.in [127.0.0.1]) (amavisd-new, port 10024)
	with ESMTP id UN8OIBlnnL7J; Sun, 29 Sep 2013 06:21:52 +0530 (IST)
Received: from mail.santkripa.in (localhost.localdomain [127.0.0.1])
	by mail.santkripa.in (Postfix) with ESMTP id 9992839968001;
	Sun, 29 Sep 2013 06:21:51 +0530 (IST)
Date: Sun, 29 Sep 2013 06:21:51 +0530 (IST)
From: "Mrs. Tammy Armstrong" <sales.mmpl@mirajgroup.in>
Message-ID: <1120273735.242790.1380415911597.JavaMail.root@mail.santkripa.in>
In-Reply-To: <160698616.242685.1380415747861.JavaMail.root@mail.santkripa.in>
Subject: Esteem Greeting
MIME-Version: 1.0
Content-Type: multipart/alternative; 
	boundary="----=_Part_242789_1776369247.1380415911591"
X-Originating-IP: [219.92.204.217]
X-Mailer: Zimbra 7.1.4_GA_2555 (ZimbraWebClient - FF3.0 (Win)/7.1.4_GA_2555)
To: undisclosed-recipients:;
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
Reply-To: "Mrs. Tammy Armstrong" <tammyarmstrong2013ngo@outlook.com>
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Sun, 29 Sep 2013 00:50:07 -0000
Status: O
Content-Length: 3422
Lines: 67

------=_Part_242789_1776369247.1380415911591
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit




Esteem Greeting, 


I write to you in good faith and hoping that you will understand the 
importance of my email. My decision to contact you is because I have 
been recently diagnosed with Cancer and the doctor said I have less 
than 6 weeks to live. Since this sudden news was announced to me, I 
have been reflecting over my life in the past. It is painful that 
after over 24 years of peaceful marriage with my late husband, we had 
no child of our own that will inherit our numerous wealth. 

In the past, I have made reasonable donations to the victims of 
Earthquake in Haiti and recently to the same victims in Japan and 
Thailand. Now that my health is gradually deteriorating, I cannot 
continue to do all these by myself any more. I strongly desire to 
reach out to the poor and needy people, but I would prefer to continue 
this with the assistance of a kind person. 

I want you to answer the following questions, (1) are you a God 
fearing person? (2) If I donate (15.5)Fifteen Million five Hundred 
Thousand United States Dollars to you, can you be able to utilize it 
wisely to achieve my heart desire of supporting poor people around 
you? (3)Will you open a charity foundation in the name of my husband 
and 1? Please reply me as soon as possible. 


Yours Faithfully. 
Mrs Tammy Armstrong. 


------=_Part_242789_1776369247.1380415911591
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html><head><style type=3D'text/css'>p { margin: 0; }</style></head><body><=
div style=3D'font-family: times new roman,new york,times,serif; font-size: =
10pt; color: #000000'><font face=3D"comic sans ms,comic sans,sans-serif"><b=
r><br></font><div><font face=3D"comic sans ms,comic sans,sans-serif"><span =
name=3D"x"></span>Esteem Greeting,<br><br><br>I write to you in good faith =
and hoping that you will understand the <br>importance of my email. My deci=
sion to contact you is because I have <br>been recently diagnosed with Canc=
er and the doctor said I have less <br>than 6 weeks to live. Since this sud=
den news was announced to me, I <br>have been reflecting over my life in th=
e past. It is painful that <br>after over 24 years of peaceful marriage wit=
h my late husband, we had <br>no child of our own that will inherit our num=
erous wealth.<br><br>In the past, I have made reasonable donations to the v=
ictims of <br>Earthquake in Haiti and recently to the same victims in Japan=
 and <br>Thailand. Now that my health is gradually deteriorating, I cannot =
<br>continue to do all these by myself any more. I strongly desire to <br>r=
each out to the poor and needy people, but I would prefer to continue <br>t=
his with the assistance of a kind person.<br><br>I want you to answer the f=
ollowing questions, (1) are you a God <br>fearing person? (2) If I donate (=
15.5)Fifteen Million five Hundred <br>Thousand United States Dollars to you=
, can you be able to utilize it <br>wisely to achieve my heart desire of su=
pporting poor people around <br>you? (3)Will you open a charity foundation =
in the name of my husband <br>and 1? Please reply me as soon as possible.<b=
r><br><br>Yours Faithfully.<br>Mrs Tammy Armstrong.<br><span name=3D"x"></s=
pan><br></font></div></div></body></html>
------=_Part_242789_1776369247.1380415911591--


From sales.mmpl@mirajgroup.in Sun Sep 29 01:52:49 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VQ5Fh-0007S8-JF (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <sales.mmpl@mirajgroup.in>);
	Sun, 29 Sep 2013 01:52:49 +0100
X-Cam-SpamScore: sssss
X-Cam-SpamDetails: score 5.4 from SpamAssassin-3.3.2-1526833 
	*  2.5 MILLION_USD BODY: Talks about millions of dollars
	*  1.6 RCVD_IN_BRBL_LASTEXT RBL: RCVD_IN_BRBL_LASTEXT
	*      [182.19.6.180 listed in bb.barracudacentral.org]
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.0 LOTS_OF_MONEY Huge... sums of money
	*  1.3 RDNS_NONE Delivered to internal network by a host with no rDNS
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from [182.19.6.180] (port=51218 helo=mail.santkripa.in)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1VQ5Fb-0003Ac-iB (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk (return-path <sales.mmpl@mirajgroup.in>);
	Sun, 29 Sep 2013 01:52:49 +0100
Received: from localhost (localhost.localdomain [127.0.0.1])
	by mail.santkripa.in (Postfix) with ESMTP id C06D63996836A;
	Sun, 29 Sep 2013 06:24:44 +0530 (IST)
X-Virus-Scanned: amavisd-new at santkripa.in
Received: from mail.santkripa.in ([127.0.0.1])
	by localhost (mail.santkripa.in [127.0.0.1]) (amavisd-new, port 10024)
	with ESMTP id 3V-hxS9msLOC; Sun, 29 Sep 2013 06:24:43 +0530 (IST)
Received: from mail.santkripa.in (localhost.localdomain [127.0.0.1])
	by mail.santkripa.in (Postfix) with ESMTP id 6FC8539968001;
	Sun, 29 Sep 2013 06:24:42 +0530 (IST)
Date: Sun, 29 Sep 2013 06:24:42 +0530 (IST)
From: "Mrs. Tammy Armstrong" <sales.mmpl@mirajgroup.in>
Message-ID: <1561612400.242959.1380416082378.JavaMail.root@mail.santkripa.in>
In-Reply-To: <1269712290.242884.1380416003101.JavaMail.root@mail.santkripa.in>
Subject: Esteem Greeting
MIME-Version: 1.0
Content-Type: multipart/alternative; 
	boundary="----=_Part_242958_1536948588.1380416082372"
X-Originating-IP: [219.92.204.217]
X-Mailer: Zimbra 7.1.4_GA_2555 (ZimbraWebClient - FF3.0 (Win)/7.1.4_GA_2555)
To: undisclosed-recipients:;
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
Reply-To: "Mrs. Tammy Armstrong" <tammyarmstrong2013ngo@outlook.com>
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Sun, 29 Sep 2013 00:52:49 -0000
Status: O
Content-Length: 3301
Lines: 65

------=_Part_242958_1536948588.1380416082372
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit




Esteem Greeting, 


I write to you in good faith and hoping that you will understand the 
importance of my email. My decision to contact you is because I have 
been recently diagnosed with Cancer and the doctor said I have less 
than 6 weeks to live. Since this sudden news was announced to me, I 
have been reflecting over my life in the past. It is painful that 
after over 24 years of peaceful marriage with my late husband, we had 
no child of our own that will inherit our numerous wealth. 

In the past, I have made reasonable donations to the victims of 
Earthquake in Haiti and recently to the same victims in Japan and 
Thailand. Now that my health is gradually deteriorating, I cannot 
continue to do all these by myself any more. I strongly desire to 
reach out to the poor and needy people, but I would prefer to continue 
this with the assistance of a kind person. 

I want you to answer the following questions, (1) are you a God 
fearing person? (2) If I donate (15.5)Fifteen Million five Hundred 
Thousand United States Dollars to you, can you be able to utilize it 
wisely to achieve my heart desire of supporting poor people around 
you? (3)Will you open a charity foundation in the name of my husband 
and 1? Please reply me as soon as possible. 


Yours Faithfully. 
Mrs Tammy Armstrong. 


------=_Part_242958_1536948588.1380416082372
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html><head><style type=3D'text/css'>p { margin: 0; }</style></head><body><=
div style=3D'font-family: comic sans ms,comic sans,sans-serif; font-size: 1=
0pt; color: #000000'><br><br><div><span name=3D"x"></span>Esteem Greeting,<=
br><br><br>I write to you in good faith and hoping that you will understand=
 the <br>importance of my email. My decision to contact you is because I ha=
ve <br>been recently diagnosed with Cancer and the doctor said I have less =
<br>than 6 weeks to live. Since this sudden news was announced to me, I <br=
>have been reflecting over my life in the past. It is painful that <br>afte=
r over 24 years of peaceful marriage with my late husband, we had <br>no ch=
ild of our own that will inherit our numerous wealth.<br><br>In the past, I=
 have made reasonable donations to the victims of <br>Earthquake in Haiti a=
nd recently to the same victims in Japan and <br>Thailand. Now that my heal=
th is gradually deteriorating, I cannot <br>continue to do all these by mys=
elf any more. I strongly desire to <br>reach out to the poor and needy peop=
le, but I would prefer to continue <br>this with the assistance of a kind p=
erson.<br><br>I want you to answer the following questions, (1) are you a G=
od <br>fearing person? (2) If I donate (15.5)Fifteen Million five Hundred <=
br>Thousand United States Dollars to you, can you be able to utilize it <br=
>wisely to achieve my heart desire of supporting poor people around <br>you=
? (3)Will you open a charity foundation in the name of my husband <br>and 1=
? Please reply me as soon as possible.<br><br><br>Yours Faithfully.<br>Mrs =
Tammy Armstrong.<br><span name=3D"x"></span><br></div></div></body></html>
------=_Part_242958_1536948588.1380416082372--


From tonyzhao@vip.188.com Mon Sep 30 05:54:32 2013
Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VQVVA-0001GI-Bs (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <tonyzhao@vip.188.com>); Mon, 30 Sep 2013 05:54:32 +0100
X-Cam-SpamScore: sssss
X-Cam-SpamDetails: score 5.3 from SpamAssassin-3.3.2-1527286 
	* -0.7 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
	*  2.7 RCVD_IN_PSBL RBL: Received via a relay in PSBL
	*      [123.58.177.67 listed in psbl.surriel.com]
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  0.3 HTML_FONT_FACE_BAD BODY: HTML font face is not a word
	*  1.1 MIME_HTML_ONLY BODY: Message only has text/html MIME parts
	*  1.8 MISSING_MIMEOLE Message has X-MSMail-Priority, but no X-MimeOLE
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from m67-177.188.com ([123.58.177.67]:57520)
	by ppsw-33.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1VQVV8-0000AH-iw (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <tonyzhao@vip.188.com>); Mon, 30 Sep 2013 05:54:32 +0100
Received: from IsVeryImportant (unknown [1.199.162.47])
	by smtp2 (Coremail) with SMTP id EWZ4CkCJ90ABBElSZTmeAg--.30S2;
	Mon, 30 Sep 2013 12:54:26 +0800 (CST)
From: tonyzhao@vip.188.com
To: cl-mirage@lists.cam.ac.uk
Subject: Pearl pigments
Sender: tonyzhao@vip.188.com
Mime-Version: 1.0
Content-Type: text/html; charset="gb2312"
Content-Transfer-Encoding: quoted-printable
Date: Mon, 30 Sep 2013 12:54:21 +0800
X-Priority: 2
Priority: urgent
X-MSMail-Priority: High
Message-ID: <20130930045421906.677101354DC20853@U3J84YF8E1G1J5V>
X-Mailer: ICS SMTP Component V7.29
X-CM-TRANSID: EWZ4CkCJ90ABBElSZTmeAg--.30S2
X-Coremail-Antispam: 1Uf129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73
	VFW2AGmfu7bjvjm3AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjxUBAhlDUUUU
X-Originating-IP: [1.199.162.47]
X-CM-SenderInfo: pwrq56xkdrqiyyyou0bp/1tbiAQKo91D30t+nygAAsb
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 30 Sep 2013 04:54:32 -0000
Status: O
Content-Length: 1434
Lines: 21

<HTML xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD><TITLE>=CE=DE=B1=EA=CC=
=E2=CE=C4=B5=B5</TITLE>=0D=0A<META content=3D"text/html; charset=3Dgb2312"=
 http-equiv=3DContent-Type>=0D=0A<STYLE type=3Dtext/css><!--body {font-fam=
ily: Arial, Helvetica, sans-serif, "=CB=CE=CC=E5";font-size: 12px; line-he=
ight: 150%;}font {line-height: 150%;}--></STYLE>=0D=0A</HEAD>=0D=0A<BODY>=
=0D=0A<DIV><FONT face=3D'"Tahoma"'>Hi Sir,<BR>&nbsp;<BR>Good day. We are a=
 manufacturer of pearl pigment with 10 years of production experience.</FO=
NT></DIV>=0D=0A<DIV><FONT face=3D'"Tahoma"'></FONT>&nbsp;</DIV>=0D=0A<DIV>=
<FONT face=3D'"Tahoma"'>The purpose I write to you is to know if you need =
these special pigments.</FONT></DIV>=0D=0A<DIV><FONT face=3D'"Tahoma"'></F=
ONT>&nbsp;</DIV>=0D=0A<DIV><FONT face=3D'"Tahoma"'>More information please=
 visit our website: www.pearlescentpigment.com </FONT></DIV>=0D=0A<DIV><FO=
NT face=3D'"Tahoma"'></FONT>&nbsp;</DIV>=0D=0A<DIV><FONT face=3D'"Tahoma"'=
>Best regards</FONT></DIV>=0D=0A<DIV><FONT face=3D'"Tahoma"'></FONT>&nbsp;=
</DIV>=0D=0A<DIV><FONT face=3D'"Tahoma"'>Tony Zhao<BR><FONT color=3D#80808=
0>__________________________________________<BR></FONT><FONT color=3D#8080=
80><STRONG>HANGZHOU GOLDLAND PEARL PIGMENT CO., LTD<BR></STRONG>TANGQI IND=
USTRY AREA,YUHANG,<BR>HANGZHOU, CHINA, 311106<BR>T: (86) 514.82785003 | F:=
 (86) 514.88614859&nbsp; </FONT></FONT></DIV></BODY></HTML>=0D=0A



From Ian.Campbell@citrix.com Mon Sep 30 10:02:54 2013
Received: from ppsw-32.csi.cam.ac.uk ([131.111.8.132])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VQZNW-0007lv-VA (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Ian.Campbell@citrix.com>); Mon, 30 Sep 2013 10:02:54 +0100
X-Cam-SpamScore: s
X-Cam-SpamDetails: score 1.1 from SpamAssassin-3.3.2-1527286 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [66.165.176.63 listed in list.dnswl.dnsbl.ja.net]
	* -0.7 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
	*  2.5 SUSPICIOUS_RECIPS Similar addresses in recipient list
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from smtp02.citrix.com ([66.165.176.63]:16391)
	by ppsw-32.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1VQZNW-0006iD-01 (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Ian.Campbell@citrix.com>); Mon, 30 Sep 2013 10:02:54 +0100
X-IronPort-AV: E=Sophos;i="4.90,1007,1371081600"; d="scan'208";a="56047379"
Received: from accessns.citrite.net (HELO FTLPEX01CL03.citrite.net)
	([10.9.154.239])
	by FTLPIPO02.CITRIX.COM with ESMTP; 30 Sep 2013 09:02:52 +0000
Received: from LONPEX01CL03.citrite.net (10.30.203.103) by
	FTLPEX01CL03.citrite.net (10.13.107.80) with Microsoft SMTP Server
	(TLS) id 14.2.342.4; Mon, 30 Sep 2013 05:02:51 -0400
Received: from [10.80.2.80] (10.30.203.1) by LONPEX01CL03.citrite.net
	(10.30.203.103) with Microsoft SMTP Server id 14.2.342.4;
	Mon, 30 Sep 2013 10:02:50 +0100
Message-ID: <1380531770.1302.5.camel@kazak.uk.xensource.com>
Subject: Re: [Xen-devel] REMINDER: Xen Project Document Day is Monday Sept 30
From: Ian Campbell <Ian.Campbell@citrix.com>
To: Russ Pavlicek <russell.pavlicek@xenproject.org>
Date: Mon, 30 Sep 2013 10:02:50 +0100
In-Reply-To: <CAHehzX273WVUZm-cLvpZfpw4+ssqW14eXhdNkxMxa2_6S5vsQA@mail.gmail.com>
References: <CAHehzX273WVUZm-cLvpZfpw4+ssqW14eXhdNkxMxa2_6S5vsQA@mail.gmail.com>
Organization: Citrix Systems, Inc.
Content-Type: text/plain; charset="UTF-8"
X-Mailer: Evolution 3.4.4-3 
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Originating-IP: [10.30.203.1]
X-DLP: MIA2
Cc: xen-users@lists.xen.org, xen-api@lists.xen.org,
	xs-devel@lists.xenserver.org, cl-mirage@lists.cam.ac.uk,
	xen-devel@lists.xen.org
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 30 Sep 2013 09:02:55 -0000
Status: O
Content-Length: 1472
Lines: 45

On Wed, 2013-09-25 at 10:49 -0400, Russ Pavlicek wrote:
> Next Monday, September 30, is our next Xen Project Document Day.

That's today!

> Xen Document Days are for people who care about Xen Documentation and
> want to improve it.
> 
> We introduced Documentation Days, because working on documentation in
> parallel with like minded-people is just more fun than working alone.
> 
> Also, this is the perfect way for people who are not contributing code
> to support the Xen Project.  If you are a Xen user and had to dig to
> find useful information, consider improving the documentation so that
> the next person doesn't have to work so hard to figure out what you
> learned.
> 
> For a list of items that need work, check out the community maintained
> TODO list at http://wiki.xen.org/wiki/Xen_Document_Days/TODO .  Of
> course, you can work on anything you'd like; the TODO list provides a
> handy list of documents needing attention.
> 
> 
> How to join in:
> ===========
> 
> - Join us on IRC: freenode channel #xendocs
> - Tell people what you intend to work on (to avoid doing something
> somebody else is already working on)
> - Fix some documentation
> - Help others
> - And above all: have fun!
> 
> It all happens next Monday, so mark your calendars.  See you on #xendocs!
> 
> Russ Pavlicek
> Xen Project Evangelist
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel




From anil@recoil.org Mon Sep 30 17:04:15 2013
Received: from ppsw-52.csi.cam.ac.uk ([131.111.8.152])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1VQfxH-0005pc-M5 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 30 Sep 2013 17:04:15 +0100
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1527286
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:47662
	helo=dark.recoil.org)
	by ppsw-52.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1VQfxG-0005RV-FL (Exim 4.80_167-5a66dd3) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 30 Sep 2013 17:04:15 +0100
Received: (qmail 30613 invoked by uid 634); 30 Sep 2013 16:04:14 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED
X-Spam-Check-By: dark.recoil.org
Received: from zone3.jesus.cam.ac.uk (HELO [192.168.22.154]) (131.111.243.143)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Mon, 30 Sep 2013 17:04:13 +0100
From: Anil Madhavapeddy <anil@recoil.org>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Subject: Travis and OCaml, and even ARM
Message-Id: <43EF2528-2F11-46F6-8E08-2180C6742508@recoil.org>
Date: Mon, 30 Sep 2013 17:04:02 +0100
To: "cl-mirage@lists.cam.ac.uk List" <cl-mirage@lists.cam.ac.uk>,
	xen-api@lists.xen.org, Ian Campbell <Ian.Campbell@citrix.com>
Mime-Version: 1.0 (Mac OS X Mail 7.0 \(1811\))
X-Mailer: Apple Mail (2.1811)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: MirageOS development <cl-mirage.lists.cam.ac.uk>
List-Unsubscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=unsubscribe>
List-Archive: <https://lists.cam.ac.uk/pipermail/cl-mirage>
List-Post: <mailto:cl-mirage@lists.cam.ac.uk>
List-Help: <mailto:cl-mirage-request@lists.cam.ac.uk?subject=help>
List-Subscribe: <https://lists.cam.ac.uk/mailman/listinfo/cl-mirage>,
	<mailto:cl-mirage-request@lists.cam.ac.uk?subject=subscribe>
X-List-Received-Date: Mon, 30 Sep 2013 16:04:15 -0000
Status: O
Content-Length: 1367
Lines: 30

Good news everyone! I just had an exciting build failure that I wanted =
to share with you.

Dave and I have been switching a number of our OCaml GitHub repositories =
to use Travis continuous integration testing.  This is good enough for =
any tests that can run in an Ubuntu/i386 VM without hosting any =
infrastructure ourselves.  Details here:
http://anil.recoil.org/2013/09/30/travis-and-ocaml.html

If you look at the bottom there, I used Ian Campbell's foreign-chroot =
instructions to get OCaml/ARM working too.  I've been activating this on =
various Mirage repositories to test our builds on ARM without having to =
have a box available, and so this is making it much easier to reproduce =
bugs such as this shared-memory-ring failure:
https://github.com/djs55/shared-memory-ring/issues/6
...just via this Travis log:
https://travis-ci.org/mirage/mirage-platform/jobs/11964317

Now we just have to fix it, but that's pretty easy right? :-)

Are there any brave souls out there that might try to figure out how to =
get a Xen environment working from within Travis?  It would only need to =
boot Mirage kernels, so it's ok to be a bit slow...

(I expect to finish the conversion of all the Mirage release =
repositories to Travis this week, and it would be great to see XAPI =
repos like xenopsd also activated, which I believe Dave is working on).

-anil=


