From avsm@dark.recoil.org Thu Jan 03 10:24:26 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TqhyM-00059I-J2 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <avsm@dark.recoil.org>); Thu, 03 Jan 2013 10:24:26 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1427706
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:33913
	helo=dark.recoil.org)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1TqhyK-0004yX-ZT (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <avsm@dark.recoil.org>); Thu, 03 Jan 2013 10:24:26 +0000
Received: (qmail 23176 invoked by uid 10000); 3 Jan 2013 10:24:24 -0000
Date: Thu, 3 Jan 2013 10:24:24 +0000
From: 'Anil Madhavapeddy' <anil@recoil.org>
To: Yiming Zhang <sdiris@gmail.com>
Subject: Re: oasis setup error for xen
Message-ID: <20130103102424.GG12006@dark.recoil.org>
References: <001801cde1ee$3e25c0a0$ba7141e0$@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <001801cde1ee$3e25c0a0$ba7141e0$@gmail.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
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, 03 Jan 2013 10:24:26 -0000
Content-Length: 4196
Lines: 116

I'm not sure about this without seeing more information. The cohttp
package in OPAM has mirage as an optional dependency.  However, if you do
install mirage and already have cohttp installed, it will automatically
recompile cohttp so that the new dependency is picked up.

In other words, just do:

$ opam install mirage-net

and see if cohttp is recompiled with cohttp.mirage.

If that doesn't work, then I'd suggest opening up a bug on
http://github.com/OCamlPro/opam-repository with your package list, so that
we can try to reproduce.

Note that changing the cohttp.mirage in _oasis won't do any good.  The
Mirage sub-package is the one which links to the Mirage networking
library, and is different from the UNIX one (which would use syscalls
instead of direct library calls to the Mirage networking stack).

cheers
Anil

On Mon, Dec 24, 2012 at 03:49:21PM -0000, Yiming Zhang wrote:
> Anil,
> 
> Thanks for your help. I have successfully run the "hello" example in Xen. 
> 
> About mirage-www, I disabled the "Target" line and oasis works fine.
> However, when I make mirage-www in 4.00.1+mirage-xen, it said "ocamlfind:
> Package `cohttp.mirage' not found". This is strange because I have done the
> same thing in 4.00.1+annot. I ran "ocamlfind query cohttp.mirage" in both
> systems, and got different results (shown below). Is it a bug for cohttp in
> 4.00.1+mirage-xen?
> 
> In 4.00.1+mirage-xen:
> root@zym:~# ocamlfind query cohttp.mirage
> ocamlfind: Package `cohttp.mirage' not found
> root@zym:~# ocamlfind query cohttp
> /root/.opam/4.00.1+mirage-xen/lib/cohttp
> 
> In 4.00.1+annot:
> root@zym:~# ocamlfind query cohttp.mirage
> /root/.opam/4.00.1+annot/lib/cohttp
> root@zym:~# ocamlfind query cohttp
> /root/.opam/4.00.1+annot/lib/cohttp
> 
> I tried to work around it by changing "cohttp.mirage" to "cohttp" in _oasis,
> but unfortunately another problem occurred: "Error: Unbound module
> Cohttp_lwt_mirage". 
> 
> Merry Christmas!
> Yiming
> 
> -----????????-----
> ??????: Anil Madhavapeddy [mailto:anil@recoil.org] 
> ????????: 2012??12??24?? 2:18
> ??????: Yiming Zhang
> ????: cl-mirage@lists.cam.ac.uk
> ????: Re: oasis setup error for xen
> 
> Hi Yiming,
> 
> The OASIS setup isn't needed as the files that are autogenerated are also
> checked in, so it should compile straight from a checkout.  However, read on
> to find out more...
> 
> The OASIS in question is actually a patched version that supports the
> 'Executable: xen' target, from github.com/avsm/oasis (add-xen branch).
> We're currently upstreaming only a portion of this patch:
> https://github.com/ocaml/oasis/pull/7
> 
> ...which is sufficient to output a standalone native object file. This uses
> the -output-obj facility of the OCaml compiler to link all the OCaml modules
> into one native code blob, but to not output a final binary.  This lets us
> do the final link under more controlled conditions.
> 
> Recent versions of mirage-platform then bring back the `mir-build` script,
> which converts the native object file into a Xen microkernel.  This two-step
> process makes it far easier to incorporate other backends such as the
> kFreeBSD target in the future.
> 
> The 'hello world' Mirage skeleton is in:
> http://github.com/mirage/mirage-skeleton
> 
> I'm assembling a bit more detail in the README there (and hopefully Jon
> Ludlam will commit a suspend/resume-aware version into that repository after
> the holidays too).  Once these new scripts settle down and the OASIS patch
> is upstreamed, I'll sync mirage-www with it.
> 
> -anil
> 
> On 22 Dec 2012, at 21:23, Yiming Zhang <sdiris@gmail.com> wrote:
> 
> > Dear all,
> >  
> > I am trying to compile mirage-www for running directly in xen. However,
> when I run ??oasis setup?? (I guess it is needed), I got the following
> error:
> >  
> > root@zym:~/src/mirage-www/src# oasis setup
> > E: Field Target is not defined in schema Executable
> >  
> > I checked the _oasis file and found one line:
> > Target:             xen
> >  
> > But it seems oasis doesn??t support the ??Target?? field. Anyone knows the
> problem?
> >  
> > Thanks!
> > Yiming
> 

-- 
Anil Madhavapeddy                                 http://anil.recoil.org


From anil@recoil.org Thu Jan 03 11:07:15 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Tqidn-0006Do-SP (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 03 Jan 2013 11:07:15 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1427706
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:19805
	helo=dark.recoil.org)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1Tqidm-0003xx-X8 (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 03 Jan 2013 11:07:15 +0000
Received: (qmail 21437 invoked by uid 634); 3 Jan 2013 11:07: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 [10.0.0.83]) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Thu, 03 Jan 2013 11:07:13 +0000
From: Anil Madhavapeddy <anil@recoil.org>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
Subject: data structure lockin
Message-Id: <9179FFE3-4CF3-4F06-BC65-7FAC7B146621@recoil.org>
Date: Thu, 3 Jan 2013 11:07:13 +0000
To: "<cl-mirage@lists.cam.ac.uk> List" <cl-mirage@lists.cam.ac.uk>
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
X-Mailer: Apple Mail (2.1499)
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: Thu, 03 Jan 2013 11:07:16 -0000
Content-Length: 1291
Lines: 33

There's a great talk by Dan Bernstein about data structure lockin that's=20=

worth reading through here:
http://cr.yp.to/talks/2012.10.22/slides.pdf

> Inadequate modularization has locked us into many bad
> data-structure decisions.
>=20
> =93We propose instead that one begins with a list of difficult
> design decisions or design decisions which are likely to
> change. Each module is then designed to hide such a decision
> from the others.=94
>
> =97David L. Parnas, =93On the criteria to be used in decomposing
> systems into modules,=94 1972

Modules are one area where OCaml rules supreme, but our libraries
are currently only sporadically functorised across data structures.
This is primarily because polymorphic hashtables are quick and
easy, but luckily refactoring them is also quite easy. Something
I've been thinking about is to build a quick-test system for
stressing data structures in interesting ways, in order to expose
weaknesses such as hash collision denial-of-service attacks well
in advance of anything actually being deployed.

See this for another excellent blog post about similar model-checking
approaches to the problem, but this time for distributed systems:
=
http://blog.incubaid.com/2012/10/25/caulking-your-distributed-algorithm-im=
plementation/

-anil=


From anil@recoil.org Sun Jan 06 18:44:05 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TrvCX-00039s-1x (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Sun, 06 Jan 2013 18:44:05 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1428749
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:34264
	helo=dark.recoil.org)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1TrvCW-0000HH-YJ (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Sun, 06 Jan 2013 18:44:04 +0000
Received: (qmail 7465 invoked by uid 634); 6 Jan 2013 18:44:03 -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.38]) (86.30.244.239)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Sun, 06 Jan 2013 18:44:03 +0000
From: Anil Madhavapeddy <anil@recoil.org>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Subject: ocplib+endian improvement
Message-Id: <DA72A35B-E982-4BDA-BC6B-E5029570AD58@recoil.org>
Date: Sun, 6 Jan 2013 18:44:02 +0000
To: "<cl-mirage@lists.cam.ac.uk> List" <cl-mirage@lists.cam.ac.uk>
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
X-Mailer: Apple Mail (2.1499)
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: Sun, 06 Jan 2013 18:44:05 -0000
Content-Length: 1204
Lines: 29

I've been porting the network stack to take advantage of the cstruct =
turbo-boost that Pierre and Thomas worked on. This optimisation adds =
compiler built-ins (in 4.01.0+) which let the code generator optimise =
away many of the temporary values required for low-level optimisation.

Here's a (very quick) before/after for a ping flood (which is a good =
stress test of the low-level shared ring, network driver and protocol =
stack).

For a ping flood With 4.00.1 without the optimisation:
73755 packets transmitted, 73702 received, +49 duplicates, 0% packet =
loss, time 6283ms
rtt min/avg/max/mdev =3D 0.031/0.228/1209.178/9.887 ms, pipe 14850, =
ipg/ewma 0.085/0.036 ms                                                  =
                                       =20

and with the optimisation:
41791 packets transmitted, 41764 received, +25 duplicates, 0% packet =
loss, time 3539msrtt min/avg/max/mdev =3D 0.030/0.188/1261.042/8.459 ms, =
pipe 14742, ipg/ewma 0.084/0.039 ms

So our average latency drops quite significantly (0.228 -> 0.188), as =
does CPU load (not shown above).

I've not committed these changes to the mainstream yet until I test out =
TCP more, but it's getting there!

-anil=


From anil@recoil.org Sun Jan 06 21:08:22 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TrxS9-0004a7-V8 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Sun, 06 Jan 2013 21:08:21 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1428749
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:46568
	helo=dark.recoil.org)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1TrxS9-0001Ca-nl (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Sun, 06 Jan 2013 21:08:21 +0000
Received: (qmail 6435 invoked by uid 634); 6 Jan 2013 21:08:21 -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.38]) (86.30.244.239)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Sun, 06 Jan 2013 21:08:20 +0000
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
Subject: Re: ocplib+endian improvement
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <DA72A35B-E982-4BDA-BC6B-E5029570AD58@recoil.org>
Date: Sun, 6 Jan 2013 21:08:18 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <15E1F28F-F06B-477E-B243-C48765D8E1DD@recoil.org>
References: <DA72A35B-E982-4BDA-BC6B-E5029570AD58@recoil.org>
To: "<cl-mirage@lists.cam.ac.uk> List" <cl-mirage@lists.cam.ac.uk>
X-Mailer: Apple Mail (2.1499)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: Steven Smith <steven.smith@cl.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: Sun, 06 Jan 2013 21:08:22 -0000
Content-Length: 6178
Lines: 128

Hm, but trying out TCP seems to trigger a softlockup in Xen netback =
(both kernels 3.2 and latest 3.7). Will need to do some more debugging =
tomorrow...

Steven (Smith): any luck with the grant-free netback modification?  I =
could try it out at the same time as debugging this particular issue.

-anil

[  277.249069] Code: 00 89 c1 7c c8 41 59 c3 90 90 90 65 c6 04 25 41 b1 =
00 00 00 65 f6 04 25 40 b1 00 00 ff 74 05 e8 47 00 00 00 c3 66 0f 1f 44 =
00 00 <65> c6 04 25 41 b1 00 00 01 c3 66 0f 1f 44 00 00 65 f6 04 25 41=20=

[  305.248782] BUG: soft lockup - CPU#0 stuck for 23s! [netback/0:3772]
[  305.248883] Modules linked in: xt_physdev iptable_filter ip_tables =
x_tables xen_netback xen_gntdev xen_evtchn xenfs xen_privcmd nfsd =
auth_rpcgss nfs_acl nfs lockd dns_resolver fscache sunrpc bridge stp llc =
loop crc32c_intel ghash_clmulni_intel aesni_intel aes_x86_64 ablk_helper =
cryptd xts lrw gf128mul snd_pcm sp5100_tco snd_page_alloc snd_timer snd =
soundcore tpm_tis tpm amd64_edac_mod edac_mce_amd i2c_piix4 i2c_core =
dcdbas evdev pcspkr tpm_bios edac_core microcode psmouse fam15h_power =
k10temp serio_raw acpi_power_meter button processor thermal_sys ext4 =
crc16 jbd2 mbcache dm_mod sg sd_mod crc_t10dif ata_generic ohci_hcd =
pata_atiixp ixgbe ahci ptp libahci pps_core libata ehci_hcd dca mdio =
scsi_mod bnx2 usbcore usb_common
[  305.248932] CPU 0=20
[  305.248934] Pid: 3772, comm: netback/0 Tainted: G        W    =
3.7-trunk-amd64 #1 Debian 3.7.1-1~experimental.2 Dell Inc. PowerEdge =
R415/08WNM9
[  305.248936] RIP: e030:[<ffffffffa021c153>]  [<ffffffffa021c153>] =
xen_netbk_tx_build_gops+0x19d/0x7ad [xen_netback]
[  305.248941] RSP: e02b:ffff88020eba3ca8  EFLAGS: 00000217
[  305.248943] RAX: 0000000073202626 RBX: ffffc90007ab5000 RCX: =
000000001ce71e08
[  305.248945] RDX: 000000001ce71e08 RSI: ffffc90007ab02a8 RDI: =
ffff880653403800
[  305.248946] RBP: ffffc90007ab70c0 R08: ffff8806534038d8 R09: =
ffff88020eba3c74
[  305.248947] R10: ffffc90007ab0208 R11: ffffc90007ab0208 R12: =
ffff880653403800
[  305.248949] R13: 0000000000007320 R14: 0000000000000000 R15: =
000000000104210e
[  305.248953] FS:  00007f59123a4700(0000) GS:ffff8807ff800000(0000) =
knlGS:0000000000000000
[  305.248955] CS:  e033 DS: 0000 ES: 0000 CR0: 000000008005003b
[  305.248956] CR2: 00007fd7c822b070 CR3: 00000007f2177000 CR4: =
0000000000000660
[  305.248958] DR0: 0000000000000000 DR1: 0000000000000000 DR2: =
0000000000000000
[  305.248960] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: =
0000000000000400
[  305.248961] Process netback/0 (pid: 3772, threadinfo =
ffff88020eba2000, task ffff8807ee921180)
[  305.248963] Stack:
[  305.248964]  ffffffff81004067 ffffffff81004202 1ce71e0800000003 =
ffff8807ee921180
[  305.248968]  ffffc90007ab70c0 ffff8807ff811740 0000000000000000 =
2074706fffff2e2f
[  305.248972]  ffff4f2073202626 2074706f20646c72 ffffffff810037f7 =
ffff8807ee921180
[  305.248975] Call Trace:
[  305.248978]  [<ffffffff81004067>] ? arch_local_irq_restore+0x7/0x8
[  305.248982]  [<ffffffff81004202>] ? xen_mc_flush+0x11d/0x160
[  305.248985]  [<ffffffff810037f7>] ? =
xen_mc_issue.constprop.22+0x10/0x4d
[  305.248988]  [<ffffffff8100d02f>] ? load_TLS+0x7/0xa
[  305.248991]  [<ffffffff8100d60c>] ? __switch_to+0x195/0x3f8
[  305.248994]  [<ffffffff8105fadb>] ? mmdrop+0xd/0x1c
[  305.248996]  [<ffffffff81061390>] ? finish_task_switch+0x83/0xb4
[  305.249000]  [<ffffffff813778e9>] ? __schedule+0x4b2/0x4e0
[  305.249003]  [<ffffffff8107f0d3>] ? arch_local_irq_disable+0x7/0x8
[  305.249006]  [<ffffffff81378465>] ? _raw_spin_lock_irqsave+0x14/0x35
[  305.249009]  [<ffffffff8107f0d3>] ? arch_local_irq_disable+0x7/0x8
[  305.249012]  [<ffffffff81378465>] ? _raw_spin_lock_irqsave+0x14/0x35
[  305.249016]  [<ffffffffa021c897>] ? xen_netbk_kthread+0x134/0x78d =
[xen_netback]
[  305.249019]  [<ffffffff8105d78f>] ? arch_local_irq_enable+0x7/0x8
[  305.249022]  [<ffffffff81061357>] ? finish_task_switch+0x4a/0xb4
[  305.249025]  [<ffffffff81057987>] ? abort_exclusive_wait+0x79/0x79
[  305.249029]  [<ffffffffa021c763>] ? =
xen_netbk_tx_build_gops+0x7ad/0x7ad [xen_netback]
[  305.249032]  [<ffffffffa021c763>] ? =
xen_netbk_tx_build_gops+0x7ad/0x7ad [xen_netback]
[  305.249035]  [<ffffffff810570ac>] ? kthread+0x81/0x89
[  305.249038]  [<ffffffff810037f7>] ? =
xen_mc_issue.constprop.22+0x10/0x4d
[  305.249041]  [<ffffffff8105702b>] ? __kthread_parkme+0x5c/0x5c
[  305.249043]  [<ffffffff8137d6bc>] ? ret_from_fork+0x7c/0xb0
[  305.249046]  [<ffffffff8105702b>] ? __kthread_parkme+0x5c/0x5c
[  305.249048] Code: bc 24 80 00 00 00 4d 89 a4 24 a8 00 00 00 49 c7 84 =
24 a0 00 00 00 58 bf 21 a0 4c 89 f6 e8 86 d9 e2 e0 e9 c3 05 00 00 8b 54 =
24 14 <66> 8b 74 24 3e 41 8d 4f ff 0f b7 44 24 42 48 c7 44 24 30 00 00=20=

avsm@gabriel:~/src/git/mirage/mirage-www$=20
Message from syslogd@gabriel at Jan  6 21:06:38 ...

On 6 Jan 2013, at 18:44, Anil Madhavapeddy <anil@recoil.org> wrote:

> I've been porting the network stack to take advantage of the cstruct =
turbo-boost that Pierre and Thomas worked on. This optimisation adds =
compiler built-ins (in 4.01.0+) which let the code generator optimise =
away many of the temporary values required for low-level optimisation.
>=20
> Here's a (very quick) before/after for a ping flood (which is a good =
stress test of the low-level shared ring, network driver and protocol =
stack).
>=20
> For a ping flood With 4.00.1 without the optimisation:
> 73755 packets transmitted, 73702 received, +49 duplicates, 0% packet =
loss, time 6283ms
> rtt min/avg/max/mdev =3D 0.031/0.228/1209.178/9.887 ms, pipe 14850, =
ipg/ewma 0.085/0.036 ms                                                  =
                                       =20
>=20
> and with the optimisation:
> 41791 packets transmitted, 41764 received, +25 duplicates, 0% packet =
loss, time 3539msrtt min/avg/max/mdev =3D 0.030/0.188/1261.042/8.459 ms, =
pipe 14742, ipg/ewma 0.084/0.039 ms
>=20
> So our average latency drops quite significantly (0.228 -> 0.188), as =
does CPU load (not shown above).
>=20
> I've not committed these changes to the mainstream yet until I test =
out TCP more, but it's getting there!
>=20
> -anil



From sos22@hermes.cam.ac.uk Tue Jan 08 12:01:39 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TsXsB-00040z-Hj (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <sos22@hermes.cam.ac.uk>); Tue, 08 Jan 2013 12:01:39 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1428749
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:30168
	helo=dark.recoil.org)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with smtp id 1TsXsA-0000pi-qe (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <sos22@hermes.cam.ac.uk>); Tue, 08 Jan 2013 12:01:39 +0000
Received: (qmail 11146 invoked by uid 10000); 8 Jan 2013 12:01:38 -0000
Resent-From: Anil Madhavapeddy <anil@recoil.org>
Resent-Date: Tue, 8 Jan 2013 12:01:38 +0000
Resent-Message-ID: <20130108120138.GA17262@dark.recoil.org>
Resent-To: cl-mirage@lists.cam.ac.uk
Delivered-To: avsm@dark.recoil.org
Received: (qmail 12010 invoked by uid 2901); 7 Jan 2013 15:38:42 -0000
Delivered-To: virtual-recoil-anil@recoil.org
Received: (qmail 3296 invoked by uid 634); 7 Jan 2013 15:38:41 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-2.3 required=5.0
	tests=RCVD_IN_DNSWL_MED,T_RP_MATCHES_RCVD
X-Spam-Check-By: dark.recoil.org
Received: from ppsw-51.csi.cam.ac.uk (HELO ppsw-51.csi.cam.ac.uk)
	(131.111.8.151) by dark.recoil.org (qpsmtpd/0.84) with ESMTP;
	Mon, 07 Jan 2013 15:38:40 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: not scanned
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from host217-42-60-158.range217-42.btcentralplus.com
	([217.42.60.158]:56504 helo=localhost)
	by ppsw-51.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.158]:465)
	with esmtpsa (LOGIN:sos22) (TLSv1:DHE-RSA-AES256-SHA:256)
	id 1TsEmc-0005Sv-Y1 (Exim 4.72)
	(return-path <sos22@hermes.cam.ac.uk>); Mon, 07 Jan 2013 15:38:38 +0000
Date: Mon, 7 Jan 2013 15:08:51 +0000
From: Steven Smith <sos22@srcf.ucam.org>
To: Anil Madhavapeddy <anil@recoil.org>
Subject: Re: Fwd: ocplib+endian improvement
Message-ID: <20130107150851.GA6739@sonofmaas>
References: <15E1F28F-F06B-477E-B243-C48765D8E1DD@recoil.org>
	<B6BA7091-9587-4DAF-8566-77A4988181EB@recoil.org>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="XsQoSWH+UP9D9v3l"
Content-Disposition: inline
In-Reply-To: <B6BA7091-9587-4DAF-8566-77A4988181EB@recoil.org>
Sender: Steven Smith <sos22@hermes.cam.ac.uk>
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
X-DSPAM-Result: Whitelisted
X-DSPAM-Processed: Mon Jan  7 15:40:34 2013
X-DSPAM-Confidence: 0.9983
X-DSPAM-Probability: 0.0000
X-DSPAM-Signature: 50eaec72272165067410191
Cc: Steven Smith <steven.smith@cl.cam.ac.uk>, sos22@srcf.ucam.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, 08 Jan 2013 12:01:39 -0000
Content-Length: 13791
Lines: 312


--XsQoSWH+UP9D9v3l
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Right.  So I'm going to stop looking at this now.  I'd like to say
that's because I've fixed it and everything's fine, but, actually,
it's because the BMC on my test box has failed and I can't find any
other machines which are in a usable state.  Pretty much the only
concrete thing which I've found is that the ring indices in the shared
page are corrupted, with what looks like ASCII; not sure if that helps
you at all.

> [   39.830497] <0>In xen_netbk_tx_build_gops; done 95000 iterations so far
> [   39.837138] <0>nr_pending_reqs 0
> [   39.840485] <0>Ring status: rsp_prod_pvt 24cda, req_cons 238da
> [   39.846437] <0>Shared: req_prod 75422121, req_event 69646c69, rsp_prod 24cda, rsp_event 6c6d6143

Decode indices as ascii:

75422121 -> uB!!   !!Bu
69646c69 -> idli   ildi
6c6d6143 -> lmaC   Caml

Which could plausibly be fragments of strings which might be present
in an ocaml program, but it's not really terribly convincing.

I do have a patch which might at least stop the bug from taking down
dom0, which I've attached, but I've not been able to test it all.

So that's not desperately helpful, really.  Sorry about that.

Steven.



> http://www.recoil.org/~avsm/www-crashes-pvops.xen is the offending kernel, which always gives me the traceback below when booted using xm (on Xen 4.1, either dom0 kernel of 3.2 or 3.7)... can you repro on your setup?  You have to provide one VIF.
> 
> -anil
> 
> Begin forwarded message:
> 
> > From: Anil Madhavapeddy <anil@recoil.org>
> > Subject: Re: ocplib+endian improvement
> > Date: 6 January 2013 21:08:18 GMT
> > To: "<cl-mirage@lists.cam.ac.uk> List" <cl-mirage@lists.cam.ac.uk>
> > Cc: Steven Smith <steven.smith@cl.cam.ac.uk>
> > 
> > Hm, but trying out TCP seems to trigger a softlockup in Xen netback (both kernels 3.2 and latest 3.7). Will need to do some more debugging tomorrow...
> > 
> > Steven (Smith): any luck with the grant-free netback modification?  I could try it out at the same time as debugging this particular issue.
> > 
> > -anil
> > 
> > [  277.249069] Code: 00 89 c1 7c c8 41 59 c3 90 90 90 65 c6 04 25 41 b1 00 00 00 65 f6 04 25 40 b1 00 00 ff 74 05 e8 47 00 00 00 c3 66 0f 1f 44 00 00 <65> c6 04 25 41 b1 00 00 01 c3 66 0f 1f 44 00 00 65 f6 04 25 41 
> > [  305.248782] BUG: soft lockup - CPU#0 stuck for 23s! [netback/0:3772]
> > [  305.248883] Modules linked in: xt_physdev iptable_filter ip_tables x_tables xen_netback xen_gntdev xen_evtchn xenfs xen_privcmd nfsd auth_rpcgss nfs_acl nfs lockd dns_resolver fscache sunrpc bridge stp llc loop crc32c_intel ghash_clmulni_intel aesni_intel aes_x86_64 ablk_helper cryptd xts lrw gf128mul snd_pcm sp5100_tco snd_page_alloc snd_timer snd soundcore tpm_tis tpm amd64_edac_mod edac_mce_amd i2c_piix4 i2c_core dcdbas evdev pcspkr tpm_bios edac_core microcode psmouse fam15h_power k10temp serio_raw acpi_power_meter button processor thermal_sys ext4 crc16 jbd2 mbcache dm_mod sg sd_mod crc_t10dif ata_generic ohci_hcd pata_atiixp ixgbe ahci ptp libahci pps_core libata ehci_hcd dca mdio scsi_mod bnx2 usbcore usb_common
> > [  305.248932] CPU 0 
> > [  305.248934] Pid: 3772, comm: netback/0 Tainted: G        W    3.7-trunk-amd64 #1 Debian 3.7.1-1~experimental.2 Dell Inc. PowerEdge R415/08WNM9
> > [  305.248936] RIP: e030:[<ffffffffa021c153>]  [<ffffffffa021c153>] xen_netbk_tx_build_gops+0x19d/0x7ad [xen_netback]
> > [  305.248941] RSP: e02b:ffff88020eba3ca8  EFLAGS: 00000217
> > [  305.248943] RAX: 0000000073202626 RBX: ffffc90007ab5000 RCX: 000000001ce71e08
> > [  305.248945] RDX: 000000001ce71e08 RSI: ffffc90007ab02a8 RDI: ffff880653403800
> > [  305.248946] RBP: ffffc90007ab70c0 R08: ffff8806534038d8 R09: ffff88020eba3c74
> > [  305.248947] R10: ffffc90007ab0208 R11: ffffc90007ab0208 R12: ffff880653403800
> > [  305.248949] R13: 0000000000007320 R14: 0000000000000000 R15: 000000000104210e
> > [  305.248953] FS:  00007f59123a4700(0000) GS:ffff8807ff800000(0000) knlGS:0000000000000000
> > [  305.248955] CS:  e033 DS: 0000 ES: 0000 CR0: 000000008005003b
> > [  305.248956] CR2: 00007fd7c822b070 CR3: 00000007f2177000 CR4: 0000000000000660
> > [  305.248958] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> > [  305.248960] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
> > [  305.248961] Process netback/0 (pid: 3772, threadinfo ffff88020eba2000, task ffff8807ee921180)
> > [  305.248963] Stack:
> > [  305.248964]  ffffffff81004067 ffffffff81004202 1ce71e0800000003 ffff8807ee921180
> > [  305.248968]  ffffc90007ab70c0 ffff8807ff811740 0000000000000000 2074706fffff2e2f
> > [  305.248972]  ffff4f2073202626 2074706f20646c72 ffffffff810037f7 ffff8807ee921180
> > [  305.248975] Call Trace:
> > [  305.248978]  [<ffffffff81004067>] ? arch_local_irq_restore+0x7/0x8
> > [  305.248982]  [<ffffffff81004202>] ? xen_mc_flush+0x11d/0x160
> > [  305.248985]  [<ffffffff810037f7>] ? xen_mc_issue.constprop.22+0x10/0x4d
> > [  305.248988]  [<ffffffff8100d02f>] ? load_TLS+0x7/0xa
> > [  305.248991]  [<ffffffff8100d60c>] ? __switch_to+0x195/0x3f8
> > [  305.248994]  [<ffffffff8105fadb>] ? mmdrop+0xd/0x1c
> > [  305.248996]  [<ffffffff81061390>] ? finish_task_switch+0x83/0xb4
> > [  305.249000]  [<ffffffff813778e9>] ? __schedule+0x4b2/0x4e0
> > [  305.249003]  [<ffffffff8107f0d3>] ? arch_local_irq_disable+0x7/0x8
> > [  305.249006]  [<ffffffff81378465>] ? _raw_spin_lock_irqsave+0x14/0x35
> > [  305.249009]  [<ffffffff8107f0d3>] ? arch_local_irq_disable+0x7/0x8
> > [  305.249012]  [<ffffffff81378465>] ? _raw_spin_lock_irqsave+0x14/0x35
> > [  305.249016]  [<ffffffffa021c897>] ? xen_netbk_kthread+0x134/0x78d [xen_netback]
> > [  305.249019]  [<ffffffff8105d78f>] ? arch_local_irq_enable+0x7/0x8
> > [  305.249022]  [<ffffffff81061357>] ? finish_task_switch+0x4a/0xb4
> > [  305.249025]  [<ffffffff81057987>] ? abort_exclusive_wait+0x79/0x79
> > [  305.249029]  [<ffffffffa021c763>] ? xen_netbk_tx_build_gops+0x7ad/0x7ad [xen_netback]
> > [  305.249032]  [<ffffffffa021c763>] ? xen_netbk_tx_build_gops+0x7ad/0x7ad [xen_netback]
> > [  305.249035]  [<ffffffff810570ac>] ? kthread+0x81/0x89
> > [  305.249038]  [<ffffffff810037f7>] ? xen_mc_issue.constprop.22+0x10/0x4d
> > [  305.249041]  [<ffffffff8105702b>] ? __kthread_parkme+0x5c/0x5c
> > [  305.249043]  [<ffffffff8137d6bc>] ? ret_from_fork+0x7c/0xb0
> > [  305.249046]  [<ffffffff8105702b>] ? __kthread_parkme+0x5c/0x5c
> > [  305.249048] Code: bc 24 80 00 00 00 4d 89 a4 24 a8 00 00 00 49 c7 84 24 a0 00 00 00 58 bf 21 a0 4c 89 f6 e8 86 d9 e2 e0 e9 c3 05 00 00 8b 54 24 14 <66> 8b 74 24 3e 41 8d 4f ff 0f b7 44 24 42 48 c7 44 24 30 00 00 
> > avsm@gabriel:~/src/git/mirage/mirage-www$ 
> > Message from syslogd@gabriel at Jan  6 21:06:38 ...
> > 
> > On 6 Jan 2013, at 18:44, Anil Madhavapeddy <anil@recoil.org> wrote:
> > 
> >> I've been porting the network stack to take advantage of the cstruct turbo-boost that Pierre and Thomas worked on. This optimisation adds compiler built-ins (in 4.01.0+) which let the code generator optimise away many of the temporary values required for low-level optimisation.
> >> 
> >> Here's a (very quick) before/after for a ping flood (which is a good stress test of the low-level shared ring, network driver and protocol stack).
> >> 
> >> For a ping flood With 4.00.1 without the optimisation:
> >> 73755 packets transmitted, 73702 received, +49 duplicates, 0% packet loss, time 6283ms
> >> rtt min/avg/max/mdev = 0.031/0.228/1209.178/9.887 ms, pipe 14850, ipg/ewma 0.085/0.036 ms                                                                                          
> >> 
> >> and with the optimisation:
> >> 41791 packets transmitted, 41764 received, +25 duplicates, 0% packet loss, time 3539msrtt min/avg/max/mdev = 0.030/0.188/1261.042/8.459 ms, pipe 14742, ipg/ewma 0.084/0.039 ms
> >> 
> >> So our average latency drops quite significantly (0.228 -> 0.188), as does CPU load (not shown above).
> >> 
> >> I've not committed these changes to the mainstream yet until I test out TCP more, but it's getting there!
> >> 
> >> -anil
> > 
> > 
> 

--XsQoSWH+UP9D9v3l
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="netback-deadlock.diff"

diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
index 3f27707..1a6f816 100644
--- a/drivers/net/xen-netback/netback.c
+++ b/drivers/net/xen-netback/netback.c
@@ -776,8 +776,7 @@ static struct xenvif *poll_net_schedule_list(struct xen_netbk *netbk)
 
 	vif = list_first_entry(&netbk->net_schedule_list,
 			       struct xenvif, schedule_list);
-	if (!vif)
-		goto out;
+	BUG_ON(!vif);
 
 	xenvif_get(vif);
 
@@ -857,7 +856,9 @@ static void tx_credit_callback(unsigned long data)
 }
 
 static void netbk_tx_err(struct xenvif *vif,
-			 struct xen_netif_tx_request *txp, RING_IDX end)
+			 struct xen_netif_tx_request *txp,
+			 RING_IDX end,
+			 int fatal)
 {
 	RING_IDX cons = vif->tx.req_cons;
 
@@ -868,8 +869,15 @@ static void netbk_tx_err(struct xenvif *vif,
 		txp = RING_GET_REQUEST(&vif->tx, cons++);
 	} while (1);
 	vif->tx.req_cons = cons;
-	xen_netbk_check_rx_xenvif(vif);
+	if (!fatal) {
+		/* If this is a fatal error then we don't need to poll
+		   the device again (and doing so might lead to some
+		   quite bad behaviour if the ring structure has
+		   become corrupted in some way). */
+		xen_netbk_check_rx_xenvif(vif);
+	}
 	xenvif_put(vif);
+
 }
 
 static int netbk_count_requests(struct xenvif *vif,
@@ -1232,7 +1240,9 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
 	struct gnttab_copy *gop = netbk->tx_copy_ops, *request_gop;
 	struct sk_buff *skb;
 	int ret;
+	int cntr;
 
+	cntr = 0;
 	while (((nr_pending_reqs(netbk) + MAX_SKB_FRAGS) < MAX_PENDING_REQS) &&
 		!list_empty(&netbk->net_schedule_list)) {
 		struct xenvif *vif;
@@ -1245,15 +1255,43 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
 		int work_to_do;
 		unsigned int data_len;
 		pending_ring_idx_t index;
+		int loud;
+
+		cntr++;
+		loud = 0;
+		if (cntr % 1000 == 0) {
+			printk("<0>In xen_netbk_tx_build_gops; done %d iterations so far\n",
+			       cntr);
+			printk("<0>nr_pending_reqs %d\n",
+			       nr_pending_reqs(netbk));
+			loud = 1;
+		}
 
 		/* Get a netif from the list with work to do. */
 		vif = poll_net_schedule_list(netbk);
-		if (!vif)
+		if (!vif) {
+			/* This can sometimes happen because the test
+			   of list_empty(net_schedule_list) at the top
+			   of the loop is unlocked.  Just go back and
+			   have another look. */
+			printk("<0>No vif, keep going\n");
 			continue;
+		}
+
+		if (loud) {
+			printk("<0>Ring status: rsp_prod_pvt %x, req_cons %x\n",
+			       vif->tx.rsp_prod_pvt, vif->tx.req_cons);
+			printk("<0>Shared: req_prod %x, req_event %x, rsp_prod %x, rsp_event %x\n",
+			       vif->tx.sring->req_prod,
+			       vif->tx.sring->req_event,
+			       vif->tx.sring->rsp_prod,
+			       vif->tx.sring->rsp_event);
+		}
 
 		RING_FINAL_CHECK_FOR_REQUESTS(&vif->tx, work_to_do);
 		if (!work_to_do) {
 			xenvif_put(vif);
+			printk("<0>No work on %p\n", vif);
 			continue;
 		}
 
@@ -1264,6 +1302,7 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
 		/* Credit-based scheduling. */
 		if (txreq.size > vif->remaining_credit &&
 		    tx_credit_exceeded(vif, txreq.size)) {
+			printk("<0>Stopped by credit scheduler\n");
 			xenvif_put(vif);
 			continue;
 		}
@@ -1279,14 +1318,14 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
 							  work_to_do);
 			idx = vif->tx.req_cons;
 			if (unlikely(work_to_do < 0)) {
-				netbk_tx_err(vif, &txreq, idx);
+				netbk_tx_err(vif, &txreq, idx, 1);
 				continue;
 			}
 		}
 
 		ret = netbk_count_requests(vif, &txreq, txfrags, work_to_do);
 		if (unlikely(ret < 0)) {
-			netbk_tx_err(vif, &txreq, idx - ret);
+			netbk_tx_err(vif, &txreq, idx - ret, 1);
 			continue;
 		}
 		idx += ret;
@@ -1294,7 +1333,7 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
 		if (unlikely(txreq.size < ETH_HLEN)) {
 			netdev_dbg(vif->dev,
 				   "Bad packet size: %d\n", txreq.size);
-			netbk_tx_err(vif, &txreq, idx);
+			netbk_tx_err(vif, &txreq, idx, 1);
 			continue;
 		}
 
@@ -1304,7 +1343,7 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
 				   "txreq.offset: %x, size: %u, end: %lu\n",
 				   txreq.offset, txreq.size,
 				   (txreq.offset&~PAGE_MASK) + txreq.size);
-			netbk_tx_err(vif, &txreq, idx);
+			netbk_tx_err(vif, &txreq, idx, 1);
 			continue;
 		}
 
@@ -1320,7 +1359,7 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
 		if (unlikely(skb == NULL)) {
 			netdev_dbg(vif->dev,
 				   "Can't allocate a skb in start_xmit.\n");
-			netbk_tx_err(vif, &txreq, idx);
+			netbk_tx_err(vif, &txreq, idx, 0);
 			break;
 		}
 
@@ -1333,7 +1372,8 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
 
 			if (netbk_set_skb_gso(vif, skb, gso)) {
 				kfree_skb(skb);
-				netbk_tx_err(vif, &txreq, idx);
+				netbk_tx_err(vif, &txreq, idx, 1);
+				printk("<0>Killed by netbk_set_skb_gso\n");
 				continue;
 			}
 		}
@@ -1342,7 +1382,8 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
 		page = xen_netbk_alloc_page(netbk, skb, pending_idx);
 		if (!page) {
 			kfree_skb(skb);
-			netbk_tx_err(vif, &txreq, idx);
+			netbk_tx_err(vif, &txreq, idx, 0);
+			printk("<0>No pages for payload?\n");
 			continue;
 		}
 
@@ -1382,7 +1423,7 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
 						     skb, txfrags, gop);
 		if (request_gop == NULL) {
 			kfree_skb(skb);
-			netbk_tx_err(vif, &txreq, idx);
+			netbk_tx_err(vif, &txreq, idx, 0);
 			continue;
 		}
 		gop = request_gop;

--XsQoSWH+UP9D9v3l--



From Richard.Mortier@nottingham.ac.uk Tue Jan 08 06:01:00 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TsSFA-0002Bg-TQ (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Tue, 08 Jan 2013 06:01:00 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1428749 
	* 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]:35476)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1TsSFA-0000ex-nW (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Tue, 08 Jan 2013 06:01:00 +0000
Received: (qmail 9803 invoked from network); 8 Jan 2013 06:00:57 -0000
Received: from localhost (127.0.0.1)
	by engine01-20433-1.icritical.com with SMTP; 8 Jan 2013 06:00:57 -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 05992-10 for <cl-mirage@lists.cam.ac.uk>;
	Tue,  8 Jan 2013 06:00:56 +0000 (GMT)
Received: (qmail 9791 invoked by uid 599); 8 Jan 2013 06:00:55 -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, 08 Jan 2013 06:00:55 +0000
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 1TsSF6-0000FJ-RS
	for cl-mirage@lists.cam.ac.uk; Tue, 08 Jan 2013 06:00:56 +0000
Received: from EXCHANGE1.ad.nottingham.ac.uk ([fe80::7962:f868:e6ee:6267]) by
	UIWEXHUB02.ad.nottingham.ac.uk ([2002:80f3:f84::80f3:f84]) with mapi;
	Tue, 8 Jan 2013 06:00:56 +0000
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Anil Madhavapeddy <anil@recoil.org>
Date: Tue, 8 Jan 2013 06:00:51 +0000
Subject: Re: data structure lockin
Thread-Topic: data structure lockin
Thread-Index: Ac3tZYYDKU5lfo9gTUaFlxQ8T76qQA==
Message-ID: <C96B39E3-E194-4197-A32D-895F3B3B78D6@nottingham.ac.uk>
References: <9179FFE3-4CF3-4F06-BC65-7FAC7B146621@recoil.org>
In-Reply-To: <9179FFE3-4CF3-4F06-BC65-7FAC7B146621@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 engine01-20433-1.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: Tue, 08 Jan 2013 06:01:01 -0000
Content-Length: 1158
Lines: 29


On 3 Jan 2013, at 16:37, Anil Madhavapeddy wrote:

> This is primarily because polymorphic hashtables are quick and
> easy, but luckily refactoring them is also quite easy.=20

fwiw came across the following post describing such refactoring (for unit t=
esting, but hey):

http://mcclurmc.wordpress.com/2012/12/18/ocaml-pattern-easy-functor/

thought it might be of interest to others...


--=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 avsm@dark.recoil.org Tue Jan 08 17:42:38 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TsdCA-0002J7-C2 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <avsm@dark.recoil.org>); Tue, 08 Jan 2013 17:42:38 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1428749 
	*  0.0 FAKE_REPLY_C FAKE_REPLY_C
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:25129
	helo=dark.recoil.org)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1TsdC9-0006Dl-n3 (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <avsm@dark.recoil.org>); Tue, 08 Jan 2013 17:42:38 +0000
Received: (qmail 12223 invoked by uid 10000); 8 Jan 2013 17:42:37 -0000
Date: Tue, 8 Jan 2013 17:42:37 +0000
From: Anil Madhavapeddy <anil@recoil.org>
To: Steven Smith <sos22@srcf.ucam.org>
Subject: Re: Fwd: ocplib+endian improvement
Message-ID: <20130108174237.GC21804@dark.recoil.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.5.21 (2010-09-15)
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, 08 Jan 2013 17:42:38 -0000
Content-Length: 15912
Lines: 332

This turns out to due to a lack of bounds checking, causing a buffer
overflow.  I've re-added the bounds checks into the new cstruct, and now
get a nice exception instead of a crash from the netfront end.  The fact 
that the dom0 crashes is a good case for a Mirage fuzz tester in the
future ;-)

Dave, it seems like the real problem is in xenstore-client somewhere,
according to the backtrace:

x86_mm.c: Demand map pfns at 8001000-2008001000.
gnttab_init: 2047
gnttab_stubs.c: gnttab_table mapped at 0x8001000
Caught: Invalid_argument("index out of bounds")
Called from file "lib/ring.ml", line 306, characters 27-51
Called from file "core/xs_protocol.ml", line 274, characters 6-31
Called from file "client_lwt/xs_client.ml", line 110, characters 30-42
Called from file "src/core/lwt.ml", line 679, characters 20-24

Is this something to do with multipage rings? It seems to read beyond the
actual xenstore page, which is odd...

-anil

> On Mon, Jan 07, 2013 at 03:08:51PM +0000, Steven Smith wrote:
> > Right.  So I'm going to stop looking at this now.  I'd like to say
> > that's because I've fixed it and everything's fine, but, actually,
> > it's because the BMC on my test box has failed and I can't find any
> > other machines which are in a usable state.  Pretty much the only
> > concrete thing which I've found is that the ring indices in the shared
> > page are corrupted, with what looks like ASCII; not sure if that helps
> > you at all.
> > 
> > > [   39.830497] <0>In xen_netbk_tx_build_gops; done 95000 iterations so far
> > > [   39.837138] <0>nr_pending_reqs 0
> > > [   39.840485] <0>Ring status: rsp_prod_pvt 24cda, req_cons 238da
> > > [   39.846437] <0>Shared: req_prod 75422121, req_event 69646c69, rsp_prod 24cda, rsp_event 6c6d6143
> > 
> > Decode indices as ascii:
> > 
> > 75422121 -> uB!!   !!Bu
> > 69646c69 -> idli   ildi
> > 6c6d6143 -> lmaC   Caml
> > 
> > Which could plausibly be fragments of strings which might be present
> > in an ocaml program, but it's not really terribly convincing.
> > 
> > I do have a patch which might at least stop the bug from taking down
> > dom0, which I've attached, but I've not been able to test it all.
> > 
> > So that's not desperately helpful, really.  Sorry about that.
> > 
> > Steven.
> > 
> > 
> > 
> > > http://www.recoil.org/~avsm/www-crashes-pvops.xen is the offending kernel, which always gives me the traceback below when booted using xm (on Xen 4.1, either dom0 kernel of 3.2 or 3.7)... can you repro on your setup?  You have to provide one VIF.
> > > 
> > > -anil
> > > 
> > > Begin forwarded message:
> > > 
> > > > From: Anil Madhavapeddy <anil@recoil.org>
> > > > Subject: Re: ocplib+endian improvement
> > > > Date: 6 January 2013 21:08:18 GMT
> > > > To: "<cl-mirage@lists.cam.ac.uk> List" <cl-mirage@lists.cam.ac.uk>
> > > > Cc: Steven Smith <steven.smith@cl.cam.ac.uk>
> > > > 
> > > > Hm, but trying out TCP seems to trigger a softlockup in Xen netback (both kernels 3.2 and latest 3.7). Will need to do some more debugging tomorrow...
> > > > 
> > > > Steven (Smith): any luck with the grant-free netback modification?  I could try it out at the same time as debugging this particular issue.
> > > > 
> > > > -anil
> > > > 
> > > > [  277.249069] Code: 00 89 c1 7c c8 41 59 c3 90 90 90 65 c6 04 25 41 b1 00 00 00 65 f6 04 25 40 b1 00 00 ff 74 05 e8 47 00 00 00 c3 66 0f 1f 44 00 00 <65> c6 04 25 41 b1 00 00 01 c3 66 0f 1f 44 00 00 65 f6 04 25 41 
> > > > [  305.248782] BUG: soft lockup - CPU#0 stuck for 23s! [netback/0:3772]
> > > > [  305.248883] Modules linked in: xt_physdev iptable_filter ip_tables x_tables xen_netback xen_gntdev xen_evtchn xenfs xen_privcmd nfsd auth_rpcgss nfs_acl nfs lockd dns_resolver fscache sunrpc bridge stp llc loop crc32c_intel ghash_clmulni_intel aesni_intel aes_x86_64 ablk_helper cryptd xts lrw gf128mul snd_pcm sp5100_tco snd_page_alloc snd_timer snd soundcore tpm_tis tpm amd64_edac_mod edac_mce_amd i2c_piix4 i2c_core dcdbas evdev pcspkr tpm_bios edac_core microcode psmouse fam15h_power k10temp serio_raw acpi_power_meter button processor thermal_sys ext4 crc16 jbd2 mbcache dm_mod sg sd_mod crc_t10dif ata_generic ohci_hcd pata_atiixp ixgbe ahci ptp libahci pps_core libata ehci_hcd dca mdio scsi_mod bnx2 usbcore usb_common
> > > > [  305.248932] CPU 0 
> > > > [  305.248934] Pid: 3772, comm: netback/0 Tainted: G        W    3.7-trunk-amd64 #1 Debian 3.7.1-1~experimental.2 Dell Inc. PowerEdge R415/08WNM9
> > > > [  305.248936] RIP: e030:[<ffffffffa021c153>]  [<ffffffffa021c153>] xen_netbk_tx_build_gops+0x19d/0x7ad [xen_netback]
> > > > [  305.248941] RSP: e02b:ffff88020eba3ca8  EFLAGS: 00000217
> > > > [  305.248943] RAX: 0000000073202626 RBX: ffffc90007ab5000 RCX: 000000001ce71e08
> > > > [  305.248945] RDX: 000000001ce71e08 RSI: ffffc90007ab02a8 RDI: ffff880653403800
> > > > [  305.248946] RBP: ffffc90007ab70c0 R08: ffff8806534038d8 R09: ffff88020eba3c74
> > > > [  305.248947] R10: ffffc90007ab0208 R11: ffffc90007ab0208 R12: ffff880653403800
> > > > [  305.248949] R13: 0000000000007320 R14: 0000000000000000 R15: 000000000104210e
> > > > [  305.248953] FS:  00007f59123a4700(0000) GS:ffff8807ff800000(0000) knlGS:0000000000000000
> > > > [  305.248955] CS:  e033 DS: 0000 ES: 0000 CR0: 000000008005003b
> > > > [  305.248956] CR2: 00007fd7c822b070 CR3: 00000007f2177000 CR4: 0000000000000660
> > > > [  305.248958] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> > > > [  305.248960] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
> > > > [  305.248961] Process netback/0 (pid: 3772, threadinfo ffff88020eba2000, task ffff8807ee921180)
> > > > [  305.248963] Stack:
> > > > [  305.248964]  ffffffff81004067 ffffffff81004202 1ce71e0800000003 ffff8807ee921180
> > > > [  305.248968]  ffffc90007ab70c0 ffff8807ff811740 0000000000000000 2074706fffff2e2f
> > > > [  305.248972]  ffff4f2073202626 2074706f20646c72 ffffffff810037f7 ffff8807ee921180
> > > > [  305.248975] Call Trace:
> > > > [  305.248978]  [<ffffffff81004067>] ? arch_local_irq_restore+0x7/0x8
> > > > [  305.248982]  [<ffffffff81004202>] ? xen_mc_flush+0x11d/0x160
> > > > [  305.248985]  [<ffffffff810037f7>] ? xen_mc_issue.constprop.22+0x10/0x4d
> > > > [  305.248988]  [<ffffffff8100d02f>] ? load_TLS+0x7/0xa
> > > > [  305.248991]  [<ffffffff8100d60c>] ? __switch_to+0x195/0x3f8
> > > > [  305.248994]  [<ffffffff8105fadb>] ? mmdrop+0xd/0x1c
> > > > [  305.248996]  [<ffffffff81061390>] ? finish_task_switch+0x83/0xb4
> > > > [  305.249000]  [<ffffffff813778e9>] ? __schedule+0x4b2/0x4e0
> > > > [  305.249003]  [<ffffffff8107f0d3>] ? arch_local_irq_disable+0x7/0x8
> > > > [  305.249006]  [<ffffffff81378465>] ? _raw_spin_lock_irqsave+0x14/0x35
> > > > [  305.249009]  [<ffffffff8107f0d3>] ? arch_local_irq_disable+0x7/0x8
> > > > [  305.249012]  [<ffffffff81378465>] ? _raw_spin_lock_irqsave+0x14/0x35
> > > > [  305.249016]  [<ffffffffa021c897>] ? xen_netbk_kthread+0x134/0x78d [xen_netback]
> > > > [  305.249019]  [<ffffffff8105d78f>] ? arch_local_irq_enable+0x7/0x8
> > > > [  305.249022]  [<ffffffff81061357>] ? finish_task_switch+0x4a/0xb4
> > > > [  305.249025]  [<ffffffff81057987>] ? abort_exclusive_wait+0x79/0x79
> > > > [  305.249029]  [<ffffffffa021c763>] ? xen_netbk_tx_build_gops+0x7ad/0x7ad [xen_netback]
> > > > [  305.249032]  [<ffffffffa021c763>] ? xen_netbk_tx_build_gops+0x7ad/0x7ad [xen_netback]
> > > > [  305.249035]  [<ffffffff810570ac>] ? kthread+0x81/0x89
> > > > [  305.249038]  [<ffffffff810037f7>] ? xen_mc_issue.constprop.22+0x10/0x4d
> > > > [  305.249041]  [<ffffffff8105702b>] ? __kthread_parkme+0x5c/0x5c
> > > > [  305.249043]  [<ffffffff8137d6bc>] ? ret_from_fork+0x7c/0xb0
> > > > [  305.249046]  [<ffffffff8105702b>] ? __kthread_parkme+0x5c/0x5c
> > > > [  305.249048] Code: bc 24 80 00 00 00 4d 89 a4 24 a8 00 00 00 49 c7 84 24 a0 00 00 00 58 bf 21 a0 4c 89 f6 e8 86 d9 e2 e0 e9 c3 05 00 00 8b 54 24 14 <66> 8b 74 24 3e 41 8d 4f ff 0f b7 44 24 42 48 c7 44 24 30 00 00 
> > > > avsm@gabriel:~/src/git/mirage/mirage-www$ 
> > > > Message from syslogd@gabriel at Jan  6 21:06:38 ...
> > > > 
> > > > On 6 Jan 2013, at 18:44, Anil Madhavapeddy <anil@recoil.org> wrote:
> > > > 
> > > >> I've been porting the network stack to take advantage of the cstruct turbo-boost that Pierre and Thomas worked on. This optimisation adds compiler built-ins (in 4.01.0+) which let the code generator optimise away many of the temporary values required for low-level optimisation.
> > > >> 
> > > >> Here's a (very quick) before/after for a ping flood (which is a good stress test of the low-level shared ring, network driver and protocol stack).
> > > >> 
> > > >> For a ping flood With 4.00.1 without the optimisation:
> > > >> 73755 packets transmitted, 73702 received, +49 duplicates, 0% packet loss, time 6283ms
> > > >> rtt min/avg/max/mdev = 0.031/0.228/1209.178/9.887 ms, pipe 14850, ipg/ewma 0.085/0.036 ms                                                                                          
> > > >> 
> > > >> and with the optimisation:
> > > >> 41791 packets transmitted, 41764 received, +25 duplicates, 0% packet loss, time 3539msrtt min/avg/max/mdev = 0.030/0.188/1261.042/8.459 ms, pipe 14742, ipg/ewma 0.084/0.039 ms
> > > >> 
> > > >> So our average latency drops quite significantly (0.228 -> 0.188), as does CPU load (not shown above).
> > > >> 
> > > >> I've not committed these changes to the mainstream yet until I test out TCP more, but it's getting there!
> > > >> 
> > > >> -anil
> > > > 
> > > > 
> > > 
> 
> > diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
> > index 3f27707..1a6f816 100644
> > --- a/drivers/net/xen-netback/netback.c
> > +++ b/drivers/net/xen-netback/netback.c
> > @@ -776,8 +776,7 @@ static struct xenvif *poll_net_schedule_list(struct xen_netbk *netbk)
> >  
> >  	vif = list_first_entry(&netbk->net_schedule_list,
> >  			       struct xenvif, schedule_list);
> > -	if (!vif)
> > -		goto out;
> > +	BUG_ON(!vif);
> >  
> >  	xenvif_get(vif);
> >  
> > @@ -857,7 +856,9 @@ static void tx_credit_callback(unsigned long data)
> >  }
> >  
> >  static void netbk_tx_err(struct xenvif *vif,
> > -			 struct xen_netif_tx_request *txp, RING_IDX end)
> > +			 struct xen_netif_tx_request *txp,
> > +			 RING_IDX end,
> > +			 int fatal)
> >  {
> >  	RING_IDX cons = vif->tx.req_cons;
> >  
> > @@ -868,8 +869,15 @@ static void netbk_tx_err(struct xenvif *vif,
> >  		txp = RING_GET_REQUEST(&vif->tx, cons++);
> >  	} while (1);
> >  	vif->tx.req_cons = cons;
> > -	xen_netbk_check_rx_xenvif(vif);
> > +	if (!fatal) {
> > +		/* If this is a fatal error then we don't need to poll
> > +		   the device again (and doing so might lead to some
> > +		   quite bad behaviour if the ring structure has
> > +		   become corrupted in some way). */
> > +		xen_netbk_check_rx_xenvif(vif);
> > +	}
> >  	xenvif_put(vif);
> > +
> >  }
> >  
> >  static int netbk_count_requests(struct xenvif *vif,
> > @@ -1232,7 +1240,9 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
> >  	struct gnttab_copy *gop = netbk->tx_copy_ops, *request_gop;
> >  	struct sk_buff *skb;
> >  	int ret;
> > +	int cntr;
> >  
> > +	cntr = 0;
> >  	while (((nr_pending_reqs(netbk) + MAX_SKB_FRAGS) < MAX_PENDING_REQS) &&
> >  		!list_empty(&netbk->net_schedule_list)) {
> >  		struct xenvif *vif;
> > @@ -1245,15 +1255,43 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
> >  		int work_to_do;
> >  		unsigned int data_len;
> >  		pending_ring_idx_t index;
> > +		int loud;
> > +
> > +		cntr++;
> > +		loud = 0;
> > +		if (cntr % 1000 == 0) {
> > +			printk("<0>In xen_netbk_tx_build_gops; done %d iterations so far\n",
> > +			       cntr);
> > +			printk("<0>nr_pending_reqs %d\n",
> > +			       nr_pending_reqs(netbk));
> > +			loud = 1;
> > +		}
> >  
> >  		/* Get a netif from the list with work to do. */
> >  		vif = poll_net_schedule_list(netbk);
> > -		if (!vif)
> > +		if (!vif) {
> > +			/* This can sometimes happen because the test
> > +			   of list_empty(net_schedule_list) at the top
> > +			   of the loop is unlocked.  Just go back and
> > +			   have another look. */
> > +			printk("<0>No vif, keep going\n");
> >  			continue;
> > +		}
> > +
> > +		if (loud) {
> > +			printk("<0>Ring status: rsp_prod_pvt %x, req_cons %x\n",
> > +			       vif->tx.rsp_prod_pvt, vif->tx.req_cons);
> > +			printk("<0>Shared: req_prod %x, req_event %x, rsp_prod %x, rsp_event %x\n",
> > +			       vif->tx.sring->req_prod,
> > +			       vif->tx.sring->req_event,
> > +			       vif->tx.sring->rsp_prod,
> > +			       vif->tx.sring->rsp_event);
> > +		}
> >  
> >  		RING_FINAL_CHECK_FOR_REQUESTS(&vif->tx, work_to_do);
> >  		if (!work_to_do) {
> >  			xenvif_put(vif);
> > +			printk("<0>No work on %p\n", vif);
> >  			continue;
> >  		}
> >  
> > @@ -1264,6 +1302,7 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
> >  		/* Credit-based scheduling. */
> >  		if (txreq.size > vif->remaining_credit &&
> >  		    tx_credit_exceeded(vif, txreq.size)) {
> > +			printk("<0>Stopped by credit scheduler\n");
> >  			xenvif_put(vif);
> >  			continue;
> >  		}
> > @@ -1279,14 +1318,14 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
> >  							  work_to_do);
> >  			idx = vif->tx.req_cons;
> >  			if (unlikely(work_to_do < 0)) {
> > -				netbk_tx_err(vif, &txreq, idx);
> > +				netbk_tx_err(vif, &txreq, idx, 1);
> >  				continue;
> >  			}
> >  		}
> >  
> >  		ret = netbk_count_requests(vif, &txreq, txfrags, work_to_do);
> >  		if (unlikely(ret < 0)) {
> > -			netbk_tx_err(vif, &txreq, idx - ret);
> > +			netbk_tx_err(vif, &txreq, idx - ret, 1);
> >  			continue;
> >  		}
> >  		idx += ret;
> > @@ -1294,7 +1333,7 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
> >  		if (unlikely(txreq.size < ETH_HLEN)) {
> >  			netdev_dbg(vif->dev,
> >  				   "Bad packet size: %d\n", txreq.size);
> > -			netbk_tx_err(vif, &txreq, idx);
> > +			netbk_tx_err(vif, &txreq, idx, 1);
> >  			continue;
> >  		}
> >  
> > @@ -1304,7 +1343,7 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
> >  				   "txreq.offset: %x, size: %u, end: %lu\n",
> >  				   txreq.offset, txreq.size,
> >  				   (txreq.offset&~PAGE_MASK) + txreq.size);
> > -			netbk_tx_err(vif, &txreq, idx);
> > +			netbk_tx_err(vif, &txreq, idx, 1);
> >  			continue;
> >  		}
> >  
> > @@ -1320,7 +1359,7 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
> >  		if (unlikely(skb == NULL)) {
> >  			netdev_dbg(vif->dev,
> >  				   "Can't allocate a skb in start_xmit.\n");
> > -			netbk_tx_err(vif, &txreq, idx);
> > +			netbk_tx_err(vif, &txreq, idx, 0);
> >  			break;
> >  		}
> >  
> > @@ -1333,7 +1372,8 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
> >  
> >  			if (netbk_set_skb_gso(vif, skb, gso)) {
> >  				kfree_skb(skb);
> > -				netbk_tx_err(vif, &txreq, idx);
> > +				netbk_tx_err(vif, &txreq, idx, 1);
> > +				printk("<0>Killed by netbk_set_skb_gso\n");
> >  				continue;
> >  			}
> >  		}
> > @@ -1342,7 +1382,8 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
> >  		page = xen_netbk_alloc_page(netbk, skb, pending_idx);
> >  		if (!page) {
> >  			kfree_skb(skb);
> > -			netbk_tx_err(vif, &txreq, idx);
> > +			netbk_tx_err(vif, &txreq, idx, 0);
> > +			printk("<0>No pages for payload?\n");
> >  			continue;
> >  		}
> >  
> > @@ -1382,7 +1423,7 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
> >  						     skb, txfrags, gop);
> >  		if (request_gop == NULL) {
> >  			kfree_skb(skb);
> > -			netbk_tx_err(vif, &txreq, idx);
> > +			netbk_tx_err(vif, &txreq, idx, 0);
> >  			continue;
> >  		}
> >  		gop = request_gop;
> 
> 
> -- 
> Anil Madhavapeddy                                 http://anil.recoil.org
> 

-- 
Anil Madhavapeddy                                 http://anil.recoil.org


From Dave.Scott@eu.citrix.com Tue Jan 08 18:54:51 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TseK3-0003Ir-Sh (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <Dave.Scott@eu.citrix.com>);
	Tue, 08 Jan 2013 18:54:51 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1428749 
	*  0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from smtp.eu.citrix.com ([46.33.159.39]:42729)
	by ppsw-41.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1TseK2-0001k3-RJ (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk (return-path <Dave.Scott@eu.citrix.com>);
	Tue, 08 Jan 2013 18:54:51 +0000
X-IronPort-AV: E=Sophos;i="4.84,433,1355097600"; 
   d="scan'208";a="524573"
Received: from lonpmailmx02.citrite.net ([10.30.203.163])
	by LONPIPO01.EU.CITRIX.COM with ESMTP/TLS/RC4-MD5;
	08 Jan 2013 18:54:48 +0000
Received: from LONPMAILBOX01.citrite.net ([10.30.224.161]) by
	LONPMAILMX02.citrite.net ([10.30.203.163]) with mapi; Tue, 8 Jan 2013
	18:54:47 +0000
From: Dave Scott <Dave.Scott@eu.citrix.com>
To: Anil Madhavapeddy <anil@recoil.org>
Date: Tue, 8 Jan 2013 18:54:46 +0000
Subject: Re: ocplib+endian improvement
Thread-Topic: ocplib+endian improvement
Thread-Index: Ac3t0aEDJY9Q6nx2TVqozZ4Xv03bMQ==
Message-ID: <D02D1C23-FB8B-41C2-B37B-7DC2CD31DAEA@eu.citrix.com>
References: <20130108174237.GC21804@dark.recoil.org>
In-Reply-To: <20130108174237.GC21804@dark.recoil.org>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
Cc: "cl-mirage@lists.cam.ac.uk" <cl-mirage@lists.cam.ac.uk>,
	Steven Smith <sos22@srcf.ucam.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, 08 Jan 2013 18:54:52 -0000
Content-Length: 17892
Lines: 418

That's interesting-- line 306 in ring.ml is an attempt to read the ring inp=
ut (from the frontend PoV) producer pointer, in a function (suspiciously) n=
amed "unsafe_read". That ought to be at offset 2048+12 in the page. Perhaps=
 this buffer isnt actually the xenstore ring?

Is this easy to repro?

--
Dave Scott

On Jan 8, 2013, at 5:42 PM, "Anil Madhavapeddy" <anil@recoil.org> wrote:

> This turns out to due to a lack of bounds checking, causing a buffer
> overflow.  I've re-added the bounds checks into the new cstruct, and now
> get a nice exception instead of a crash from the netfront end.  The fact
> that the dom0 crashes is a good case for a Mirage fuzz tester in the
> future ;-)
>
> Dave, it seems like the real problem is in xenstore-client somewhere,
> according to the backtrace:
>
> x86_mm.c: Demand map pfns at 8001000-2008001000.
> gnttab_init: 2047
> gnttab_stubs.c: gnttab_table mapped at 0x8001000
> Caught: Invalid_argument("index out of bounds")
> Called from file "lib/ring.ml", line 306, characters 27-51
> Called from file "core/xs_protocol.ml", line 274, characters 6-31
> Called from file "client_lwt/xs_client.ml", line 110, characters 30-42
> Called from file "src/core/lwt.ml", line 679, characters 20-24
>
> Is this something to do with multipage rings? It seems to read beyond the
> actual xenstore page, which is odd...
>
> -anil
>
>> On Mon, Jan 07, 2013 at 03:08:51PM +0000, Steven Smith wrote:
>>> Right.  So I'm going to stop looking at this now.  I'd like to say
>>> that's because I've fixed it and everything's fine, but, actually,
>>> it's because the BMC on my test box has failed and I can't find any
>>> other machines which are in a usable state.  Pretty much the only
>>> concrete thing which I've found is that the ring indices in the shared
>>> page are corrupted, with what looks like ASCII; not sure if that helps
>>> you at all.
>>>
>>>> [   39.830497] <0>In xen_netbk_tx_build_gops; done 95000 iterations so=
 far
>>>> [   39.837138] <0>nr_pending_reqs 0
>>>> [   39.840485] <0>Ring status: rsp_prod_pvt 24cda, req_cons 238da
>>>> [   39.846437] <0>Shared: req_prod 75422121, req_event 69646c69, rsp_p=
rod 24cda, rsp_event 6c6d6143
>>>
>>> Decode indices as ascii:
>>>
>>> 75422121 -> uB!!   !!Bu
>>> 69646c69 -> idli   ildi
>>> 6c6d6143 -> lmaC   Caml
>>>
>>> Which could plausibly be fragments of strings which might be present
>>> in an ocaml program, but it's not really terribly convincing.
>>>
>>> I do have a patch which might at least stop the bug from taking down
>>> dom0, which I've attached, but I've not been able to test it all.
>>>
>>> So that's not desperately helpful, really.  Sorry about that.
>>>
>>> Steven.
>>>
>>>
>>>
>>>> http://www.recoil.org/~avsm/www-crashes-pvops.xen is the offending ker=
nel, which always gives me the traceback below when booted using xm (on Xen=
 4.1, either dom0 kernel of 3.2 or 3.7)... can you repro on your setup?  Yo=
u have to provide one VIF.
>>>>
>>>> -anil
>>>>
>>>> Begin forwarded message:
>>>>
>>>>> From: Anil Madhavapeddy <anil@recoil.org>
>>>>> Subject: Re: ocplib+endian improvement
>>>>> Date: 6 January 2013 21:08:18 GMT
>>>>> To: "<cl-mirage@lists.cam.ac.uk> List" <cl-mirage@lists.cam.ac.uk>
>>>>> Cc: Steven Smith <steven.smith@cl.cam.ac.uk>
>>>>>
>>>>> Hm, but trying out TCP seems to trigger a softlockup in Xen netback (=
both kernels 3.2 and latest 3.7). Will need to do some more debugging tomor=
row...
>>>>>
>>>>> Steven (Smith): any luck with the grant-free netback modification?  I=
 could try it out at the same time as debugging this particular issue.
>>>>>
>>>>> -anil
>>>>>
>>>>> [  277.249069] Code: 00 89 c1 7c c8 41 59 c3 90 90 90 65 c6 04 25 41 =
b1 00 00 00 65 f6 04 25 40 b1 00 00 ff 74 05 e8 47 00 00 00 c3 66 0f 1f 44 =
00 00 <65> c6 04 25 41 b1 00 00 01 c3 66 0f 1f 44 00 00 65 f6 04 25 41
>>>>> [  305.248782] BUG: soft lockup - CPU#0 stuck for 23s! [netback/0:377=
2]
>>>>> [  305.248883] Modules linked in: xt_physdev iptable_filter ip_tables=
 x_tables xen_netback xen_gntdev xen_evtchn xenfs xen_privcmd nfsd auth_rpc=
gss nfs_acl nfs lockd dns_resolver fscache sunrpc bridge stp llc loop crc32=
c_intel ghash_clmulni_intel aesni_intel aes_x86_64 ablk_helper cryptd xts l=
rw gf128mul snd_pcm sp5100_tco snd_page_alloc snd_timer snd soundcore tpm_t=
is tpm amd64_edac_mod edac_mce_amd i2c_piix4 i2c_core dcdbas evdev pcspkr t=
pm_bios edac_core microcode psmouse fam15h_power k10temp serio_raw acpi_pow=
er_meter button processor thermal_sys ext4 crc16 jbd2 mbcache dm_mod sg sd_=
mod crc_t10dif ata_generic ohci_hcd pata_atiixp ixgbe ahci ptp libahci pps_=
core libata ehci_hcd dca mdio scsi_mod bnx2 usbcore usb_common
>>>>> [  305.248932] CPU 0
>>>>> [  305.248934] Pid: 3772, comm: netback/0 Tainted: G        W    3.7-=
trunk-amd64 #1 Debian 3.7.1-1~experimental.2 Dell Inc. PowerEdge R415/08WNM=
9
>>>>> [  305.248936] RIP: e030:[<ffffffffa021c153>]  [<ffffffffa021c153>] x=
en_netbk_tx_build_gops+0x19d/0x7ad [xen_netback]
>>>>> [  305.248941] RSP: e02b:ffff88020eba3ca8  EFLAGS: 00000217
>>>>> [  305.248943] RAX: 0000000073202626 RBX: ffffc90007ab5000 RCX: 00000=
0001ce71e08
>>>>> [  305.248945] RDX: 000000001ce71e08 RSI: ffffc90007ab02a8 RDI: ffff8=
80653403800
>>>>> [  305.248946] RBP: ffffc90007ab70c0 R08: ffff8806534038d8 R09: ffff8=
8020eba3c74
>>>>> [  305.248947] R10: ffffc90007ab0208 R11: ffffc90007ab0208 R12: ffff8=
80653403800
>>>>> [  305.248949] R13: 0000000000007320 R14: 0000000000000000 R15: 00000=
0000104210e
>>>>> [  305.248953] FS:  00007f59123a4700(0000) GS:ffff8807ff800000(0000) =
knlGS:0000000000000000
>>>>> [  305.248955] CS:  e033 DS: 0000 ES: 0000 CR0: 000000008005003b
>>>>> [  305.248956] CR2: 00007fd7c822b070 CR3: 00000007f2177000 CR4: 00000=
00000000660
>>>>> [  305.248958] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00000=
00000000000
>>>>> [  305.248960] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00000=
00000000400
>>>>> [  305.248961] Process netback/0 (pid: 3772, threadinfo ffff88020eba2=
000, task ffff8807ee921180)
>>>>> [  305.248963] Stack:
>>>>> [  305.248964]  ffffffff81004067 ffffffff81004202 1ce71e0800000003 ff=
ff8807ee921180
>>>>> [  305.248968]  ffffc90007ab70c0 ffff8807ff811740 0000000000000000 20=
74706fffff2e2f
>>>>> [  305.248972]  ffff4f2073202626 2074706f20646c72 ffffffff810037f7 ff=
ff8807ee921180
>>>>> [  305.248975] Call Trace:
>>>>> [  305.248978]  [<ffffffff81004067>] ? arch_local_irq_restore+0x7/0x8
>>>>> [  305.248982]  [<ffffffff81004202>] ? xen_mc_flush+0x11d/0x160
>>>>> [  305.248985]  [<ffffffff810037f7>] ? xen_mc_issue.constprop.22+0x10=
/0x4d
>>>>> [  305.248988]  [<ffffffff8100d02f>] ? load_TLS+0x7/0xa
>>>>> [  305.248991]  [<ffffffff8100d60c>] ? __switch_to+0x195/0x3f8
>>>>> [  305.248994]  [<ffffffff8105fadb>] ? mmdrop+0xd/0x1c
>>>>> [  305.248996]  [<ffffffff81061390>] ? finish_task_switch+0x83/0xb4
>>>>> [  305.249000]  [<ffffffff813778e9>] ? __schedule+0x4b2/0x4e0
>>>>> [  305.249003]  [<ffffffff8107f0d3>] ? arch_local_irq_disable+0x7/0x8
>>>>> [  305.249006]  [<ffffffff81378465>] ? _raw_spin_lock_irqsave+0x14/0x=
35
>>>>> [  305.249009]  [<ffffffff8107f0d3>] ? arch_local_irq_disable+0x7/0x8
>>>>> [  305.249012]  [<ffffffff81378465>] ? _raw_spin_lock_irqsave+0x14/0x=
35
>>>>> [  305.249016]  [<ffffffffa021c897>] ? xen_netbk_kthread+0x134/0x78d =
[xen_netback]
>>>>> [  305.249019]  [<ffffffff8105d78f>] ? arch_local_irq_enable+0x7/0x8
>>>>> [  305.249022]  [<ffffffff81061357>] ? finish_task_switch+0x4a/0xb4
>>>>> [  305.249025]  [<ffffffff81057987>] ? abort_exclusive_wait+0x79/0x79
>>>>> [  305.249029]  [<ffffffffa021c763>] ? xen_netbk_tx_build_gops+0x7ad/=
0x7ad [xen_netback]
>>>>> [  305.249032]  [<ffffffffa021c763>] ? xen_netbk_tx_build_gops+0x7ad/=
0x7ad [xen_netback]
>>>>> [  305.249035]  [<ffffffff810570ac>] ? kthread+0x81/0x89
>>>>> [  305.249038]  [<ffffffff810037f7>] ? xen_mc_issue.constprop.22+0x10=
/0x4d
>>>>> [  305.249041]  [<ffffffff8105702b>] ? __kthread_parkme+0x5c/0x5c
>>>>> [  305.249043]  [<ffffffff8137d6bc>] ? ret_from_fork+0x7c/0xb0
>>>>> [  305.249046]  [<ffffffff8105702b>] ? __kthread_parkme+0x5c/0x5c
>>>>> [  305.249048] Code: bc 24 80 00 00 00 4d 89 a4 24 a8 00 00 00 49 c7 =
84 24 a0 00 00 00 58 bf 21 a0 4c 89 f6 e8 86 d9 e2 e0 e9 c3 05 00 00 8b 54 =
24 14 <66> 8b 74 24 3e 41 8d 4f ff 0f b7 44 24 42 48 c7 44 24 30 00 00
>>>>> avsm@gabriel:~/src/git/mirage/mirage-www$
>>>>> Message from syslogd@gabriel at Jan  6 21:06:38 ...
>>>>>
>>>>> On 6 Jan 2013, at 18:44, Anil Madhavapeddy <anil@recoil.org> wrote:
>>>>>
>>>>>> I've been porting the network stack to take advantage of the cstruct=
 turbo-boost that Pierre and Thomas worked on. This optimisation adds compi=
ler built-ins (in 4.01.0+) which let the code generator optimise away many =
of the temporary values required for low-level optimisation.
>>>>>>
>>>>>> Here's a (very quick) before/after for a ping flood (which is a good=
 stress test of the low-level shared ring, network driver and protocol stac=
k).
>>>>>>
>>>>>> For a ping flood With 4.00.1 without the optimisation:
>>>>>> 73755 packets transmitted, 73702 received, +49 duplicates, 0% packet=
 loss, time 6283ms
>>>>>> rtt min/avg/max/mdev =3D 0.031/0.228/1209.178/9.887 ms, pipe 14850, =
ipg/ewma 0.085/0.036 ms
>>>>>>
>>>>>> and with the optimisation:
>>>>>> 41791 packets transmitted, 41764 received, +25 duplicates, 0% packet=
 loss, time 3539msrtt min/avg/max/mdev =3D 0.030/0.188/1261.042/8.459 ms, p=
ipe 14742, ipg/ewma 0.084/0.039 ms
>>>>>>
>>>>>> So our average latency drops quite significantly (0.228 -> 0.188), a=
s does CPU load (not shown above).
>>>>>>
>>>>>> I've not committed these changes to the mainstream yet until I test =
out TCP more, but it's getting there!
>>>>>>
>>>>>> -anil
>>>>>
>>>>>
>>>>
>>
>>> diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netbac=
k/netback.c
>>> index 3f27707..1a6f816 100644
>>> --- a/drivers/net/xen-netback/netback.c
>>> +++ b/drivers/net/xen-netback/netback.c
>>> @@ -776,8 +776,7 @@ static struct xenvif *poll_net_schedule_list(struct=
 xen_netbk *netbk)
>>>
>>>    vif =3D list_first_entry(&netbk->net_schedule_list,
>>>                           struct xenvif, schedule_list);
>>> -   if (!vif)
>>> -           goto out;
>>> +   BUG_ON(!vif);
>>>
>>>    xenvif_get(vif);
>>>
>>> @@ -857,7 +856,9 @@ static void tx_credit_callback(unsigned long data)
>>> }
>>>
>>> static void netbk_tx_err(struct xenvif *vif,
>>> -                    struct xen_netif_tx_request *txp, RING_IDX end)
>>> +                    struct xen_netif_tx_request *txp,
>>> +                    RING_IDX end,
>>> +                    int fatal)
>>> {
>>>    RING_IDX cons =3D vif->tx.req_cons;
>>>
>>> @@ -868,8 +869,15 @@ static void netbk_tx_err(struct xenvif *vif,
>>>            txp =3D RING_GET_REQUEST(&vif->tx, cons++);
>>>    } while (1);
>>>    vif->tx.req_cons =3D cons;
>>> -   xen_netbk_check_rx_xenvif(vif);
>>> +   if (!fatal) {
>>> +           /* If this is a fatal error then we don't need to poll
>>> +              the device again (and doing so might lead to some
>>> +              quite bad behaviour if the ring structure has
>>> +              become corrupted in some way). */
>>> +           xen_netbk_check_rx_xenvif(vif);
>>> +   }
>>>    xenvif_put(vif);
>>> +
>>> }
>>>
>>> static int netbk_count_requests(struct xenvif *vif,
>>> @@ -1232,7 +1240,9 @@ static unsigned xen_netbk_tx_build_gops(struct xe=
n_netbk *netbk)
>>>    struct gnttab_copy *gop =3D netbk->tx_copy_ops, *request_gop;
>>>    struct sk_buff *skb;
>>>    int ret;
>>> +   int cntr;
>>>
>>> +   cntr =3D 0;
>>>    while (((nr_pending_reqs(netbk) + MAX_SKB_FRAGS) < MAX_PENDING_REQS)=
 &&
>>>            !list_empty(&netbk->net_schedule_list)) {
>>>            struct xenvif *vif;
>>> @@ -1245,15 +1255,43 @@ static unsigned xen_netbk_tx_build_gops(struct =
xen_netbk *netbk)
>>>            int work_to_do;
>>>            unsigned int data_len;
>>>            pending_ring_idx_t index;
>>> +           int loud;
>>> +
>>> +           cntr++;
>>> +           loud =3D 0;
>>> +           if (cntr % 1000 =3D=3D 0) {
>>> +                   printk("<0>In xen_netbk_tx_build_gops; done %d iter=
ations so far\n",
>>> +                          cntr);
>>> +                   printk("<0>nr_pending_reqs %d\n",
>>> +                          nr_pending_reqs(netbk));
>>> +                   loud =3D 1;
>>> +           }
>>>
>>>            /* Get a netif from the list with work to do. */
>>>            vif =3D poll_net_schedule_list(netbk);
>>> -           if (!vif)
>>> +           if (!vif) {
>>> +                   /* This can sometimes happen because the test
>>> +                      of list_empty(net_schedule_list) at the top
>>> +                      of the loop is unlocked.  Just go back and
>>> +                      have another look. */
>>> +                   printk("<0>No vif, keep going\n");
>>>                    continue;
>>> +           }
>>> +
>>> +           if (loud) {
>>> +                   printk("<0>Ring status: rsp_prod_pvt %x, req_cons %=
x\n",
>>> +                          vif->tx.rsp_prod_pvt, vif->tx.req_cons);
>>> +                   printk("<0>Shared: req_prod %x, req_event %x, rsp_p=
rod %x, rsp_event %x\n",
>>> +                          vif->tx.sring->req_prod,
>>> +                          vif->tx.sring->req_event,
>>> +                          vif->tx.sring->rsp_prod,
>>> +                          vif->tx.sring->rsp_event);
>>> +           }
>>>
>>>            RING_FINAL_CHECK_FOR_REQUESTS(&vif->tx, work_to_do);
>>>            if (!work_to_do) {
>>>                    xenvif_put(vif);
>>> +                   printk("<0>No work on %p\n", vif);
>>>                    continue;
>>>            }
>>>
>>> @@ -1264,6 +1302,7 @@ static unsigned xen_netbk_tx_build_gops(struct xe=
n_netbk *netbk)
>>>            /* Credit-based scheduling. */
>>>            if (txreq.size > vif->remaining_credit &&
>>>                tx_credit_exceeded(vif, txreq.size)) {
>>> +                   printk("<0>Stopped by credit scheduler\n");
>>>                    xenvif_put(vif);
>>>                    continue;
>>>            }
>>> @@ -1279,14 +1318,14 @@ static unsigned xen_netbk_tx_build_gops(struct =
xen_netbk *netbk)
>>>                                                      work_to_do);
>>>                    idx =3D vif->tx.req_cons;
>>>                    if (unlikely(work_to_do < 0)) {
>>> -                           netbk_tx_err(vif, &txreq, idx);
>>> +                           netbk_tx_err(vif, &txreq, idx, 1);
>>>                            continue;
>>>                    }
>>>            }
>>>
>>>            ret =3D netbk_count_requests(vif, &txreq, txfrags, work_to_d=
o);
>>>            if (unlikely(ret < 0)) {
>>> -                   netbk_tx_err(vif, &txreq, idx - ret);
>>> +                   netbk_tx_err(vif, &txreq, idx - ret, 1);
>>>                    continue;
>>>            }
>>>            idx +=3D ret;
>>> @@ -1294,7 +1333,7 @@ static unsigned xen_netbk_tx_build_gops(struct xe=
n_netbk *netbk)
>>>            if (unlikely(txreq.size < ETH_HLEN)) {
>>>                    netdev_dbg(vif->dev,
>>>                               "Bad packet size: %d\n", txreq.size);
>>> -                   netbk_tx_err(vif, &txreq, idx);
>>> +                   netbk_tx_err(vif, &txreq, idx, 1);
>>>                    continue;
>>>            }
>>>
>>> @@ -1304,7 +1343,7 @@ static unsigned xen_netbk_tx_build_gops(struct xe=
n_netbk *netbk)
>>>                               "txreq.offset: %x, size: %u, end: %lu\n",
>>>                               txreq.offset, txreq.size,
>>>                               (txreq.offset&~PAGE_MASK) + txreq.size);
>>> -                   netbk_tx_err(vif, &txreq, idx);
>>> +                   netbk_tx_err(vif, &txreq, idx, 1);
>>>                    continue;
>>>            }
>>>
>>> @@ -1320,7 +1359,7 @@ static unsigned xen_netbk_tx_build_gops(struct xe=
n_netbk *netbk)
>>>            if (unlikely(skb =3D=3D NULL)) {
>>>                    netdev_dbg(vif->dev,
>>>                               "Can't allocate a skb in start_xmit.\n");
>>> -                   netbk_tx_err(vif, &txreq, idx);
>>> +                   netbk_tx_err(vif, &txreq, idx, 0);
>>>                    break;
>>>            }
>>>
>>> @@ -1333,7 +1372,8 @@ static unsigned xen_netbk_tx_build_gops(struct xe=
n_netbk *netbk)
>>>
>>>                    if (netbk_set_skb_gso(vif, skb, gso)) {
>>>                            kfree_skb(skb);
>>> -                           netbk_tx_err(vif, &txreq, idx);
>>> +                           netbk_tx_err(vif, &txreq, idx, 1);
>>> +                           printk("<0>Killed by netbk_set_skb_gso\n");
>>>                            continue;
>>>                    }
>>>            }
>>> @@ -1342,7 +1382,8 @@ static unsigned xen_netbk_tx_build_gops(struct xe=
n_netbk *netbk)
>>>            page =3D xen_netbk_alloc_page(netbk, skb, pending_idx);
>>>            if (!page) {
>>>                    kfree_skb(skb);
>>> -                   netbk_tx_err(vif, &txreq, idx);
>>> +                   netbk_tx_err(vif, &txreq, idx, 0);
>>> +                   printk("<0>No pages for payload?\n");
>>>                    continue;
>>>            }
>>>
>>> @@ -1382,7 +1423,7 @@ static unsigned xen_netbk_tx_build_gops(struct xe=
n_netbk *netbk)
>>>                                                 skb, txfrags, gop);
>>>            if (request_gop =3D=3D NULL) {
>>>                    kfree_skb(skb);
>>> -                   netbk_tx_err(vif, &txreq, idx);
>>> +                   netbk_tx_err(vif, &txreq, idx, 0);
>>>                    continue;
>>>            }
>>>            gop =3D request_gop;
>>
>>
>> --
>> Anil Madhavapeddy                                 http://anil.recoil.org
>>
>
> --
> Anil Madhavapeddy                                 http://anil.recoil.org
>


From anil@recoil.org Tue Jan 08 22:33:23 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TshjX-0005yB-Py (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 08 Jan 2013 22:33:23 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1428749
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:15795
	helo=dark.recoil.org)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1TshjW-0002Zy-oJ (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 08 Jan 2013 22:33:23 +0000
Received: (qmail 23902 invoked by uid 634); 8 Jan 2013 22:33:22 -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.48]) (86.30.244.239)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Tue, 08 Jan 2013 22:33:20 +0000
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
Subject: Re: ocplib+endian improvement
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <D02D1C23-FB8B-41C2-B37B-7DC2CD31DAEA@eu.citrix.com>
Date: Tue, 8 Jan 2013 22:33:18 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <283B35CF-1EED-47F5-A025-23FB2908DCCA@recoil.org>
References: <20130108174237.GC21804@dark.recoil.org>
	<D02D1C23-FB8B-41C2-B37B-7DC2CD31DAEA@eu.citrix.com>
To: Dave Scott <Dave.Scott@eu.citrix.com>
X-Mailer: Apple Mail (2.1499)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: Steven Smith <sos22@srcf.ucam.org>,
	"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, 08 Jan 2013 22:33:23 -0000
Content-Length: 18849
Lines: 463

Fixed; it was a minor problem in the C start_info stubs that was =
truncating the size of the bigarray mapping in OCaml. This only showed =
up once bounds checking was activated, hence you didn't notice it =
before.
=
https://github.com/mirage/mirage-platform/commit/b34dd44c5e20f9534d74cef71=
a8d875005e3cc7e

I'm cutting stable releases of all these changes now...

On 8 Jan 2013, at 18:54, Dave Scott <Dave.Scott@eu.citrix.com> wrote:

> That's interesting-- line 306 in ring.ml is an attempt to read the =
ring input (from the frontend PoV) producer pointer, in a function =
(suspiciously) named "unsafe_read". That ought to be at offset 2048+12 =
in the page. Perhaps this buffer isnt actually the xenstore ring?
>=20
> Is this easy to repro?
>=20
> --
> Dave Scott
>=20
> On Jan 8, 2013, at 5:42 PM, "Anil Madhavapeddy" <anil@recoil.org> =
wrote:
>=20
>> This turns out to due to a lack of bounds checking, causing a buffer
>> overflow.  I've re-added the bounds checks into the new cstruct, and =
now
>> get a nice exception instead of a crash from the netfront end.  The =
fact
>> that the dom0 crashes is a good case for a Mirage fuzz tester in the
>> future ;-)
>>=20
>> Dave, it seems like the real problem is in xenstore-client somewhere,
>> according to the backtrace:
>>=20
>> x86_mm.c: Demand map pfns at 8001000-2008001000.
>> gnttab_init: 2047
>> gnttab_stubs.c: gnttab_table mapped at 0x8001000
>> Caught: Invalid_argument("index out of bounds")
>> Called from file "lib/ring.ml", line 306, characters 27-51
>> Called from file "core/xs_protocol.ml", line 274, characters 6-31
>> Called from file "client_lwt/xs_client.ml", line 110, characters =
30-42
>> Called from file "src/core/lwt.ml", line 679, characters 20-24
>>=20
>> Is this something to do with multipage rings? It seems to read beyond =
the
>> actual xenstore page, which is odd...
>>=20
>> -anil
>>=20
>>> On Mon, Jan 07, 2013 at 03:08:51PM +0000, Steven Smith wrote:
>>>> Right.  So I'm going to stop looking at this now.  I'd like to say
>>>> that's because I've fixed it and everything's fine, but, actually,
>>>> it's because the BMC on my test box has failed and I can't find any
>>>> other machines which are in a usable state.  Pretty much the only
>>>> concrete thing which I've found is that the ring indices in the =
shared
>>>> page are corrupted, with what looks like ASCII; not sure if that =
helps
>>>> you at all.
>>>>=20
>>>>> [   39.830497] <0>In xen_netbk_tx_build_gops; done 95000 =
iterations so far
>>>>> [   39.837138] <0>nr_pending_reqs 0
>>>>> [   39.840485] <0>Ring status: rsp_prod_pvt 24cda, req_cons 238da
>>>>> [   39.846437] <0>Shared: req_prod 75422121, req_event 69646c69, =
rsp_prod 24cda, rsp_event 6c6d6143
>>>>=20
>>>> Decode indices as ascii:
>>>>=20
>>>> 75422121 -> uB!!   !!Bu
>>>> 69646c69 -> idli   ildi
>>>> 6c6d6143 -> lmaC   Caml
>>>>=20
>>>> Which could plausibly be fragments of strings which might be =
present
>>>> in an ocaml program, but it's not really terribly convincing.
>>>>=20
>>>> I do have a patch which might at least stop the bug from taking =
down
>>>> dom0, which I've attached, but I've not been able to test it all.
>>>>=20
>>>> So that's not desperately helpful, really.  Sorry about that.
>>>>=20
>>>> Steven.
>>>>=20
>>>>=20
>>>>=20
>>>>> http://www.recoil.org/~avsm/www-crashes-pvops.xen is the offending =
kernel, which always gives me the traceback below when booted using xm =
(on Xen 4.1, either dom0 kernel of 3.2 or 3.7)... can you repro on your =
setup?  You have to provide one VIF.
>>>>>=20
>>>>> -anil
>>>>>=20
>>>>> Begin forwarded message:
>>>>>=20
>>>>>> From: Anil Madhavapeddy <anil@recoil.org>
>>>>>> Subject: Re: ocplib+endian improvement
>>>>>> Date: 6 January 2013 21:08:18 GMT
>>>>>> To: "<cl-mirage@lists.cam.ac.uk> List" =
<cl-mirage@lists.cam.ac.uk>
>>>>>> Cc: Steven Smith <steven.smith@cl.cam.ac.uk>
>>>>>>=20
>>>>>> Hm, but trying out TCP seems to trigger a softlockup in Xen =
netback (both kernels 3.2 and latest 3.7). Will need to do some more =
debugging tomorrow...
>>>>>>=20
>>>>>> Steven (Smith): any luck with the grant-free netback =
modification?  I could try it out at the same time as debugging this =
particular issue.
>>>>>>=20
>>>>>> -anil
>>>>>>=20
>>>>>> [  277.249069] Code: 00 89 c1 7c c8 41 59 c3 90 90 90 65 c6 04 25 =
41 b1 00 00 00 65 f6 04 25 40 b1 00 00 ff 74 05 e8 47 00 00 00 c3 66 0f =
1f 44 00 00 <65> c6 04 25 41 b1 00 00 01 c3 66 0f 1f 44 00 00 65 f6 04 =
25 41
>>>>>> [  305.248782] BUG: soft lockup - CPU#0 stuck for 23s! =
[netback/0:3772]
>>>>>> [  305.248883] Modules linked in: xt_physdev iptable_filter =
ip_tables x_tables xen_netback xen_gntdev xen_evtchn xenfs xen_privcmd =
nfsd auth_rpcgss nfs_acl nfs lockd dns_resolver fscache sunrpc bridge =
stp llc loop crc32c_intel ghash_clmulni_intel aesni_intel aes_x86_64 =
ablk_helper cryptd xts lrw gf128mul snd_pcm sp5100_tco snd_page_alloc =
snd_timer snd soundcore tpm_tis tpm amd64_edac_mod edac_mce_amd =
i2c_piix4 i2c_core dcdbas evdev pcspkr tpm_bios edac_core microcode =
psmouse fam15h_power k10temp serio_raw acpi_power_meter button processor =
thermal_sys ext4 crc16 jbd2 mbcache dm_mod sg sd_mod crc_t10dif =
ata_generic ohci_hcd pata_atiixp ixgbe ahci ptp libahci pps_core libata =
ehci_hcd dca mdio scsi_mod bnx2 usbcore usb_common
>>>>>> [  305.248932] CPU 0
>>>>>> [  305.248934] Pid: 3772, comm: netback/0 Tainted: G        W    =
3.7-trunk-amd64 #1 Debian 3.7.1-1~experimental.2 Dell Inc. PowerEdge =
R415/08WNM9
>>>>>> [  305.248936] RIP: e030:[<ffffffffa021c153>]  =
[<ffffffffa021c153>] xen_netbk_tx_build_gops+0x19d/0x7ad [xen_netback]
>>>>>> [  305.248941] RSP: e02b:ffff88020eba3ca8  EFLAGS: 00000217
>>>>>> [  305.248943] RAX: 0000000073202626 RBX: ffffc90007ab5000 RCX: =
000000001ce71e08
>>>>>> [  305.248945] RDX: 000000001ce71e08 RSI: ffffc90007ab02a8 RDI: =
ffff880653403800
>>>>>> [  305.248946] RBP: ffffc90007ab70c0 R08: ffff8806534038d8 R09: =
ffff88020eba3c74
>>>>>> [  305.248947] R10: ffffc90007ab0208 R11: ffffc90007ab0208 R12: =
ffff880653403800
>>>>>> [  305.248949] R13: 0000000000007320 R14: 0000000000000000 R15: =
000000000104210e
>>>>>> [  305.248953] FS:  00007f59123a4700(0000) =
GS:ffff8807ff800000(0000) knlGS:0000000000000000
>>>>>> [  305.248955] CS:  e033 DS: 0000 ES: 0000 CR0: 000000008005003b
>>>>>> [  305.248956] CR2: 00007fd7c822b070 CR3: 00000007f2177000 CR4: =
0000000000000660
>>>>>> [  305.248958] DR0: 0000000000000000 DR1: 0000000000000000 DR2: =
0000000000000000
>>>>>> [  305.248960] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: =
0000000000000400
>>>>>> [  305.248961] Process netback/0 (pid: 3772, threadinfo =
ffff88020eba2000, task ffff8807ee921180)
>>>>>> [  305.248963] Stack:
>>>>>> [  305.248964]  ffffffff81004067 ffffffff81004202 =
1ce71e0800000003 ffff8807ee921180
>>>>>> [  305.248968]  ffffc90007ab70c0 ffff8807ff811740 =
0000000000000000 2074706fffff2e2f
>>>>>> [  305.248972]  ffff4f2073202626 2074706f20646c72 =
ffffffff810037f7 ffff8807ee921180
>>>>>> [  305.248975] Call Trace:
>>>>>> [  305.248978]  [<ffffffff81004067>] ? =
arch_local_irq_restore+0x7/0x8
>>>>>> [  305.248982]  [<ffffffff81004202>] ? xen_mc_flush+0x11d/0x160
>>>>>> [  305.248985]  [<ffffffff810037f7>] ? =
xen_mc_issue.constprop.22+0x10/0x4d
>>>>>> [  305.248988]  [<ffffffff8100d02f>] ? load_TLS+0x7/0xa
>>>>>> [  305.248991]  [<ffffffff8100d60c>] ? __switch_to+0x195/0x3f8
>>>>>> [  305.248994]  [<ffffffff8105fadb>] ? mmdrop+0xd/0x1c
>>>>>> [  305.248996]  [<ffffffff81061390>] ? =
finish_task_switch+0x83/0xb4
>>>>>> [  305.249000]  [<ffffffff813778e9>] ? __schedule+0x4b2/0x4e0
>>>>>> [  305.249003]  [<ffffffff8107f0d3>] ? =
arch_local_irq_disable+0x7/0x8
>>>>>> [  305.249006]  [<ffffffff81378465>] ? =
_raw_spin_lock_irqsave+0x14/0x35
>>>>>> [  305.249009]  [<ffffffff8107f0d3>] ? =
arch_local_irq_disable+0x7/0x8
>>>>>> [  305.249012]  [<ffffffff81378465>] ? =
_raw_spin_lock_irqsave+0x14/0x35
>>>>>> [  305.249016]  [<ffffffffa021c897>] ? =
xen_netbk_kthread+0x134/0x78d [xen_netback]
>>>>>> [  305.249019]  [<ffffffff8105d78f>] ? =
arch_local_irq_enable+0x7/0x8
>>>>>> [  305.249022]  [<ffffffff81061357>] ? =
finish_task_switch+0x4a/0xb4
>>>>>> [  305.249025]  [<ffffffff81057987>] ? =
abort_exclusive_wait+0x79/0x79
>>>>>> [  305.249029]  [<ffffffffa021c763>] ? =
xen_netbk_tx_build_gops+0x7ad/0x7ad [xen_netback]
>>>>>> [  305.249032]  [<ffffffffa021c763>] ? =
xen_netbk_tx_build_gops+0x7ad/0x7ad [xen_netback]
>>>>>> [  305.249035]  [<ffffffff810570ac>] ? kthread+0x81/0x89
>>>>>> [  305.249038]  [<ffffffff810037f7>] ? =
xen_mc_issue.constprop.22+0x10/0x4d
>>>>>> [  305.249041]  [<ffffffff8105702b>] ? __kthread_parkme+0x5c/0x5c
>>>>>> [  305.249043]  [<ffffffff8137d6bc>] ? ret_from_fork+0x7c/0xb0
>>>>>> [  305.249046]  [<ffffffff8105702b>] ? __kthread_parkme+0x5c/0x5c
>>>>>> [  305.249048] Code: bc 24 80 00 00 00 4d 89 a4 24 a8 00 00 00 49 =
c7 84 24 a0 00 00 00 58 bf 21 a0 4c 89 f6 e8 86 d9 e2 e0 e9 c3 05 00 00 =
8b 54 24 14 <66> 8b 74 24 3e 41 8d 4f ff 0f b7 44 24 42 48 c7 44 24 30 =
00 00
>>>>>> avsm@gabriel:~/src/git/mirage/mirage-www$
>>>>>> Message from syslogd@gabriel at Jan  6 21:06:38 ...
>>>>>>=20
>>>>>> On 6 Jan 2013, at 18:44, Anil Madhavapeddy <anil@recoil.org> =
wrote:
>>>>>>=20
>>>>>>> I've been porting the network stack to take advantage of the =
cstruct turbo-boost that Pierre and Thomas worked on. This optimisation =
adds compiler built-ins (in 4.01.0+) which let the code generator =
optimise away many of the temporary values required for low-level =
optimisation.
>>>>>>>=20
>>>>>>> Here's a (very quick) before/after for a ping flood (which is a =
good stress test of the low-level shared ring, network driver and =
protocol stack).
>>>>>>>=20
>>>>>>> For a ping flood With 4.00.1 without the optimisation:
>>>>>>> 73755 packets transmitted, 73702 received, +49 duplicates, 0% =
packet loss, time 6283ms
>>>>>>> rtt min/avg/max/mdev =3D 0.031/0.228/1209.178/9.887 ms, pipe =
14850, ipg/ewma 0.085/0.036 ms
>>>>>>>=20
>>>>>>> and with the optimisation:
>>>>>>> 41791 packets transmitted, 41764 received, +25 duplicates, 0% =
packet loss, time 3539msrtt min/avg/max/mdev =3D =
0.030/0.188/1261.042/8.459 ms, pipe 14742, ipg/ewma 0.084/0.039 ms
>>>>>>>=20
>>>>>>> So our average latency drops quite significantly (0.228 -> =
0.188), as does CPU load (not shown above).
>>>>>>>=20
>>>>>>> I've not committed these changes to the mainstream yet until I =
test out TCP more, but it's getting there!
>>>>>>>=20
>>>>>>> -anil
>>>>>>=20
>>>>>>=20
>>>>>=20
>>>=20
>>>> diff --git a/drivers/net/xen-netback/netback.c =
b/drivers/net/xen-netback/netback.c
>>>> index 3f27707..1a6f816 100644
>>>> --- a/drivers/net/xen-netback/netback.c
>>>> +++ b/drivers/net/xen-netback/netback.c
>>>> @@ -776,8 +776,7 @@ static struct xenvif =
*poll_net_schedule_list(struct xen_netbk *netbk)
>>>>=20
>>>>   vif =3D list_first_entry(&netbk->net_schedule_list,
>>>>                          struct xenvif, schedule_list);
>>>> -   if (!vif)
>>>> -           goto out;
>>>> +   BUG_ON(!vif);
>>>>=20
>>>>   xenvif_get(vif);
>>>>=20
>>>> @@ -857,7 +856,9 @@ static void tx_credit_callback(unsigned long =
data)
>>>> }
>>>>=20
>>>> static void netbk_tx_err(struct xenvif *vif,
>>>> -                    struct xen_netif_tx_request *txp, RING_IDX =
end)
>>>> +                    struct xen_netif_tx_request *txp,
>>>> +                    RING_IDX end,
>>>> +                    int fatal)
>>>> {
>>>>   RING_IDX cons =3D vif->tx.req_cons;
>>>>=20
>>>> @@ -868,8 +869,15 @@ static void netbk_tx_err(struct xenvif *vif,
>>>>           txp =3D RING_GET_REQUEST(&vif->tx, cons++);
>>>>   } while (1);
>>>>   vif->tx.req_cons =3D cons;
>>>> -   xen_netbk_check_rx_xenvif(vif);
>>>> +   if (!fatal) {
>>>> +           /* If this is a fatal error then we don't need to poll
>>>> +              the device again (and doing so might lead to some
>>>> +              quite bad behaviour if the ring structure has
>>>> +              become corrupted in some way). */
>>>> +           xen_netbk_check_rx_xenvif(vif);
>>>> +   }
>>>>   xenvif_put(vif);
>>>> +
>>>> }
>>>>=20
>>>> static int netbk_count_requests(struct xenvif *vif,
>>>> @@ -1232,7 +1240,9 @@ static unsigned =
xen_netbk_tx_build_gops(struct xen_netbk *netbk)
>>>>   struct gnttab_copy *gop =3D netbk->tx_copy_ops, *request_gop;
>>>>   struct sk_buff *skb;
>>>>   int ret;
>>>> +   int cntr;
>>>>=20
>>>> +   cntr =3D 0;
>>>>   while (((nr_pending_reqs(netbk) + MAX_SKB_FRAGS) < =
MAX_PENDING_REQS) &&
>>>>           !list_empty(&netbk->net_schedule_list)) {
>>>>           struct xenvif *vif;
>>>> @@ -1245,15 +1255,43 @@ static unsigned =
xen_netbk_tx_build_gops(struct xen_netbk *netbk)
>>>>           int work_to_do;
>>>>           unsigned int data_len;
>>>>           pending_ring_idx_t index;
>>>> +           int loud;
>>>> +
>>>> +           cntr++;
>>>> +           loud =3D 0;
>>>> +           if (cntr % 1000 =3D=3D 0) {
>>>> +                   printk("<0>In xen_netbk_tx_build_gops; done %d =
iterations so far\n",
>>>> +                          cntr);
>>>> +                   printk("<0>nr_pending_reqs %d\n",
>>>> +                          nr_pending_reqs(netbk));
>>>> +                   loud =3D 1;
>>>> +           }
>>>>=20
>>>>           /* Get a netif from the list with work to do. */
>>>>           vif =3D poll_net_schedule_list(netbk);
>>>> -           if (!vif)
>>>> +           if (!vif) {
>>>> +                   /* This can sometimes happen because the test
>>>> +                      of list_empty(net_schedule_list) at the top
>>>> +                      of the loop is unlocked.  Just go back and
>>>> +                      have another look. */
>>>> +                   printk("<0>No vif, keep going\n");
>>>>                   continue;
>>>> +           }
>>>> +
>>>> +           if (loud) {
>>>> +                   printk("<0>Ring status: rsp_prod_pvt %x, =
req_cons %x\n",
>>>> +                          vif->tx.rsp_prod_pvt, vif->tx.req_cons);
>>>> +                   printk("<0>Shared: req_prod %x, req_event %x, =
rsp_prod %x, rsp_event %x\n",
>>>> +                          vif->tx.sring->req_prod,
>>>> +                          vif->tx.sring->req_event,
>>>> +                          vif->tx.sring->rsp_prod,
>>>> +                          vif->tx.sring->rsp_event);
>>>> +           }
>>>>=20
>>>>           RING_FINAL_CHECK_FOR_REQUESTS(&vif->tx, work_to_do);
>>>>           if (!work_to_do) {
>>>>                   xenvif_put(vif);
>>>> +                   printk("<0>No work on %p\n", vif);
>>>>                   continue;
>>>>           }
>>>>=20
>>>> @@ -1264,6 +1302,7 @@ static unsigned =
xen_netbk_tx_build_gops(struct xen_netbk *netbk)
>>>>           /* Credit-based scheduling. */
>>>>           if (txreq.size > vif->remaining_credit &&
>>>>               tx_credit_exceeded(vif, txreq.size)) {
>>>> +                   printk("<0>Stopped by credit scheduler\n");
>>>>                   xenvif_put(vif);
>>>>                   continue;
>>>>           }
>>>> @@ -1279,14 +1318,14 @@ static unsigned =
xen_netbk_tx_build_gops(struct xen_netbk *netbk)
>>>>                                                     work_to_do);
>>>>                   idx =3D vif->tx.req_cons;
>>>>                   if (unlikely(work_to_do < 0)) {
>>>> -                           netbk_tx_err(vif, &txreq, idx);
>>>> +                           netbk_tx_err(vif, &txreq, idx, 1);
>>>>                           continue;
>>>>                   }
>>>>           }
>>>>=20
>>>>           ret =3D netbk_count_requests(vif, &txreq, txfrags, =
work_to_do);
>>>>           if (unlikely(ret < 0)) {
>>>> -                   netbk_tx_err(vif, &txreq, idx - ret);
>>>> +                   netbk_tx_err(vif, &txreq, idx - ret, 1);
>>>>                   continue;
>>>>           }
>>>>           idx +=3D ret;
>>>> @@ -1294,7 +1333,7 @@ static unsigned =
xen_netbk_tx_build_gops(struct xen_netbk *netbk)
>>>>           if (unlikely(txreq.size < ETH_HLEN)) {
>>>>                   netdev_dbg(vif->dev,
>>>>                              "Bad packet size: %d\n", txreq.size);
>>>> -                   netbk_tx_err(vif, &txreq, idx);
>>>> +                   netbk_tx_err(vif, &txreq, idx, 1);
>>>>                   continue;
>>>>           }
>>>>=20
>>>> @@ -1304,7 +1343,7 @@ static unsigned =
xen_netbk_tx_build_gops(struct xen_netbk *netbk)
>>>>                              "txreq.offset: %x, size: %u, end: =
%lu\n",
>>>>                              txreq.offset, txreq.size,
>>>>                              (txreq.offset&~PAGE_MASK) + =
txreq.size);
>>>> -                   netbk_tx_err(vif, &txreq, idx);
>>>> +                   netbk_tx_err(vif, &txreq, idx, 1);
>>>>                   continue;
>>>>           }
>>>>=20
>>>> @@ -1320,7 +1359,7 @@ static unsigned =
xen_netbk_tx_build_gops(struct xen_netbk *netbk)
>>>>           if (unlikely(skb =3D=3D NULL)) {
>>>>                   netdev_dbg(vif->dev,
>>>>                              "Can't allocate a skb in =
start_xmit.\n");
>>>> -                   netbk_tx_err(vif, &txreq, idx);
>>>> +                   netbk_tx_err(vif, &txreq, idx, 0);
>>>>                   break;
>>>>           }
>>>>=20
>>>> @@ -1333,7 +1372,8 @@ static unsigned =
xen_netbk_tx_build_gops(struct xen_netbk *netbk)
>>>>=20
>>>>                   if (netbk_set_skb_gso(vif, skb, gso)) {
>>>>                           kfree_skb(skb);
>>>> -                           netbk_tx_err(vif, &txreq, idx);
>>>> +                           netbk_tx_err(vif, &txreq, idx, 1);
>>>> +                           printk("<0>Killed by =
netbk_set_skb_gso\n");
>>>>                           continue;
>>>>                   }
>>>>           }
>>>> @@ -1342,7 +1382,8 @@ static unsigned =
xen_netbk_tx_build_gops(struct xen_netbk *netbk)
>>>>           page =3D xen_netbk_alloc_page(netbk, skb, pending_idx);
>>>>           if (!page) {
>>>>                   kfree_skb(skb);
>>>> -                   netbk_tx_err(vif, &txreq, idx);
>>>> +                   netbk_tx_err(vif, &txreq, idx, 0);
>>>> +                   printk("<0>No pages for payload?\n");
>>>>                   continue;
>>>>           }
>>>>=20
>>>> @@ -1382,7 +1423,7 @@ static unsigned =
xen_netbk_tx_build_gops(struct xen_netbk *netbk)
>>>>                                                skb, txfrags, gop);
>>>>           if (request_gop =3D=3D NULL) {
>>>>                   kfree_skb(skb);
>>>> -                   netbk_tx_err(vif, &txreq, idx);
>>>> +                   netbk_tx_err(vif, &txreq, idx, 0);
>>>>                   continue;
>>>>           }
>>>>           gop =3D request_gop;
>>>=20
>>>=20
>>> --
>>> Anil Madhavapeddy                                 =
http://anil.recoil.org
>>>=20
>>=20
>> --
>> Anil Madhavapeddy                                 =
http://anil.recoil.org
>>=20
>=20



From avsm@dark.recoil.org Wed Jan 09 12:07:25 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TsuRJ-0000km-4t (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <avsm@dark.recoil.org>); Wed, 09 Jan 2013 12:07:25 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1428749
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:40750
	helo=dark.recoil.org)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1TsuRI-0001Ci-WW (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <avsm@dark.recoil.org>); Wed, 09 Jan 2013 12:07:25 +0000
Received: (qmail 3178 invoked by uid 10000); 9 Jan 2013 12:07:23 -0000
Date: Wed, 9 Jan 2013 12:07:23 +0000
From: Anil Madhavapeddy <anil@recoil.org>
To: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
Subject: Re: data structure lockin
Message-ID: <20130109120723.GN2729@dark.recoil.org>
References: <9179FFE3-4CF3-4F06-BC65-7FAC7B146621@recoil.org>
	<C96B39E3-E194-4197-A32D-895F3B3B78D6@nottingham.ac.uk>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <C96B39E3-E194-4197-A32D-895F3B3B78D6@nottingham.ac.uk>
User-Agent: Mutt/1.5.21 (2010-09-15)
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: Wed, 09 Jan 2013 12:07:25 -0000
Content-Length: 554
Lines: 19

On Tue, Jan 08, 2013 at 06:00:51AM +0000, Richard Mortier wrote:
> 
> On 3 Jan 2013, at 16:37, Anil Madhavapeddy wrote:
> 
> > This is primarily because polymorphic hashtables are quick and
> > easy, but luckily refactoring them is also quite easy. 
> 
> fwiw came across the following post describing such refactoring (for unit testing, but hey):
> 
> http://mcclurmc.wordpress.com/2012/12/18/ocaml-pattern-easy-functor/
> 
> thought it might be of interest to others...

Mike's on the mailing list :-)

Any update on that Criterion idea, Mike?

-anil


From Richard.Mortier@nottingham.ac.uk Wed Jan 09 13:19:59 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TsvZX-00031V-Ew (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Wed, 09 Jan 2013 13:19:59 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1428749 
	* 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]:48652)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1TsvZX-0006w0-mn (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Wed, 09 Jan 2013 13:19:59 +0000
Received: (qmail 2007 invoked from network); 9 Jan 2013 13:19:57 -0000
Received: from localhost (127.0.0.1)
	by engine04-20433-4.icritical.com with SMTP; 9 Jan 2013 13:19:57 -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 31543-04 for <cl-mirage@lists.cam.ac.uk>;
	Wed,  9 Jan 2013 13:19:56 +0000 (GMT)
Received: (qmail 1982 invoked by uid 599); 9 Jan 2013 13:19:55 -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, 09 Jan 2013 13:19:55 +0000
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 1TsvZU-0007iq-7Q
	for cl-mirage@lists.cam.ac.uk; Wed, 09 Jan 2013 13:19:56 +0000
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Anil Madhavapeddy <anil@recoil.org>
Date: Wed, 9 Jan 2013 13:19:55 +0000
Subject: Re: data structure lockin
Thread-Topic: data structure lockin
Thread-Index: Ac3ubAQqllYD4NXKTVeixyXZcNAWpw==
Message-ID: <908E945A-B1E0-4E28-8C67-1CCA81596B4D@nottingham.ac.uk>
References: <9179FFE3-4CF3-4F06-BC65-7FAC7B146621@recoil.org>
	<C96B39E3-E194-4197-A32D-895F3B3B78D6@nottingham.ac.uk>
	<20130109120723.GN2729@dark.recoil.org>
In-Reply-To: <20130109120723.GN2729@dark.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@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: Wed, 09 Jan 2013 13:19:59 -0000
Content-Length: 911
Lines: 22


On 9 Jan 2013, at 17:37, Anil Madhavapeddy wrote:

> Mike's on the mailing list :-)

i sort of knew that; but it seemed interesting anyway ;p

--=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 Thu Jan 10 09:55:29 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TtErB-0003oo-Jh (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Thu, 10 Jan 2013 09:55:29 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1428749 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.212.48 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 HTML_MESSAGE BODY: HTML included in message
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-vb0-f48.google.com ([209.85.212.48]:40334)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1TtEr9-0004ji-sg (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Thu, 10 Jan 2013 09:55:29 +0000
Received: by mail-vb0-f48.google.com with SMTP id fc21so304690vbb.21
	for <cl-mirage@lists.cam.ac.uk>; Thu, 10 Jan 2013 01:55:27 -0800 (PST)
MIME-Version: 1.0
Received: by 10.52.156.72 with SMTP id wc8mr78927710vdb.77.1357811727342; Thu,
	10 Jan 2013 01:55:27 -0800 (PST)
Received: by 10.220.38.131 with HTTP; Thu, 10 Jan 2013 01:55:27 -0800 (PST)
Date: Thu, 10 Jan 2013 09:55:27 +0000
Message-ID: <CAG_esB2q05kPHgbkss+Pb-7hu=vcjjXo5WoQLUr0aN=OE053kA@mail.gmail.com>
Subject: mirage direct networking (TCP et al) working again
From: David Scott <scott.dj@gmail.com>
To: Mirage List <cl-mirage@lists.cam.ac.uk>
Content-Type: multipart/alternative; boundary=bcaec53aef5cae1bf104d2ec2d96
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, 10 Jan 2013 09:55:29 -0000
Content-Length: 981
Lines: 25

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

After a couple of bugfixes, the current mirage-net/direct network stack is
working again. I've tested mirage-www successfully on both unix-direct and
xen backends.

FYI the bugfixes were:

* pre-zeroing the netfront shared ring
* fixing the IPv4 header calculation so that it includes the TCP header
length (oops!)

Cheers,
Dave

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

<div dir="ltr">After a couple of bugfixes, the current mirage-net/direct network stack is working again. I&#39;ve tested mirage-www successfully on both unix-direct and xen backends.<div><br></div><div>FYI the bugfixes were:</div>
<div><br></div><div>* pre-zeroing the netfront shared ring</div><div>* fixing the IPv4 header calculation so that it includes the TCP header length (oops!)</div><div><br></div><div>Cheers,</div><div>Dave</div><div><br></div>
</div>

--bcaec53aef5cae1bf104d2ec2d96--


From anil@recoil.org Thu Jan 10 10:08:00 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TtF3I-0004Md-JA (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 10 Jan 2013 10:08:00 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1428749
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:37193
	helo=dark.recoil.org)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1TtF3I-0006AZ-n8 (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 10 Jan 2013 10:08:00 +0000
Received: (qmail 17789 invoked by uid 634); 10 Jan 2013 10:07:59 -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.10]) (62.49.66.12)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Thu, 10 Jan 2013 10:07:58 +0000
Content-Type: text/plain; charset=iso-8859-1
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
Subject: Re: mirage direct networking (TCP et al) working again
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <CAG_esB2q05kPHgbkss+Pb-7hu=vcjjXo5WoQLUr0aN=OE053kA@mail.gmail.com>
Date: Thu, 10 Jan 2013 10:07:53 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <E127452D-DC9A-4F85-B191-B3C52105715C@recoil.org>
References: <CAG_esB2q05kPHgbkss+Pb-7hu=vcjjXo5WoQLUr0aN=OE053kA@mail.gmail.com>
To: David Scott <scott.dj@gmail.com>
X-Mailer: Apple Mail (2.1499)
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: Thu, 10 Jan 2013 10:08:00 -0000
Content-Length: 501
Lines: 21

Yay! Balraj: do you want to try your iperf self-test again?

-anil

On 10 Jan 2013, at 09:55, David Scott <scott.dj@gmail.com> wrote:

> After a couple of bugfixes, the current mirage-net/direct network =
stack is working again. I've tested mirage-www successfully on both =
unix-direct and xen backends.
>=20
> FYI the bugfixes were:
>=20
> * pre-zeroing the netfront shared ring
> * fixing the IPv4 header calculation so that it includes the TCP =
header length (oops!)
>=20
> Cheers,
> Dave
>=20



From scott.dj@gmail.com Thu Jan 10 16:31:13 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TtL29-0005Qw-8C (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Thu, 10 Jan 2013 16:31:13 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1428749 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.220.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 HTML_MESSAGE BODY: HTML included in message
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-vc0-f182.google.com ([209.85.220.182]:34218)
	by ppsw-41.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1TtL28-0002N9-Ry (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Thu, 10 Jan 2013 16:31:13 +0000
Received: by mail-vc0-f182.google.com with SMTP id fy27so534619vcb.27
	for <cl-mirage@lists.cam.ac.uk>; Thu, 10 Jan 2013 08:31:12 -0800 (PST)
MIME-Version: 1.0
Received: by 10.58.248.41 with SMTP id yj9mr93829618vec.29.1357835471982; Thu,
	10 Jan 2013 08:31:11 -0800 (PST)
Received: by 10.220.38.131 with HTTP; Thu, 10 Jan 2013 08:31:11 -0800 (PST)
Date: Thu, 10 Jan 2013 16:31:11 +0000
Message-ID: <CAG_esB1k4PW_-dpe62bU+5sEAsxJ9JBZv2p6K+KhpZD=HxNpsQ@mail.gmail.com>
Subject: netback behaviour (mirage under xen)
From: David Scott <scott.dj@gmail.com>
To: Mirage List <cl-mirage@lists.cam.ac.uk>
Content-Type: multipart/alternative; boundary=047d7bf0d0b2f890f204d2f1b436
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, 10 Jan 2013 16:31:13 -0000
Content-Length: 3549
Lines: 74

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

Hi,

Balraj and I are seeing some strange network transmit behaviour which is
either a bug in our frontend or the linux backend -- does anyone know which
is most likely? :-)

Most of our transmitted packets have been split into 2 fragments: one
containing headers and the other containing application data. When we push
the fragments to the netfront transmit ring, we include the whole packet
length and set the "more data" bit on the first fragment. The vast majority
of the time this works fine so I'm confident we've written the requests
properly.

However if I put a "sleep 1" between writing the fragments then netback in
dom0 will (from my PoV) prematurely transmit the packet with only the first
fragment. The packet is the full requested size but there are zeroes where
the second fragment should be. The second fragment is then transmitted
afterwards and is obviously dropped pretty quickly because it has
application data where the ethernet/IP/... headers should be.

The only thing I can see that we might be doing wrong is we're updating the
shared request pointer per fragment rather than per packet. This will allow
the backend to see the initial fragment by itself if it has time to look
(hence the sleep 1 triggering the problem). However given the packet is
clearly incomplete I'm surprised the backend is prepared to transmit it
anyway.

I suspect a workaround will probably be to update the request pointer per
packet rather than per fragment.

Anyone have any thoughts?

Cheers,
-- 
Dave Scott

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

<div dir=3D"ltr">Hi,<div><br></div><div>Balraj and I are seeing some strang=
e network transmit behaviour which is either a bug in our frontend or the l=
inux backend -- does anyone know which is most likely? :-)</div><div><br></=
div>
<div>Most of our transmitted packets have been split into 2 fragments: one =
containing headers and the other containing application data. When we push =
the fragments to the netfront transmit ring, we include the whole packet le=
ngth and set the &quot;more data&quot; bit on the first fragment. The vast =
majority of the time this works fine so I&#39;m confident we&#39;ve written=
 the requests properly.</div>
<div><br></div><div>However if I put a &quot;sleep 1&quot; between writing =
the fragments then netback in dom0 will (from my PoV) prematurely transmit =
the packet with only the first fragment. The packet is the full requested s=
ize but there are zeroes where the second fragment should be. The second fr=
agment is then transmitted afterwards and is obviously dropped pretty quick=
ly because it has application data where the ethernet/IP/... headers should=
 be.</div>
<div><div><br></div><div>The only thing I can see that we might be doing wr=
ong is we&#39;re updating the shared request pointer per fragment rather th=
an per packet. This will allow the backend to see the initial fragment by i=
tself if it has time to look (hence the sleep 1 triggering the problem). Ho=
wever given the packet is clearly incomplete I&#39;m surprised the backend =
is prepared to transmit it anyway.</div>
<div><br></div><div>I suspect a workaround will probably be to update the r=
equest pointer per packet rather than per fragment.</div><div><br></div><di=
v>Anyone have any thoughts?</div><div><br></div><div>Cheers,</div>-- <br>
Dave Scott
</div></div>

--047d7bf0d0b2f890f204d2f1b436--


From sos22@hermes.cam.ac.uk Thu Jan 10 17:13:24 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TtLgy-00072J-Uj (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <sos22@hermes.cam.ac.uk>); Thu, 10 Jan 2013 17:13:24 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: not scanned
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from host217-42-60-158.range217-42.btcentralplus.com
	([217.42.60.158]:33070 helo=localhost)
	by ppsw-51.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.158]:465)
	with esmtpsa (LOGIN:sos22) (TLSv1:DHE-RSA-AES256-SHA:256)
	id 1TtLgy-0007Ul-Ym (Exim 4.72)
	(return-path <sos22@hermes.cam.ac.uk>); Thu, 10 Jan 2013 17:13:24 +0000
Date: Thu, 10 Jan 2013 16:43:33 +0000
From: Steven Smith <sos22@srcf.ucam.org>
To: David Scott <scott.dj@gmail.com>
Subject: Re: netback behaviour (mirage under xen)
Message-ID: <20130110164333.GA9854@sonofmaas>
References: <CAG_esB1k4PW_-dpe62bU+5sEAsxJ9JBZv2p6K+KhpZD=HxNpsQ@mail.gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <CAG_esB1k4PW_-dpe62bU+5sEAsxJ9JBZv2p6K+KhpZD=HxNpsQ@mail.gmail.com>
Sender: Steven Smith <sos22@hermes.cam.ac.uk>
Cc: sos22@srcf.ucam.org, 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, 10 Jan 2013 17:13:25 -0000
Content-Length: 1243
Lines: 24

> However if I put a "sleep 1" between writing the fragments then netback in
> dom0 will (from my PoV) prematurely transmit the packet with only the first
> fragment. The packet is the full requested size but there are zeroes where
> the second fragment should be. The second fragment is then transmitted
> afterwards and is obviously dropped pretty quickly because it has
> application data where the ethernet/IP/... headers should be.
> 
> The only thing I can see that we might be doing wrong is we're updating the
> shared request pointer per fragment rather than per packet. This will allow
> the backend to see the initial fragment by itself if it has time to look
> (hence the sleep 1 triggering the problem).
Yeah, don't do that, it doesn't work.  Netback assumes that you only
put whole packets on the ring before updating the indices, and will
get quite confused if you push in partial ones.  It's supposed to drop
the entire packet and return an error, rather than splitting it in
half, but that's not even slightly tested, so it really doesn't
surprise me that it's a bit broken.

> I suspect a workaround will probably be to update the request pointer per
> packet rather than per fragment.
That's the correct fix, yes.

Steven.


From scott.dj@gmail.com Thu Jan 10 17:16:22 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TtLjq-0007A0-96 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Thu, 10 Jan 2013 17:16:22 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1428749 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.220.173 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 HTML_MESSAGE BODY: HTML included in message
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-vc0-f173.google.com ([209.85.220.173]:34117)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1TtLjp-0000G5-Ym (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <scott.dj@gmail.com>); Thu, 10 Jan 2013 17:16:22 +0000
Received: by mail-vc0-f173.google.com with SMTP id f13so567327vcb.4
	for <cl-mirage@lists.cam.ac.uk>; Thu, 10 Jan 2013 09:16:21 -0800 (PST)
MIME-Version: 1.0
Received: by 10.58.248.41 with SMTP id yj9mr93960750vec.29.1357838181143; Thu,
	10 Jan 2013 09:16:21 -0800 (PST)
Received: by 10.220.38.131 with HTTP; Thu, 10 Jan 2013 09:16:21 -0800 (PST)
In-Reply-To: <20130110164333.GA9854@sonofmaas>
References: <CAG_esB1k4PW_-dpe62bU+5sEAsxJ9JBZv2p6K+KhpZD=HxNpsQ@mail.gmail.com>
	<20130110164333.GA9854@sonofmaas>
Date: Thu, 10 Jan 2013 17:16:21 +0000
Message-ID: <CAG_esB0Nw_MxeY6KYd50xnASwu0TyMRBsR-SqRS5aVsYffXmMg@mail.gmail.com>
Subject: Re: netback behaviour (mirage under xen)
From: David Scott <scott.dj@gmail.com>
To: Steven Smith <sos22@srcf.ucam.org>
Content-Type: multipart/alternative; boundary=047d7bf0d0b27315d804d2f25688
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, 10 Jan 2013 17:16:22 -0000
Content-Length: 3077
Lines: 74

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

Dave wondered:

> >
> > The only thing I can see that we might be doing wrong is we're updating
> the
> > shared request pointer per fragment rather than per packet. This will
> allow
> > the backend to see the initial fragment by itself if it has time to look
> > (hence the sleep 1 triggering the problem).
>

 On Thu, Jan 10, 2013 at 4:43 PM, Steven Smith <sos22@srcf.ucam.org> wrote:

> Yeah, don't do that, it doesn't work.  Netback assumes that you only
> put whole packets on the ring before updating the indices, and will
> get quite confused if you push in partial ones.  It's supposed to drop
> the entire packet and return an error, rather than splitting it in
> half, but that's not even slightly tested, so it really doesn't
> surprise me that it's a bit broken.
>
> > I suspect a workaround will probably be to update the request pointer per
> > packet rather than per fragment.
> That's the correct fix, yes.
>

Great, thanks for clearing that up!

Cheers,
Dave

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

<div dir=3D"ltr"><div class=3D"gmail_extra"><br>Dave wondered:</div><div cl=
ass=3D"gmail_extra"><div class=3D"gmail_quote"><blockquote class=3D"gmail_q=
uote" style=3D"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-lef=
t:0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-lef=
t-style:solid;padding-left:1ex">
<div class=3D"im">&gt;<br>
&gt; The only thing I can see that we might be doing wrong is we&#39;re upd=
ating the<br>
&gt; shared request pointer per fragment rather than per packet. This will =
allow<br>
&gt; the backend to see the initial fragment by itself if it has time to lo=
ok<br>
&gt; (hence the sleep 1 triggering the problem).<br></div></blockquote><div=
><br></div><div>=A0On Thu, Jan 10, 2013 at 4:43 PM, Steven Smith &lt;<a hre=
f=3D"mailto:sos22@srcf.ucam.org">sos22@srcf.ucam.org</a>&gt; wrote:</div><b=
lockquote class=3D"gmail_quote" style=3D"margin-top:0px;margin-right:0px;ma=
rgin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:r=
gb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class=3D"im">
</div>Yeah, don&#39;t do that, it doesn&#39;t work. =A0Netback assumes that=
 you only<br>
put whole packets on the ring before updating the indices, and will<br>
get quite confused if you push in partial ones. =A0It&#39;s supposed to dro=
p<br>
the entire packet and return an error, rather than splitting it in<br>
half, but that&#39;s not even slightly tested, so it really doesn&#39;t<br>
surprise me that it&#39;s a bit broken.<br>
<div class=3D"im"><br>
&gt; I suspect a workaround will probably be to update the request pointer =
per<br>
&gt; packet rather than per fragment.<br>
</div>That&#39;s the correct fix, yes.<br></blockquote><div><br></div><div>=
Great, thanks for clearing that up!</div><div><br></div><div>Cheers,</div><=
div>Dave</div></div></div></div>

--047d7bf0d0b27315d804d2f25688--


From balraj885@gmail.com Thu Jan 10 17:16:32 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TtLk0-0007B1-IZ (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <balraj885@gmail.com>); Thu, 10 Jan 2013 17:16:32 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.4 from SpamAssassin-3.3.2-1428749 
	* -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 *       (balraj885[at]gmail.com)
	* 0.2 FREEMAIL_ENVFROM_END_DIGIT Envelope-from freemail username ends
	in *      digit (balraj885[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.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-ie0-f170.google.com ([209.85.223.170]:44498)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1TtLjz-00087Q-qd (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <balraj885@gmail.com>); Thu, 10 Jan 2013 17:16:32 +0000
Received: by mail-ie0-f170.google.com with SMTP id k10so1131714iea.15
	for <cl-mirage@lists.cam.ac.uk>; Thu, 10 Jan 2013 09:16:30 -0800 (PST)
MIME-Version: 1.0
Received: by 10.50.33.178 with SMTP id s18mr1487070igi.100.1357838190605; Thu,
	10 Jan 2013 09:16:30 -0800 (PST)
Sender: balraj885@gmail.com
Received: by 10.64.9.1 with HTTP; Thu, 10 Jan 2013 09:16:30 -0800 (PST)
In-Reply-To: <CAG_esB1k4PW_-dpe62bU+5sEAsxJ9JBZv2p6K+KhpZD=HxNpsQ@mail.gmail.com>
References: <CAG_esB1k4PW_-dpe62bU+5sEAsxJ9JBZv2p6K+KhpZD=HxNpsQ@mail.gmail.com>
Date: Thu, 10 Jan 2013 17:16:30 +0000
X-Google-Sender-Auth: rxIWbf3iOF24Z5qGNFjL88S9e7U
Message-ID: <CANeYhgEosM6JO0Db02QT6nkvd6sK_VgubzrZ5NNC_sc=a+aytw@mail.gmail.com>
Subject: Re: netback behaviour (mirage under xen)
From: Balraj Singh <balrajsingh@ieee.org>
To: David Scott <scott.dj@gmail.com>
Content-Type: multipart/alternative; boundary=f46d044630d603749104d2f25744
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, 10 Jan 2013 17:16:32 -0000
Content-Length: 5590
Lines: 115

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

Adding to what Dave said, another way to trigger this is to load the system
with a large TCP transfer across a fat pipe.  If TCP reaches the point
where some packet loss starts to occur (possibly because the TX ring is
full), then the segments retransmitted by fast retransmit path in tcp now
look like what Dave described - the header is fine but the payload is all
zeros.  This seg would be dropped by the receiving TCP (bad checksum) and
then the whole transmission would grind to a halt till the retransmission
timer kicks in.  Interestingly when that same packet is retransmitted by
the timer (at this point the load would be back down to zero), the segment
is fine and the transmission starts up again.

Thanks,

Balraj


On Thu, Jan 10, 2013 at 4:31 PM, David Scott <scott.dj@gmail.com> wrote:

> Hi,
>
> Balraj and I are seeing some strange network transmit behaviour which is
> either a bug in our frontend or the linux backend -- does anyone know which
> is most likely? :-)
>
> Most of our transmitted packets have been split into 2 fragments: one
> containing headers and the other containing application data. When we push
> the fragments to the netfront transmit ring, we include the whole packet
> length and set the "more data" bit on the first fragment. The vast majority
> of the time this works fine so I'm confident we've written the requests
> properly.
>
> However if I put a "sleep 1" between writing the fragments then netback in
> dom0 will (from my PoV) prematurely transmit the packet with only the first
> fragment. The packet is the full requested size but there are zeroes where
> the second fragment should be. The second fragment is then transmitted
> afterwards and is obviously dropped pretty quickly because it has
> application data where the ethernet/IP/... headers should be.
>
> The only thing I can see that we might be doing wrong is we're updating
> the shared request pointer per fragment rather than per packet. This will
> allow the backend to see the initial fragment by itself if it has time to
> look (hence the sleep 1 triggering the problem). However given the packet
> is clearly incomplete I'm surprised the backend is prepared to transmit it
> anyway.
>
> I suspect a workaround will probably be to update the request pointer per
> packet rather than per fragment.
>
> Anyone have any thoughts?
>
> Cheers,
> --
> Dave Scott
>

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

Adding to what Dave said, another way to trigger this is to load the system=
 with a large TCP transfer across a fat pipe.=A0 If TCP reaches the point w=
here some packet loss starts to occur (possibly because the TX ring is full=
), then the segments retransmitted by fast retransmit path in tcp now look =
like what Dave described - the header is fine but the payload is all zeros.=
=A0 This seg would be dropped by the receiving TCP (bad checksum) and then =
the whole transmission would grind to a halt till the retransmission timer =
kicks in.=A0 Interestingly when that same packet is retransmitted by the ti=
mer (at this point the load would be back down to zero), the segment is fin=
e and the transmission starts up again.<br>
<br>Thanks,<br><br>Balraj<br><br><br><div class=3D"gmail_quote">On Thu, Jan=
 10, 2013 at 4:31 PM, David Scott <span dir=3D"ltr">&lt;<a href=3D"mailto:s=
cott.dj@gmail.com" target=3D"_blank">scott.dj@gmail.com</a>&gt;</span> wrot=
e:<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>Balr=
aj and I are seeing some strange network transmit behaviour which is either=
 a bug in our frontend or the linux backend -- does anyone know which is mo=
st likely? :-)</div>
<div><br></div>
<div>Most of our transmitted packets have been split into 2 fragments: one =
containing headers and the other containing application data. When we push =
the fragments to the netfront transmit ring, we include the whole packet le=
ngth and set the &quot;more data&quot; bit on the first fragment. The vast =
majority of the time this works fine so I&#39;m confident we&#39;ve written=
 the requests properly.</div>

<div><br></div><div>However if I put a &quot;sleep 1&quot; between writing =
the fragments then netback in dom0 will (from my PoV) prematurely transmit =
the packet with only the first fragment. The packet is the full requested s=
ize but there are zeroes where the second fragment should be. The second fr=
agment is then transmitted afterwards and is obviously dropped pretty quick=
ly because it has application data where the ethernet/IP/... headers should=
 be.</div>

<div><div><br></div><div>The only thing I can see that we might be doing wr=
ong is we&#39;re updating the shared request pointer per fragment rather th=
an per packet. This will allow the backend to see the initial fragment by i=
tself if it has time to look (hence the sleep 1 triggering the problem). Ho=
wever given the packet is clearly incomplete I&#39;m surprised the backend =
is prepared to transmit it anyway.</div>

<div><br></div><div>I suspect a workaround will probably be to update the r=
equest pointer per packet rather than per fragment.</div><div><br></div><di=
v>Anyone have any thoughts?</div><div><br></div><div>Cheers,</div><span cla=
ss=3D"HOEnZb"><font color=3D"#888888">-- <br>

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

--f46d044630d603749104d2f25744--


From mailinglists.tech@gmail.com Fri Jan 11 09:27:58 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Ttau6-0006ib-7Z (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <mailinglists.tech@gmail.com>);
	Fri, 11 Jan 2013 09:27:58 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1428749 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.212.173 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (mailinglists.tech[at]gmail.com)
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f173.google.com ([209.85.212.173]:48991)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1Ttau5-0007r7-oF (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <mailinglists.tech@gmail.com>);
	Fri, 11 Jan 2013 09:27:58 +0000
Received: by mail-wi0-f173.google.com with SMTP id hn17so1805407wib.6
	for <cl-mirage@lists.cam.ac.uk>; Fri, 11 Jan 2013 01:27:57 -0800 (PST)
MIME-Version: 1.0
Received: by 10.180.8.130 with SMTP id r2mr14248930wia.28.1357896477392; Fri,
	11 Jan 2013 01:27:57 -0800 (PST)
Received: by 10.227.69.3 with HTTP; Fri, 11 Jan 2013 01:27:57 -0800 (PST)
Date: Fri, 11 Jan 2013 10:27:57 +0100
Message-ID: <CAMCOOJsPYbfO72jFYBdudhYr0W43yBTRD-9ZiNRY2KYud4AS5g@mail.gmail.com>
Subject: [User Question] Correct XSM/FLASK ruleset for oxenstored
From: tech mailinglists <mailinglists.tech@gmail.com>
To: cl-mirage@lists.cam.ac.uk
Content-Type: multipart/alternative; boundary=f46d0444029a2d3ff304d2ffe911
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, 11 Jan 2013 09:27:58 -0000
Content-Length: 1669
Lines: 36

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

Hello all,

I am actually working on Dom0 disaggregation and wan't to use an oxenstored
stubdomain. But I have a problem to write the needed XSM/FLASK rule/rules.
So I understood that this rules are written like SELinux rules so a defined
application has a defined right. And for oxenstored the domctl
getdomaininfo right must be given. So I have builded the oxenstored stubdom
already like explained here:
http://www.openmirage.org/blog/xenstore-stub-domain and I am also running
on Linux 3.7.1 with pv_ops enabled. So I just need help to get good
XSM/FLASK files. Would be great to see an example for such a rule or
something like that.

Best Regards

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

<div dir=3D"ltr">Hello all,<br><br>I am actually working on Dom0 disaggrega=
tion and wan&#39;t to use an oxenstored stubdomain. But I have a problem to=
 write the needed XSM/FLASK rule/rules. So I understood that this rules are=
 written like SELinux rules so a defined application has a defined right. A=
nd for oxenstored the domctl getdomaininfo right must be given. So I have b=
uilded the oxenstored stubdom already like explained here: <a href=3D"http:=
//www.openmirage.org/blog/xenstore-stub-domain">http://www.openmirage.org/b=
log/xenstore-stub-domain</a> and I am also running on Linux 3.7.1 with pv_o=
ps enabled. So I just need help to get good XSM/FLASK files. Would be great=
 to see an example for such a rule or something like that.<br>
<br>Best Regards<br></div>

--f46d0444029a2d3ff304d2ffe911--


From Dave.Scott@eu.citrix.com Fri Jan 11 10:17:37 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Ttbg9-0000v8-6C (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <Dave.Scott@eu.citrix.com>);
	Fri, 11 Jan 2013 10:17:37 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1428749 
	*  0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
	*  0.0 HTML_MESSAGE BODY: HTML included in message
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from smtp.eu.citrix.com ([46.33.159.39]:32519)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1Ttbg7-0001tm-oG (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk (return-path <Dave.Scott@eu.citrix.com>);
	Fri, 11 Jan 2013 10:17:37 +0000
X-IronPort-AV: E=Sophos;i="4.84,451,1355097600"; d="scan'208,217";a="595094"
Received: from lonpmailmx01.citrite.net ([10.30.203.162])
	by LONPIPO01.EU.CITRIX.COM with ESMTP/TLS/RC4-MD5;
	11 Jan 2013 10:17:35 +0000
Received: from LONPMAILBOX01.citrite.net ([10.30.224.161]) by
	LONPMAILMX01.citrite.net ([10.30.203.162]) with mapi; Fri, 11 Jan 2013
	10:17:34 +0000
From: Dave Scott <Dave.Scott@eu.citrix.com>
To: 'tech mailinglists' <mailinglists.tech@gmail.com>,
	"cl-mirage@lists.cam.ac.uk" <cl-mirage@lists.cam.ac.uk>
Date: Fri, 11 Jan 2013 10:17:34 +0000
Subject: RE: [User Question] Correct XSM/FLASK ruleset for oxenstored
Thread-Topic: [User Question] Correct XSM/FLASK ruleset for oxenstored
Thread-Index: Ac3v3fLaUGu7iu0kQmyD9ARGM04u7gABnJ+A
Message-ID: <81A73678E76EA642801C8F2E4823AD21012F0D72EBFB@LONPMAILBOX01.citrite.net>
References: <CAMCOOJsPYbfO72jFYBdudhYr0W43yBTRD-9ZiNRY2KYud4AS5g@mail.gmail.com>
In-Reply-To: <CAMCOOJsPYbfO72jFYBdudhYr0W43yBTRD-9ZiNRY2KYud4AS5g@mail.gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US
Content-Type: multipart/alternative;
	boundary="_000_81A73678E76EA642801C8F2E4823AD21012F0D72EBFBLONPMAILBOX_"
MIME-Version: 1.0
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, 11 Jan 2013 10:17:37 -0000
Content-Length: 6452
Lines: 140

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

Hi,

Unfortunately I've not had a chance to play with XSM/FLASK just yet so I do=
n't have an XSM configuration lying around.

I recommend asking over on xen-users@lists.xen.org<mailto:xen-users@lists.x=
en.org>

Good luck!

Dave

From: cl-mirage-bounces@lists.cam.ac.uk [mailto:cl-mirage-bounces@lists.cam=
.ac.uk] On Behalf Of tech mailinglists
Sent: 11 January 2013 9:28 AM
To: cl-mirage@lists.cam.ac.uk
Subject: [User Question] Correct XSM/FLASK ruleset for oxenstored

Hello all,

I am actually working on Dom0 disaggregation and wan't to use an oxenstored=
 stubdomain. But I have a problem to write the needed XSM/FLASK rule/rules.=
 So I understood that this rules are written like SELinux rules so a define=
d application has a defined right. And for oxenstored the domctl getdomaini=
nfo right must be given. So I have builded the oxenstored stubdom already l=
ike explained here: http://www.openmirage.org/blog/xenstore-stub-domain and=
 I am also running on Linux 3.7.1 with pv_ops enabled. So I just need help =
to get good XSM/FLASK files. Would be great to see an example for such a ru=
le or something like that.

Best Regards

--_000_81A73678E76EA642801C8F2E4823AD21012F0D72EBFBLONPMAILBOX_
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 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
	{font-family:PMingLiU;
	panose-1:2 2 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:PMingLiU;
	panose-1:2 2 5 0 0 0 0 0 0 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
	{font-family:"\@PMingLiU";
	panose-1:2 2 5 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Times New Roman","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-reply;
	font-family:"Calibri","sans-serif";
	color:#1F497D;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-family:"Calibri","sans-serif";
	mso-fareast-language:ZH-TW;}
@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><span style=3D'f=
ont-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Hi,<o:p><=
/o:p></span></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-f=
amily:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p =
class=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"Calibri","sa=
ns-serif";color:#1F497D'>Unfortunately I&#8217;ve not had a chance to play =
with XSM/FLASK just yet so I don&#8217;t have an XSM configuration lying ar=
ound.<o:p></o:p></span></p><p class=3DMsoNormal><span style=3D'font-size:11=
.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></s=
pan></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"C=
alibri","sans-serif";color:#1F497D'>I recommend asking over on <a href=3D"m=
ailto:xen-users@lists.xen.org">xen-users@lists.xen.org</a> <o:p></o:p></spa=
n></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"Cal=
ibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=3DMs=
oNormal><span style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";=
color:#1F497D'>Good luck!<o:p></o:p></span></p><p class=3DMsoNormal><span s=
tyle=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>=
<o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span style=3D'font-size:1=
1.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Dave<o:p></o:p></sp=
an></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"Ca=
libri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><div style=
=3D'border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'><di=
v><div style=3D'border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0c=
m 0cm 0cm'><p class=3DMsoNormal><b><span lang=3DEN-US style=3D'font-size:10=
.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span lang=3DEN-US =
style=3D'font-size:10.0pt;font-family:"Tahoma","sans-serif"'> cl-mirage-bou=
nces@lists.cam.ac.uk [mailto:cl-mirage-bounces@lists.cam.ac.uk] <b>On Behal=
f Of </b>tech mailinglists<br><b>Sent:</b> 11 January 2013 9:28 AM<br><b>To=
:</b> cl-mirage@lists.cam.ac.uk<br><b>Subject:</b> [User Question] Correct =
XSM/FLASK ruleset for oxenstored<o:p></o:p></span></p></div></div><p class=
=3DMsoNormal><o:p>&nbsp;</o:p></p><div><p class=3DMsoNormal>Hello all,<br><=
br>I am actually working on Dom0 disaggregation and wan't to use an oxensto=
red stubdomain. But I have a problem to write the needed XSM/FLASK rule/rul=
es. So I understood that this rules are written like SELinux rules so a def=
ined application has a defined right. And for oxenstored the domctl getdoma=
ininfo right must be given. So I have builded the oxenstored stubdom alread=
y like explained here: <a href=3D"http://www.openmirage.org/blog/xenstore-s=
tub-domain">http://www.openmirage.org/blog/xenstore-stub-domain</a> and I a=
m also running on Linux 3.7.1 with pv_ops enabled. So I just need help to g=
et good XSM/FLASK files. Would be great to see an example for such a rule o=
r something like that.<br><br>Best Regards<o:p></o:p></p></div></div></div>=
</body></html>=

--_000_81A73678E76EA642801C8F2E4823AD21012F0D72EBFBLONPMAILBOX_--


From anil@recoil.org Fri Jan 11 17:10:00 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Tti7E-0004QL-Us (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 11 Jan 2013 17:10:00 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1428749
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:31678
	helo=dark.recoil.org)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1Tti7A-0000gm-XG (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 11 Jan 2013 17:10:00 +0000
Received: (qmail 23265 invoked by uid 634); 11 Jan 2013 17:09:55 -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 [10.0.0.83]) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Fri, 11 Jan 2013 17:09:55 +0000
From: Anil Madhavapeddy <anil@recoil.org>
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable
Subject: Fwd: [Community Review] Mirage Incubation Project Proposal
Date: Fri, 11 Jan 2013 17:09:55 +0000
References: <50F044C3.7010400@xen.org>
To: Mirage List <cl-mirage@lists.cam.ac.uk>
Message-Id: <BFF29C55-2E80-4BCF-AE37-B42E496DDB91@recoil.org>
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
X-Mailer: Apple Mail (2.1499)
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: Fri, 11 Jan 2013 17:10:01 -0000
Content-Length: 2613
Lines: 82

Mirage has been put forward to become an official Xen.org project, in =
advance of the first release.  I presume nobody here will have any =
objections, but this an FYI!

-anil

Begin forwarded message:

> From: Lars Kurth <lars.kurth@xen.org>
> Subject: [Community Review] Mirage Incubation Project Proposal
> Date: 11 January 2013 16:58:43 GMT
> To: "xen-devel@lists.xen.org" <xen-devel@lists.xen.org>, =
xen-arm@lists.xen.org, "xen-api@lists.xen.org" <xen-api@lists.xen.org>
> Cc: Anil Madhavapeddy <anil@recoil.org>, Amir M Chaudhry =
<amc79@cam.ac.uk>
> Reply-To: lars.kurth@xen.org
>=20
> Hi everybody,
>=20
> this e-mail is to let you know that the OpenMirage project is seeking =
to become a
> Xen.org hosted project.
>=20
> The prospective project lead of the Mirage Project - Anil Madhavapeddy =
- has requested
> a Review of the Mirage Project to become an Xen.org Incubation =
project. In line with
> Xen Project Governance (see =
http://www.xen.org/projects/governance.html), in particular
> sections
>=20
> - "Forming a Project" at
>   http://www.xen.org/projects/governance.html#project.forming
>=20
> - "Project Proposal" at
>   http://www.xen.org/projects/governance.html#project.proposal
>=20
> - "Requesting Reviews, Reviews and Voting" at
>   http://www.xen.org/projects/governance.html#project.requests
>=20
> This is an informal community review, which will be followed by a =
formal vote.
>=20
> The Proposal and Proposal Meta Information
> =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>=20
> - Proposal Location at:
>  http://wiki.xen.org/wiki/Mirage_Incubation_Project_Proposal
>=20
> - Project Lead: Anil Madhavapeddy
> - Project Sponsor:      Tim Deegan
> - Project Mentor:       Lars Kurth
>=20
> - Deadline:             review open until 24:00, 27th of Jan, 2013 =
(GMT)
>=20
> Following the Community Review, there may be an update to the proposal =
if
> needed. Which is then followed by a formal vote by eligible community =
members.
>=20
> Why and How to Provide Feedback
> =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=3D=3D=3D
> - Anybody in the Community can provide feedback
>=20
> - Preferably, feedback should be provided by annotating the in-lined =
copy of
>  the document using the instructions in the wiki. In other word insert
>=20
>  "{{comment|~~~~}} your comment."
>=20
>  into the document, at a suitable location in the document.
>=20
> - Alternatively you can provide feedback by replying to this e-mail
>=20
> Best Regards
> Lars
>=20



From anil@recoil.org Fri Jan 11 17:16:41 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TtiDh-0004iK-Kc (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 11 Jan 2013 17:16:41 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1428749
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:48997
	helo=dark.recoil.org)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1TtiDf-0003BS-ZP (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 11 Jan 2013 17:16:41 +0000
Received: (qmail 6642 invoked by uid 634); 11 Jan 2013 17:16:39 -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 [10.0.0.83]) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Fri, 11 Jan 2013 17:16:37 +0000
From: Anil Madhavapeddy <anil@recoil.org>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Subject: can we make the Mirage team page look like ths?
Message-Id: <D47FDD43-CEF0-4561-9069-152B92DA554C@recoil.org>
Date: Fri, 11 Jan 2013 17:16:23 +0000
To: Mirage List <cl-mirage@lists.cam.ac.uk>
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
X-Mailer: Apple Mail (2.1499)
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: Fri, 11 Jan 2013 17:16:41 -0000
Content-Length: 43
Lines: 7

http://www.kickstarter.com/team

:-)

-a



From h.rotsos@gmail.com Fri Jan 11 17:30:35 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TtiR9-0004tz-Ty (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <h.rotsos@gmail.com>); Fri, 11 Jan 2013 17:30:35 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.7 from SpamAssassin-3.3.2-1428749 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.219.42 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (h.rotsos[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.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-oa0-f42.google.com ([209.85.219.42]:63131)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1TtiR8-0001Wj-sJ (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <h.rotsos@gmail.com>); Fri, 11 Jan 2013 17:30:35 +0000
Received: by mail-oa0-f42.google.com with SMTP id j1so2058205oag.29
	for <cl-mirage@lists.cam.ac.uk>; Fri, 11 Jan 2013 09:30:34 -0800 (PST)
MIME-Version: 1.0
Received: by 10.182.21.135 with SMTP id v7mr55765028obe.101.1357925434049;
	Fri, 11 Jan 2013 09:30:34 -0800 (PST)
Sender: h.rotsos@gmail.com
Received: by 10.60.27.227 with HTTP; Fri, 11 Jan 2013 09:30:33 -0800 (PST)
In-Reply-To: <D47FDD43-CEF0-4561-9069-152B92DA554C@recoil.org>
References: <D47FDD43-CEF0-4561-9069-152B92DA554C@recoil.org>
Date: Fri, 11 Jan 2013 17:30:33 +0000
X-Google-Sender-Auth: pbmjr8vF3mJlJEqeLxL-NLD4Vsk
Message-ID: <CALerif4Qqsj58e3A__g4_=3Hj-4c8u1zco_b5RKu5xj+BUrmSw@mail.gmail.com>
Subject: Re: can we make the Mirage team page look like ths?
From: Haris Rotsos <cr409@cl.cam.ac.uk>
To: Anil Madhavapeddy <anil@recoil.org>
Content-Type: multipart/alternative; boundary=14dae93b637420c3c804d306a703
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: Fri, 11 Jan 2013 17:30:36 -0000
Content-Length: 1604
Lines: 59

--14dae93b637420c3c804d306a703
Content-Type: text/plain; charset=UTF-8

I will trim my beard a bit and I can be the bearded guy of the photo.... :P


On 11 January 2013 17:16, Anil Madhavapeddy <anil@recoil.org> wrote:

> http://www.kickstarter.com/team
>
> :-)
>
> -a
>
>
>


-- 
Charalampos Rotsos
PhD student
The University of Cambridge
Computer Laboratory
William Gates Building
JJ Thomson Avenue
Cambridge
CB3 0FD

Phone: +44-(0) 1223 767032
Email: cr409@cl.cam.ac.uk

--14dae93b637420c3c804d306a703
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">I will trim my beard a bit and I can be the bearded guy of=
 the photo.... :P</div><div class=3D"gmail_extra"><br><br><div class=3D"gma=
il_quote">On 11 January 2013 17:16, Anil Madhavapeddy <span dir=3D"ltr">&lt=
;<a href=3D"mailto:anil@recoil.org" target=3D"_blank">anil@recoil.org</a>&g=
t;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><a href=3D"http://www.kickstarter.com/team" =
target=3D"_blank">http://www.kickstarter.com/team</a><br>
<br>
:-)<br>
<span class=3D"HOEnZb"><font color=3D"#888888"><br>
-a<br>
<br>
<br>
</font></span></blockquote></div><br><br clear=3D"all"><div><br></div>-- <b=
r>Charalampos Rotsos<br>PhD student<br>The University of Cambridge<br>Compu=
ter Laboratory<br>William Gates Building<br>JJ Thomson Avenue<br>Cambridge<=
br>
CB3 0FD<br><br>Phone: +44-(0) 1223 767032<br>Email: <a href=3D"mailto:cr409=
@cl.cam.ac.uk">cr409@cl.cam.ac.uk</a>
</div>

--14dae93b637420c3c804d306a703--


From anil@recoil.org Mon Jan 14 11:56:30 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TuieU-0002f1-R2 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 14 Jan 2013 11:56:30 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1432568 
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	* 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 recoil.dh.bytemark.co.uk ([89.16.177.154]:39627
	helo=dark.recoil.org)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with smtp id 1TuieT-00039M-rA (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Mon, 14 Jan 2013 11:56:30 +0000
Received: (qmail 16000 invoked by uid 634); 14 Jan 2013 11:56:29 -0000
X-Spam-Level: *
X-Spam-Status: No, hits=-1.0 required=5.0
	tests=ALL_TRUSTED,HTML_MESSAGE,MIME_QP_LONG_LINE
X-Spam-Check-By: dark.recoil.org
Received: from dab-bas1-h-78-7.dab.02.net (HELO [10.33.103.203])
	(82.132.214.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Mon, 14 Jan 2013 11:56:20 +0000
Subject: Fwd: New: Software-Defined Networking Research Group	(SDNRG)
References: <50F3E045.5000708@gmail.com>
From: Anil Madhavapeddy <anil@recoil.org>
Content-Type: multipart/alternative;
	boundary=Apple-Mail-0A94E112-E575-4718-AC18-F055AD2680B2
X-Mailer: iPhone Mail (10A551)
Message-Id: <B7DF1AE4-D94F-4FB5-8438-4A0E97EC433B@recoil.org>
Date: Mon, 14 Jan 2013 11:56:20 +0000
To: Mirage List <cl-mirage@lists.cam.ac.uk>
Content-Transfer-Encoding: 7bit
Mime-Version: 1.0 (1.0)
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, 14 Jan 2013 11:56:30 -0000
Content-Length: 6600
Lines: 123


--Apple-Mail-0A94E112-E575-4718-AC18-F055AD2680B2
Content-Type: text/plain;
	charset=us-ascii
Content-Transfer-Encoding: quoted-printable


Begin forwarded message:

> From: Brian E Carpenter <brian.e.carpenter@gmail.com>
> Date: 14 January 2013 10:39:01 GMT
> To: NetOS <netos@cl.cam.ac.uk>
> Subject: New: Software-Defined Networking Research Group	(SDNRG)
>=20
> -------- Original Message --------
> Subject: Fwd: [irtf-discuss] New: Software-Defined Networking Research Gro=
up    (SDNRG)
> Date: Mon, 14 Jan 2013 09:26:19 +0000
> From: Eggert, Lars <lars@netapp.com>
> To: ietf@ietf.org list <ietf@ietf.org>
> References: <D4D47BCFFE5A004F95D707546AC0D7E91F61B755@SACEXCMBX01-PRD.hq.n=
etapp.com>
>=20
> Begin forwarded message:
>=20
>> From: "Eggert, Lars" <lars@netapp.com>
>> Subject: [irtf-discuss] New: Software-Defined Networking Research Group (=
SDNRG)
>> Date: January 14, 2013 10:24:57 GMT+01:00
>> To: "<irtf-announce@irtf.org>" <irtf-announce@irtf.org>, "<irtf-discuss@i=
rtf.org>" <irtf-discuss@irtf.org>
>> Cc: "sdn@irtf.org" <sdn@irtf.org>
>> Reply-To: "irtf-discuss@irtf.org" <irtf-discuss@irtf.org>
>>=20
>> A new IRTF research group on Software-Defined Networking has been charter=
ed:
>>=20
>> The Software-Defined Networking Research Group (SDNRG) investigates SDN
>> from various perspectives with the goal of identifying the approaches tha=
t
>> can be defined, deployed and used in the near term as well identifying
>> future research challenges. In particular, key areas of interest include
>> solution scalability, abstractions, and programming languages and paradig=
ms
>> particularly useful in the context of SDN. In addition, it is an explicit=

>> goal of the SDNRG to provide a forum for researchers to investigate key
>> and interesting problems in the Software-Defined Networking field.
>>=20
>> Charter and participation information can be found at http://irtf.org/sdn=
rg
>>=20
>> Lars Eggert
>> IRTF Chair
>=20
>=20
>=20

--Apple-Mail-0A94E112-E575-4718-AC18-F055AD2680B2
Content-Type: text/html;
	charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html><head><meta http-equiv=3D"content-type" content=3D"text/html; charset=3D=
utf-8"></head><body dir=3D"auto"><div><meta http-equiv=3D"content-type" cont=
ent=3D"text/html; charset=3Dutf-8"><div><br>Begin forwarded message:<br><br>=
</div><blockquote type=3D"cite"><div><b>From:</b> Brian E Carpenter &lt;<a h=
ref=3D"mailto:brian.e.carpenter@gmail.com">brian.e.carpenter@gmail.com</a>&g=
t;<br><b>Date:</b> 14 January 2013 10:39:01 GMT<br><b>To:</b> NetOS &lt;<a h=
ref=3D"mailto:netos@cl.cam.ac.uk">netos@cl.cam.ac.uk</a>&gt;<br><b>Subject:<=
/b> <b>New: Software-Defined Networking Research Group	(SDNRG)</b><br><br>=
</div></blockquote><blockquote type=3D"cite"><div><span>-------- Original Me=
ssage --------</span><br><span>Subject: Fwd: [irtf-discuss] New: Software-De=
fined Networking Research Group &nbsp; &nbsp;(SDNRG)</span><br><span>Date: M=
on, 14 Jan 2013 09:26:19 +0000</span><br><span>From: Eggert, Lars &lt;<a hre=
f=3D"mailto:lars@netapp.com">lars@netapp.com</a>&gt;</span><br><span>To: <a h=
ref=3D"mailto:ietf@ietf.org">ietf@ietf.org</a> list &lt;<a href=3D"mailto:ie=
tf@ietf.org">ietf@ietf.org</a>&gt;</span><br><span>References: &lt;<a href=3D=
"mailto:D4D47BCFFE5A004F95D707546AC0D7E91F61B755@SACEXCMBX01-PRD.hq.netapp.c=
om">D4D47BCFFE5A004F95D707546AC0D7E91F61B755@SACEXCMBX01-PRD.hq.netapp.com</=
a>&gt;</span><br><span></span><br><span>Begin forwarded message:</span><br><=
span></span><br><blockquote type=3D"cite"><span>From: "Eggert, Lars" &lt;<a h=
ref=3D"mailto:lars@netapp.com">lars@netapp.com</a>&gt;</span><br></blockquot=
e><blockquote type=3D"cite"><span>Subject: [irtf-discuss] New: Software-Defi=
ned Networking Research Group (SDNRG)</span><br></blockquote><blockquote typ=
e=3D"cite"><span>Date: January 14, 2013 10:24:57 GMT+01:00</span><br></block=
quote><blockquote type=3D"cite"><span>To: "&lt;<a href=3D"mailto:irtf-announ=
ce@irtf.org">irtf-announce@irtf.org</a>&gt;" &lt;<a href=3D"mailto:irtf-anno=
unce@irtf.org">irtf-announce@irtf.org</a>&gt;, "&lt;<a href=3D"mailto:irtf-d=
iscuss@irtf.org">irtf-discuss@irtf.org</a>&gt;" &lt;<a href=3D"mailto:irtf-d=
iscuss@irtf.org">irtf-discuss@irtf.org</a>&gt;</span><br></blockquote><block=
quote type=3D"cite"><span>Cc: "<a href=3D"mailto:sdn@irtf.org">sdn@irtf.org<=
/a>" &lt;<a href=3D"mailto:sdn@irtf.org">sdn@irtf.org</a>&gt;</span><br></bl=
ockquote><blockquote type=3D"cite"><span>Reply-To: "<a href=3D"mailto:irtf-d=
iscuss@irtf.org">irtf-discuss@irtf.org</a>" &lt;<a href=3D"mailto:irtf-discu=
ss@irtf.org">irtf-discuss@irtf.org</a>&gt;</span><br></blockquote><blockquot=
e type=3D"cite"><span></span><br></blockquote><blockquote type=3D"cite"><spa=
n>A new IRTF research group on Software-Defined Networking has been chartere=
d:</span><br></blockquote><blockquote type=3D"cite"><span></span><br></block=
quote><blockquote type=3D"cite"><span> The Software-Defined Networking Resea=
rch Group (SDNRG) investigates SDN</span><br></blockquote><blockquote type=3D=
"cite"><span> from various perspectives with the goal of identifying the app=
roaches that</span><br></blockquote><blockquote type=3D"cite"><span> can be d=
efined, deployed and used in the near term as well identifying</span><br></b=
lockquote><blockquote type=3D"cite"><span> future research challenges. In pa=
rticular, key areas of interest include</span><br></blockquote><blockquote t=
ype=3D"cite"><span> solution scalability, abstractions, and programming lang=
uages and paradigms</span><br></blockquote><blockquote type=3D"cite"><span> p=
articularly useful in the context of SDN. In addition, it is an explicit</sp=
an><br></blockquote><blockquote type=3D"cite"><span> goal of the SDNRG to pr=
ovide a forum for researchers to investigate key</span><br></blockquote><blo=
ckquote type=3D"cite"><span> and interesting problems in the Software-Define=
d Networking field.</span><br></blockquote><blockquote type=3D"cite"><span><=
/span><br></blockquote><blockquote type=3D"cite"><span>Charter and participa=
tion information can be found at <a href=3D"http://irtf.org/sdnrg">http://ir=
tf.org/sdnrg</a></span><br></blockquote><blockquote type=3D"cite"><span></sp=
an><br></blockquote><blockquote type=3D"cite"><span>Lars Eggert</span><br></=
blockquote><blockquote type=3D"cite"><span>IRTF Chair</span><br></blockquote=
><blockquote type=3D"cite"><span></span><br></blockquote><span></span><br><s=
pan></span><br><span></span><br></div></blockquote></div></body></html>=

--Apple-Mail-0A94E112-E575-4718-AC18-F055AD2680B2--


From thomas.gazagnaire@gmail.com Tue Jan 15 15:40:16 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Tv8ca-0001Zj-1e (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Tue, 15 Jan 2013 15:40:16 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.7 from SpamAssassin-3.3.2-1432840 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [74.125.82.54 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.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wg0-f54.google.com ([74.125.82.54]:63601)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1Tv8cY-000067-oJ (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Tue, 15 Jan 2013 15:40:16 +0000
Received: by mail-wg0-f54.google.com with SMTP id fg15so155389wgb.21
	for <cl-mirage@lists.cam.ac.uk>; Tue, 15 Jan 2013 07:40:14 -0800 (PST)
X-Received: by 10.180.99.227 with SMTP id et3mr4461828wib.6.1358264414421;
	Tue, 15 Jan 2013 07:40:14 -0800 (PST)
Received: from [10.0.0.84] (volstagg-0.srg.cl.cam.ac.uk. [128.232.32.232])
	by mx.google.com with ESMTPS id w5sm3918959wif.11.2013.01.15.07.40.13
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Tue, 15 Jan 2013 07:40:13 -0800 (PST)
Sender: Thomas Gazagnaire <thomas.gazagnaire@gmail.com>
From: Thomas Gazagnaire <thomas@ocamlpro.com>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Subject: [ANN] beta-release of OPAM
Date: Tue, 15 Jan 2013 15:40:12 +0000
Message-Id: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
To: OCaml mailing-list <caml-list@inria.fr>,
	Mirage List <cl-mirage@lists.cam.ac.uk>
Mime-Version: 1.0 (Apple Message framework v1085)
X-Mailer: Apple Mail (2.1085)
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, 15 Jan 2013 15:40:16 -0000
Content-Length: 2483
Lines: 56

I'm very happy to announce the beta release of OPAM (0.9.1). OPAM is a =
package manager for OCaml to install libraries and tools from source =
archives. It supports multiple simultaneous compiler installations, =
flexible package constraints, and a Git-friendly development workflow.

The goal of this beta release is to formally introduce OPAM to the =
community, to gather some general feedback on the documentation and =
tools and double-check that we've not forgotten some useful features. I =
would also like to use that opportunity to make an official call to =
maintainers: if you have developed packages which are already in OPAM do =
not hesitate to claim their ownership and to improve their description - =
if your packages are not yet in, it's time to start packaging them!=20

OPAM is developed by OCamlPro[1] and has been in alpha release since =
June 2012. It is already quite mature and has gained some nice momentum =
(+40 contributors, +300 packages).  OPAM has been initially funded by =
Jane Street[2] and the DORM EU research project, and it has received =
continuous help and resources from OCamlLabs[3].

The source code of OPAM is available on Github:
* installer: https://github.com/OCamlpro/opam
* packages and compiler descriptions: =
https://github.com/OCamlPro/opam-repository
* website: https://github.com/OCamlPro/opam2web

The documention:
* install instructions and tutorial are available =
http://opam.ocamlpro.com/
* the main source of documentation is 'opam --help' or 'opam <command> =
--help'
* user manual: =
https://github.com/OCamlPro/opam/raw/master/doc/dev-manual/dev-manual.pdf

You can report issues on github bug tracker:
* https://github.com/OCamlPro/opam/issues

The next steps for us is to focus on improving the package descriptions =
quality and the global consistency of =
https://github.com/OCamlPro/opam-repository. We will gladly accept any =
kind of help and support from the community to do this!  We plan to =
announce the release of 1.0.0 in a couple of months, with improved =
package quality and better integration with the future OCaml platform.

Last point, if you are working in a company and that you already use =
OPAM, or plan to use OPAM, and you would like to help us ensuring it a =
sustainable future[2], you can contact us at contact@ocamlpro.com.=20

On behalf of the OPAM team,
Thomas Gazagnaire

[1] http://www.ocamlpro.com/
[2] http://www.janestreet.com/
[3] http://www.cl.cam.ac.uk/projects/ocamllabs/




From anil@recoil.org Tue Jan 15 15:42:44 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Tv8ey-0001tK-7S (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 15 Jan 2013 15:42:44 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1432840
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:21229
	helo=dark.recoil.org)
	by ppsw-41.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1Tv8ex-0005Dh-Q9 (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 15 Jan 2013 15:42:44 +0000
Received: (qmail 28526 invoked by uid 634); 15 Jan 2013 15:42:43 -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 [10.0.0.83]) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Tue, 15 Jan 2013 15:42:42 +0000
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
Subject: Re: [ANN] beta-release of OPAM
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
Date: Tue, 15 Jan 2013 15:42:45 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
To: Thomas Gazagnaire <thomas@ocamlpro.com>
X-Mailer: Apple Mail (2.1499)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: OCaml mailing-list <caml-list@inria.fr>,
	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, 15 Jan 2013 15:42:44 -0000
Content-Length: 2785
Lines: 65

If you're using Homebrew on the Mac, just do a "brew update" and you =
should get the latest beta release (0.9.1) via it.  Enjoy!

-anil

On 15 Jan 2013, at 15:40, Thomas Gazagnaire <thomas@ocamlpro.com> wrote:

> I'm very happy to announce the beta release of OPAM (0.9.1). OPAM is a =
package manager for OCaml to install libraries and tools from source =
archives. It supports multiple simultaneous compiler installations, =
flexible package constraints, and a Git-friendly development workflow.
>=20
> The goal of this beta release is to formally introduce OPAM to the =
community, to gather some general feedback on the documentation and =
tools and double-check that we've not forgotten some useful features. I =
would also like to use that opportunity to make an official call to =
maintainers: if you have developed packages which are already in OPAM do =
not hesitate to claim their ownership and to improve their description - =
if your packages are not yet in, it's time to start packaging them!=20
>=20
> OPAM is developed by OCamlPro[1] and has been in alpha release since =
June 2012. It is already quite mature and has gained some nice momentum =
(+40 contributors, +300 packages).  OPAM has been initially funded by =
Jane Street[2] and the DORM EU research project, and it has received =
continuous help and resources from OCamlLabs[3].
>=20
> The source code of OPAM is available on Github:
> * installer: https://github.com/OCamlpro/opam
> * packages and compiler descriptions: =
https://github.com/OCamlPro/opam-repository
> * website: https://github.com/OCamlPro/opam2web
>=20
> The documention:
> * install instructions and tutorial are available =
http://opam.ocamlpro.com/
> * the main source of documentation is 'opam --help' or 'opam <command> =
--help'
> * user manual: =
https://github.com/OCamlPro/opam/raw/master/doc/dev-manual/dev-manual.pdf
>=20
> You can report issues on github bug tracker:
> * https://github.com/OCamlPro/opam/issues
>=20
> The next steps for us is to focus on improving the package =
descriptions quality and the global consistency of =
https://github.com/OCamlPro/opam-repository. We will gladly accept any =
kind of help and support from the community to do this!  We plan to =
announce the release of 1.0.0 in a couple of months, with improved =
package quality and better integration with the future OCaml platform.
>=20
> Last point, if you are working in a company and that you already use =
OPAM, or plan to use OPAM, and you would like to help us ensuring it a =
sustainable future[2], you can contact us at contact@ocamlpro.com.=20
>=20
> On behalf of the OPAM team,
> Thomas Gazagnaire
>=20
> [1] http://www.ocamlpro.com/
> [2] http://www.janestreet.com/
> [3] http://www.cl.cam.ac.uk/projects/ocamllabs/
>=20
>=20
>=20



From thomas.gazagnaire@gmail.com Tue Jan 15 16:17:52 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Tv9Cy-0003dS-DV (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Tue, 15 Jan 2013 16:17:52 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.7 from SpamAssassin-3.3.2-1432840 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [74.125.82.52 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.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wg0-f52.google.com ([74.125.82.52]:44489)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1Tv9Cx-00071C-qg (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Tue, 15 Jan 2013 16:17:52 +0000
Received: by mail-wg0-f52.google.com with SMTP id 12so187549wgh.19
	for <cl-mirage@lists.cam.ac.uk>; Tue, 15 Jan 2013 08:17:51 -0800 (PST)
X-Received: by 10.194.80.73 with SMTP id p9mr42013011wjx.4.1358266671115;
	Tue, 15 Jan 2013 08:17:51 -0800 (PST)
Received: from [10.0.0.84] (volstagg-0.srg.cl.cam.ac.uk. [128.232.32.232])
	by mx.google.com with ESMTPS id fv2sm4071218wib.4.2013.01.15.08.17.49
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Tue, 15 Jan 2013 08:17:50 -0800 (PST)
Sender: Thomas Gazagnaire <thomas.gazagnaire@gmail.com>
Subject: Re: [ANN] beta-release of OPAM
Mime-Version: 1.0 (Apple Message framework v1085)
Content-Type: text/plain; charset=us-ascii
From: Thomas Gazagnaire <thomas@ocamlpro.com>
In-Reply-To: <A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
Date: Tue, 15 Jan 2013 16:17:49 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
To: Anil Madhavapeddy <anil@recoil.org>
X-Mailer: Apple Mail (2.1085)
Cc: OCaml mailing-list <caml-list@inria.fr>,
	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, 15 Jan 2013 16:17:52 -0000
Content-Length: 3236
Lines: 80

To people already using OPAM, I forgot to mention that it is highly =
recommended to NOT upgrade opam using opam. The auto-update thing was a =
mistake at the first place. It is also advised to start from a fresh =
opam init. It should work if you don't, but it would definitely avoid =
some confusions in some corner-cases.

--
Thomas



On Jan 15, 2013, at 3:42 PM, Anil Madhavapeddy wrote:

> If you're using Homebrew on the Mac, just do a "brew update" and you =
should get the latest beta release (0.9.1) via it.  Enjoy!
>=20
> -anil
>=20
> On 15 Jan 2013, at 15:40, Thomas Gazagnaire <thomas@ocamlpro.com> =
wrote:
>=20
>> I'm very happy to announce the beta release of OPAM (0.9.1). OPAM is =
a package manager for OCaml to install libraries and tools from source =
archives. It supports multiple simultaneous compiler installations, =
flexible package constraints, and a Git-friendly development workflow.
>>=20
>> The goal of this beta release is to formally introduce OPAM to the =
community, to gather some general feedback on the documentation and =
tools and double-check that we've not forgotten some useful features. I =
would also like to use that opportunity to make an official call to =
maintainers: if you have developed packages which are already in OPAM do =
not hesitate to claim their ownership and to improve their description - =
if your packages are not yet in, it's time to start packaging them!=20
>>=20
>> OPAM is developed by OCamlPro[1] and has been in alpha release since =
June 2012. It is already quite mature and has gained some nice momentum =
(+40 contributors, +300 packages).  OPAM has been initially funded by =
Jane Street[2] and the DORM EU research project, and it has received =
continuous help and resources from OCamlLabs[3].
>>=20
>> The source code of OPAM is available on Github:
>> * installer: https://github.com/OCamlpro/opam
>> * packages and compiler descriptions: =
https://github.com/OCamlPro/opam-repository
>> * website: https://github.com/OCamlPro/opam2web
>>=20
>> The documention:
>> * install instructions and tutorial are available =
http://opam.ocamlpro.com/
>> * the main source of documentation is 'opam --help' or 'opam =
<command> --help'
>> * user manual: =
https://github.com/OCamlPro/opam/raw/master/doc/dev-manual/dev-manual.pdf
>>=20
>> You can report issues on github bug tracker:
>> * https://github.com/OCamlPro/opam/issues
>>=20
>> The next steps for us is to focus on improving the package =
descriptions quality and the global consistency of =
https://github.com/OCamlPro/opam-repository. We will gladly accept any =
kind of help and support from the community to do this!  We plan to =
announce the release of 1.0.0 in a couple of months, with improved =
package quality and better integration with the future OCaml platform.
>>=20
>> Last point, if you are working in a company and that you already use =
OPAM, or plan to use OPAM, and you would like to help us ensuring it a =
sustainable future[2], you can contact us at contact@ocamlpro.com.=20
>>=20
>> On behalf of the OPAM team,
>> Thomas Gazagnaire
>>=20
>> [1] http://www.ocamlpro.com/
>> [2] http://www.janestreet.com/
>> [3] http://www.cl.cam.ac.uk/projects/ocamllabs/
>>=20
>>=20
>>=20
>=20



From daniel.buenzli@erratique.ch Tue Jan 15 17:45:56 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvAaC-00074V-Mv (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <daniel.buenzli@erratique.ch>);
	Tue, 15 Jan 2013 17:45:56 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamScore: ss
X-Cam-SpamDetails: score 2.0 from SpamAssassin-3.3.2-1432840 
	*  2.0 RCVD_IN_MAPS_RBL RBL: Relay in RBL,
	*      http://www.mail-abuse.com/enduserinfo_rbl.html
	*      [178.197.234.117 listed in rbl-plus.mail-abuse.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail6.webfaction.com ([74.55.86.74]:46838
	helo=smtp.webfaction.com)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1TvAaB-0006sV-rR (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <daniel.buenzli@erratique.ch>);
	Tue, 15 Jan 2013 17:45:56 +0000
Received: from [172.20.10.2] (117-234.197-178.cust.bluewin.ch
	[178.197.234.117])
	by smtp.webfaction.com (Postfix) with ESMTP id A9A6B66EF3A9;
	Tue, 15 Jan 2013 11:45:53 -0600 (CST)
Date: Tue, 15 Jan 2013 18:45:49 +0100
From: =?utf-8?Q?Daniel_B=C3=BCnzli?= <daniel.buenzli@erratique.ch>
To: Thomas Gazagnaire <thomas@ocamlpro.com>
Message-ID: <DAE620C8CFD949289B0B84780F55694A@erratique.ch>
In-Reply-To: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
Subject: Re: [Caml-list] [ANN] beta-release of OPAM
X-Mailer: sparrow 1.6.4 (build 1178)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Cc: OCaml mailing-list <caml-list@inria.fr>,
	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, 15 Jan 2013 17:45:56 -0000
Content-Length: 862
Lines: 20

Le mardi, 15 janvier 2013 =C3=A0 16:40, Thomas Gazagnaire a =C3=A9crit :
> if you have developed packages which are already in OPAM do not hesitat=
e to claim their ownership and to improve their description - if your pac=
kages are not yet in, it's time to start packaging them=21

At a certain point I plan to do so. Is there, however, any known tool/scr=
ipts that can help me to streamline this process via the =5Foasis file of=
 my packages =3F This file already contains ammost everything: a package =
name, version, synopsis, description and (implicit) build instructions (s=
ee =5B1=5D for an example).

Also the problem of package documentation/sample code seems side stepped =
at the moment. Are there any future plans with respect to that =3F =20
 =20
Thanks for the tool,

Daniel

=5B1=5D http://erratique.ch/repos/jsonm/tree/=5Foasis=3Fid=3Dv0.9.1


From alan.schmitt@polytechnique.org Tue Jan 15 19:18:03 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvC1L-0001Ww-Nn (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <alan.schmitt@polytechnique.org>);
	Tue, 15 Jan 2013 19:18:03 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -5.0 from SpamAssassin-3.3.2-1432840 
	* -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at http://www.dnswl.org/,
	high *      trust
	*      [192.134.164.82 listed in list.dnswl.dnsbl.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail1-relais-roc.national.inria.fr ([192.134.164.82]:3757)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1TvC1L-0005aE-nC (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <alan.schmitt@polytechnique.org>);
	Tue, 15 Jan 2013 19:18:03 +0000
X-IronPort-AV: E=Sophos;i="4.84,475,1355094000"; d="scan'208";a="190071939"
Received: from cbg35-2-78-242-14-140.fbx.proxad.net (HELO
	dyn901-192.eduroam.ic.ac.uk) ([78.242.14.140])
	by mail1-relais-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES128-SHA;
	15 Jan 2013 20:18:02 +0100
From: Alan Schmitt <alan.schmitt@polytechnique.org>
To: "Thomas Gazagnaire" <thomas@ocamlpro.com>
Subject: Re: [Caml-list] Re: [ANN] beta-release of OPAM
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
	<3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
User-agent: mu4e 0.9.9.5-dev6; emacs 24.2.1
In-reply-to: <3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
Date: Tue, 15 Jan 2013 20:18:01 +0100
Message-ID: <m2r4lmntli.fsf@dyn901-192.eduroam.ic.ac.uk>
MIME-Version: 1.0
Content-Type: text/plain
Cc: OCaml mailing-list <caml-list@inria.fr>,
	Mirage 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, 15 Jan 2013 19:18:03 -0000
Content-Length: 590
Lines: 17

Thomas Gazagnaire writes:

> To people already using OPAM, I forgot to mention that it is highly
> recommended to NOT upgrade opam using opam. The auto-update thing was
> a mistake at the first place. It is also advised to start from a fresh
> opam init. It should work if you don't, but it would definitely avoid
> some confusions in some corner-cases.

I'm thinking of trying it, but there was a bit of information I could
not find on the web page: where does OPAM puts the things it compiles?
Is it easy to just try it with an existing installation of ocaml &
libraries?

Thanks,

Alan


From fabrissimo@gmail.com Tue Jan 15 19:25:27 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvC8V-0001b0-0W (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <fabrissimo@gmail.com>); Tue, 15 Jan 2013 19:25:27 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.7 from SpamAssassin-3.3.2-1432840 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.214.50 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (fabrissimo[at]gmail.com)
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-bk0-f50.google.com ([209.85.214.50]:60881)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1TvC8T-0007wm-nV (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <fabrissimo@gmail.com>); Tue, 15 Jan 2013 19:25:26 +0000
Received: by mail-bk0-f50.google.com with SMTP id jf3so293186bkc.9
	for <cl-mirage@lists.cam.ac.uk>; Tue, 15 Jan 2013 11:25:25 -0800 (PST)
MIME-Version: 1.0
Received: by 10.204.149.26 with SMTP id r26mr40796496bkv.71.1358277925029;
	Tue, 15 Jan 2013 11:25:25 -0800 (PST)
Sender: fabrissimo@gmail.com
Received: by 10.205.82.75 with HTTP; Tue, 15 Jan 2013 11:25:24 -0800 (PST)
In-Reply-To: <m2r4lmntli.fsf@dyn901-192.eduroam.ic.ac.uk>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
	<3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
	<m2r4lmntli.fsf@dyn901-192.eduroam.ic.ac.uk>
Date: Tue, 15 Jan 2013 20:25:24 +0100
X-Google-Sender-Auth: CDnzC39Qm1b7Qt1URW5v091CoJI
Message-ID: <CAHvkLrMY6SQYg2Ao4-QtX8n=NsOa971Yrf4F81Wmus5aMagBXw@mail.gmail.com>
Subject: Re: [Caml-list] Re: [ANN] beta-release of OPAM
From: Fabrice Le Fessant <fabrice@lefessant.net>
To: Alan Schmitt <alan.schmitt@polytechnique.org>
Content-Type: text/plain; charset=ISO-8859-1
Cc: Thomas Gazagnaire <thomas@ocamlpro.com>,
	OCaml mailing-list <caml-list@inria.fr>,
	Mirage 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, 15 Jan 2013 19:25:27 -0000
Content-Length: 1235
Lines: 40

OPAM installs everything in ~/.opam by default, so it won't pollute
your current installation of OCaml. You have to use:

eval `opam config -env`

in a terminal to start using the version of OCaml installed by OPAM
(you can put that in a .bashrc file, for example).

--Fabrice

On Tue, Jan 15, 2013 at 8:18 PM, Alan Schmitt
<alan.schmitt@polytechnique.org> wrote:
> Thomas Gazagnaire writes:
>
>> To people already using OPAM, I forgot to mention that it is highly
>> recommended to NOT upgrade opam using opam. The auto-update thing was
>> a mistake at the first place. It is also advised to start from a fresh
>> opam init. It should work if you don't, but it would definitely avoid
>> some confusions in some corner-cases.
>
> I'm thinking of trying it, but there was a bit of information I could
> not find on the web page: where does OPAM puts the things it compiles?
> Is it easy to just try it with an existing installation of ocaml &
> libraries?
>
> Thanks,
>
> Alan
>
> --
> 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



-- 
Fabrice LE FESSANT


From anil@recoil.org Tue Jan 15 19:29:55 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvCCp-0001fp-Kh (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 15 Jan 2013 19:29:55 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1432840
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:27076
	helo=dark.recoil.org)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1TvCCo-00029o-oS (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 15 Jan 2013 19:29:55 +0000
Received: (qmail 2158 invoked by uid 634); 15 Jan 2013 19:29: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 volstagg-0.srg.cl.cam.ac.uk (HELO [10.0.0.83]) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Tue, 15 Jan 2013 19:29:53 +0000
Content-Type: text/plain; charset=iso-8859-1
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
Subject: Re: [Caml-list] Re: [ANN] beta-release of OPAM
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <CAHvkLrMY6SQYg2Ao4-QtX8n=NsOa971Yrf4F81Wmus5aMagBXw@mail.gmail.com>
Date: Tue, 15 Jan 2013 19:29:56 +0000
Content-Transfer-Encoding: 7bit
Message-Id: <3587ADE7-1423-4AB0-B510-DD55092E506D@recoil.org>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
	<3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
	<m2r4lmntli.fsf@dyn901-192.eduroam.ic.ac.uk>
	<CAHvkLrMY6SQYg2Ao4-QtX8n=NsOa971Yrf4F81Wmus5aMagBXw@mail.gmail.com>
To: Fabrice Le Fessant <fabrice@lefessant.net>
X-Mailer: Apple Mail (2.1499)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: Alan Schmitt <alan.schmitt@polytechnique.org>,
	Thomas Gazagnaire <thomas@ocamlpro.com>,
	OCaml mailing-list <caml-list@inria.fr>,
	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, 15 Jan 2013 19:29:55 -0000
Content-Length: 2005
Lines: 60

There is just one odd corner case that I've been trying to track down.

If you have ocamlfind installed in your system PATH, then the 
"ocamlbuild -use-ocamlfind" mode seems to pick that one up in preference
to the OPAM-installed ocamlfind (which sits in ~/.opam/<compiler>/bin, and
is also on the PATH).

I've not fixed that yet, but if you do run into odd bugs where an OPAM 
package fails to build due to not finding a library, then try uninstalling
your system findlib, and the OPAM one should be picked up.

This doesn't happen with OASIS ocamlfind invocations, but only with the
-use-ocamlfind mode of ocamlbuild.

-anil

On 15 Jan 2013, at 19:25, Fabrice Le Fessant <fabrice@lefessant.net> wrote:

> OPAM installs everything in ~/.opam by default, so it won't pollute
> your current installation of OCaml. You have to use:
> 
> eval `opam config -env`
> 
> in a terminal to start using the version of OCaml installed by OPAM
> (you can put that in a .bashrc file, for example).
> 
> --Fabrice
> 
> On Tue, Jan 15, 2013 at 8:18 PM, Alan Schmitt
> <alan.schmitt@polytechnique.org> wrote:
>> Thomas Gazagnaire writes:
>> 
>>> To people already using OPAM, I forgot to mention that it is highly
>>> recommended to NOT upgrade opam using opam. The auto-update thing was
>>> a mistake at the first place. It is also advised to start from a fresh
>>> opam init. It should work if you don't, but it would definitely avoid
>>> some confusions in some corner-cases.
>> 
>> I'm thinking of trying it, but there was a bit of information I could
>> not find on the web page: where does OPAM puts the things it compiles?
>> Is it easy to just try it with an existing installation of ocaml &
>> libraries?
>> 
>> Thanks,
>> 
>> Alan
>> 
>> --
>> 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
> 
> 
> 
> -- 
> Fabrice LE FESSANT
> 



From rdicosmo@gmail.com Tue Jan 15 19:45:14 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvCRe-0001uK-DJ (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <rdicosmo@gmail.com>); Tue, 15 Jan 2013 19:45:14 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.7 from SpamAssassin-3.3.2-1432840 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.160.47 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (rdicosmo[at]gmail.com)
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-pb0-f47.google.com ([209.85.160.47]:56116)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1TvCRc-0008Qs-sU (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <rdicosmo@gmail.com>); Tue, 15 Jan 2013 19:45:14 +0000
Received: by mail-pb0-f47.google.com with SMTP id wz17so239585pbc.34
	for <cl-mirage@lists.cam.ac.uk>; Tue, 15 Jan 2013 11:45:11 -0800 (PST)
X-Received: by 10.68.143.162 with SMTP id sf2mr266765274pbb.137.1358279111537; 
	Tue, 15 Jan 2013 11:45:11 -0800 (PST)
Received: from voyager (bny92-3-81-56-44-163.fbx.proxad.net. [81.56.44.163])
	by mx.google.com with ESMTPS id wr4sm10723055pbc.72.2013.01.15.11.45.08
	(version=TLSv1 cipher=RC4-SHA bits=128/128);
	Tue, 15 Jan 2013 11:45:10 -0800 (PST)
Sender: Roberto Di Cosmo <rdicosmo@gmail.com>
Received: from dicosmo by voyager with local (Exim 4.72)
	(envelope-from <roberto@dicosmo.org>)
	id 1TvCRU-0001fs-Cv; Tue, 15 Jan 2013 20:45:04 +0100
Date: Tue, 15 Jan 2013 20:45:04 +0100
From: Roberto Di Cosmo <roberto@dicosmo.org>
To: Anil Madhavapeddy <anil@recoil.org>
Subject: Re: [Caml-list] Re: [ANN] beta-release of OPAM
Message-ID: <20130115194504.GA6280@voyager>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
	<3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
	<m2r4lmntli.fsf@dyn901-192.eduroam.ic.ac.uk>
	<CAHvkLrMY6SQYg2Ao4-QtX8n=NsOa971Yrf4F81Wmus5aMagBXw@mail.gmail.com>
	<3587ADE7-1423-4AB0-B510-DD55092E506D@recoil.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <3587ADE7-1423-4AB0-B510-DD55092E506D@recoil.org>
User-Agent: Mutt/1.5.20 (2009-06-14)
Cc: Alan Schmitt <alan.schmitt@polytechnique.org>,
	Thomas Gazagnaire <thomas@ocamlpro.com>,
	Fabrice Le Fessant <fabrice@lefessant.net>,
	Mirage List <cl-mirage@lists.cam.ac.uk>,
	OCaml mailing-list <caml-list@inria.fr>
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, 15 Jan 2013 19:45:14 -0000
Content-Length: 3511
Lines: 95

I can confirm this : on opam 0.8.3, this bug prevented me from
compiling properly a test code for Parmap.
It definitely needs to be fixed :-)

On Tue, Jan 15, 2013 at 07:29:56PM +0000, Anil Madhavapeddy wrote:
> There is just one odd corner case that I've been trying to track down.
> 
> If you have ocamlfind installed in your system PATH, then the 
> "ocamlbuild -use-ocamlfind" mode seems to pick that one up in preference
> to the OPAM-installed ocamlfind (which sits in ~/.opam/<compiler>/bin, and
> is also on the PATH).
> 
> I've not fixed that yet, but if you do run into odd bugs where an OPAM 
> package fails to build due to not finding a library, then try uninstalling
> your system findlib, and the OPAM one should be picked up.
> 
> This doesn't happen with OASIS ocamlfind invocations, but only with the
> -use-ocamlfind mode of ocamlbuild.
> 
> -anil
> 
> On 15 Jan 2013, at 19:25, Fabrice Le Fessant <fabrice@lefessant.net> wrote:
> 
> > OPAM installs everything in ~/.opam by default, so it won't pollute
> > your current installation of OCaml. You have to use:
> > 
> > eval `opam config -env`
> > 
> > in a terminal to start using the version of OCaml installed by OPAM
> > (you can put that in a .bashrc file, for example).
> > 
> > --Fabrice
> > 
> > On Tue, Jan 15, 2013 at 8:18 PM, Alan Schmitt
> > <alan.schmitt@polytechnique.org> wrote:
> >> Thomas Gazagnaire writes:
> >> 
> >>> To people already using OPAM, I forgot to mention that it is highly
> >>> recommended to NOT upgrade opam using opam. The auto-update thing was
> >>> a mistake at the first place. It is also advised to start from a fresh
> >>> opam init. It should work if you don't, but it would definitely avoid
> >>> some confusions in some corner-cases.
> >> 
> >> I'm thinking of trying it, but there was a bit of information I could
> >> not find on the web page: where does OPAM puts the things it compiles?
> >> Is it easy to just try it with an existing installation of ocaml &
> >> libraries?
> >> 
> >> Thanks,
> >> 
> >> Alan
> >> 
> >> --
> >> 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
> > 
> > 
> > 
> > -- 
> > Fabrice LE FESSANT
> > 
> 
> 
> -- 
> 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

-- 
Roberto Di Cosmo
 
------------------------------------------------------------------
Professeur               En delegation a l'INRIA
PPS                      E-mail: roberto@dicosmo.org
Universite Paris Diderot WWW  : http://www.dicosmo.org
Case 7014                Tel  : ++33-(0)1-57 27 92 20
5, Rue Thomas Mann       
F-75205 Paris Cedex 13   Identica: http://identi.ca/rdicosmo
FRANCE.                  Twitter: http://twitter.com/rdicosmo
------------------------------------------------------------------
Attachments:
MIME accepted, Word deprecated
      http://www.gnu.org/philosophy/no-word-attachments.html
------------------------------------------------------------------
Office location:
 
Bureau 6C08 (6th floor)
175, rue du Chevaleret, XIII
Metro Chevaleret, ligne 6
-----------------------------------------------------------------
GPG fingerprint 2931 20CE 3A5A 5390 98EC 8BFC FCCA C3BE 39CB 12D3                        


From daniel.buenzli@erratique.ch Tue Jan 15 20:02:36 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvCiS-0002Ev-66 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <daniel.buenzli@erratique.ch>);
	Tue, 15 Jan 2013 20:02:36 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamScore: ss
X-Cam-SpamDetails: score 2.0 from SpamAssassin-3.3.2-1432840 
	*  2.0 RCVD_IN_MAPS_RBL RBL: Relay in RBL,
	*      http://www.mail-abuse.com/enduserinfo_rbl.html
	*      [178.197.234.117 listed in rbl-plus.mail-abuse.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail6.webfaction.com ([74.55.86.74]:52189
	helo=smtp.webfaction.com)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1TvCiR-0007tf-XU (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <daniel.buenzli@erratique.ch>);
	Tue, 15 Jan 2013 20:02:36 +0000
Received: from [172.20.10.2] (117-234.197-178.cust.bluewin.ch
	[178.197.234.117])
	by smtp.webfaction.com (Postfix) with ESMTP id 60D1F2086A0B;
	Tue, 15 Jan 2013 14:02:33 -0600 (CST)
Date: Tue, 15 Jan 2013 21:02:30 +0100
From: =?utf-8?Q?Daniel_B=C3=BCnzli?= <daniel.buenzli@erratique.ch>
To: Thomas Gazagnaire <thomas@ocamlpro.com>
Message-ID: <32663755125844939AE6DD248CD6462A@erratique.ch>
In-Reply-To: <3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
	<3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
Subject: Re: [Caml-list] Re: [ANN] beta-release of OPAM
X-Mailer: sparrow 1.6.4 (build 1178)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Cc: OCaml mailing-list <caml-list@inria.fr>,
	Mirage 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, 15 Jan 2013 20:02:36 -0000
Content-Length: 589
Lines: 17

Le mardi, 15 janvier 2013 =C3=A0 17:17, Thomas Gazagnaire a =C3=A9crit :
> To people already using OPAM, I forgot to mention that it is highly rec=
ommended to NOT upgrade opam using opam. The auto-update thing was a mist=
ake at the first place. It is also advised to start from a fresh opam ini=
t. It should work if you don't, but it would definitely avoid some confus=
ions in some corner-cases.

But we agree there's no problem in compiling the new opam binary with an =
opam install remove =7E/.opam and then restart with a fresh init with the=
 new binary =3F =20

Best,

Daniel




From wojciech.meyer@gmail.com Tue Jan 15 21:12:19 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvDnv-0003W4-S4 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <wojciech.meyer@gmail.com>);
	Tue, 15 Jan 2013 21:12:19 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1432840 
	* -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 *       (wojciech.meyer[at]gmail.com)
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f171.google.com ([209.85.212.171]:57608)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1TvDnu-0005tE-so (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk (return-path <wojciech.meyer@gmail.com>);
	Tue, 15 Jan 2013 21:12:19 +0000
Received: by mail-wi0-f171.google.com with SMTP id hn14so2792849wib.10
	for <cl-mirage@lists.cam.ac.uk>; Tue, 15 Jan 2013 13:12:18 -0800 (PST)
X-Received: by 10.194.109.10 with SMTP id ho10mr53674218wjb.16.1358284338852; 
	Tue, 15 Jan 2013 13:12:18 -0800 (PST)
Received: from spec-desktop.danmey.org
	(cpc1-cmbg12-0-0-cust201.5-4.cable.virginmedia.com. [86.9.116.202])
	by mx.google.com with ESMTPS id ex6sm5618467wid.3.2013.01.15.13.12.16
	(version=TLSv1.1 cipher=RC4-SHA bits=128/128);
	Tue, 15 Jan 2013 13:12:17 -0800 (PST)
From: Wojciech Meyer <wojciech.meyer@gmail.com>
To: Anil Madhavapeddy <anil@recoil.org>, Roberto Di Cosmo <roberto@dicosmo.org>
Subject: Re: [Caml-list] Re: [ANN] beta-release of OPAM
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
	<3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
	<m2r4lmntli.fsf@dyn901-192.eduroam.ic.ac.uk>
	<CAHvkLrMY6SQYg2Ao4-QtX8n=NsOa971Yrf4F81Wmus5aMagBXw@mail.gmail.com>
	<3587ADE7-1423-4AB0-B510-DD55092E506D@recoil.org>
	<20130115194504.GA6280@voyager>
Date: Tue, 15 Jan 2013 21:12:20 +0000
In-Reply-To: <20130115194504.GA6280@voyager> (Roberto Di Cosmo's message of
	"Tue, 15 Jan 2013 20:45:04 +0100")
Message-ID: <wfmwwa5ex7.fsf@gmail.com>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.94 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain
Cc: Alan Schmitt <alan.schmitt@polytechnique.org>,
	Thomas Gazagnaire <thomas@ocamlpro.com>,
	Fabrice Le Fessant <fabrice@lefessant.net>,
	Mirage List <cl-mirage@lists.cam.ac.uk>,
	OCaml mailing-list <caml-list@inria.fr>
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, 15 Jan 2013 21:12:19 -0000
Content-Length: 288
Lines: 14

Roberto Di Cosmo <roberto@dicosmo.org> writes:

> I can confirm this : on opam 0.8.3, this bug prevented me from
> compiling properly a test code for Parmap.
> It definitely needs to be fixed :-)

It's been fixed on trunk now.

Thanks for reporting,

--
Wojciech Meyer
http://danmey.org


From thomas.gazagnaire@gmail.com Tue Jan 15 22:16:15 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvEnn-0004Nz-UD (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Tue, 15 Jan 2013 22:16:15 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.7 from SpamAssassin-3.3.2-1432840 
	* -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 *       (thomas.gazagnaire[at]gmail.com)
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wg0-f45.google.com ([74.125.82.45]:52550)
	by ppsw-41.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1TvEnm-0002eu-Sk (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Tue, 15 Jan 2013 22:16:15 +0000
Received: by mail-wg0-f45.google.com with SMTP id dq12so439716wgb.12
	for <cl-mirage@lists.cam.ac.uk>; Tue, 15 Jan 2013 14:16:14 -0800 (PST)
X-Received: by 10.194.177.199 with SMTP id cs7mr144594889wjc.41.1358288174769; 
	Tue, 15 Jan 2013 14:16:14 -0800 (PST)
Received: from [10.101.47.25] (zone6.robinson.cam.ac.uk. [131.111.236.121])
	by mx.google.com with ESMTPS id u6sm5862881wif.2.2013.01.15.14.16.13
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Tue, 15 Jan 2013 14:16:14 -0800 (PST)
Sender: Thomas Gazagnaire <thomas.gazagnaire@gmail.com>
Subject: Re: [Caml-list] Re: [ANN] beta-release of OPAM
Mime-Version: 1.0 (Apple Message framework v1085)
Content-Type: text/plain; charset=us-ascii
From: Thomas Gazagnaire <thomas@ocamlpro.com>
In-Reply-To: <32663755125844939AE6DD248CD6462A@erratique.ch>
Date: Tue, 15 Jan 2013 22:16:14 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <0C31A404-8816-470E-A4FA-2A55E27D6977@ocamlpro.com>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
	<3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
	<32663755125844939AE6DD248CD6462A@erratique.ch>
To: =?iso-8859-1?Q?Daniel_B=FCnzli?= <daniel.buenzli@erratique.ch>
X-Mailer: Apple Mail (2.1085)
Cc: OCaml mailing-list <caml-list@inria.fr>,
	Mirage 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, 15 Jan 2013 22:16:16 -0000
Content-Length: 742
Lines: 19

>> To people already using OPAM, I forgot to mention that it is highly =
recommended to NOT upgrade opam using opam. The auto-update thing was a =
mistake at the first place. It is also advised to start from a fresh =
opam init. It should work if you don't, but it would definitely avoid =
some confusions in some corner-cases.
>=20
> But we agree there's no problem in compiling the new opam binary with =
an opam install remove ~/.opam and then restart with a fresh init with =
the new binary ? =20

The issue with 'opam update opam' is that this installs the opam binary =
in ~/.opam/<switch>/bin. If you manually move the new opam to a safe =
place (say in /usr/local/bin) before removing ~/.opam, yes that should =
be fine.

--
Thomas



From anil@recoil.org Wed Jan 16 10:01:14 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvPo2-0003qK-Rb (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 16 Jan 2013 10:01:14 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1433312
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:47456
	helo=dark.recoil.org)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with smtp id 1TvPo2-0007rr-r3 (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 16 Jan 2013 10:01:14 +0000
Received: (qmail 1746 invoked by uid 634); 16 Jan 2013 10:01:13 -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 [10.0.0.83]) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Wed, 16 Jan 2013 10:01:13 +0000
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
Subject: Re: [Caml-list] [ANN] beta-release of OPAM
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <wfmwwa5ex7.fsf@gmail.com>
Date: Wed, 16 Jan 2013 10:01:16 +0000
Content-Transfer-Encoding: 7bit
Message-Id: <6AFFCDD6-A8C3-4351-A506-F13D930CF972@recoil.org>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
	<3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
	<m2r4lmntli.fsf@dyn901-192.eduroam.ic.ac.uk>
	<CAHvkLrMY6SQYg2Ao4-QtX8n=NsOa971Yrf4F81Wmus5aMagBXw@mail.gmail.com>
	<3587ADE7-1423-4AB0-B510-DD55092E506D@recoil.org>
	<20130115194504.GA6280@voyager> <wfmwwa5ex7.fsf@gmail.com>
To: Wojciech Meyer <wojciech.meyer@gmail.com>
X-Mailer: Apple Mail (2.1499)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: OCaml mailing-list <caml-list@inria.fr>,
	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, 16 Jan 2013 10:01:14 -0000
Content-Length: 698
Lines: 20

On 15 Jan 2013, at 21:12, Wojciech Meyer <wojciech.meyer@gmail.com> wrote:

> Roberto Di Cosmo <roberto@dicosmo.org> writes:
> 
>> I can confirm this : on opam 0.8.3, this bug prevented me from
>> compiling properly a test code for Parmap.
>> It definitely needs to be fixed :-)
> 
> It's been fixed on trunk now.

Thanks for the quick fix!  Looking at the patch, the problem
seems to be that ocamlbuild distinguishes between built-in tools
(presumably the ocaml toolchain binaries), and external tools.

Is there any reason why ocamlbuild shouldn't just unconditionally
search the PATH for the compiler tools as well?  It's very confusing
to have it override some binaries and not others.

-anil


From wojciech.meyer@gmail.com Wed Jan 16 10:08:14 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvPuo-0004JS-BP (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <wojciech.meyer@gmail.com>);
	Wed, 16 Jan 2013 10:08:14 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1433312 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.219.44 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (wojciech.meyer[at]gmail.com)
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-oa0-f44.google.com ([209.85.219.44]:53503)
	by ppsw-41.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1TvPun-0002FQ-Pz (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk (return-path <wojciech.meyer@gmail.com>);
	Wed, 16 Jan 2013 10:08:14 +0000
Received: by mail-oa0-f44.google.com with SMTP id n5so1215056oag.3
	for <cl-mirage@lists.cam.ac.uk>; Wed, 16 Jan 2013 02:08:12 -0800 (PST)
MIME-Version: 1.0
X-Received: by 10.182.154.4 with SMTP id vk4mr351192obb.70.1358330892281; Wed,
	16 Jan 2013 02:08:12 -0800 (PST)
Received: by 10.182.221.71 with HTTP; Wed, 16 Jan 2013 02:08:12 -0800 (PST)
In-Reply-To: <6AFFCDD6-A8C3-4351-A506-F13D930CF972@recoil.org>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
	<3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
	<m2r4lmntli.fsf@dyn901-192.eduroam.ic.ac.uk>
	<CAHvkLrMY6SQYg2Ao4-QtX8n=NsOa971Yrf4F81Wmus5aMagBXw@mail.gmail.com>
	<3587ADE7-1423-4AB0-B510-DD55092E506D@recoil.org>
	<20130115194504.GA6280@voyager> <wfmwwa5ex7.fsf@gmail.com>
	<6AFFCDD6-A8C3-4351-A506-F13D930CF972@recoil.org>
Date: Wed, 16 Jan 2013 10:08:12 +0000
Message-ID: <CAOg1smBwSfUb=GGC9H1tHtPwUNAtxsTY7qU_fxQqPNasokP8tA@mail.gmail.com>
Subject: Re: [Caml-list] [ANN] beta-release of OPAM
From: Wojciech Meyer <wojciech.meyer@gmail.com>
To: Anil Madhavapeddy <anil@recoil.org>
Content-Type: text/plain; charset=ISO-8859-1
Cc: OCaml mailing-list <caml-list@inria.fr>,
	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, 16 Jan 2013 10:08:14 -0000
Content-Length: 773
Lines: 17

On Wed, Jan 16, 2013 at 10:01 AM, Anil Madhavapeddy <anil@recoil.org> wrote:
> Thanks for the quick fix!  Looking at the patch, the problem
> seems to be that ocamlbuild distinguishes between built-in tools
> (presumably the ocaml toolchain binaries), and external tools.
>
> Is there any reason why ocamlbuild shouldn't just unconditionally
> search the PATH for the compiler tools as well?  It's very confusing
> to have it override some binaries and not others.

Yes, this area appears to me a bit hairy and over engineered. I see no
real benefit of having such complex logic there too instead of using
just PATH, but let me figure out if we can do it.
However, I'm sure these changes must be there for some reason, I will
ping Nicolas with the query today.

-Wojciech


From gabriel.scherer@gmail.com Wed Jan 16 12:14:15 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvRsl-0003Uq-Kn (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <gabriel.scherer@gmail.com>);
	Wed, 16 Jan 2013 12:14:15 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1433312 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.214.54 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (gabriel.scherer[at]gmail.com)
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-bk0-f54.google.com ([209.85.214.54]:42310)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1TvRsl-0004Pf-pd (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk (return-path <gabriel.scherer@gmail.com>);
	Wed, 16 Jan 2013 12:14:15 +0000
Received: by mail-bk0-f54.google.com with SMTP id je9so632280bkc.41
	for <cl-mirage@lists.cam.ac.uk>; Wed, 16 Jan 2013 04:14:14 -0800 (PST)
X-Received: by 10.204.136.207 with SMTP id s15mr269410bkt.5.1358338454613;
	Wed, 16 Jan 2013 04:14:14 -0800 (PST)
MIME-Version: 1.0
Received: by 10.204.236.134 with HTTP; Wed, 16 Jan 2013 04:13:34 -0800 (PST)
In-Reply-To: <CAOg1smBwSfUb=GGC9H1tHtPwUNAtxsTY7qU_fxQqPNasokP8tA@mail.gmail.com>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
	<3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
	<m2r4lmntli.fsf@dyn901-192.eduroam.ic.ac.uk>
	<CAHvkLrMY6SQYg2Ao4-QtX8n=NsOa971Yrf4F81Wmus5aMagBXw@mail.gmail.com>
	<3587ADE7-1423-4AB0-B510-DD55092E506D@recoil.org>
	<20130115194504.GA6280@voyager> <wfmwwa5ex7.fsf@gmail.com>
	<6AFFCDD6-A8C3-4351-A506-F13D930CF972@recoil.org>
	<CAOg1smBwSfUb=GGC9H1tHtPwUNAtxsTY7qU_fxQqPNasokP8tA@mail.gmail.com>
From: Gabriel Scherer <gabriel.scherer@gmail.com>
Date: Wed, 16 Jan 2013 13:13:34 +0100
Message-ID: <CAPFanBE5Bisgew6tH=T7ieQ2VKaEMEnPmBa8jacO=pi78e8Fjg@mail.gmail.com>
Subject: Re: [Caml-list] [ANN] beta-release of OPAM
To: Wojciech Meyer <wojciech.meyer@gmail.com>
Content-Type: text/plain; charset=ISO-8859-1
Cc: OCaml mailing-list <caml-list@inria.fr>,
	Mirage 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, 16 Jan 2013 12:14:15 -0000
Content-Length: 1255
Lines: 29

I suppose that the tool may want to use a different way of finding the
OCaml executables during the OCaml, then ocamlbuild, bootstrap
process.

On Wed, Jan 16, 2013 at 11:08 AM, Wojciech Meyer
<wojciech.meyer@gmail.com> wrote:
> On Wed, Jan 16, 2013 at 10:01 AM, Anil Madhavapeddy <anil@recoil.org> wrote:
>> Thanks for the quick fix!  Looking at the patch, the problem
>> seems to be that ocamlbuild distinguishes between built-in tools
>> (presumably the ocaml toolchain binaries), and external tools.
>>
>> Is there any reason why ocamlbuild shouldn't just unconditionally
>> search the PATH for the compiler tools as well?  It's very confusing
>> to have it override some binaries and not others.
>
> Yes, this area appears to me a bit hairy and over engineered. I see no
> real benefit of having such complex logic there too instead of using
> just PATH, but let me figure out if we can do it.
> However, I'm sure these changes must be there for some reason, I will
> ping Nicolas with the query today.
>
> -Wojciech
>
> --
> 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 wojciech.meyer@gmail.com Wed Jan 16 14:43:51 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvUDX-0003a5-HT (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <wojciech.meyer@gmail.com>);
	Wed, 16 Jan 2013 14:43:51 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1433312 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.219.53 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (wojciech.meyer[at]gmail.com)
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-oa0-f53.google.com ([209.85.219.53]:58344)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1TvUDW-0001Du-ns (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk (return-path <wojciech.meyer@gmail.com>);
	Wed, 16 Jan 2013 14:43:51 +0000
Received: by mail-oa0-f53.google.com with SMTP id j6so1429219oag.40
	for <cl-mirage@lists.cam.ac.uk>; Wed, 16 Jan 2013 06:43:49 -0800 (PST)
MIME-Version: 1.0
X-Received: by 10.60.32.147 with SMTP id j19mr1005033oei.68.1358347429676;
	Wed, 16 Jan 2013 06:43:49 -0800 (PST)
Received: by 10.182.221.71 with HTTP; Wed, 16 Jan 2013 06:43:49 -0800 (PST)
In-Reply-To: <CAPFanBE5Bisgew6tH=T7ieQ2VKaEMEnPmBa8jacO=pi78e8Fjg@mail.gmail.com>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
	<3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
	<m2r4lmntli.fsf@dyn901-192.eduroam.ic.ac.uk>
	<CAHvkLrMY6SQYg2Ao4-QtX8n=NsOa971Yrf4F81Wmus5aMagBXw@mail.gmail.com>
	<3587ADE7-1423-4AB0-B510-DD55092E506D@recoil.org>
	<20130115194504.GA6280@voyager> <wfmwwa5ex7.fsf@gmail.com>
	<6AFFCDD6-A8C3-4351-A506-F13D930CF972@recoil.org>
	<CAOg1smBwSfUb=GGC9H1tHtPwUNAtxsTY7qU_fxQqPNasokP8tA@mail.gmail.com>
	<CAPFanBE5Bisgew6tH=T7ieQ2VKaEMEnPmBa8jacO=pi78e8Fjg@mail.gmail.com>
Date: Wed, 16 Jan 2013 14:43:49 +0000
Message-ID: <CAOg1smCukUnOg8=vHXd8nraT4Z+iAfS_LoKG-XQpc2+WG6JxLQ@mail.gmail.com>
Subject: Re: [Caml-list] [ANN] beta-release of OPAM
From: Wojciech Meyer <wojciech.meyer@gmail.com>
To: Gabriel Scherer <gabriel.scherer@gmail.com>
Content-Type: text/plain; charset=ISO-8859-1
Cc: OCaml mailing-list <caml-list@inria.fr>,
	Mirage 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, 16 Jan 2013 14:43:51 -0000
Content-Length: 1670
Lines: 38

Then during the bootstrap process we should be probably specifing
explicitly the tool via command line, not relying on a fragile path
resolution.
The plan is however is to stop bootstrapping ocamlbuild at some point
soon as it brings minimal benefit for the cost of the very complicated
scripts.

On Wed, Jan 16, 2013 at 12:13 PM, Gabriel Scherer
<gabriel.scherer@gmail.com> wrote:
> I suppose that the tool may want to use a different way of finding the
> OCaml executables during the OCaml, then ocamlbuild, bootstrap
> process.
>
> On Wed, Jan 16, 2013 at 11:08 AM, Wojciech Meyer
> <wojciech.meyer@gmail.com> wrote:
>> On Wed, Jan 16, 2013 at 10:01 AM, Anil Madhavapeddy <anil@recoil.org> wrote:
>>> Thanks for the quick fix!  Looking at the patch, the problem
>>> seems to be that ocamlbuild distinguishes between built-in tools
>>> (presumably the ocaml toolchain binaries), and external tools.
>>>
>>> Is there any reason why ocamlbuild shouldn't just unconditionally
>>> search the PATH for the compiler tools as well?  It's very confusing
>>> to have it override some binaries and not others.
>>
>> Yes, this area appears to me a bit hairy and over engineered. I see no
>> real benefit of having such complex logic there too instead of using
>> just PATH, but let me figure out if we can do it.
>> However, I'm sure these changes must be there for some reason, I will
>> ping Nicolas with the query today.
>>
>> -Wojciech
>>
>> --
>> 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 gabriel.scherer@gmail.com Wed Jan 16 14:50:48 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvUKG-0003y0-S5 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <gabriel.scherer@gmail.com>);
	Wed, 16 Jan 2013 14:50:48 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1433312 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.214.42 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (gabriel.scherer[at]gmail.com)
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-bk0-f42.google.com ([209.85.214.42]:53301)
	by ppsw-41.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1TvUKF-0004Ij-Si (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk (return-path <gabriel.scherer@gmail.com>);
	Wed, 16 Jan 2013 14:50:48 +0000
Received: by mail-bk0-f42.google.com with SMTP id ji2so748728bkc.1
	for <cl-mirage@lists.cam.ac.uk>; Wed, 16 Jan 2013 06:50:47 -0800 (PST)
X-Received: by 10.204.150.137 with SMTP id y9mr419151bkv.103.1358347847542;
	Wed, 16 Jan 2013 06:50:47 -0800 (PST)
MIME-Version: 1.0
Received: by 10.204.236.134 with HTTP; Wed, 16 Jan 2013 06:50:07 -0800 (PST)
In-Reply-To: <CAOg1smCukUnOg8=vHXd8nraT4Z+iAfS_LoKG-XQpc2+WG6JxLQ@mail.gmail.com>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
	<3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
	<m2r4lmntli.fsf@dyn901-192.eduroam.ic.ac.uk>
	<CAHvkLrMY6SQYg2Ao4-QtX8n=NsOa971Yrf4F81Wmus5aMagBXw@mail.gmail.com>
	<3587ADE7-1423-4AB0-B510-DD55092E506D@recoil.org>
	<20130115194504.GA6280@voyager> <wfmwwa5ex7.fsf@gmail.com>
	<6AFFCDD6-A8C3-4351-A506-F13D930CF972@recoil.org>
	<CAOg1smBwSfUb=GGC9H1tHtPwUNAtxsTY7qU_fxQqPNasokP8tA@mail.gmail.com>
	<CAPFanBE5Bisgew6tH=T7ieQ2VKaEMEnPmBa8jacO=pi78e8Fjg@mail.gmail.com>
	<CAOg1smCukUnOg8=vHXd8nraT4Z+iAfS_LoKG-XQpc2+WG6JxLQ@mail.gmail.com>
From: Gabriel Scherer <gabriel.scherer@gmail.com>
Date: Wed, 16 Jan 2013 15:50:07 +0100
Message-ID: <CAPFanBGH0e+qx6vg+u7Spz7KfKqpTo4RTRpDB=w00+pxKo2h+A@mail.gmail.com>
Subject: Re: [Caml-list] [ANN] beta-release of OPAM
To: Wojciech Meyer <wojciech.meyer@gmail.com>
Content-Type: text/plain; charset=ISO-8859-1
Cc: OCaml mailing-list <caml-list@inria.fr>,
	Mirage 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, 16 Jan 2013 14:50:48 -0000
Content-Length: 2121
Lines: 48

I'm fine with whatever solution you'll devise.

Let me take this occasion to thank you publicly for the numerous
contribution you've brought to OCamlbuild in the last few months.
We've not yet succeeded in encouraging other people to contribute
(dear user: you should!), but fixing those little edge cases is very
helpful.

On Wed, Jan 16, 2013 at 3:43 PM, Wojciech Meyer
<wojciech.meyer@gmail.com> wrote:
> Then during the bootstrap process we should be probably specifing
> explicitly the tool via command line, not relying on a fragile path
> resolution.
> The plan is however is to stop bootstrapping ocamlbuild at some point
> soon as it brings minimal benefit for the cost of the very complicated
> scripts.
>
> On Wed, Jan 16, 2013 at 12:13 PM, Gabriel Scherer
> <gabriel.scherer@gmail.com> wrote:
>> I suppose that the tool may want to use a different way of finding the
>> OCaml executables during the OCaml, then ocamlbuild, bootstrap
>> process.
>>
>> On Wed, Jan 16, 2013 at 11:08 AM, Wojciech Meyer
>> <wojciech.meyer@gmail.com> wrote:
>>> On Wed, Jan 16, 2013 at 10:01 AM, Anil Madhavapeddy <anil@recoil.org> wrote:
>>>> Thanks for the quick fix!  Looking at the patch, the problem
>>>> seems to be that ocamlbuild distinguishes between built-in tools
>>>> (presumably the ocaml toolchain binaries), and external tools.
>>>>
>>>> Is there any reason why ocamlbuild shouldn't just unconditionally
>>>> search the PATH for the compiler tools as well?  It's very confusing
>>>> to have it override some binaries and not others.
>>>
>>> Yes, this area appears to me a bit hairy and over engineered. I see no
>>> real benefit of having such complex logic there too instead of using
>>> just PATH, but let me figure out if we can do it.
>>> However, I'm sure these changes must be there for some reason, I will
>>> ping Nicolas with the query today.
>>>
>>> -Wojciech
>>>
>>> --
>>> 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 Wed Jan 16 16:23:12 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvVlg-00016Q-Mb (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 16 Jan 2013 16:23:12 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1433312
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:10770
	helo=dark.recoil.org)
	by ppsw-41.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1TvVlf-0002AZ-Ri (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 16 Jan 2013 16:23:12 +0000
Received: (qmail 31756 invoked by uid 634); 16 Jan 2013 16:23: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 volstagg-0.srg.cl.cam.ac.uk (HELO [10.0.0.83]) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Wed, 16 Jan 2013 16:23:10 +0000
From: Anil Madhavapeddy <anil@recoil.org>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Subject: Fwd: [Xen-devel] [Community Review] Mirage Incubation Project Proposal
Date: Wed, 16 Jan 2013 16:23:09 +0000
References: <1358352891.32431.100.camel@zakaz.uk.xensource.com>
To: Mirage List <cl-mirage@lists.cam.ac.uk>,
	Lars Kurth <lars.kurth.xen@gmail.com>
Message-Id: <EFDEB99F-C0E0-4C92-90EB-592B2137D4A4@recoil.org>
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
X-Mailer: Apple Mail (2.1499)
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: Wed, 16 Jan 2013 16:23:12 -0000
Content-Length: 1027
Lines: 36

Great support from the Xen community so far about the incubation, and =
Lars also wrote a blog post on Xen.org about it that linked to the =
XenSummit talk:
=
http://blog.xen.org/index.php/2013/01/15/mirage-project-proposal-for-commu=
nity-review/

Now, back to that first release... :-)

-anil

Begin forwarded message:

> From: Ian Campbell <Ian.Campbell@citrix.com>
> Subject: Re: [Xen-devel] [Community Review] Mirage Incubation Project =
Proposal
> Date: 16 January 2013 16:14:51 GMT
> To: "lars.kurth@xen.org" <lars.kurth@xen.org>
> Cc: "xen-devel@lists.xen.org" <xen-devel@lists.xen.org>, =
"xen-arm@lists.xen.org" <xen-arm@lists.xen.org>, "xen-api@lists.xen.org" =
<xen-api@lists.xen.org>, Amir M Chaudhry <amc79@cam.ac.uk>, Anil =
Madhavapeddy <anil@recoil.org>
>=20
> On Fri, 2013-01-11 at 16:58 +0000, Lars Kurth wrote:
>> this e-mail is to let you know that the OpenMirage project is seeking =
to=20
>> become a Xen.org hosted project.
>=20
> Mirage is cool stuff.
>=20
> I'm all for this, FWIW.
>=20
> Ian.
>=20



From fabrissimo@gmail.com Wed Jan 16 17:27:07 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvWlX-0003bA-Hu (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <fabrissimo@gmail.com>); Wed, 16 Jan 2013 17:27:07 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1433312 
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (fabrissimo[at]gmail.com)
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.214.41 listed in list.dnswl.dnsbl.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-bk0-f41.google.com ([209.85.214.41]:40141)
	by ppsw-41.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1TvWlW-0006jv-T0 (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <fabrissimo@gmail.com>); Wed, 16 Jan 2013 17:27:07 +0000
Received: by mail-bk0-f41.google.com with SMTP id jg9so849559bkc.28
	for <cl-mirage@lists.cam.ac.uk>; Wed, 16 Jan 2013 09:27:06 -0800 (PST)
X-Received: by 10.204.147.78 with SMTP id k14mr680930bkv.7.1358357226669;
	Wed, 16 Jan 2013 09:27:06 -0800 (PST)
Received: from ?IPv6:2001:660:3013:3:7d80:da44:5fcb:ab04?
	([2001:660:3013:3:7d80:da44:5fcb:ab04])
	by mx.google.com with ESMTPS id l17sm16279363bkw.12.2013.01.16.09.27.05
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Wed, 16 Jan 2013 09:27:06 -0800 (PST)
Message-ID: <50F6E2E9.5020305@gmail.com>
Date: Wed, 16 Jan 2013 18:27:05 +0100
From: Fabrice Le Fessant <fabrissimo@gmail.com>
User-Agent: Mozilla/5.0 (X11; Linux x86_64;
	rv:17.0) Gecko/20130106 Thunderbird/17.0.2
MIME-Version: 1.0
To: Anil Madhavapeddy <anil@recoil.org>
Subject: Re: [Caml-list] [ANN] beta-release of OPAM
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
	<3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
	<m2r4lmntli.fsf@dyn901-192.eduroam.ic.ac.uk>
	<CAHvkLrMY6SQYg2Ao4-QtX8n=NsOa971Yrf4F81Wmus5aMagBXw@mail.gmail.com>
	<3587ADE7-1423-4AB0-B510-DD55092E506D@recoil.org>
	<20130115194504.GA6280@voyager> <wfmwwa5ex7.fsf@gmail.com>
	<6AFFCDD6-A8C3-4351-A506-F13D930CF972@recoil.org>
In-Reply-To: <6AFFCDD6-A8C3-4351-A506-F13D930CF972@recoil.org>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Cc: OCaml mailing-list <caml-list@inria.fr>,
	Mirage List <cl-mirage@lists.cam.ac.uk>,
	Wojciech Meyer <wojciech.meyer@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, 16 Jan 2013 17:27:07 -0000
Content-Length: 1099
Lines: 32

I would suggest that OPAM should always set the variable OCAMLFIND_CONF 
to $HOME/.opam/$COMPILER/lib/findlib.conf, so that, whatever the 
"ocamlfind" that ocamlbuild uses, it will always use the packages 
installed by OPAM.

Can't this be automatically done by defining the variable in the .opam 
of ocamlfind ?

--Fabrice

On 01/16/2013 11:01 AM, Anil Madhavapeddy wrote:
> On 15 Jan 2013, at 21:12, Wojciech Meyer <wojciech.meyer@gmail.com> wrote:
>
>> Roberto Di Cosmo <roberto@dicosmo.org> writes:
>>
>>> I can confirm this : on opam 0.8.3, this bug prevented me from
>>> compiling properly a test code for Parmap.
>>> It definitely needs to be fixed :-)
>>
>> It's been fixed on trunk now.
>
> Thanks for the quick fix!  Looking at the patch, the problem
> seems to be that ocamlbuild distinguishes between built-in tools
> (presumably the ocaml toolchain binaries), and external tools.
>
> Is there any reason why ocamlbuild shouldn't just unconditionally
> search the PATH for the compiler tools as well?  It's very confusing
> to have it override some binaries and not others.
>
> -anil
>


From thomas.gazagnaire@gmail.com Wed Jan 16 17:40:12 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvWyC-0004AX-FF (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Wed, 16 Jan 2013 17:40:12 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.7 from SpamAssassin-3.3.2-1433312 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [74.125.82.42 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.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wg0-f42.google.com ([74.125.82.42]:54380)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1TvWyB-00073n-YM (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Wed, 16 Jan 2013 17:40:12 +0000
Received: by mail-wg0-f42.google.com with SMTP id dr1so2852784wgb.5
	for <cl-mirage@lists.cam.ac.uk>; Wed, 16 Jan 2013 09:40:11 -0800 (PST)
X-Received: by 10.180.102.170 with SMTP id fp10mr11290121wib.13.1358358011459; 
	Wed, 16 Jan 2013 09:40:11 -0800 (PST)
Received: from [192.168.15.162] ([62.49.66.12])
	by mx.google.com with ESMTPS id gz3sm9283199wib.2.2013.01.16.09.40.09
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Wed, 16 Jan 2013 09:40:10 -0800 (PST)
Sender: Thomas Gazagnaire <thomas.gazagnaire@gmail.com>
Subject: Re: [Caml-list] [ANN] beta-release of OPAM
Mime-Version: 1.0 (Apple Message framework v1085)
Content-Type: text/plain; charset=us-ascii
From: Thomas Gazagnaire <thomas@ocamlpro.com>
In-Reply-To: <50F6E2E9.5020305@gmail.com>
Date: Wed, 16 Jan 2013 17:40:08 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <AA877059-B924-4F61-9A7C-5DE02C79E17B@ocamlpro.com>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
	<3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
	<m2r4lmntli.fsf@dyn901-192.eduroam.ic.ac.uk>
	<CAHvkLrMY6SQYg2Ao4-QtX8n=NsOa971Yrf4F81Wmus5aMagBXw@mail.gmail.com>
	<3587ADE7-1423-4AB0-B510-DD55092E506D@recoil.org>
	<20130115194504.GA6280@voyager> <wfmwwa5ex7.fsf@gmail.com>
	<6AFFCDD6-A8C3-4351-A506-F13D930CF972@recoil.org>
	<50F6E2E9.5020305@gmail.com>
To: Fabrice Le Fessant <fabrissimo@gmail.com>
X-Mailer: Apple Mail (2.1085)
Cc: Wojciech Meyer <wojciech.meyer@gmail.com>,
	OCaml mailing-list <caml-list@inria.fr>,
	Mirage 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, 16 Jan 2013 17:40:12 -0000
Content-Length: 1288
Lines: 42

> I would suggest that OPAM should always set the variable =
OCAMLFIND_CONF to $HOME/.opam/$COMPILER/lib/findlib.conf, so that, =
whatever the "ocamlfind" that ocamlbuild uses, it will always use the =
packages installed by OPAM.

I've tried that and unfortunately this didn't seem to work. ocamlfind is =
picking the wrong compiler.

--
Thomas

>=20
> Can't this be automatically done by defining the variable in the .opam =
of ocamlfind ?
>=20
> --Fabrice
>=20
> On 01/16/2013 11:01 AM, Anil Madhavapeddy wrote:
>> On 15 Jan 2013, at 21:12, Wojciech Meyer <wojciech.meyer@gmail.com> =
wrote:
>>=20
>>> Roberto Di Cosmo <roberto@dicosmo.org> writes:
>>>=20
>>>> I can confirm this : on opam 0.8.3, this bug prevented me from
>>>> compiling properly a test code for Parmap.
>>>> It definitely needs to be fixed :-)
>>>=20
>>> It's been fixed on trunk now.
>>=20
>> Thanks for the quick fix!  Looking at the patch, the problem
>> seems to be that ocamlbuild distinguishes between built-in tools
>> (presumably the ocaml toolchain binaries), and external tools.
>>=20
>> Is there any reason why ocamlbuild shouldn't just unconditionally
>> search the PATH for the compiler tools as well?  It's very confusing
>> to have it override some binaries and not others.
>>=20
>> -anil
>>=20
>=20



From fabrissimo@gmail.com Wed Jan 16 17:46:38 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvX4P-0004OX-VR (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <fabrissimo@gmail.com>); Wed, 16 Jan 2013 17:46:37 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1433312 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.214.48 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (fabrissimo[at]gmail.com)
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-bk0-f48.google.com ([209.85.214.48]:37806)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1TvX4P-0002jC-We (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <fabrissimo@gmail.com>); Wed, 16 Jan 2013 17:46:37 +0000
Received: by mail-bk0-f48.google.com with SMTP id jc3so865587bkc.35
	for <cl-mirage@lists.cam.ac.uk>; Wed, 16 Jan 2013 09:46:36 -0800 (PST)
X-Received: by 10.204.154.202 with SMTP id p10mr708719bkw.29.1358358396854;
	Wed, 16 Jan 2013 09:46:36 -0800 (PST)
Received: from ?IPv6:2001:660:3013:3:7d80:da44:5fcb:ab04?
	([2001:660:3013:3:7d80:da44:5fcb:ab04])
	by mx.google.com with ESMTPS id 18sm16292460bkv.0.2013.01.16.09.46.35
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Wed, 16 Jan 2013 09:46:36 -0800 (PST)
Message-ID: <50F6E77B.8040405@gmail.com>
Date: Wed, 16 Jan 2013 18:46:35 +0100
From: Fabrice Le Fessant <fabrissimo@gmail.com>
User-Agent: Mozilla/5.0 (X11; Linux x86_64;
	rv:17.0) Gecko/20130106 Thunderbird/17.0.2
MIME-Version: 1.0
To: Thomas Gazagnaire <thomas@ocamlpro.com>
Subject: Re: [Caml-list] [ANN] beta-release of OPAM
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<A50624F5-9601-492C-84E1-D2D54081AB0E@recoil.org>
	<3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
	<m2r4lmntli.fsf@dyn901-192.eduroam.ic.ac.uk>
	<CAHvkLrMY6SQYg2Ao4-QtX8n=NsOa971Yrf4F81Wmus5aMagBXw@mail.gmail.com>
	<3587ADE7-1423-4AB0-B510-DD55092E506D@recoil.org>
	<20130115194504.GA6280@voyager> <wfmwwa5ex7.fsf@gmail.com>
	<6AFFCDD6-A8C3-4351-A506-F13D930CF972@recoil.org>
	<50F6E2E9.5020305@gmail.com>
	<AA877059-B924-4F61-9A7C-5DE02C79E17B@ocamlpro.com>
In-Reply-To: <AA877059-B924-4F61-9A7C-5DE02C79E17B@ocamlpro.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Cc: Wojciech Meyer <wojciech.meyer@gmail.com>,
	OCaml mailing-list <caml-list@inria.fr>,
	Mirage 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, 16 Jan 2013 17:46:38 -0000
Content-Length: 438
Lines: 9

On 01/16/2013 06:40 PM, Thomas Gazagnaire wrote:
>> I would suggest that OPAM should always set the variable OCAMLFIND_CONF to $HOME/.opam/$COMPILER/lib/findlib.conf, so that, whatever the "ocamlfind" that ocamlbuild uses, it will always use the packages installed by OPAM.
>
> I've tried that and unfortunately this didn't seem to work. ocamlfind is picking the wrong compiler.

We just tried it with Roberto, and it worked.

--Fabrice


From rdicosmo@gmail.com Wed Jan 16 20:22:27 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvZVD-0000FJ-FD (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <rdicosmo@gmail.com>); Wed, 16 Jan 2013 20:22:27 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.7 from SpamAssassin-3.3.2-1433312 
	* -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 *       (rdicosmo[at]gmail.com)
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wg0-f45.google.com ([74.125.82.45]:52527)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1TvZVB-0003FV-Yo (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <rdicosmo@gmail.com>); Wed, 16 Jan 2013 20:22:27 +0000
Received: by mail-wg0-f45.google.com with SMTP id dq12so1185656wgb.24
	for <cl-mirage@lists.cam.ac.uk>; Wed, 16 Jan 2013 12:22:25 -0800 (PST)
X-Received: by 10.194.23.37 with SMTP id j5mr4488260wjf.28.1358367745611;
	Wed, 16 Jan 2013 12:22:25 -0800 (PST)
Received: from voyager (bny92-3-81-56-44-163.fbx.proxad.net. [81.56.44.163])
	by mx.google.com with ESMTPS id l5sm10829270wia.10.2013.01.16.12.22.23
	(version=TLSv1 cipher=RC4-SHA bits=128/128);
	Wed, 16 Jan 2013 12:22:24 -0800 (PST)
Sender: Roberto Di Cosmo <rdicosmo@gmail.com>
Received: from dicosmo by voyager with local (Exim 4.72)
	(envelope-from <roberto@dicosmo.org>)
	id 1TvZV8-0008Qu-3R; Wed, 16 Jan 2013 21:22:22 +0100
Date: Wed, 16 Jan 2013 21:22:21 +0100
From: Roberto Di Cosmo <roberto@dicosmo.org>
To: Fabrice Le Fessant <fabrissimo@gmail.com>
Subject: Re: [Caml-list] [ANN] beta-release of OPAM
Message-ID: <20130116202221.GA30252@voyager>
References: <3764589D-EC12-4CD5-A76F-A009BE2DDE8E@ocamlpro.com>
	<m2r4lmntli.fsf@dyn901-192.eduroam.ic.ac.uk>
	<CAHvkLrMY6SQYg2Ao4-QtX8n=NsOa971Yrf4F81Wmus5aMagBXw@mail.gmail.com>
	<3587ADE7-1423-4AB0-B510-DD55092E506D@recoil.org>
	<20130115194504.GA6280@voyager> <wfmwwa5ex7.fsf@gmail.com>
	<6AFFCDD6-A8C3-4351-A506-F13D930CF972@recoil.org>
	<50F6E2E9.5020305@gmail.com>
	<AA877059-B924-4F61-9A7C-5DE02C79E17B@ocamlpro.com>
	<50F6E77B.8040405@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <50F6E77B.8040405@gmail.com>
User-Agent: Mutt/1.5.20 (2009-06-14)
Cc: Thomas Gazagnaire <thomas@ocamlpro.com>,
	Wojciech Meyer <wojciech.meyer@gmail.com>,
	OCaml mailing-list <caml-list@inria.fr>,
	Mirage 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, 16 Jan 2013 20:22:27 -0000
Content-Length: 2028
Lines: 51

Hmm... these two assertions are not necessarily contradictory:

 - on my test virtual machine, ocamlfind did not find the packages
   installed with opam, and this did the trick (thanks Fabrice!)

 - but I only had one version of the compiler ... and I do suspect
   that with multiple versions it will not be enough

--
Roberto

On Wed, Jan 16, 2013 at 06:46:35PM +0100, Fabrice Le Fessant wrote:
> On 01/16/2013 06:40 PM, Thomas Gazagnaire wrote:
> >>I would suggest that OPAM should always set the variable OCAMLFIND_CONF to $HOME/.opam/$COMPILER/lib/findlib.conf, so that, whatever the "ocamlfind" that ocamlbuild uses, it will always use the packages installed by OPAM.
> >
> >I've tried that and unfortunately this didn't seem to work. ocamlfind is picking the wrong compiler.
> 
> We just tried it with Roberto, and it worked.
> 
> --Fabrice
> 
> -- 
> 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

-- 
Roberto Di Cosmo
 
------------------------------------------------------------------
Professeur               En delegation a l'INRIA
PPS                      E-mail: roberto@dicosmo.org
Universite Paris Diderot WWW  : http://www.dicosmo.org
Case 7014                Tel  : ++33-(0)1-57 27 92 20
5, Rue Thomas Mann       
F-75205 Paris Cedex 13   Identica: http://identi.ca/rdicosmo
FRANCE.                  Twitter: http://twitter.com/rdicosmo
------------------------------------------------------------------
Attachments:
MIME accepted, Word deprecated
      http://www.gnu.org/philosophy/no-word-attachments.html
------------------------------------------------------------------
Office location:
 
Bureau 6C08 (6th floor)
175, rue du Chevaleret, XIII
Metro Chevaleret, ligne 6
-----------------------------------------------------------------
GPG fingerprint 2931 20CE 3A5A 5390 98EC 8BFC FCCA C3BE 39CB 12D3                        


From anil@recoil.org Wed Jan 16 22:39:01 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvbdN-0002L5-RK (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 16 Jan 2013 22:39:01 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1433312
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:41210
	helo=dark.recoil.org)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1TvbdM-0002hQ-pR (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 16 Jan 2013 22:39:01 +0000
Received: (qmail 21414 invoked by uid 634); 16 Jan 2013 22:39:00 -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;
	Wed, 16 Jan 2013 22:39:00 +0000
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
Subject: Re: data structure lockin
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <908E945A-B1E0-4E28-8C67-1CCA81596B4D@nottingham.ac.uk>
Date: Wed, 16 Jan 2013 22:38:58 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <958ECBD1-92F1-43C8-BF29-61544064C3D3@recoil.org>
References: <9179FFE3-4CF3-4F06-BC65-7FAC7B146621@recoil.org>
	<C96B39E3-E194-4197-A32D-895F3B3B78D6@nottingham.ac.uk>
	<20130109120723.GN2729@dark.recoil.org>
	<908E945A-B1E0-4E28-8C67-1CCA81596B4D@nottingham.ac.uk>
To: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
X-Mailer: Apple Mail (2.1499)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
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: Wed, 16 Jan 2013 22:39:01 -0000
Content-Length: 871
Lines: 21

Continuing the topic of data structures, I noticed a slowdown for the =
DNS performance after the recent conversion to cstruct.  While the =
memoized version (which caches marshalled packets) was about the same =
performance, the normal one was much slower (even worse than BIND).

Thomas did some profiling today, and it turns out that the use of a =
mutable Hashtbl for tracking label compression results in very bad =
performance, since the string lists all have hash collisions and ends up =
linearising the structure.  He converted it to use a purely functional =
Map instead (which just lives on the minor heap since it's only needed =
for one packet parse cycle), and performance is right back where it =
should be!

=
https://github.com/samoht/ocaml-dns/commit/fd68be3850353f2fb981b100bf04562=
ae0d99a1e

(mainly fyi for Mort, but useful for others too)

-anil=


From Richard.Mortier@nottingham.ac.uk Wed Jan 16 22:41:50 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Tvbg6-0002Mj-9Q (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Wed, 16 Jan 2013 22:41:50 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1433312 
	* 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]:57430)
	by ppsw-41.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1Tvbg5-0004ts-Qh (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Wed, 16 Jan 2013 22:41:50 +0000
Received: (qmail 13790 invoked from network); 16 Jan 2013 22:41:46 -0000
Received: from localhost (127.0.0.1)
	by engine02-20433-2.icritical.com with SMTP; 16 Jan 2013 22:41:46 -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 13658-02 for <cl-mirage@lists.cam.ac.uk>;
	Wed, 16 Jan 2013 22:41:44 +0000 (GMT)
Received: (qmail 13775 invoked by uid 599); 16 Jan 2013 22:41:44 -0000
Received: from unknown (HELO smtp3.nottingham.ac.uk) (128.243.44.55)
	by engine02-20433-2.icritical.com (qpsmtpd/0.28) with ESMTP;
	Wed, 16 Jan 2013 22:41:44 +0000
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 1Tvbg1-0006eN-Cg
	for cl-mirage@lists.cam.ac.uk; Wed, 16 Jan 2013 22:41:45 +0000
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Anil Madhavapeddy <anil@recoil.org>
Date: Wed, 16 Jan 2013 22:41:45 +0000
Subject: Re: data structure lockin
Thread-Topic: data structure lockin
Thread-Index: Ac30OqjnWaFpGITjQ7CT8kJgBoR+Dw==
Message-ID: <E2AEF698-6444-45E6-A4B4-F59B050CFFC1@nottingham.ac.uk>
References: <9179FFE3-4CF3-4F06-BC65-7FAC7B146621@recoil.org>
	<C96B39E3-E194-4197-A32D-895F3B3B78D6@nottingham.ac.uk>
	<20130109120723.GN2729@dark.recoil.org>
	<908E945A-B1E0-4E28-8C67-1CCA81596B4D@nottingham.ac.uk>
	<958ECBD1-92F1-43C8-BF29-61544064C3D3@recoil.org>
In-Reply-To: <958ECBD1-92F1-43C8-BF29-61544064C3D3@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 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: Wed, 16 Jan 2013 22:41:50 -0000
Content-Length: 1724
Lines: 39

nice... :)

On 16 Jan 2013, at 22:38, Anil Madhavapeddy wrote:

> Continuing the topic of data structures, I noticed a slowdown for the DNS=
 performance after the recent conversion to cstruct.  While the memoized ve=
rsion (which caches marshalled packets) was about the same performance, the=
 normal one was much slower (even worse than BIND).
>=20
> Thomas did some profiling today, and it turns out that the use of a mutab=
le Hashtbl for tracking label compression results in very bad performance, =
since the string lists all have hash collisions and ends up linearising the=
 structure.  He converted it to use a purely functional Map instead (which =
just lives on the minor heap since it's only needed for one packet parse cy=
cle), and performance is right back where it should be!
>=20
> https://github.com/samoht/ocaml-dns/commit/fd68be3850353f2fb981b100bf0456=
2ae0d99a1e
>=20
> (mainly fyi for Mort, but useful for others too)
>=20
> -anil


--=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 Wed Jan 16 23:50:16 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvckK-0003hR-Hr (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Wed, 16 Jan 2013 23:50:16 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1433312 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [74.125.82.53 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_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wg0-f53.google.com ([74.125.82.53]:43691)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1TvckJ-0001qT-XI (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Wed, 16 Jan 2013 23:50:16 +0000
Received: by mail-wg0-f53.google.com with SMTP id fn15so1282866wgb.20
	for <cl-mirage@lists.cam.ac.uk>; Wed, 16 Jan 2013 15:50:15 -0800 (PST)
X-Received: by 10.194.58.175 with SMTP id s15mr5175545wjq.31.1358380215177;
	Wed, 16 Jan 2013 15:50:15 -0800 (PST)
Received: from [10.101.47.25] (zone6.robinson.cam.ac.uk. [131.111.236.121])
	by mx.google.com with ESMTPS id l5sm11596327wia.10.2013.01.16.15.50.13
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Wed, 16 Jan 2013 15:50:14 -0800 (PST)
Subject: Re: data structure lockin
Mime-Version: 1.0 (Apple Message framework v1085)
Content-Type: text/plain; charset=us-ascii
From: Thomas Gazagnaire <thomas.gazagnaire@gmail.com>
In-Reply-To: <E2AEF698-6444-45E6-A4B4-F59B050CFFC1@nottingham.ac.uk>
Date: Wed, 16 Jan 2013 23:50:13 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <D56389C4-924B-44D9-B464-70C9B96A3361@gmail.com>
References: <9179FFE3-4CF3-4F06-BC65-7FAC7B146621@recoil.org>
	<C96B39E3-E194-4197-A32D-895F3B3B78D6@nottingham.ac.uk>
	<20130109120723.GN2729@dark.recoil.org>
	<908E945A-B1E0-4E28-8C67-1CCA81596B4D@nottingham.ac.uk>
	<958ECBD1-92F1-43C8-BF29-61544064C3D3@recoil.org>
	<E2AEF698-6444-45E6-A4B4-F59B050CFFC1@nottingham.ac.uk>
To: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
X-Mailer: Apple Mail (2.1085)
Cc: "cl-mirage@lists.cam.ac.uk" <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, 16 Jan 2013 23:50:16 -0000
Content-Length: 2309
Lines: 73

To be more complete, you also need to carefully tune your "compare" =
function when you use a purely functional data-structure:

=
https://github.com/samoht/ocaml-dns/commit/053c12bcff4287de86fc2e686b21e99=
e98cd083c

I'vet passed from 25k qps to 30k qps by just doing this.

The same trick works with the memoization table:

=
https://github.com/samoht/mirage-skeleton/commit/6ed135317f78f4cab580c8e7d=
1e5d919ff188147

--
Thomas

On Jan 16, 2013, at 10:41 PM, Richard Mortier wrote:

> nice... :)
>=20
> On 16 Jan 2013, at 22:38, Anil Madhavapeddy wrote:
>=20
>> Continuing the topic of data structures, I noticed a slowdown for the =
DNS performance after the recent conversion to cstruct.  While the =
memoized version (which caches marshalled packets) was about the same =
performance, the normal one was much slower (even worse than BIND).
>>=20
>> Thomas did some profiling today, and it turns out that the use of a =
mutable Hashtbl for tracking label compression results in very bad =
performance, since the string lists all have hash collisions and ends up =
linearising the structure.  He converted it to use a purely functional =
Map instead (which just lives on the minor heap since it's only needed =
for one packet parse cycle), and performance is right back where it =
should be!
>>=20
>> =
https://github.com/samoht/ocaml-dns/commit/fd68be3850353f2fb981b100bf04562=
ae0d99a1e
>>=20
>> (mainly fyi for Mort, but useful for others too)
>>=20
>> -anil
>=20
>=20
> --=20
> Cheers,
>=20
> R.
>=20
>=20
>=20
>=20
> 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.
>=20
> 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.
>=20



From Richard.Mortier@nottingham.ac.uk Wed Jan 16 23:54:10 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Tvco6-0003nC-7r (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Wed, 16 Jan 2013 23:54:10 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1433312 
	* 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]:38996)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with smtp id 1Tvco4-0003WX-sd (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Wed, 16 Jan 2013 23:54:10 +0000
Received: (qmail 11178 invoked from network); 16 Jan 2013 23:54:04 -0000
Received: from localhost (127.0.0.1)
	by engine02-20433-2.icritical.com with SMTP; 16 Jan 2013 23:54:04 -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 11020-01 for <cl-mirage@lists.cam.ac.uk>;
	Wed, 16 Jan 2013 23:54:02 +0000 (GMT)
Received: (qmail 11113 invoked by uid 599); 16 Jan 2013 23:54:02 -0000
Received: from unknown (HELO smtp3.nottingham.ac.uk) (128.243.44.55)
	by engine02-20433-2.icritical.com (qpsmtpd/0.28) with ESMTP;
	Wed, 16 Jan 2013 23:54:02 +0000
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 1Tvco0-0007bz-LV
	for cl-mirage@lists.cam.ac.uk; Wed, 16 Jan 2013 23:54:04 +0000
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Thomas Gazagnaire <thomas.gazagnaire@gmail.com>
Date: Wed, 16 Jan 2013 23:54:03 +0000
Subject: Re: data structure lockin
Thread-Topic: data structure lockin
Thread-Index: Ac30RMOrfOGCXAThTH6rqmo/N0Q4zg==
Message-ID: <868EC340-DD23-49C4-89FC-ADFDE7AF4382@nottingham.ac.uk>
References: <9179FFE3-4CF3-4F06-BC65-7FAC7B146621@recoil.org>
	<C96B39E3-E194-4197-A32D-895F3B3B78D6@nottingham.ac.uk>
	<20130109120723.GN2729@dark.recoil.org>
	<908E945A-B1E0-4E28-8C67-1CCA81596B4D@nottingham.ac.uk>
	<958ECBD1-92F1-43C8-BF29-61544064C3D3@recoil.org>
	<E2AEF698-6444-45E6-A4B4-F59B050CFFC1@nottingham.ac.uk>
	<D56389C4-924B-44D9-B464-70C9B96A3361@gmail.com>
In-Reply-To: <D56389C4-924B-44D9-B464-70C9B96A3361@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="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>,
	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, 16 Jan 2013 23:54:10 -0000
Content-Length: 3224
Lines: 88

interesting... thanks! :)

On 16 Jan 2013, at 23:50, Thomas Gazagnaire wrote:

> To be more complete, you also need to carefully tune your "compare" funct=
ion when you use a purely functional data-structure:
>=20
> https://github.com/samoht/ocaml-dns/commit/053c12bcff4287de86fc2e686b21e9=
9e98cd083c
>=20
> I'vet passed from 25k qps to 30k qps by just doing this.
>=20
> The same trick works with the memoization table:
>=20
> https://github.com/samoht/mirage-skeleton/commit/6ed135317f78f4cab580c8e7=
d1e5d919ff188147
>=20
> --
> Thomas
>=20
> On Jan 16, 2013, at 10:41 PM, Richard Mortier wrote:
>=20
>> nice... :)
>>=20
>> On 16 Jan 2013, at 22:38, Anil Madhavapeddy wrote:
>>=20
>>> Continuing the topic of data structures, I noticed a slowdown for the D=
NS performance after the recent conversion to cstruct.  While the memoized =
version (which caches marshalled packets) was about the same performance, t=
he normal one was much slower (even worse than BIND).
>>>=20
>>> Thomas did some profiling today, and it turns out that the use of a mut=
able Hashtbl for tracking label compression results in very bad performance=
, since the string lists all have hash collisions and ends up linearising t=
he structure.  He converted it to use a purely functional Map instead (whic=
h just lives on the minor heap since it's only needed for one packet parse =
cycle), and performance is right back where it should be!
>>>=20
>>> https://github.com/samoht/ocaml-dns/commit/fd68be3850353f2fb981b100bf04=
562ae0d99a1e
>>>=20
>>> (mainly fyi for Mort, but useful for others too)
>>>=20
>>> -anil
>>=20
>>=20
>> --=20
>> Cheers,
>>=20
>> R.
>>=20
>>=20
>>=20
>>=20
>> This message and any attachment are intended solely for the addressee an=
d may contain confidential information. If you have received this message i=
n 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 a=
ny attachment.  Any views or opinions expressed by the author of this email=
 do not necessarily reflect the views of the University of Nottingham.
>>=20
>> This message has been checked for viruses but the contents of an attachm=
ent
>> may still contain software viruses which could damage your computer syst=
em:
>> you are advised to perform your own checks. Email communications with th=
e
>> University of Nottingham may be monitored as permitted by UK legislation=
.
>>=20
>=20


--=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 alain@frisch.fr Thu Jan 17 17:15:30 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Tvt3q-00039w-BI (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <alain@frisch.fr>); Thu, 17 Jan 2013 17:15:30 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1433857 
	* -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/,
	no *      trust
	*      [193.252.23.213 listed in list.dnswl.dnsbl.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from msa04.smtpout.orange.fr ([193.252.23.213]:34316
	helo=msa.smtpout.orange.fr)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1Tvt3p-0003DX-YU (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <alain@frisch.fr>); Thu, 17 Jan 2013 17:15:30 +0000
Received: from [192.168.1.105] ([90.44.19.86]) by mwinf5d31 with ME
	id p5FU1k00l1rRe5E035FUPR; Thu, 17 Jan 2013 18:15:29 +0100
Message-ID: <50F831B6.6020404@frisch.fr>
Date: Thu, 17 Jan 2013 18:15:34 +0100
From: Alain Frisch <alain@frisch.fr>
User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64;
	rv:17.0) Gecko/20130107 Thunderbird/17.0.2
MIME-Version: 1.0
To: Thomas Gazagnaire <thomas@ocamlpro.com>
Subject: Re: [Caml-list] [ANN] beta-release of OPAM
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
In-Reply-To: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Cc: OCaml mailing-list <caml-list@inria.fr>,
	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, 17 Jan 2013 17:15:30 -0000
Content-Length: 154
Lines: 7

Hi Thomas,

Is there a way to tell OPAM to install from INRIA's SVN repository 
(either the trunk or a specific branch), and to update on demand?

Alain


From anil@recoil.org Thu Jan 17 17:22:28 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvtAa-0003LC-5D (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 17 Jan 2013 17:22:28 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1433857
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:34943
	helo=dark.recoil.org)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1TvtAZ-0005jh-WX (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Thu, 17 Jan 2013 17:22:28 +0000
Received: (qmail 12620 invoked by uid 634); 17 Jan 2013 17:22:26 -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 [10.0.0.83]) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Thu, 17 Jan 2013 17:22:26 +0000
Content-Type: text/plain; charset=iso-8859-1
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
Subject: Re: [Caml-list] [ANN] beta-release of OPAM
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <50F831B6.6020404@frisch.fr>
Date: Thu, 17 Jan 2013 17:22:30 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<50F831B6.6020404@frisch.fr>
To: Alain Frisch <alain@frisch.fr>
X-Mailer: Apple Mail (2.1499)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: Thomas Gazagnaire <thomas@ocamlpro.com>,
	OCaml mailing-list <caml-list@inria.fr>,
	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, 17 Jan 2013 17:22:28 -0000
Content-Length: 1257
Lines: 36

I added `opam switch 4.01.0dev+trunk` recently, which will grab the =
latest trunk snapshot.
To reinstall it and refresh to a newer snapshot, just do `opam switch =
reinstall 4.01.0dev+trunk`, which will also attempt to recompile any =
packages you had in there before.

It's also pretty easy to add your own branches; see
=
https://github.com/OCamlPro/opam-repository/blob/master/compilers/4.01.0de=
v%2Btrunk.comp
...for the trunk description, and there are several others out there.

Pierre is maintaining his various optimisation patches in his repository =
as an example, so you can see how to maintain custom branches as normal =
OPAM remotes (just like for packages).
https://github.com/chambart/opam-compilers-repository

Note that SVN isn't directly supported by OPAM (only Darcs and Git), so =
all of these are using the SVN->Git mirror at =
http://github.com/ocaml/ocaml, which is updated every hour via our =
friendly double-humped Bactrian Github bot.  Let us know how you get =
along with this!

-anil

On 17 Jan 2013, at 17:15, Alain Frisch <alain@frisch.fr> wrote:

> Hi Thomas,
>=20
> Is there a way to tell OPAM to install from INRIA's SVN repository =
(either the trunk or a specific branch), and to update on demand?
>=20
> Alain
>=20



From bobzhang1988@gmail.com Thu Jan 17 19:34:06 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvvDy-0005ig-J9 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <bobzhang1988@gmail.com>); Thu, 17 Jan 2013 19:34:06 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.5 from SpamAssassin-3.3.2-1433857 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.220.174 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (bobzhang1988[at]gmail.com)
	* 0.2 FREEMAIL_ENVFROM_END_DIGIT Envelope-from freemail username ends
	in *      digit (bobzhang1988[at]gmail.com)
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-vc0-f174.google.com ([209.85.220.174]:60787)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1TvvDx-0002Jq-pn (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <bobzhang1988@gmail.com>); Thu, 17 Jan 2013 19:34:06 +0000
Received: by mail-vc0-f174.google.com with SMTP id n11so933401vch.5
	for <cl-mirage@lists.cam.ac.uk>; Thu, 17 Jan 2013 11:34:04 -0800 (PST)
X-Received: by 10.52.90.18 with SMTP id bs18mr5803579vdb.89.1358451244382;
	Thu, 17 Jan 2013 11:34:04 -0800 (PST)
Received: from Hongbos-MacBook-Air.local ([158.130.111.248])
	by mx.google.com with ESMTPS id b2sm1247809vdf.21.2013.01.17.11.34.02
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Thu, 17 Jan 2013 11:34:03 -0800 (PST)
Message-ID: <50F85226.5000909@gmail.com>
Date: Thu, 17 Jan 2013 14:33:58 -0500
From: Hongbo Zhang <bobzhang1988@gmail.com>
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7;
	rv:17.0) Gecko/20130107 Thunderbird/17.0.2
MIME-Version: 1.0
Newsgroups: gmane.comp.lang.caml.inria
To: Thomas Gazagnaire <thomas@ocamlpro.com>
Subject: Re: [ANN] beta-release of OPAM
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
In-Reply-To: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Cc: OCaml mailing-list <caml-list@inria.fr>,
	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, 17 Jan 2013 19:34:06 -0000
Content-Length: 2618
Lines: 37

On 1/15/13 10:40 AM, Thomas Gazagnaire wrote:
> I'm very happy to announce the beta release of OPAM (0.9.1). OPAM is a package manager for OCaml to install libraries and tools from source archives. It supports multiple simultaneous compiler installations, flexible package constraints, and a Git-friendly development workflow.
>
Opam is the best package manager for ocaml I have ever used, thanks for 
your hard work!
> The goal of this beta release is to formally introduce OPAM to the community, to gather some general feedback on the documentation and tools and double-check that we've not forgotten some useful features. I would also like to use that opportunity to make an official call to maintainers: if you have developed packages which are already in OPAM do not hesitate to claim their ownership and to improve their description - if your packages are not yet in, it's time to start packaging them!
>
> OPAM is developed by OCamlPro[1] and has been in alpha release since June 2012. It is already quite mature and has gained some nice momentum (+40 contributors, +300 packages).  OPAM has been initially funded by Jane Street[2] and the DORM EU research project, and it has received continuous help and resources from OCamlLabs[3].
>
> The source code of OPAM is available on Github:
> * installer: https://github.com/OCamlpro/opam
> * packages and compiler descriptions: https://github.com/OCamlPro/opam-repository
> * website: https://github.com/OCamlPro/opam2web
>
> The documention:
> * install instructions and tutorial are available http://opam.ocamlpro.com/
> * the main source of documentation is 'opam --help' or 'opam <command> --help'
> * user manual: https://github.com/OCamlPro/opam/raw/master/doc/dev-manual/dev-manual.pdf
>
> You can report issues on github bug tracker:
> * https://github.com/OCamlPro/opam/issues
>
> The next steps for us is to focus on improving the package descriptions quality and the global consistency of https://github.com/OCamlPro/opam-repository. We will gladly accept any kind of help and support from the community to do this!  We plan to announce the release of 1.0.0 in a couple of months, with improved package quality and better integration with the future OCaml platform.
>
> Last point, if you are working in a company and that you already use OPAM, or plan to use OPAM, and you would like to help us ensuring it a sustainable future[2], you can contact us at contact@ocamlpro.com.
>
> On behalf of the OPAM team,
> Thomas Gazagnaire
>
> [1] http://www.ocamlpro.com/
> [2] http://www.janestreet.com/
> [3] http://www.cl.cam.ac.uk/projects/ocamllabs/
>
>
>



From Richard.Mortier@nottingham.ac.uk Thu Jan 17 19:50:44 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TvvU4-00063y-UM (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Thu, 17 Jan 2013 19:50:44 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1433857 
	* 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]:49690)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1TvvU3-0002c1-YD (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Thu, 17 Jan 2013 19:50:44 +0000
Received: (qmail 619 invoked from network); 17 Jan 2013 19:50:58 -0000
Received: from localhost (127.0.0.1)
	by engine01-20433-7.icritical.com with SMTP; 17 Jan 2013 19:50: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 32689-08 for <cl-mirage@lists.cam.ac.uk>;
	Thu, 17 Jan 2013 19:50:54 +0000 (GMT)
Received: (qmail 31924 invoked by uid 599); 17 Jan 2013 19:47:20 -0000
Received: from unknown (HELO smtp4.nottingham.ac.uk) (128.243.220.65)
	by engine01-20433-7.icritical.com (qpsmtpd/0.28) with ESMTP;
	Thu, 17 Jan 2013 19:47:20 +0000
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 1TvvQh-0008BD-Mz
	for cl-mirage@lists.cam.ac.uk; Thu, 17 Jan 2013 19:47:15 +0000
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Anil Madhavapeddy <anil@recoil.org>
Date: Thu, 17 Jan 2013 19:47:14 +0000
Subject: Re: [Caml-list] [ANN] beta-release of OPAM
Thread-Topic: [Caml-list] [ANN] beta-release of OPAM
Thread-Index: Ac3063MH1Vxlnz5pTzGooU0gI22BIw==
Message-ID: <1F68AA6E-C286-423C-9F98-6832EFC21F38@nottingham.ac.uk>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<50F831B6.6020404@frisch.fr>
	<224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
In-Reply-To: <224865B3-055C-4E03-AA42-9F962AD516D7@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="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Virus-Scanned: by iCritical at engine01-20433-7.icritical.com
Cc: Thomas Gazagnaire <thomas@ocamlpro.com>,
	OCaml mailing-list <caml-list@inria.fr>,
	Mirage List <cl-mirage@lists.cam.ac.uk>, Alain Frisch <alain@frisch.fr>
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, 17 Jan 2013 19:50:45 -0000
Content-Length: 1129
Lines: 25


On 17 Jan 2013, at 17:22, Anil Madhavapeddy wrote:

> Note that SVN isn't directly supported by OPAM (only Darcs and Git), so a=
ll of these are using the SVN->Git mirror at http://github.com/ocaml/ocaml,=
 which is updated every hour via our friendly double-humped Bactrian Github=
 bot.  Let us know how you get along with this!

could opam not use git-svn?

--=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 alain@frisch.fr Fri Jan 18 10:31:36 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Tw9EW-0005WT-3j (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <alain@frisch.fr>); Fri, 18 Jan 2013 10:31:36 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1434591 
	* -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/,
	no *      trust
	*      [193.252.23.213 listed in list.dnswl.dnsbl.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from msa04.smtpout.orange.fr ([193.252.23.213]:52428
	helo=msa.smtpout.orange.fr)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1Tw9EU-0002nm-YZ (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <alain@frisch.fr>); Fri, 18 Jan 2013 10:31:36 +0000
Received: from [192.168.1.105] ([90.44.19.86]) by mwinf5d31 with ME
	id pNXZ1k00U1rRe5E03NXZ8V; Fri, 18 Jan 2013 11:31:34 +0100
Message-ID: <50F92486.2020704@frisch.fr>
Date: Fri, 18 Jan 2013 11:31:34 +0100
From: Alain Frisch <alain@frisch.fr>
User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64;
	rv:17.0) Gecko/20130107 Thunderbird/17.0.2
MIME-Version: 1.0
To: Anil Madhavapeddy <anil@recoil.org>
Subject: Re: [Caml-list] [ANN] beta-release of OPAM
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<50F831B6.6020404@frisch.fr>
	<224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
In-Reply-To: <224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Cc: Thomas Gazagnaire <thomas@ocamlpro.com>,
	OCaml mailing-list <caml-list@inria.fr>,
	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: Fri, 18 Jan 2013 10:31:36 -0000
Content-Length: 821
Lines: 20

On 01/17/2013 06:22 PM, Anil Madhavapeddy wrote:
> I added `opam switch 4.01.0dev+trunk` recently, which will grab the latest trunk snapshot.
> To reinstall it and refresh to a newer snapshot, just do `opam switch reinstall 4.01.0dev+trunk`, which will also attempt to recompile any packages you had in there before.

Thanks, this is exactly what I wanted!

Shouldn't the package be called simply "trunk", without a reference to a 
version number?


I've started to play with opam a little bit, and it's a surprisingly 
pleasant experience.  Thanks to everyone who contributed to this project!

Now I want to create my first package.  I've followed the instructions 
from http://opam.ocamlpro.com/doc/Packaging.html but I don't know where 
to find opam-mk-repo (I've installed opam from the amd64 linux binary).

Alain



From anil@recoil.org Fri Jan 18 10:42:06 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Tw9Og-000689-Ew (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 18 Jan 2013 10:42:06 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1434591
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:13453
	helo=dark.recoil.org)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with smtp id 1Tw9Of-0007NI-qD (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 18 Jan 2013 10:42:06 +0000
Received: (qmail 10813 invoked by uid 634); 18 Jan 2013 10:42: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 [10.0.0.83]) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Fri, 18 Jan 2013 10:42:04 +0000
Content-Type: text/plain; charset=iso-8859-1
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
Subject: Re: [Caml-list] [ANN] beta-release of OPAM
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <50F92486.2020704@frisch.fr>
Date: Fri, 18 Jan 2013 10:42:04 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <DF5C351C-2B6D-4AA6-BCE7-3A9F0366CCCB@recoil.org>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<50F831B6.6020404@frisch.fr>
	<224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
	<50F92486.2020704@frisch.fr>
To: Alain Frisch <alain@frisch.fr>
X-Mailer: Apple Mail (2.1499)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: Thomas Gazagnaire <thomas@ocamlpro.com>,
	OCaml mailing-list <caml-list@inria.fr>,
	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: Fri, 18 Jan 2013 10:42:06 -0000
Content-Length: 2580
Lines: 65

On 18 Jan 2013, at 10:31, Alain Frisch <alain@frisch.fr> wrote:

> On 01/17/2013 06:22 PM, Anil Madhavapeddy wrote:
>> I added `opam switch 4.01.0dev+trunk` recently, which will grab the =
latest trunk snapshot.
>> To reinstall it and refresh to a newer snapshot, just do `opam switch =
reinstall 4.01.0dev+trunk`, which will also attempt to recompile any =
packages you had in there before.
>=20
> Thanks, this is exactly what I wanted!
>=20
> Shouldn't the package be called simply "trunk", without a reference to =
a version number?

Yeah, but OPAM also has compiler version constraints, so that you can =
mark a package as requiring {>=3D4.00} for example.  If the package is =
just marked trunk, then we need to manually record the version number =
somewhere.

One option is to have a very high version, so that any packages with a =
lower bound will continue to work.  The other option (which I chose) is =
to pick the current working version, since compiler releases only happen =
a couple of times a year.  We can improve on this...

> I've started to play with opam a little bit, and it's a surprisingly =
pleasant experience.  Thanks to everyone who contributed to this =
project!
>=20
> Now I want to create my first package.  I've followed the instructions =
from http://opam.ocamlpro.com/doc/Packaging.html but I don't know where =
to find opam-mk-repo (I've installed opam from the amd64 linux binary).

(that binary is hopefully just a stopgap until the OPAM binary packages =
become more widely available)

opam-mk-repo is installed as part of OPAM, so you'll need to install =
from source.  However, you don't actually need to create a repository =
unless you want to host a mirror of the tarballs.  Simply try this:

$ mkdir -p my-repo/packages
$ opam remote add localdev my-repo
<create your package inside my-repo/packages/>
$ opam update
<the new packages will be available>
$ opam install <new-package>

The same applies for compilers.

If you specify a git:// or darcs:// URL in the package `url` file, a =
subsequent `opam update` will refresh the working copy from the remote =
source.

If you want to work with a local copy of that package, just do `opam pin =
<package> <dir>`.

If you want the bleeding edge version of a stable package, you can even =
do `opam pin <package> git://foo/bar`.

Quite the swiss-army knife, but each of those scenarios has come in =
useful at one point or another, particularly when hacking on Mirage =
which requires rebuilding lots of forward dependencies if (e.g.) a =
network driver library is being modified.

-anil=


From alain@frisch.fr Fri Jan 18 11:19:04 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Tw9yS-0000MG-R9 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <alain@frisch.fr>); Fri, 18 Jan 2013 11:19:04 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1434591 
	* -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/,
	no *      trust
	*      [193.252.23.213 listed in list.dnswl.dnsbl.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from msa04.smtpout.orange.fr ([193.252.23.213]:24501
	helo=msa.smtpout.orange.fr)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1Tw9yS-0007Dn-XF (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <alain@frisch.fr>); Fri, 18 Jan 2013 11:19:04 +0000
Received: from [192.168.1.105] ([90.44.19.86]) by mwinf5d31 with ME
	id pPK31k00r1rRe5E03PK3KS; Fri, 18 Jan 2013 12:19:04 +0100
Message-ID: <50F92FA9.8050707@frisch.fr>
Date: Fri, 18 Jan 2013 12:19:05 +0100
From: Alain Frisch <alain@frisch.fr>
User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64;
	rv:17.0) Gecko/20130107 Thunderbird/17.0.2
MIME-Version: 1.0
To: Anil Madhavapeddy <anil@recoil.org>
Subject: Re: [Caml-list] [ANN] beta-release of OPAM
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<50F831B6.6020404@frisch.fr>
	<224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
	<50F92486.2020704@frisch.fr>
	<DF5C351C-2B6D-4AA6-BCE7-3A9F0366CCCB@recoil.org>
In-Reply-To: <DF5C351C-2B6D-4AA6-BCE7-3A9F0366CCCB@recoil.org>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Cc: Thomas Gazagnaire <thomas@ocamlpro.com>,
	OCaml mailing-list <caml-list@inria.fr>,
	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: Fri, 18 Jan 2013 11:19:04 -0000
Content-Length: 1351
Lines: 34

On 01/18/2013 11:42 AM, Anil Madhavapeddy wrote:
> On 18 Jan 2013, at 10:31, Alain Frisch <alain@frisch.fr> wrote:
>> Shouldn't the package be called simply "trunk", without a reference to a version number?
>
> Yeah, but OPAM also has compiler version constraints, so that you can mark a package as requiring {>=4.00} for example.

Understood.

> $ mkdir -p my-repo/packages
> $ opam remote add localdev my-repo
> <create your package inside my-repo/packages/>
> $ opam update
> <the new packages will be available>
> $ opam install <new-package>

Thanks.  That's what I've done.

I've sent my first "pull request" for the inclusion of a new package in 
OPAM :-)


Are there plans to provide a more direct way to submit proposals for new 
packages?  If I understand correctly, the current scheme requires to 
create an account on github, fork the opam-repository, clone the fork 
locally, create and commit the package locally, push it to github, and 
then create a pull request.  Admittedly, this is not difficult once 
you're familiar with GIT and github, but I can imagine that it will 
still discourage some people from submitting their first package.  What 
about a simple web interface to upload a .tar.gz of the package 
description, for instance?  It should not be too hard to automate the 
treatment of uploaded package descriptions.

Alain


From anil@recoil.org Fri Jan 18 11:27:48 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TwA6u-0000gE-9u (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 18 Jan 2013 11:27:48 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1434591
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:2543
	helo=dark.recoil.org)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with smtp id 1TwA6t-0001zS-sK (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Fri, 18 Jan 2013 11:27:48 +0000
Received: (qmail 24945 invoked by uid 634); 18 Jan 2013 11:27:47 -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 [10.0.0.83]) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Fri, 18 Jan 2013 11:27:44 +0000
Content-Type: text/plain; charset=iso-8859-1
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
Subject: Re: [Caml-list] [ANN] beta-release of OPAM
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <50F92FA9.8050707@frisch.fr>
Date: Fri, 18 Jan 2013 11:27:37 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <28252449-E0B3-4A0E-A001-57B72712DD99@recoil.org>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<50F831B6.6020404@frisch.fr>
	<224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
	<50F92486.2020704@frisch.fr>
	<DF5C351C-2B6D-4AA6-BCE7-3A9F0366CCCB@recoil.org>
	<50F92FA9.8050707@frisch.fr>
To: Alain Frisch <alain@frisch.fr>
X-Mailer: Apple Mail (2.1499)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: Thomas Gazagnaire <thomas@ocamlpro.com>,
	OCaml mailing-list <caml-list@inria.fr>,
	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: Fri, 18 Jan 2013 11:27:48 -0000
Content-Length: 2030
Lines: 44

On 18 Jan 2013, at 11:19, Alain Frisch <alain@frisch.fr> wrote:
>=20
> I've sent my first "pull request" for the inclusion of a new package =
in OPAM :-)

Yay!

> Are there plans to provide a more direct way to submit proposals for =
new packages?  If I understand correctly, the current scheme requires to =
create an account on github, fork the opam-repository, clone the fork =
locally, create and commit the package locally, push it to github, and =
then create a pull request.  Admittedly, this is not difficult once =
you're familiar with GIT and github, but I can imagine that it will =
still discourage some people from submitting their first package.  What =
about a simple web interface to upload a .tar.gz of the package =
description, for instance?  It should not be too hard to automate the =
treatment of uploaded package descriptions.

A certain barrier to entry in the early days isn't a bad thing. Homebrew =
seems to cope well enough with this workflow (with over 10,000 forks).   =
We should probably add a CONTRIBUTING file with clear instructions to =
`opam-repository`.

However, I do have ocaml-github [1] bindings now which we're using for =
comment reporting in Real World OCaml (so that comments reported via the =
website version are converted into Github issues for us to parse). It =
should be straightforward to support for this to OPAM.=20

Thomas just added (in trunk) a git-like extension mechanism to OPAM =
which will be suitable for this purpose.  If you execute an unknown =
subcommand, say `opam foo bar`, it will look for the `opam-foo` binary =
and execute it with the sub arguments.

This should be sufficient to build an `opam-upload` command that has all =
the Github dependencies, without making the base OPAM package more =
complicated to build.  I'm still working on a stable release of Cohttp, =
which the Github bindings depend on, so it's important that OPAM remains =
easy to bootstrap without requiring zillions of bleeding-edge =
dependencies.

-anil

[1] opam install github=


From daniel.buenzli@erratique.ch Fri Jan 18 16:23:32 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TwEj6-0005IE-38 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <daniel.buenzli@erratique.ch>);
	Fri, 18 Jan 2013 16:23:32 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamScore: ss
X-Cam-SpamDetails: score 2.0 from SpamAssassin-3.3.2-1434591 
	*  2.0 RCVD_IN_MAPS_RBL RBL: Relay in RBL,
	*      http://www.mail-abuse.com/enduserinfo_rbl.html
	*      [178.197.234.35 listed in rbl-plus.mail-abuse.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail6.webfaction.com ([74.55.86.74]:43492
	helo=smtp.webfaction.com)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1TwEj5-00027X-XI (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <daniel.buenzli@erratique.ch>);
	Fri, 18 Jan 2013 16:23:32 +0000
Received: from [172.20.10.2] (35-234.197-178.cust.bluewin.ch [178.197.234.35])
	by smtp.webfaction.com (Postfix) with ESMTP id CAE1720880B2;
	Fri, 18 Jan 2013 10:23:28 -0600 (CST)
Date: Fri, 18 Jan 2013 17:23:26 +0100
From: =?utf-8?Q?Daniel_B=C3=BCnzli?= <daniel.buenzli@erratique.ch>
To: Anil Madhavapeddy <anil@recoil.org>
Message-ID: <4144589AC12E46C09674D6D80D984289@erratique.ch>
In-Reply-To: <28252449-E0B3-4A0E-A001-57B72712DD99@recoil.org>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<50F831B6.6020404@frisch.fr>
	<224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
	<50F92486.2020704@frisch.fr>
	<DF5C351C-2B6D-4AA6-BCE7-3A9F0366CCCB@recoil.org>
	<50F92FA9.8050707@frisch.fr>
	<28252449-E0B3-4A0E-A001-57B72712DD99@recoil.org>
Subject: Opam package publication (was Re: [Caml-list] [ANN]
	beta-release of OPAM)
X-Mailer: sparrow 1.6.4 (build 1178)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Cc: Mirage, Thomas Gazagnaire <thomas@ocamlpro.com>,
	OCaml mailing-list <caml-list@inria.fr>,
	List <cl-mirage@lists.cam.ac.uk>, Alain Frisch <alain@frisch.fr>
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, 18 Jan 2013 16:23:32 -0000
Content-Length: 1462
Lines: 34

Le vendredi, 18 janvier 2013 =C3=A0 12:27, Anil Madhavapeddy a =C3=A9crit=
 :
> A certain barrier to entry in the early days isn't a bad thing. Homebre=
w seems to cope well enough with this workflow (with over 10,000 forks).

=46or now my packages where uploaded by a kind contributor (thanks to him=
) but in the future I intend to do so myself and I share Alain =46risch's=
 sentiment here.

I also find the github process rather wasteful in terms of energy, moreov=
er if a submitted package is rejected or if the pull request gets stuck f=
or a while and I need to provide the package to someone else rapidly then=
 I'll have to publish it a second time on another repo.

I think it would be easier to tell packagers to provide their own http re=
pository and have a simple command in opam that allows to import a packag=
e from one repository in another.

That way I publish my packages once on a website and it ensures they are =
available whether ocamlpro wants them in their repo or not. I notify ocam=
lpro's repository maintainer (in a way to be specified by him) of the exi=
stence of the package and he can import it from my repo if he wishes. If =
for some reason the package never makes it in ocamlpro's repository, the =
end-user can just add my repo to its opam install to get it immediatly.

This solves a lot of problems very easily, without wasting too much energ=
y, in a distributed manner and without github in the loop.

Best,

Daniel




From philippe.veber@gmail.com Sat Jan 19 09:07:56 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TwUP6-0003nD-Su (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk (return-path <philippe.veber@gmail.com>);
	Sat, 19 Jan 2013 09:07:56 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1435054 
	* -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 *       (philippe.veber[at]gmail.com)
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-ie0-f170.google.com ([209.85.223.170]:33507)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1TwUP5-00071g-sD (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk (return-path <philippe.veber@gmail.com>);
	Sat, 19 Jan 2013 09:07:56 +0000
Received: by mail-ie0-f170.google.com with SMTP id k10so7462740iea.1
	for <cl-mirage@lists.cam.ac.uk>; Sat, 19 Jan 2013 01:07:55 -0800 (PST)
X-Received: by 10.50.170.36 with SMTP id aj4mr3913802igc.92.1358586475060;
	Sat, 19 Jan 2013 01:07:55 -0800 (PST)
MIME-Version: 1.0
Received: by 10.64.6.226 with HTTP; Sat, 19 Jan 2013 01:07:35 -0800 (PST)
In-Reply-To: <4144589AC12E46C09674D6D80D984289@erratique.ch>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<50F831B6.6020404@frisch.fr>
	<224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
	<50F92486.2020704@frisch.fr>
	<DF5C351C-2B6D-4AA6-BCE7-3A9F0366CCCB@recoil.org>
	<50F92FA9.8050707@frisch.fr>
	<28252449-E0B3-4A0E-A001-57B72712DD99@recoil.org>
	<4144589AC12E46C09674D6D80D984289@erratique.ch>
From: Philippe Veber <philippe.veber@gmail.com>
Date: Sat, 19 Jan 2013 10:07:35 +0100
Message-ID: <CAOOOohQo6KG4jXodt7R5c+Hc8NAhJF5WEz9TEuoJDcNe7CUYZA@mail.gmail.com>
Subject: Re: Opam package publication (was Re: [Caml-list] [ANN] beta-release
	of OPAM)
To: =?ISO-8859-1?Q?Daniel_B=FCnzli?= <daniel.buenzli@erratique.ch>
Content-Type: multipart/alternative; boundary=e89a8f234a513e1c1a04d3a090cc
Cc: Mirage List <cl-mirage@lists.cam.ac.uk>, Alain Frisch <alain@frisch.fr>,
	OCaml mailing-list <caml-list@inria.fr>,
	Thomas Gazagnaire <thomas@ocamlpro.com>,
	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: Sat, 19 Jan 2013 09:07:57 -0000
Content-Length: 5559
Lines: 130

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

Hi Daniel,

I hope I understood your point correctly, but you can already do that : if
your repo is accessible via git, http or rsync protocols any user can use
it simultaneously with ocamlpro's. opam has no problem handling several
repositories and makes a good job of sorting out which repo has the newest
version of a package. In practice it works very well. Details can be found
there: http://opam.ocamlpro.com/doc/Advanced_Usage.html (see Handling of
repositories).

cheers,
  Philippe.

2013/1/18 Daniel B=FCnzli <daniel.buenzli@erratique.ch>

> Le vendredi, 18 janvier 2013 =E0 12:27, Anil Madhavapeddy a =E9crit :
> > A certain barrier to entry in the early days isn't a bad thing. Homebre=
w
> seems to cope well enough with this workflow (with over 10,000 forks).
>
> For now my packages where uploaded by a kind contributor (thanks to him)
> but in the future I intend to do so myself and I share Alain Frisch's
> sentiment here.
>
> I also find the github process rather wasteful in terms of energy,
> moreover if a submitted package is rejected or if the pull request gets
> stuck for a while and I need to provide the package to someone else rapid=
ly
> then I'll have to publish it a second time on another repo.
>
> I think it would be easier to tell packagers to provide their own http
> repository and have a simple command in opam that allows to import a
> package from one repository in another.
>
> That way I publish my packages once on a website and it ensures they are
> available whether ocamlpro wants them in their repo or not. I notify
> ocamlpro's repository maintainer (in a way to be specified by him) of the
> existence of the package and he can import it from my repo if he wishes. =
If
> for some reason the package never makes it in ocamlpro's repository, the
> end-user can just add my repo to its opam install to get it immediatly.
>
> This solves a lot of problems very easily, without wasting too much
> energy, in a distributed manner and without github in the loop.
>
> Best,
>
> Daniel
>
>
>
> --
> 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

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

Hi Daniel,<br><br>I hope I understood your point correctly, but you can alr=
eady do that : if your repo is accessible via git, http or rsync protocols =
any user can use it simultaneously with ocamlpro&#39;s. opam has no problem=
 handling several repositories and makes a good job of sorting out which re=
po has the newest version of a package. In practice it works very well. Det=
ails can be found there: <a href=3D"http://opam.ocamlpro.com/doc/Advanced_U=
sage.html">http://opam.ocamlpro.com/doc/Advanced_Usage.html</a> (see Handli=
ng of repositories).<br>

<br>cheers,<br>=A0 Philippe.<br><br><div class=3D"gmail_quote">2013/1/18 Da=
niel B=FCnzli <span dir=3D"ltr">&lt;<a href=3D"mailto:daniel.buenzli@errati=
que.ch" target=3D"_blank">daniel.buenzli@erratique.ch</a>&gt;</span><br><bl=
ockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #=
ccc solid;padding-left:1ex">

Le vendredi, 18 janvier 2013 =E0 12:27, Anil Madhavapeddy a =E9crit :<br>
&gt; A certain barrier to entry in the early days isn&#39;t a bad thing. Ho=
mebrew seems to cope well enough with this workflow (with over 10,000 forks=
).<br>
<br>
For now my packages where uploaded by a kind contributor (thanks to him) bu=
t in the future I intend to do so myself and I share Alain Frisch&#39;s sen=
timent here.<br>
<br>
I also find the github process rather wasteful in terms of energy, moreover=
 if a submitted package is rejected or if the pull request gets stuck for a=
 while and I need to provide the package to someone else rapidly then I&#39=
;ll have to publish it a second time on another repo.<br>


<br>
I think it would be easier to tell packagers to provide their own http repo=
sitory and have a simple command in opam that allows to import a package fr=
om one repository in another.<br>
<br>
That way I publish my packages once on a website and it ensures they are av=
ailable whether ocamlpro wants them in their repo or not. I notify ocamlpro=
&#39;s repository maintainer (in a way to be specified by him) of the exist=
ence of the package and he can import it from my repo if he wishes. If for =
some reason the package never makes it in ocamlpro&#39;s repository, the en=
d-user can just add my repo to its opam install to get it immediatly.<br>


<br>
This solves a lot of problems very easily, without wasting too much energy,=
 in a distributed manner and without github in the loop.<br>
<br>
Best,<br>
<br>
Daniel<br>
<span class=3D"HOEnZb"><font color=3D"#888888"><br>
<br>
<br>
--<br>
Caml-list mailing list. =A0Subscription management and archives:<br>
<a href=3D"https://sympa.inria.fr/sympa/arc/caml-list" target=3D"_blank">ht=
tps://sympa.inria.fr/sympa/arc/caml-list</a><br>
Beginner&#39;s list: <a href=3D"http://groups.yahoo.com/group/ocaml_beginne=
rs" target=3D"_blank">http://groups.yahoo.com/group/ocaml_beginners</a><br>
Bug reports: <a href=3D"http://caml.inria.fr/bin/caml-bugs" target=3D"_blan=
k">http://caml.inria.fr/bin/caml-bugs</a></font></span></blockquote></div><=
br>

--e89a8f234a513e1c1a04d3a090cc--


From daniel.buenzli@erratique.ch Sat Jan 19 10:40:59 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TwVr9-0004vG-GJ (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <daniel.buenzli@erratique.ch>);
	Sat, 19 Jan 2013 10:40:59 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamScore: ss
X-Cam-SpamDetails: score 2.0 from SpamAssassin-3.3.2-1435054 
	*  2.0 RCVD_IN_MAPS_RBL RBL: Relay in RBL,
	*      http://www.mail-abuse.com/enduserinfo_rbl.html
	*      [178.197.234.109 listed in rbl-plus.mail-abuse.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail6.webfaction.com ([74.55.86.74]:56461
	helo=smtp.webfaction.com)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1TwVr8-0002Ua-Z3 (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <daniel.buenzli@erratique.ch>);
	Sat, 19 Jan 2013 10:40:59 +0000
Received: from [172.20.10.2] (109-234.197-178.cust.bluewin.ch
	[178.197.234.109])
	by smtp.webfaction.com (Postfix) with ESMTP id EEB4266EFD2C;
	Sat, 19 Jan 2013 04:40:55 -0600 (CST)
Date: Sat, 19 Jan 2013 11:40:52 +0100
From: =?utf-8?Q?Daniel_B=C3=BCnzli?= <daniel.buenzli@erratique.ch>
To: Philippe Veber <philippe.veber@gmail.com>
Message-ID: <E48171808E554CB1B6CFEE0249F6B2D9@erratique.ch>
In-Reply-To: <CAOOOohQo6KG4jXodt7R5c+Hc8NAhJF5WEz9TEuoJDcNe7CUYZA@mail.gmail.com>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<50F831B6.6020404@frisch.fr>
	<224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
	<50F92486.2020704@frisch.fr>
	<DF5C351C-2B6D-4AA6-BCE7-3A9F0366CCCB@recoil.org>
	<50F92FA9.8050707@frisch.fr>
	<28252449-E0B3-4A0E-A001-57B72712DD99@recoil.org>
	<4144589AC12E46C09674D6D80D984289@erratique.ch>
	<CAOOOohQo6KG4jXodt7R5c+Hc8NAhJF5WEz9TEuoJDcNe7CUYZA@mail.gmail.com>
Subject: Re: Opam package publication (was Re: [Caml-list] [ANN]
	beta-release of OPAM)
X-Mailer: sparrow 1.6.4 (build 1178)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Cc: Mirage List <cl-mirage@lists.cam.ac.uk>, Alain Frisch <alain@frisch.fr>,
	OCaml mailing-list <caml-list@inria.fr>,
	Thomas Gazagnaire <thomas@ocamlpro.com>,
	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: Sat, 19 Jan 2013 10:40:59 -0000
Content-Length: 1162
Lines: 26

Le samedi, 19 janvier 2013 =C3=A0 10:07, Philippe Veber a =C3=A9crit :
> I hope I understood your point correctly, but you can already do that :=
 if your repo is accessible via git, http or rsync protocols any user can=
 use it simultaneously with ocamlpro's.

Yes, I know, that was not the point. I was proposing a lighter process fo=
r a package to be included in opam's default repository. =20

As Alain mentioned, the current process is rather involved for package de=
velopers --- but I disagree with his idea of an upload web interface. =20

The idea is that package developers publish repos with their work and tha=
t there's a kind of =60import=60 or =60copy=60 command in opam that allow=
s to copy a package from one repo to another (this could also be useful t=
o make custom repos). ocamlpro uses this command to transfer a package fr=
om the developer's repo to the default repo.

This allows package users that are confident in a packager to use his rep=
o directly, and those that prefer to wait for the inclusion in opam defau=
lt repo to wait for it while minimizing the overall energy spent for all =
the involved parties. =20

Best,

Daniel


From avsm2@cl.cam.ac.uk Sun Jan 20 16:17:34 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TwxaQ-000379-8F (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <avsm2@cl.cam.ac.uk>); Sun, 20 Jan 2013 16:17:34 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1435506
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:12996
	helo=dark.recoil.org)
	by ppsw-41.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1TwxaP-0005gG-Rk (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <avsm2@cl.cam.ac.uk>); Sun, 20 Jan 2013 16:17:34 +0000
Received: (qmail 16283 invoked by uid 634); 20 Jan 2013 16:17:33 -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
	[192.168.1.48]) (81.149.102.120)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Sun, 20 Jan 2013 16:17:30 +0000
From: Anil Madhavapeddy <avsm2@cl.cam.ac.uk>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Subject: Self-service cloud computing paper
Message-Id: <EA96F57C-FD82-415E-9F44-6349AE709D3C@cl.cam.ac.uk>
Date: Sun, 20 Jan 2013 16:17:31 +0000
To: Mirage List <cl-mirage@lists.cam.ac.uk>
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
X-Mailer: Apple Mail (2.1499)
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: Sun, 20 Jan 2013 16:17:34 -0000
Content-Length: 264
Lines: 11

I just noticed this interesting paper from Andres on a security protocol =
for splitting up VM manipulation from dom0.

http://lagarcavilla.org/publications/ButtCCS12.pdf

Relevant to Dave for Windsor purposes, but might of interest to others =
as well.


-anil=


From mike.mcclurg@gmail.com Sun Jan 20 18:05:46 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TwzH8-0005BV-Cq (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <mike.mcclurg@gmail.com>); Sun, 20 Jan 2013 18:05:46 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1435506 
	* -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 *       (mike.mcclurg[at]gmail.com)
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wg0-f51.google.com ([74.125.82.51]:58082)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1TwzH7-0007uF-qg (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <mike.mcclurg@gmail.com>); Sun, 20 Jan 2013 18:05:46 +0000
Received: by mail-wg0-f51.google.com with SMTP id 8so1505325wgl.18
	for <cl-mirage@lists.cam.ac.uk>; Sun, 20 Jan 2013 10:05:45 -0800 (PST)
MIME-Version: 1.0
X-Received: by 10.194.85.234 with SMTP id k10mr22506242wjz.53.1358705145116;
	Sun, 20 Jan 2013 10:05:45 -0800 (PST)
Received: by 10.216.39.134 with HTTP; Sun, 20 Jan 2013 10:05:44 -0800 (PST)
In-Reply-To: <20130109120723.GN2729@dark.recoil.org>
References: <9179FFE3-4CF3-4F06-BC65-7FAC7B146621@recoil.org>
	<C96B39E3-E194-4197-A32D-895F3B3B78D6@nottingham.ac.uk>
	<20130109120723.GN2729@dark.recoil.org>
Date: Sun, 20 Jan 2013 18:05:44 +0000
Message-ID: <CALru5wWuMws1UUqfuhKEkyrn3aVOXLud5yR=t-R72gP5nexAPQ@mail.gmail.com>
Subject: Re: data structure lockin
From: Mike McClurg <mike.mcclurg@gmail.com>
To: Anil Madhavapeddy <anil@recoil.org>
Content-Type: multipart/alternative; boundary=089e0103ee9087774f04d3bc31b4
Cc: Richard Mortier <Richard.Mortier@nottingham.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: Sun, 20 Jan 2013 18:05:46 -0000
Content-Length: 2633
Lines: 69

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

On Wed, Jan 9, 2013 at 12:07 PM, Anil Madhavapeddy <anil@recoil.org> wrote:

> On Tue, Jan 08, 2013 at 06:00:51AM +0000, Richard Mortier wrote:
> >
> > On 3 Jan 2013, at 16:37, Anil Madhavapeddy wrote:
> >
> > > This is primarily because polymorphic hashtables are quick and
> > > easy, but luckily refactoring them is also quite easy.
> >
> > fwiw came across the following post describing such refactoring (for
> unit testing, but hey):
> >
> > http://mcclurmc.wordpress.com/2012/12/18/ocaml-pattern-easy-functor/
> >
> > thought it might be of interest to others...
>
> Mike's on the mailing list :-)
>
> Any update on that Criterion idea, Mike?
>

Woops, missed this email! Mort, thanks for plugging that blog post. I'll
probably be writing more about that topic soon.

I'm not going to be doing a Criterion port for my master's thesis, Anil.
We'll have to find someone else to work on that one :(

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

<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On W=
ed, Jan 9, 2013 at 12:07 PM, Anil Madhavapeddy <span dir=3D"ltr">&lt;<a hre=
f=3D"mailto:anil@recoil.org" target=3D"_blank">anil@recoil.org</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 class=3D"im">On Tue, Jan 08, 2013 at 06=
:00:51AM +0000, Richard Mortier wrote:<br>
&gt;<br>
&gt; On 3 Jan 2013, at 16:37, Anil Madhavapeddy wrote:<br>
&gt;<br>
&gt; &gt; This is primarily because polymorphic hashtables are quick and<br=
>
&gt; &gt; easy, but luckily refactoring them is also quite easy.<br>
&gt;<br>
&gt; fwiw came across the following post describing such refactoring (for u=
nit testing, but hey):<br>
&gt;<br>
&gt; <a href=3D"http://mcclurmc.wordpress.com/2012/12/18/ocaml-pattern-easy=
-functor/" target=3D"_blank">http://mcclurmc.wordpress.com/2012/12/18/ocaml=
-pattern-easy-functor/</a><br>
&gt;<br>
&gt; thought it might be of interest to others...<br>
<br>
</div>Mike&#39;s on the mailing list :-)<br>
<br>
Any update on that Criterion idea, Mike?<br>
<span class=3D"HOEnZb"></span></blockquote><div><br>Woops, missed this emai=
l! Mort, thanks for plugging that blog post. I&#39;ll probably be writing m=
ore about that topic soon.<br><br>I&#39;m not going to be doing a Criterion=
 port for my master&#39;s thesis, Anil. We&#39;ll have to find someone else=
 to work on that one :(<br>
</div></div></div></div>

--089e0103ee9087774f04d3bc31b4--


From Richard.Mortier@nottingham.ac.uk Sun Jan 20 18:14:52 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TwzPw-0005LQ-7S (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Sun, 20 Jan 2013 18:14:52 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1435506 
	* 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]:37007)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1TwzPv-0004FG-Yp (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Sun, 20 Jan 2013 18:14:52 +0000
Received: (qmail 3818 invoked from network); 20 Jan 2013 18:14:38 -0000
Received: from localhost (127.0.0.1)
	by engine05-20433-5.icritical.com with SMTP; 20 Jan 2013 18:14:38 -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 02434-03 for <cl-mirage@lists.cam.ac.uk>;
	Sun, 20 Jan 2013 18:14:36 +0000 (GMT)
Received: (qmail 3785 invoked by uid 599); 20 Jan 2013 18:14:36 -0000
Received: from unknown (HELO smtp4.nottingham.ac.uk) (128.243.220.65)
	by engine05-20433-5.icritical.com (qpsmtpd/0.28) with ESMTP;
	Sun, 20 Jan 2013 18:14:36 +0000
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 1TwzPh-0001ib-2X
	for cl-mirage@lists.cam.ac.uk; Sun, 20 Jan 2013 18:14:37 +0000
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Mike McClurg <mike.mcclurg@gmail.com>
Date: Sun, 20 Jan 2013 18:14:35 +0000
Subject: Re: data structure lockin
Thread-Topic: data structure lockin
Thread-Index: Ac33OgDsmLlsRLCyQMqTOLorIpLTqw==
Message-ID: <E2CD86E8-C5D3-440E-A714-8319955DF51F@nottingham.ac.uk>
References: <9179FFE3-4CF3-4F06-BC65-7FAC7B146621@recoil.org>
	<C96B39E3-E194-4197-A32D-895F3B3B78D6@nottingham.ac.uk>
	<20130109120723.GN2729@dark.recoil.org>
	<CALru5wWuMws1UUqfuhKEkyrn3aVOXLud5yR=t-R72gP5nexAPQ@mail.gmail.com>
In-Reply-To: <CALru5wWuMws1UUqfuhKEkyrn3aVOXLud5yR=t-R72gP5nexAPQ@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 engine05-20433-5.icritical.com
Cc: "cl-mirage@lists.cam.ac.uk" <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: Sun, 20 Jan 2013 18:14:52 -0000
Content-Length: 1271
Lines: 35


On 20 Jan 2013, at 18:05, Mike McClurg wrote:

> On Wed, Jan 9, 2013 at 12:07 PM, Anil Madhavapeddy <anil@recoil.org> wrot=
e:
>> Any update on that Criterion idea, Mike?
>=20
> Woops, missed this email! Mort, thanks for plugging that blog post.

thanks for writing it!

> I'll probably be writing more about that topic soon.

cool :)

> I'm not going to be doing a Criterion port for my master's thesis, Anil. =
We'll have to find someone else to work on that one :(

pardon my ignorance - criterion?

--=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 mike.mcclurg@gmail.com Sun Jan 20 19:07:59 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Tx0FL-0006DL-8s (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <mike.mcclurg@gmail.com>); Sun, 20 Jan 2013 19:07:59 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1435506 
	* -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 *       (mike.mcclurg[at]gmail.com)
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f172.google.com ([209.85.212.172]:51253)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1Tx0FK-0006AA-r3 (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <mike.mcclurg@gmail.com>); Sun, 20 Jan 2013 19:07:59 +0000
Received: by mail-wi0-f172.google.com with SMTP id o1so6568590wic.11
	for <cl-mirage@lists.cam.ac.uk>; Sun, 20 Jan 2013 11:07:58 -0800 (PST)
MIME-Version: 1.0
X-Received: by 10.180.101.99 with SMTP id ff3mr12011010wib.21.1358708878297;
	Sun, 20 Jan 2013 11:07:58 -0800 (PST)
Received: by 10.216.39.134 with HTTP; Sun, 20 Jan 2013 11:07:58 -0800 (PST)
In-Reply-To: <E2CD86E8-C5D3-440E-A714-8319955DF51F@nottingham.ac.uk>
References: <9179FFE3-4CF3-4F06-BC65-7FAC7B146621@recoil.org>
	<C96B39E3-E194-4197-A32D-895F3B3B78D6@nottingham.ac.uk>
	<20130109120723.GN2729@dark.recoil.org>
	<CALru5wWuMws1UUqfuhKEkyrn3aVOXLud5yR=t-R72gP5nexAPQ@mail.gmail.com>
	<E2CD86E8-C5D3-440E-A714-8319955DF51F@nottingham.ac.uk>
Date: Sun, 20 Jan 2013 19:07:58 +0000
Message-ID: <CALru5wVEUxFYxC+7d3fdn6_wTtV9eGTkyuGr6T6UFhmGCPgEEQ@mail.gmail.com>
Subject: Re: data structure lockin
From: Mike McClurg <mike.mcclurg@gmail.com>
To: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
Content-Type: multipart/alternative; boundary=f46d044280e80b490c04d3bd109b
Cc: "cl-mirage@lists.cam.ac.uk" <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: Sun, 20 Jan 2013 19:07:59 -0000
Content-Length: 2241
Lines: 51

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

On Sun, Jan 20, 2013 at 6:14 PM, Richard Mortier <
Richard.Mortier@nottingham.ac.uk> wrote:

>
> On 20 Jan 2013, at 18:05, Mike McClurg wrote:
> > I'm not going to be doing a Criterion port for my master's thesis, Anil.
> We'll have to find someone else to work on that one :(
>
> pardon my ignorance - criterion?
>

Criterion is a great benchmarking library for Haskell:
http://www.serpentine.com/blog/2009/09/29/criterion-a-new-benchmarking-library-for-haskell/

The main advantage of Criterion is that it does statistical analysis on the
benchmarks it runs. It will measure the variance in a set of benchmark
runs, and will tell you how valid a run was. Anil suggested that I port the
library to OCaml as a masters thesis.

Mike

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

<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On S=
un, Jan 20, 2013 at 6:14 PM, 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:0px 0px 0px 0.8ex;border-=
left:1px solid rgb(204,204,204);padding-left:1ex"><div class=3D"im"><br>
On 20 Jan 2013, at 18:05, Mike McClurg wrote:<br>
&gt; I&#39;m not going to be doing a Criterion port for my master&#39;s the=
sis, Anil. We&#39;ll have to find someone else to work on that one :(<br>
<br>
</div>pardon my ignorance - criterion?<br></blockquote><div><br>Criterion i=
s a great benchmarking library for Haskell: <a href=3D"http://www.serpentin=
e.com/blog/2009/09/29/criterion-a-new-benchmarking-library-for-haskell/">ht=
tp://www.serpentine.com/blog/2009/09/29/criterion-a-new-benchmarking-librar=
y-for-haskell/</a><br>
<br>The main advantage of Criterion is that it does statistical analysis on=
 the benchmarks it runs. It will measure the variance in a set of benchmark=
 runs, and will tell you how valid a run was. Anil suggested that I port th=
e library to OCaml as a masters thesis.<br>
<br>Mike<br></div></div></div></div>

--f46d044280e80b490c04d3bd109b--


From anil@recoil.org Sun Jan 20 19:42:53 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Tx0n7-0006le-Ji (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Sun, 20 Jan 2013 19:42:53 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1435506
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:41739
	helo=dark.recoil.org)
	by ppsw-41.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1Tx0n6-00048M-Ra (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Sun, 20 Jan 2013 19:42:53 +0000
Received: (qmail 20762 invoked by uid 634); 20 Jan 2013 19:42:52 -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.38]) (86.30.244.239)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Sun, 20 Jan 2013 19:42:49 +0000
Content-Type: text/plain; charset=iso-8859-1
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
Subject: Re: data structure lockin
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <CALru5wVEUxFYxC+7d3fdn6_wTtV9eGTkyuGr6T6UFhmGCPgEEQ@mail.gmail.com>
Date: Sun, 20 Jan 2013 19:42:50 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <3F58DFFC-FAB8-436A-BE27-3895E3A92B48@recoil.org>
References: <9179FFE3-4CF3-4F06-BC65-7FAC7B146621@recoil.org>
	<C96B39E3-E194-4197-A32D-895F3B3B78D6@nottingham.ac.uk>
	<20130109120723.GN2729@dark.recoil.org>
	<CALru5wWuMws1UUqfuhKEkyrn3aVOXLud5yR=t-R72gP5nexAPQ@mail.gmail.com>
	<E2CD86E8-C5D3-440E-A714-8319955DF51F@nottingham.ac.uk>
	<CALru5wVEUxFYxC+7d3fdn6_wTtV9eGTkyuGr6T6UFhmGCPgEEQ@mail.gmail.com>
To: Mike McClurg <mike.mcclurg@gmail.com>
X-Mailer: Apple Mail (2.1499)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: Pierre Chambart <pierre.chambart@ocamlpro.com>,
	Richard Mortier <Richard.Mortier@nottingham.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: Sun, 20 Jan 2013 19:42:53 -0000
Content-Length: 1435
Lines: 30

On 20 Jan 2013, at 19:07, Mike McClurg <mike.mcclurg@gmail.com> wrote:

> Criterion is a great benchmarking library for Haskell: =
http://www.serpentine.com/blog/2009/09/29/criterion-a-new-benchmarking-lib=
rary-for-haskell/
>=20
> The main advantage of Criterion is that it does statistical analysis =
on the benchmarks it runs. It will measure the variance in a set of =
benchmark runs, and will tell you how valid a run was. Anil suggested =
that I port the library to OCaml as a masters thesis.

Not to worry; Thomas told me that Pierre Chambart is working on =
something similar as part of his exciting new benchmark suite.  Pierre =
has been steadily implementing a huge number of performance =
optimisations into the core OCaml compiler to speed up floating point =
code, access to low-level native integers, and bigarray accesses.  A lot =
of these (but not all) are part of the 4.01.0dev+mirage-xen OPAM =
variant, so we've been greatly benefiting from them.

The next stage for us to do is to integrate some of the ad-hoc =
performance tests we have (e.g. DNS queryperf, TCP iperf, OpenFlow =
OFLOPS) into an environment where we can control the input parameters to =
the tests and have them run in a controlled way using Pierre's =
improvements.  This will help us judge whether the complexity of the new =
optimisations (and hence the risk of bugs in the compiler) is worth the =
extra speed gained from doing so.

-anil



From sdiris@gmail.com Mon Jan 21 21:43:50 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TxP9i-0002fh-Rx (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <sdiris@gmail.com>); Mon, 21 Jan 2013 21:43:50 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1435801 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.212.174 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (sdiris[at]gmail.com)
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f174.google.com ([209.85.212.174]:59446)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1TxP9i-0003vl-qJ (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <sdiris@gmail.com>); Mon, 21 Jan 2013 21:43:50 +0000
Received: by mail-wi0-f174.google.com with SMTP id hq4so7571513wib.1
	for <cl-mirage@lists.cam.ac.uk>; Mon, 21 Jan 2013 13:43:50 -0800 (PST)
X-Received: by 10.194.24.42 with SMTP id r10mr28897174wjf.2.1358804630085;
	Mon, 21 Jan 2013 13:43:50 -0800 (PST)
Received: from yimingwin7 (global-1-11.nat.csx.cam.ac.uk. [131.111.184.11])
	by mx.google.com with ESMTPS id t17sm20689206wiv.6.2013.01.21.13.43.48
	(version=TLSv1 cipher=RC4-SHA bits=128/128);
	Mon, 21 Jan 2013 13:43:49 -0800 (PST)
From: "Yiming Zhang" <sdiris@gmail.com>
To: "'Yiming Zhang'" <sdiris@gmail.com>
Subject: mirage-www crash on xen4.2.1
Date: Mon, 21 Jan 2013 21:43:54 -0000
Message-ID: <001001cdf820$696dfc30$3c49f490$@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain;
	charset="gb2312"
Content-Transfer-Encoding: quoted-printable
X-Mailer: Microsoft Outlook 14.0
Thread-Index: Ac34FW+CULgVHcE/RBuGxuL1q+5KTA==
Content-Language: zh-cn
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, 21 Jan 2013 21:43:50 -0000
Content-Length: 2281
Lines: 78

Hi Anil: I already successfully ran the "hello world" example on
4.00.1+mirage-xen. After "$ opam install mirage-net", now I can =
successfully
compile "mirage-www" in 4.00.1+mirage-xen. But it seems not to generate =
any
runnable image for xen.=20

So, I add a PostBuildCommand to _oasis so that the following will =
execute:=20
"$ mir-build -b xen-native -o main.xen main.nobj.o".=20

The compilation is OK. However, when I start a domU by "$ xl create -c =
main.
cfg" (copied from mirage-skeleton, and we use an stp-enabled bridge), I =
got
errors (with messages shown below). Even worse this domU cannot be =
competed
killed (a dom named "null" remains).=20

***************************************************
ENT: Breaking up is easy to do (with OPAM)
ENT: Building a "xenstore stub domain" with Mirage
ENT: Connected Cloud Control: OpenFlow in Mirage
ENT: An Outing to CUFP 2011
ENT: A Spring Wiki Cleaning
ENT: Self-hosting Mirage website
ENT: Installation
ENT: OCaml Installation
ENT: Getting Started with Lwt threads
ENT: Portable Regular Expressions
ENT: Delimited Continuations vs Lwt for Threads
ENT: Running Mirage Xen kernels
ENT: Tech Talks
ENT: Papers and Related Work
ENT: DNS Performance Tests
ENT: Hello Mirage World
ENT: Source code layout
ENT: Developing the Mirage networking stack on UNIX
ENT: COW: OCaml on the Web
ENT: Introduction to HTCaML
Devices: [templates] sleeping
...... (above line showed many times)
Devices: [templates] waking
...... (above line showed many times)
Devices: [static] provider start
Devices: [static:static] provider plug
Devices: [static:static] waking waiters
Devices: [static] waking
Manager: create
Manager: init done
Devices: [Xen.Blkif] provider start
Netfront.create: id=3D0 domid=3D0

MAC: 00:16:3e:17:2c:16
 sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
Manager: plug 0
RX error 0
RX: ack id wakener not found=20
......(endless loop)
************************************************************

Thanks!
Yiming


-----=D3=CA=BC=FE=D4=AD=BC=FE-----
=B7=A2=BC=FE=C8=CB: Yiming Zhang [mailto:sdiris@gmail.com]=20
=B7=A2=CB=CD=CA=B1=BC=E4: 2013=C4=EA1=D4=C23=C8=D5 12:27
=CA=D5=BC=FE=C8=CB: 'Anil Madhavapeddy'
=D6=F7=CC=E2: =B4=F0=B8=B4: oasis setup error for xen

Thanks! I will try again

Yiming





From avsm@dark.recoil.org Tue Jan 22 15:21:13 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Txfez-0007MR-R9 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <avsm@dark.recoil.org>); Tue, 22 Jan 2013 15:21:13 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1436227
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:45381
	helo=dark.recoil.org)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with smtp id 1Txfey-0001Is-rb (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <avsm@dark.recoil.org>); Tue, 22 Jan 2013 15:21:13 +0000
Received: (qmail 21434 invoked by uid 10000); 22 Jan 2013 15:21:12 -0000
Date: Tue, 22 Jan 2013 15:21:12 +0000
From: Anil Madhavapeddy <anil@recoil.org>
To: Yiming Zhang <sdiris@gmail.com>
Subject: Re: mirage-www crash on xen4.2.1
Message-ID: <20130122152112.GJ10511@dark.recoil.org>
References: <001001cdf820$696dfc30$3c49f490$@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <001001cdf820$696dfc30$3c49f490$@gmail.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
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, 22 Jan 2013 15:21:13 -0000
Content-Length: 2662
Lines: 85

Hi Yiming,

Looks like the network rings aren't initialised, so the VM is getting
garbage from netfront.  Are you using the latest git versions of the
libraries from the mirage/opam-repo-dev mirror? 

-anil

On Mon, Jan 21, 2013 at 09:43:54PM -0000, Yiming Zhang wrote:
> Hi Anil: I already successfully ran the "hello world" example on
> 4.00.1+mirage-xen. After "$ opam install mirage-net", now I can successfully
> compile "mirage-www" in 4.00.1+mirage-xen. But it seems not to generate any
> runnable image for xen. 
> 
> So, I add a PostBuildCommand to _oasis so that the following will execute: 
> "$ mir-build -b xen-native -o main.xen main.nobj.o". 
> 
> The compilation is OK. However, when I start a domU by "$ xl create -c main.
> cfg" (copied from mirage-skeleton, and we use an stp-enabled bridge), I got
> errors (with messages shown below). Even worse this domU cannot be competed
> killed (a dom named "null" remains). 
> 
> ***************************************************
> ENT: Breaking up is easy to do (with OPAM)
> ENT: Building a "xenstore stub domain" with Mirage
> ENT: Connected Cloud Control: OpenFlow in Mirage
> ENT: An Outing to CUFP 2011
> ENT: A Spring Wiki Cleaning
> ENT: Self-hosting Mirage website
> ENT: Installation
> ENT: OCaml Installation
> ENT: Getting Started with Lwt threads
> ENT: Portable Regular Expressions
> ENT: Delimited Continuations vs Lwt for Threads
> ENT: Running Mirage Xen kernels
> ENT: Tech Talks
> ENT: Papers and Related Work
> ENT: DNS Performance Tests
> ENT: Hello Mirage World
> ENT: Source code layout
> ENT: Developing the Mirage networking stack on UNIX
> ENT: COW: OCaml on the Web
> ENT: Introduction to HTCaML
> Devices: [templates] sleeping
> ...... (above line showed many times)
> Devices: [templates] waking
> ...... (above line showed many times)
> Devices: [static] provider start
> Devices: [static:static] provider plug
> Devices: [static:static] waking waiters
> Devices: [static] waking
> Manager: create
> Manager: init done
> Devices: [Xen.Blkif] provider start
> Netfront.create: id=0 domid=0
> 
> MAC: 00:16:3e:17:2c:16
>  sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
> Manager: plug 0
> RX error 0
> RX: ack id wakener not found 
> ......(endless loop)
> ************************************************************
> 
> Thanks!
> Yiming
> 
> 
> -----????????-----
> ??????: Yiming Zhang [mailto:sdiris@gmail.com] 
> ????????: 2013??1??3?? 12:27
> ??????: 'Anil Madhavapeddy'
> ????: ????: oasis setup error for xen
> 
> Thanks! I will try again
> 
> Yiming
> 
> 
> 
> 

-- 
Anil Madhavapeddy                                 http://anil.recoil.org


From thomas.gazagnaire@gmail.com Tue Jan 22 15:46:46 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Txg3i-0000tL-Ei (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Tue, 22 Jan 2013 15:46:46 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.7 from SpamAssassin-3.3.2-1436227 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.212.173 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.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f173.google.com ([209.85.212.173]:54672)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1Txg3h-0005sO-qb (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Tue, 22 Jan 2013 15:46:46 +0000
Received: by mail-wi0-f173.google.com with SMTP id hn17so8263823wib.0
	for <cl-mirage@lists.cam.ac.uk>; Tue, 22 Jan 2013 07:46:45 -0800 (PST)
X-Received: by 10.194.90.238 with SMTP id bz14mr33439995wjb.9.1358869605140;
	Tue, 22 Jan 2013 07:46:45 -0800 (PST)
Received: from [10.0.0.84] (volstagg-0.srg.cl.cam.ac.uk. [128.232.32.232])
	by mx.google.com with ESMTPS id e6sm24433238wiz.1.2013.01.22.07.46.40
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Tue, 22 Jan 2013 07:46:44 -0800 (PST)
Sender: Thomas Gazagnaire <thomas.gazagnaire@gmail.com>
Subject: Re: Opam package publication (was Re: [Caml-list] [ANN] beta-release
	of OPAM)
Mime-Version: 1.0 (Apple Message framework v1085)
Content-Type: text/plain; charset=us-ascii
From: Thomas Gazagnaire <thomas@ocamlpro.com>
In-Reply-To: <E48171808E554CB1B6CFEE0249F6B2D9@erratique.ch>
Date: Tue, 22 Jan 2013 15:46:39 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <7704F68A-2A25-47D2-AD26-A63ECF94716A@ocamlpro.com>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<50F831B6.6020404@frisch.fr>
	<224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
	<50F92486.2020704@frisch.fr>
	<DF5C351C-2B6D-4AA6-BCE7-3A9F0366CCCB@recoil.org>
	<50F92FA9.8050707@frisch.fr>
	<28252449-E0B3-4A0E-A001-57B72712DD99@recoil.org>
	<4144589AC12E46C09674D6D80D984289@erratique.ch>
	<CAOOOohQo6KG4jXodt7R5c+Hc8NAhJF5WEz9TEuoJDcNe7CUYZA@mail.gmail.com>
	<E48171808E554CB1B6CFEE0249F6B2D9@erratique.ch>
To: =?iso-8859-1?Q?Daniel_B=FCnzli?= <daniel.buenzli@erratique.ch>
X-Mailer: Apple Mail (2.1085)
Cc: OCaml mailing-list <caml-list@inria.fr>,
	Anil Madhavapeddy <anil@recoil.org>,
	Mirage List <cl-mirage@lists.cam.ac.uk>,
	Philippe Veber <philippe.veber@gmail.com>, Alain Frisch <alain@frisch.fr>
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, 22 Jan 2013 15:46:46 -0000
Content-Length: 1745
Lines: 37

> Yes, I know, that was not the point. I was proposing a lighter process =
for a package to be included in opam's default repository. =20
>=20
> As Alain mentioned, the current process is rather involved for package =
developers --- but I disagree with his idea of an upload web interface. =20=


I agree that the current process is a little bit involved for people not =
very used to git and github. OPAM already has an very basic 'opam =
update' command which I'm quite keen to see improved if people found it =
necessary (eg. patches are very welcome).

> The idea is that package developers publish repos with their work and =
that there's a kind of `import` or `copy` command in opam that allows to =
copy a package from one repo to another (this could also be useful to =
make custom repos). ocamlpro uses this command to transfer a package =
from the developer's repo to the default repo.

Homebrew use the concept of 'taps' where people can register alternative =
repositories, which will contain domain-specific packages (ocaml uses to =
have one before being integrated in the main repo). Doing that for OPAM =
is (I think) a bit overkill. However, I'm happy to have a REPOSITORIES =
file at the root of OCamlPro/opam-repositories which lists the available =
repositories, and write a small script to automatically sync with these =
repo regularly. Feel free to add your repository in there, and I'll =
write the update script.

> This allows package users that are confident in a packager to use his =
repo directly, and those that prefer to wait for the inclusion in opam =
default repo to wait for it while minimizing the overall energy spent =
for all the involved parties. =20

Agreed, this sounds a good idea to me.

--
Thomas=


From daniel.buenzli@erratique.ch Tue Jan 22 16:23:26 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TxgdC-0002lu-ME (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <daniel.buenzli@erratique.ch>);
	Tue, 22 Jan 2013 16:23:26 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamScore: ss
X-Cam-SpamDetails: score 2.0 from SpamAssassin-3.3.2-1436227 
	*  2.0 RCVD_IN_MAPS_RBL RBL: Relay in RBL,
	*      http://www.mail-abuse.com/enduserinfo_rbl.html
	*      [178.197.233.41 listed in rbl-plus.mail-abuse.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail6.webfaction.com ([74.55.86.74]:38622
	helo=smtp.webfaction.com)
	by ppsw-41.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1TxgdB-0002MJ-So (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <daniel.buenzli@erratique.ch>);
	Tue, 22 Jan 2013 16:23:26 +0000
Received: from [172.20.10.2] (41-233.197-178.cust.bluewin.ch [178.197.233.41])
	by smtp.webfaction.com (Postfix) with ESMTP id 35A50208DAB1;
	Tue, 22 Jan 2013 10:23:22 -0600 (CST)
Date: Tue, 22 Jan 2013 17:23:19 +0100
From: =?utf-8?Q?Daniel_B=C3=BCnzli?= <daniel.buenzli@erratique.ch>
To: Thomas Gazagnaire <thomas@ocamlpro.com>
Message-ID: <275158A520F84991A11398BE11E1CD8C@erratique.ch>
In-Reply-To: <7704F68A-2A25-47D2-AD26-A63ECF94716A@ocamlpro.com>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<50F831B6.6020404@frisch.fr>
	<224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
	<50F92486.2020704@frisch.fr>
	<DF5C351C-2B6D-4AA6-BCE7-3A9F0366CCCB@recoil.org>
	<50F92FA9.8050707@frisch.fr>
	<28252449-E0B3-4A0E-A001-57B72712DD99@recoil.org>
	<4144589AC12E46C09674D6D80D984289@erratique.ch>
	<CAOOOohQo6KG4jXodt7R5c+Hc8NAhJF5WEz9TEuoJDcNe7CUYZA@mail.gmail.com>
	<E48171808E554CB1B6CFEE0249F6B2D9@erratique.ch>
	<7704F68A-2A25-47D2-AD26-A63ECF94716A@ocamlpro.com>
Subject: Re: Opam package publication (was Re: [Caml-list] [ANN]
	beta-release of OPAM)
X-Mailer: sparrow 1.6.4 (build 1178)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Cc: Anil Madhavapeddy <anil@recoil.org>, OCaml, Alain Frisch <alain@frisch.fr>,
	Philippe Veber <philippe.veber@gmail.com>,
	mailing-list <caml-list@inria.fr>, 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, 22 Jan 2013 16:23:26 -0000
Content-Length: 963
Lines: 22

Le mardi, 22 janvier 2013 =C3=A0 16:46, Thomas Gazagnaire a =C3=A9crit :
> Homebrew use the concept of 'taps' where people can register alternativ=
e repositories, which will contain domain-specific packages (ocaml uses t=
o have one before being integrated in the main repo). Doing that for OPAM=
 is (I think) a bit overkill. =20

Well to me it seems that opam already has the concept, tap =3D repo (or m=
aybe I don't understand what a homebrew tap is).
 =20
> However, I'm happy to have a REPOSITORIES file at the root of OCamlPro/=
opam-repositories which lists the available repositories, and write a sma=
ll script to automatically sync with these repo regularly. =46eel free to=
 add your repository in there, and I'll write the update script.

=46eels like a step in the right direction to me. But I don't think it's =
a good idea to make it fully automatic or at least something sensitive sh=
ould be done to handle potential conflicts.

Best,

Daniel


From alain@frisch.fr Tue Jan 22 16:35:29 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Txgoq-0003Mx-VA (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <alain@frisch.fr>); Tue, 22 Jan 2013 16:35:28 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1436227 
	* -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/,
	no *      trust
	*      [193.252.23.210 listed in list.dnswl.dnsbl.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from msa01.smtpout.orange.fr ([193.252.23.210]:21316
	helo=msa.smtpout.orange.fr)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1Txgoq-0003d8-qi (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <alain@frisch.fr>); Tue, 22 Jan 2013 16:35:28 +0000
Received: from [192.168.1.105] ([90.44.19.86]) by mwinf5d48 with ME
	id r4bR1k0161rRe5E034bRAY; Tue, 22 Jan 2013 17:35:27 +0100
Message-ID: <50FEBFD4.9080004@frisch.fr>
Date: Tue, 22 Jan 2013 17:35:32 +0100
From: Alain Frisch <alain@frisch.fr>
User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64;
	rv:17.0) Gecko/20130107 Thunderbird/17.0.2
MIME-Version: 1.0
To: =?UTF-8?B?RGFuaWVsIELDvG56bGk=?= <daniel.buenzli@erratique.ch>
Subject: Re: Opam package publication (was Re: [Caml-list] [ANN] beta-release
	of OPAM)
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<50F831B6.6020404@frisch.fr>
	<224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
	<50F92486.2020704@frisch.fr>
	<DF5C351C-2B6D-4AA6-BCE7-3A9F0366CCCB@recoil.org>
	<50F92FA9.8050707@frisch.fr>
	<28252449-E0B3-4A0E-A001-57B72712DD99@recoil.org>
	<4144589AC12E46C09674D6D80D984289@erratique.ch>
	<CAOOOohQo6KG4jXodt7R5c+Hc8NAhJF5WEz9TEuoJDcNe7CUYZA@mail.gmail.com>
	<E48171808E554CB1B6CFEE0249F6B2D9@erratique.ch>
In-Reply-To: <E48171808E554CB1B6CFEE0249F6B2D9@erratique.ch>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Cc: Mirage List <cl-mirage@lists.cam.ac.uk>,
	Thomas Gazagnaire <thomas@ocamlpro.com>,
	OCaml mailing-list <caml-list@inria.fr>,
	Philippe Veber <philippe.veber@gmail.com>,
	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, 22 Jan 2013 16:35:29 -0000
Content-Length: 859
Lines: 18

On 01/19/2013 11:40 AM, Daniel Bünzli wrote:
> Yes, I know, that was not the point. I was proposing a lighter process for a package to be included in opam's default repository.
>
> As Alain mentioned, the current process is rather involved for package developers --- but I disagree with his idea of an upload web interface.
>
> The idea is that package developers publish repos with their work

Concretely, I guess that publish a repo means setting up a server 
somewhere.  I don't think that everyone can easily do that or want to 
invest so much effort only to submit a single package.

What's the benefit of the git/github submission workflow?  I don't 
immediately see how this is easier for people responsible of 
accepting/rejection packages than, say, something based on an upload 
interface (or even simpler, an email with an attachment).

-- Alain


From thomas.gazagnaire@gmail.com Tue Jan 22 16:48:36 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Txh1Y-000430-Mj (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Tue, 22 Jan 2013 16:48:36 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.7 from SpamAssassin-3.3.2-1436227 
	* -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 *       (thomas.gazagnaire[at]gmail.com)
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wg0-f51.google.com ([74.125.82.51]:49690)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1Txh1Y-0000ek-q3 (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Tue, 22 Jan 2013 16:48:36 +0000
Received: by mail-wg0-f51.google.com with SMTP id 8so2800158wgl.6
	for <cl-mirage@lists.cam.ac.uk>; Tue, 22 Jan 2013 08:48:35 -0800 (PST)
X-Received: by 10.180.24.70 with SMTP id s6mr22610801wif.22.1358873315553;
	Tue, 22 Jan 2013 08:48:35 -0800 (PST)
Received: from [10.0.0.84] (volstagg-0.srg.cl.cam.ac.uk. [128.232.32.232])
	by mx.google.com with ESMTPS id gz3sm22351354wib.2.2013.01.22.08.48.34
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Tue, 22 Jan 2013 08:48:34 -0800 (PST)
Sender: Thomas Gazagnaire <thomas.gazagnaire@gmail.com>
Subject: Re: Opam package publication (was Re: [Caml-list] [ANN] beta-release
	of OPAM)
Mime-Version: 1.0 (Apple Message framework v1085)
Content-Type: text/plain; charset=us-ascii
From: Thomas Gazagnaire <thomas@ocamlpro.com>
In-Reply-To: <275158A520F84991A11398BE11E1CD8C@erratique.ch>
Date: Tue, 22 Jan 2013 16:48:33 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <B0679C48-0993-4D17-AF31-E7B2AC42B65A@ocamlpro.com>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<50F831B6.6020404@frisch.fr>
	<224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
	<50F92486.2020704@frisch.fr>
	<DF5C351C-2B6D-4AA6-BCE7-3A9F0366CCCB@recoil.org>
	<50F92FA9.8050707@frisch.fr>
	<28252449-E0B3-4A0E-A001-57B72712DD99@recoil.org>
	<4144589AC12E46C09674D6D80D984289@erratique.ch>
	<CAOOOohQo6KG4jXodt7R5c+Hc8NAhJF5WEz9TEuoJDcNe7CUYZA@mail.gmail.com>
	<E48171808E554CB1B6CFEE0249F6B2D9@erratique.ch>
	<7704F68A-2A25-47D2-AD26-A63ECF94716A@ocamlpro.com>
	<275158A520F84991A11398BE11E1CD8C@erratique.ch>
To: =?iso-8859-1?Q?Daniel_B=FCnzli?= <daniel.buenzli@erratique.ch>
X-Mailer: Apple Mail (2.1085)
Cc: OCaml mailing-list <caml-list@inria.fr>,
	Anil Madhavapeddy <anil@recoil.org>,
	Mirage List <cl-mirage@lists.cam.ac.uk>,
	Philippe Veber <philippe.veber@gmail.com>, Alain Frisch <alain@frisch.fr>
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, 22 Jan 2013 16:48:36 -0000
Content-Length: 1279
Lines: 29

>> Homebrew use the concept of 'taps' where people can register =
alternative repositories, which will contain domain-specific packages =
(ocaml uses to have one before being integrated in the main repo). Doing =
that for OPAM is (I think) a bit overkill. =20
>=20
> Well to me it seems that opam already has the concept, tap =3D repo =
(or maybe I don't understand what a homebrew tap is).

Yes, that's pretty similar, but 'brew search' will also search into some =
pre-defined taps and you have predefined names for some of them. I just =
don't feel we need such tight integration in OPAM.

>> However, I'm happy to have a REPOSITORIES file at the root of =
OCamlPro/opam-repositories which lists the available repositories, and =
write a small script to automatically sync with these repo regularly. =
Feel free to add your repository in there, and I'll write the update =
script.
>=20
> Feels like a step in the right direction to me. But I don't think it's =
a good idea to make it fully automatic or at least something sensitive =
should be done to handle potential conflicts.

By automatic, I mean, we can have a script looking at the new packages =
available and create pull request for them in opam-repository (and we =
can continue to use the same workflow).

Thomas



From thomas.gazagnaire@gmail.com Tue Jan 22 16:53:17 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Txh65-00049y-Q3 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Tue, 22 Jan 2013 16:53:17 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.7 from SpamAssassin-3.3.2-1436227 
	* -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 *       (thomas.gazagnaire[at]gmail.com)
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f171.google.com ([209.85.212.171]:49971)
	by ppsw-41.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1Txh65-00073O-Qi (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Tue, 22 Jan 2013 16:53:17 +0000
Received: by mail-wi0-f171.google.com with SMTP id hn14so8337773wib.4
	for <cl-mirage@lists.cam.ac.uk>; Tue, 22 Jan 2013 08:53:17 -0800 (PST)
X-Received: by 10.180.101.104 with SMTP id ff8mr22406101wib.11.1358873596945; 
	Tue, 22 Jan 2013 08:53:16 -0800 (PST)
Received: from [10.0.0.84] (volstagg-0.srg.cl.cam.ac.uk. [128.232.32.232])
	by mx.google.com with ESMTPS id s10sm24710211wiw.4.2013.01.22.08.53.15
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Tue, 22 Jan 2013 08:53:16 -0800 (PST)
Sender: Thomas Gazagnaire <thomas.gazagnaire@gmail.com>
Subject: Re: Opam package publication (was Re: [Caml-list] [ANN] beta-release
	of OPAM)
Mime-Version: 1.0 (Apple Message framework v1085)
Content-Type: text/plain; charset=us-ascii
From: Thomas Gazagnaire <thomas@ocamlpro.com>
In-Reply-To: <50FEBFD4.9080004@frisch.fr>
Date: Tue, 22 Jan 2013 16:53:14 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <83C3BD2D-58AF-4E24-987E-D9E836674D49@ocamlpro.com>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<50F831B6.6020404@frisch.fr>
	<224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
	<50F92486.2020704@frisch.fr>
	<DF5C351C-2B6D-4AA6-BCE7-3A9F0366CCCB@recoil.org>
	<50F92FA9.8050707@frisch.fr>
	<28252449-E0B3-4A0E-A001-57B72712DD99@recoil.org>
	<4144589AC12E46C09674D6D80D984289@erratique.ch>
	<CAOOOohQo6KG4jXodt7R5c+Hc8NAhJF5WEz9TEuoJDcNe7CUYZA@mail.gmail.com>
	<E48171808E554CB1B6CFEE0249F6B2D9@erratique.ch>
	<50FEBFD4.9080004@frisch.fr>
To: Alain Frisch <alain@frisch.fr>
X-Mailer: Apple Mail (2.1085)
Cc: =?iso-8859-1?Q?Daniel_B=FCnzli?= <daniel.buenzli@erratique.ch>,
	Mirage List <cl-mirage@lists.cam.ac.uk>,
	OCaml mailing-list <caml-list@inria.fr>,
	Philippe Veber <philippe.veber@gmail.com>,
	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, 22 Jan 2013 16:53:17 -0000
Content-Length: 1056
Lines: 23

> Concretely, I guess that publish a repo means setting up a server =
somewhere.  I don't think that everyone can easily do that or want to =
invest so much effort only to submit a single package.
>=20
> What's the benefit of the git/github submission workflow?  I don't =
immediately see how this is easier for people responsible of =
accepting/rejection packages than, say, something based on an upload =
interface (or even simpler, an email with an attachment).

The goal is to have external tools looking at all pull request, running =
tests, and giving quality feedback to opam-repository gatekeepers. Pull =
requests are also a good place to start discussion about packages. This =
can be done outside of github (on a mailing list for instance) but =
that's mean reinventing the wheel as github pull-request worflow is =
actually specifically designed for this. But as I said, I'm happy to =
help people submit packages more easily, so having an 'opam-tools' =
package with command-line interfaces to help packager could be a good =
idea.

Thomas




From daniel.buenzli@erratique.ch Tue Jan 22 17:00:10 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TxhCk-0004eV-6W (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <daniel.buenzli@erratique.ch>);
	Tue, 22 Jan 2013 17:00:10 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamScore: ss
X-Cam-SpamDetails: score 2.0 from SpamAssassin-3.3.2-1436227 
	*  2.0 RCVD_IN_MAPS_RBL RBL: Relay in RBL,
	*      http://www.mail-abuse.com/enduserinfo_rbl.html
	*      [178.197.233.41 listed in rbl-plus.mail-abuse.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail6.webfaction.com ([74.55.86.74]:34014
	helo=smtp.webfaction.com)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1TxhCe-0004kk-mo (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <daniel.buenzli@erratique.ch>);
	Tue, 22 Jan 2013 17:00:04 +0000
Received: from [172.20.10.2] (41-233.197-178.cust.bluewin.ch [178.197.233.41])
	by smtp.webfaction.com (Postfix) with ESMTP id 409CC208CCFB;
	Tue, 22 Jan 2013 11:00:00 -0600 (CST)
Date: Tue, 22 Jan 2013 17:59:58 +0100
From: =?utf-8?Q?Daniel_B=C3=BCnzli?= <daniel.buenzli@erratique.ch>
To: Alain Frisch <alain@frisch.fr>
Message-ID: <31196E5D8E4A450BAD5005ACCA14DA5E@erratique.ch>
In-Reply-To: <50FEBFD4.9080004@frisch.fr>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<50F831B6.6020404@frisch.fr>
	<224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
	<50F92486.2020704@frisch.fr>
	<DF5C351C-2B6D-4AA6-BCE7-3A9F0366CCCB@recoil.org>
	<50F92FA9.8050707@frisch.fr>
	<28252449-E0B3-4A0E-A001-57B72712DD99@recoil.org>
	<4144589AC12E46C09674D6D80D984289@erratique.ch>
	<CAOOOohQo6KG4jXodt7R5c+Hc8NAhJF5WEz9TEuoJDcNe7CUYZA@mail.gmail.com>
	<E48171808E554CB1B6CFEE0249F6B2D9@erratique.ch>
	<50FEBFD4.9080004@frisch.fr>
Subject: Re: Opam package publication (was Re: [Caml-list] [ANN]
	beta-release of OPAM)
X-Mailer: sparrow 1.6.4 (build 1178)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Cc: Anil Madhavapeddy <anil@recoil.org>, OCaml,
	Philippe Veber <philippe.veber@gmail.com>,
	Thomas Gazagnaire <thomas@ocamlpro.com>, mailing-list <caml-list@inria.fr>,
	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, 22 Jan 2013 17:00:10 -0000
Content-Length: 817
Lines: 19

Le mardi, 22 janvier 2013 =C3=A0 17:35, Alain =46risch a =C3=A9crit :
> Concretely, I guess that publish a repo means setting up a server
> somewhere. I don't think that everyone can easily do that or want to =20
> invest so much effort only to submit a single package.

Concretely it means being able to publish text files available over http =
which these days doesn't feel like a huge problem. It goes along with you=
r package's homepage (I personally wouldn't anyway use a package that has=
n't any web presence in some way). =20

Best,

Daniel

P.S. My perspective is also certainly biased as I currently develop/maint=
ain around ten packages and expect this number to grow in the future. The=
 smallest modular unit of functionality approach has a bureaucratic cost =
and I try by all means to minimize it. 


From daniel.buenzli@erratique.ch Tue Jan 22 17:05:32 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TxhHw-0004sY-Fv (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <daniel.buenzli@erratique.ch>);
	Tue, 22 Jan 2013 17:05:32 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamScore: ss
X-Cam-SpamDetails: score 2.0 from SpamAssassin-3.3.2-1436227 
	*  2.0 RCVD_IN_MAPS_RBL RBL: Relay in RBL,
	*      http://www.mail-abuse.com/enduserinfo_rbl.html
	*      [178.197.233.41 listed in rbl-plus.mail-abuse.ja.net]
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail6.webfaction.com ([74.55.86.74]:46827
	helo=smtp.webfaction.com)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with esmtp id 1TxhHv-0005mV-Yd (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <daniel.buenzli@erratique.ch>);
	Tue, 22 Jan 2013 17:05:32 +0000
Received: from [172.20.10.2] (41-233.197-178.cust.bluewin.ch [178.197.233.41])
	by smtp.webfaction.com (Postfix) with ESMTP id 1DEA6208CE55;
	Tue, 22 Jan 2013 11:05:28 -0600 (CST)
Date: Tue, 22 Jan 2013 18:05:26 +0100
From: =?utf-8?Q?Daniel_B=C3=BCnzli?= <daniel.buenzli@erratique.ch>
To: Thomas Gazagnaire <thomas@ocamlpro.com>
Message-ID: <44E50108FFC841A8B62F5D1AE96DF538@erratique.ch>
In-Reply-To: <B0679C48-0993-4D17-AF31-E7B2AC42B65A@ocamlpro.com>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<50F831B6.6020404@frisch.fr>
	<224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
	<50F92486.2020704@frisch.fr>
	<DF5C351C-2B6D-4AA6-BCE7-3A9F0366CCCB@recoil.org>
	<50F92FA9.8050707@frisch.fr>
	<28252449-E0B3-4A0E-A001-57B72712DD99@recoil.org>
	<4144589AC12E46C09674D6D80D984289@erratique.ch>
	<CAOOOohQo6KG4jXodt7R5c+Hc8NAhJF5WEz9TEuoJDcNe7CUYZA@mail.gmail.com>
	<E48171808E554CB1B6CFEE0249F6B2D9@erratique.ch>
	<7704F68A-2A25-47D2-AD26-A63ECF94716A@ocamlpro.com>
	<275158A520F84991A11398BE11E1CD8C@erratique.ch>
	<B0679C48-0993-4D17-AF31-E7B2AC42B65A@ocamlpro.com>
Subject: Re: Opam package publication (was Re: [Caml-list] [ANN]
	beta-release of OPAM)
X-Mailer: sparrow 1.6.4 (build 1178)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Cc: Anil Madhavapeddy <anil@recoil.org>, OCaml, Alain Frisch <alain@frisch.fr>,
	Philippe Veber <philippe.veber@gmail.com>,
	mailing-list <caml-list@inria.fr>, 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, 22 Jan 2013 17:05:32 -0000
Content-Length: 313
Lines: 13

Le mardi, 22 janvier 2013 =C3=A0 17:48, Thomas Gazagnaire a =C3=A9crit :
> By automatic, I mean, we can have a script looking at the new packages =
available and create pull request for them in opam-repository (and we can=
 continue to use the same workflow).

=46or me that would be great. =20

Best,

Daniel




From anil@recoil.org Tue Jan 22 18:03:31 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TxiC3-00073b-Jy (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 22 Jan 2013 18:03:31 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1436227
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:23852
	helo=dark.recoil.org)
	by ppsw-41.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with smtp id 1TxiC2-00010m-Sr (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 22 Jan 2013 18:03:31 +0000
Received: (qmail 29052 invoked by uid 634); 22 Jan 2013 18:03:30 -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 [10.0.0.83]) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Tue, 22 Jan 2013 18:03:29 +0000
Content-Type: text/plain; charset=iso-8859-1
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
Subject: Re: Opam package publication (was Re: [Caml-list] [ANN] beta-release
	of OPAM)
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <50FEBFD4.9080004@frisch.fr>
Date: Tue, 22 Jan 2013 18:03:21 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <C5D1038B-6AE6-43B1-A50B-3C7653993597@recoil.org>
References: <6833F17C-B642-4ED9-8C8F-2665A9742845@ocamlpro.com>
	<50F831B6.6020404@frisch.fr>
	<224865B3-055C-4E03-AA42-9F962AD516D7@recoil.org>
	<50F92486.2020704@frisch.fr>
	<DF5C351C-2B6D-4AA6-BCE7-3A9F0366CCCB@recoil.org>
	<50F92FA9.8050707@frisch.fr>
	<28252449-E0B3-4A0E-A001-57B72712DD99@recoil.org>
	<4144589AC12E46C09674D6D80D984289@erratique.ch>
	<CAOOOohQo6KG4jXodt7R5c+Hc8NAhJF5WEz9TEuoJDcNe7CUYZA@mail.gmail.com>
	<E48171808E554CB1B6CFEE0249F6B2D9@erratique.ch>
	<50FEBFD4.9080004@frisch.fr>
To: Alain Frisch <alain@frisch.fr>
X-Mailer: Apple Mail (2.1499)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: =?iso-8859-1?Q?Daniel_B=FCnzli?= <daniel.buenzli@erratique.ch>,
	Philippe Veber <philippe.veber@gmail.com>,
	Thomas Gazagnaire <thomas@ocamlpro.com>,
	OCaml mailing-list <caml-list@inria.fr>,
	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, 22 Jan 2013 18:03:31 -0000
Content-Length: 3019
Lines: 62

On 22 Jan 2013, at 16:35, Alain Frisch <alain@frisch.fr> wrote:

> On 01/19/2013 11:40 AM, Daniel B=FCnzli wrote:
>> Yes, I know, that was not the point. I was proposing a lighter =
process for a package to be included in opam's default repository.
>>=20
>> As Alain mentioned, the current process is rather involved for =
package developers --- but I disagree with his idea of an upload web =
interface.
>>=20
>> The idea is that package developers publish repos with their work
>=20
> Concretely, I guess that publish a repo means setting up a server =
somewhere.  I don't think that everyone can easily do that or want to =
invest so much effort only to submit a single package.
>=20
> What's the benefit of the git/github submission workflow?  I don't =
immediately see how this is easier for people responsible of =
accepting/rejection packages than, say, something based on an upload =
interface (or even simpler, an email with an attachment).


Let's think through what an e-mail workflow might look like rather than =
just throwing it out as a superior alternative to what we use now.  =
Let's say it goes to an e-mail list, with a few people subscribed to it. =
 Then, someone adding the package would reply to the list saying that =
they'll handle it, and have to deal with it immediately and not get =
distracted.  Next, we have to convert the package into a Git commit with =
the submitter's name, so that we have a reasonable package history.  =
Finally, we need a queue of packages to track which ones haven't been =
replied to, or else risk forgetting packages.  And of course, anyone who =
wants to be involved has to subscribe to a mailing list, and the only =
way to find past submissions is by digging through e-mail archives.

Git/Github takes care of all this, to the point where a merge is a =
single button on the website.  Specifically, it:

- track provenance of updates (so we can go contact whoever introduced a =
package reliably, assuming their Github ID doesn't change).

- lets people maintain private branches outside of Github, and easily =
merge against upstream updates.  Citrix are doing this for their =
internal repositories, which they re-base against OPAM upstream, and =
then regularly submit their packages to the mainline once they're =
tested.  I also do this with Mirage.

- a public tracking system with comments to ensure packages don't get =
lost. I don't particularly fancy having my mailbox fill up with mailed =
tar-balls.

- an easy-to-use API that lets us run continuous build directly off =
Github.  I think of this as "Internet threads". A callback from Github =
wakes up an Lwt thread to do some work on the continuous build server. =
That's kind of cool :-)

It should be really trivial to build a package uploader using the OPAM =
extension mechanism I described earlier, and the ocaml-github bindings. =
If anyone wants to help add this, get in touch with me and I'll walk you =
through it.  My plate's a bit too full to get to this in the near-term.

-anil=


From sdiris@gmail.com Wed Jan 23 01:54:35 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TxpXu-0007LU-V4 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <sdiris@gmail.com>); Wed, 23 Jan 2013 01:54:34 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1436227 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [74.125.82.52 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (sdiris[at]gmail.com)
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wg0-f52.google.com ([74.125.82.52]:65403)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1TxpXu-00068s-qx (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <sdiris@gmail.com>); Wed, 23 Jan 2013 01:54:34 +0000
Received: by mail-wg0-f52.google.com with SMTP id 12so2564715wgh.7
	for <cl-mirage@lists.cam.ac.uk>; Tue, 22 Jan 2013 17:54:34 -0800 (PST)
X-Received: by 10.180.75.208 with SMTP id e16mr24695413wiw.3.1358906074249;
	Tue, 22 Jan 2013 17:54:34 -0800 (PST)
Received: from yimingwin7 (cpc2-cmbg15-2-0-cust202.5-4.cable.virginmedia.com.
	[86.26.12.203])
	by mx.google.com with ESMTPS id e6sm26920116wiz.1.2013.01.22.17.54.32
	(version=TLSv1 cipher=RC4-SHA bits=128/128);
	Tue, 22 Jan 2013 17:54:33 -0800 (PST)
From: "Yiming Zhang" <sdiris@gmail.com>
To: "'Anil Madhavapeddy'" <anil@recoil.org>
Subject: re: mirage-www crash on xen4.2.1
Date: Wed, 23 Jan 2013 01:54:38 -0000
Message-ID: <000901cdf90c$9b7c97d0$d275c770$@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain;
	charset="gb2312"
Content-Transfer-Encoding: quoted-printable
X-Mailer: Microsoft Outlook 14.0
Thread-Index: Ac35DJmcTI2fkACHQfKjwhSIBXvmgQ==
Content-Language: zh-cn
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: Wed, 23 Jan 2013 01:54:35 -0000
Content-Length: 1084
Lines: 36

Hi Anil,=20

I solved the problem by deleting the whole ~/.opam folder and =
reinstalling
all packages. Now I can start a mirage-www domU. However, after getting =
the
following info, domU begins to be silent. Is it OK?
***********************
MAC: 00:16:3e:32:de:de
 sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
Manager: plug 0
Manager: plug done, to listener
Manager: VIF 0 to 10.0.0.2 nm 255.255.255.0 gw [10.0.0.1]
ARP: sending gratuitous from 10.0.0.2
***********************
I also tried to open a webpage at 10.0.0.2 in the browser but failed.

Thanks!
Yiming=20

-----=D3=CA=BC=FE=D4=AD=BC=FE-----
=B7=A2=BC=FE=C8=CB: Anil Madhavapeddy [mailto:anil@recoil.org]=20
=B7=A2=CB=CD=CA=B1=BC=E4: 2013=C4=EA1=D4=C222=C8=D5 15:21
=CA=D5=BC=FE=C8=CB: Yiming Zhang
=B3=AD=CB=CD: cl-mirage@lists.cam.ac.uk
=D6=F7=CC=E2: Re: mirage-www crash on xen4.2.1

Hi Yiming,

Looks like the network rings aren't initialised, so the VM is getting
garbage from netfront.  Are you using the latest git versions of the
libraries from the mirage/opam-repo-dev mirror?=20

-anil



From anil@recoil.org Wed Jan 23 14:32:59 2013
Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Ty1Nr-00030J-G0 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 23 Jan 2013 14:32:59 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1436801
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:22442
	helo=dark.recoil.org)
	by ppsw-51.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.148]:25)
	with smtp id 1Ty1Np-0005VM-Yp (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Wed, 23 Jan 2013 14:32:59 +0000
Received: (qmail 14464 invoked by uid 634); 23 Jan 2013 14:32:57 -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.151]) (62.49.66.12)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Wed, 23 Jan 2013 14:32:54 +0000
From: Anil Madhavapeddy <anil@recoil.org>
Content-Type: multipart/mixed;
	boundary="Apple-Mail=_70D90B1C-9DF7-4971-821A-6832D81D8662"
Subject: Fwd: [Xen-devel] RFC v1: Xen block protocol overhaul - problem
	statement (with pictures!)
Date: Wed, 23 Jan 2013 14:32:49 +0000
References: <20121218143109.GA24471@phenom.dumpdata.com>
To: Mirage List <cl-mirage@lists.cam.ac.uk>
Message-Id: <B9968FA2-0AF9-43EE-8B7C-F562FDC364D8@recoil.org>
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
X-Mailer: Apple Mail (2.1499)
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: Wed, 23 Jan 2013 14:32:59 -0000
Content-Length: 158752
Lines: 2407


--Apple-Mail=_70D90B1C-9DF7-4971-821A-6832D81D8662
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

An interesting overhaul of the block protocol in Xen, which will also
affect Mirage positively.

-anil

Begin forwarded message:

> From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> Subject: [Xen-devel] RFC v1: Xen block protocol overhaul - problem =
statement (with pictures!)
> Date: 18 December 2012 14:31:09 GMT
> To: xen-devel@lists.xensource.com, martin.petersen@oracle.com, =
felipe.franciosi@citrix.com, matthew@wil.cx, axboe@kernel.dk
>=20
> Hey,
>=20
> I am including some folks that are not always on Xen-devel to see if =
they have
> some extra ideas or can correct my misunderstandings.
>=20
> This is very much RFC - so there is bound to be some bugs.
> The original is here
> =
https://docs.google.com/document/d/1Vh5T8Z3Tx3sUEhVB0DnNDKBNiqB_ZA8Z5YVqAs=
CIjuI/edit
> in case one wishes to modify/provide comment on that one.
>=20
>=20
> There are outstanding issues we have now with the block protocol:
> Note: I am assuming 64-bit guest/host - as the size=E2=80=99s of the =
structures
> change on 32-bit. I am also attaching the header for the blkif ring
> as of today.
>=20
> A) Segment size is limited to 11 pages. It means we can at most =
squeeze
> in 44kB per request. The ring can hold 32 (next power of two below 36)
> requests, meaning we can do 1.4M of outstanding requests.
>=20
> B). Producer and consumer index is on the same cache line. In present =
hardware
> that means the reader and writer will compete for the same cacheline =
causing a
> ping-pong between sockets.
>=20
> C). The requests and responses are on the same ring. This again causes =
the
> ping-pong between sockets as the ownership of the cache line will =
shift between
> sockets.
>=20
> D). Cache alignment. Currently the protocol is 16-bit aligned. This is =
awkward
> as the request and responses sometimes fit within a cacheline or =
sometimes
> straddle them.
>=20
> E). Interrupt mitigation. We are currently doing a kick whenever we =
are
> done =E2=80=9Cprocessing=E2=80=9D the ring. There are better ways to =
do this - and
> we could use existing network interrupt mitigation techniques to make =
the
> code poll when there is a lot of data.=20
>=20
> F). Latency. The processing of the request limits us to only do 44kB - =
which means
> that a 1MB chunk of data - which on contemporary devices would only =
use I/O request
> - would be split up in multiple =E2=80=98requests=E2=80=99 =
inadvertently delaying the processing of
> said block.=20
>=20
> G) Future extensions. DIF/DIX for integrity. There might
> be other in the future and it would be good to leave space for extra
> flags TBD.=20
>=20
> H). Separate the response and request rings. The current
> implementation has one thread for one block ring. There is no reason =
why
> there could not be two threads - one for responses and one for =
requests -
> and especially if they are scheduled on different CPUs. Furthermore =
this
> could also be split in multi-queues - so two queues (response and =
request)
> on each vCPU.=20
>=20
> I). We waste a lot of space on the ring - as we use the
> ring for both requests and responses. The response structure needs to
> occupy the same amount of space as the request structure (112 bytes). =
If
> the request structure is expanded to be able to fit more segments (say
> the =E2=80=98struct blkif_sring_entry is expanded to ~1500 bytes) that =
still
> requires us to have a matching size response structure. We do not need
> to use that much space for one response. Having a separate response =
ring
> would simplify the structures.=20
>=20
> J). 32 bit vs 64 bit. Right now the size
> of the request structure is 112 bytes under 64-bit guest and 102 bytes
> under 32-bit guest. It is confusing and furthermore requires the host
> to do extra accounting and processing.
>=20
> The crude drawing displays memory that the ring occupies in offset of
> 64 bytes (cache line). Of course future CPUs could have different =
cache
> lines (say 32 bytes?)- which would skew this drawing. A 32-bit ring is
> a bit different as the =E2=80=98struct blkif_sring_entry=E2=80=99 is =
of 102 bytes.
>=20
>=20
> The A) has two solutions to this (look at
> http://comments.gmane.org/gmane.comp.emulators.xen.devel/140406 for
> details). One proposed by Justin from Spectralogic has to negotiate
> the segment size. This means that the =E2=80=98struct =
blkif_sring_entry=E2=80=99
> is now a variable size. It can expand from 112 bytes (cover 11 pages =
of
> data - 44kB) to 1580 bytes (256 pages of data - so 1MB). It is a =
simple
> extension by just making the array in the request expand from 11 to a
> variable size negotiated.
>=20
>=20
> The math is as follow.
>=20
>=20
>        struct blkif_request_segment {
>                uint32 grant;                         // 4 bytes =
uint8_t
>                first_sect, last_sect;// 1, 1 =3D 6 bytes
>        }
> (6 bytes for each segment) - the above structure is in an array of =
size
> 11 in the request. The =E2=80=98struct blkif_sring_entry=E2=80=99 is =
112 bytes. The
> change is to expand the array - in this example we would tack on 245 =
extra
> =E2=80=98struct blkif_request_segment=E2=80=99 - 245*6 + 112 =3D 1582. =
If we were to
> use 36 requests (so 1582*36 + 64) we would use 57016 bytes (14 pages).
>=20
>=20
> The other solution (from Intel - Ronghui) was to create one extra
> ring that only has the =E2=80=98struct blkif_request_segment=E2=80=99 =
in them. The
> =E2=80=98struct blkif_request=E2=80=99 would be changed to have an =
index in said
> =E2=80=98segment ring=E2=80=99. There is only one segment ring. This =
means that the
> size of the initial ring is still the same. The requests would point
> to the segment and enumerate out how many of the indexes it wants to
> use. The limit is of course the size of the segment. If one assumes a
> one-page segment this means we can in one request cover ~4MB. The math
> is as follow:
>=20
>=20
> First request uses the half of the segment ring - so index 0 up
> to 341 (out of 682). Each entry in the segment ring is a =E2=80=98struct=

> blkif_request_segment=E2=80=99 so it occupies 6 bytes. The other =
requests on
> the ring (so there are 35 left) can use either the remaining 341 =
indexes
> of the sgement ring or use the old style request. The old style =
request
> can address use up to 44kB. For example:
>=20
>=20
> sring[0]->[uses 0->341 indexes in the segment ring] =3D 342*4096 =3D =
1400832
> sring[1]->[use sthe old style request] =3D 11*4096 =3D 45056
> sring[2]->[uses 342->682 indexes in the segment ring] =3D 1392640
> sring[3..32] -> [uses the old style request] =3D 29*4096*11 =3D =
1306624
>=20
>=20
> Total: 4145152 bytes Naturally this could be extended to have a bigger
> segment ring to cover more.
>=20
>=20
>=20
>=20
>=20
> The problem with this extension is that we use 6 bytes and end up
> straddling a cache line. Using 8 bytes will fix the cache straddling. =
This
> would mean fitting only 512 segments per page.
>=20
>=20
> There is yet another mechanism that could be employed  - and it =
borrows
> from VirtIO protocol. And that is the =E2=80=98indirect =
descriptors=E2=80=99. This
> very similar to what Intel suggests, but with a twist.
>=20
>=20
> We could provide a new BLKIF_OP (say BLKIF_OP_INDIRECT), and the =
=E2=80=98struct
> blkif_sring=E2=80=99 (each entry can be up to 112 bytes if needed - so =
the
> old style request would fit). It would look like:
>=20
>=20
> /* so 64 bytes under 64-bit. If necessary, the array (seg) can be
> expanded to fit 11 segments as the old style request did */ struct
> blkif_request_indirect {
>        uint8_t        op;           /* BLKIF_OP_* (usually READ or =
WRITE    */
> // 1 blkif_vdev_t   handle;       /* only for read/write requests      =
   */ // 2
> #ifdef CONFIG_X86_64
>        uint32_t       _pad1;             /* =
offsetof(blkif_request,u.rw.id) =3D=3D 8 */ // 2
> #endif
>        uint64_t       id;           /* private guest value, echoed in =
resp  */
> 	grant_ref_t    gref;        /* reference to indirect buffer =
frame  if used*/
>            struct blkif_request_segment_aligned seg[4]; // each is 8 =
bytes
> } __attribute__((__packed__));
>=20
>=20
> struct blkif_request {
>        uint8_t        operation;    /* BLKIF_OP_???  */
> 	union {
>                struct blkif_request_rw rw;
> 		struct blkif_request_indirect
>                indirect; =E2=80=A6 other ..
>        } u;
> } __attribute__((__packed__));
>=20
>=20
>=20
>=20
> The =E2=80=98operation=E2=80=99 would be BLKIF_OP_INDIRECT. The =
read/write/discard,
> etc operation would now be in indirect.op. The indirect.gref points to
> a page that is filled with:
>=20
>=20
> struct blkif_request_indirect_entry {
>        blkif_sector_t sector_number;
> 	struct blkif_request_segment seg;
> } __attribute__((__packed__));
> //16 bytes, so we can fit in a page 256 of these structures.
>=20
>=20
> This means that with the existing 36 slots in the ring (single page)
> we can cover: 32 slots * each blkif_request_indirect covers: 256 * =
4096
> ~=3D 32M. If we don=E2=80=99t want to use indirect descriptor we can =
still use
> up to 4 pages of the request (as it has enough space to contain four
> segments and the structure will still be cache-aligned).
>=20
>=20
>=20
>=20
> B). Both the producer (req_* and rsp_*) values are in the same
> cache-line. This means that we end up with the same cacheline being
> modified by two different guests. Depending on the architecture and
> placement of the guest this could be bad - as each logical CPU would
> try to write and read from the same cache-line. A mechanism where
> the req_* and rsp_ values are separated and on a different cache line
> could be used. The value of the correct cache-line and alignment could
> be negotiated via XenBus - in case future technologies start using 128
> bytes for cache or such. Or the the producer and consumer indexes are =
in
> separate rings. Meaning we have a =E2=80=98request ring=E2=80=99 and a =
=E2=80=98response
> ring=E2=80=99 - and only the =E2=80=98req_prod=E2=80=99, =
=E2=80=98req_event=E2=80=99 are modified in
> the =E2=80=98request ring=E2=80=99. The opposite (resp_*) are only =
modified in the
> =E2=80=98response ring=E2=80=99.
>=20
>=20
> C). Similar to B) problem but with a bigger payload. Each
> =E2=80=98blkif_sring_entry=E2=80=99 occupies 112 bytes which does not =
lend itself
> to a nice cache line size. If the indirect descriptors are to be used
> for everything we could =E2=80=98slim-down=E2=80=99 the =
blkif_request/response to
> be up-to 64 bytes. This means modifying BLKIF_MAX_SEGMENTS_PER_REQUEST
> to 5 as that would slim the largest of the structures to 64-bytes.
> Naturally this means negotiating a new size of the structure via =
XenBus.
>=20
>=20
> D). The first picture shows the problem. We now aligning everything
> on the wrong cachelines. Worst in =E2=85=93 of the cases we straddle
> three cache-lines. We could negotiate a proper alignment for each
> request/response structure.
>=20
>=20
> E). The network stack has showed that going in a polling mode does =
improve
> performance. The current mechanism of kicking the guest and or block
> backend is not always clear.  [TODO: Konrad to explain it in details]
>=20
>=20
> F). The current block protocol for big I/Os that the backend devices =
can
> handle ends up doing extra work by splitting the I/O in smaller =
chunks,
> and then reassembling them. With the solutions outlined in A) this can
> be fixed. This is easily seen with 1MB I/Os. Since each request can
> only handle 44kB that means we have to split a 1MB I/O in 24 requests
> (23 * 4096 * 11 =3D 1081344). Then the backend ends up sending them in
> sector-sizes- which with contemporary devices (such as SSD) ends up =
with
> more processing. The SSDs are comfortable handling 128kB or higher =
I/Os
> in one go.
>=20
>=20
> G). DIF/DIX. This a protocol to carry extra =E2=80=98checksum=E2=80=99 =
information
> for each I/O. The I/O can be a sector size, page-size or an I/O size
> (most popular are 1MB). The DIF/DIX needs 8 bytes of information for
> each I/O. It would be worth considering putting/reserving that amount =
of
> space in each request/response. Also putting in extra flags for future
> extensions would be worth it - however the author is not aware of any
> right now.
>=20
>=20
> H). Separate response/request. Potentially even multi-queue per-VCPU
> queues. As v2.6.37 demonstrated, the idea of WRITE_BARRIER was
> flawed. There is no similar concept in the storage world were the
> operating system can put a food down and say: =E2=80=9Ceverything =
before this
> has to be on the disk.=E2=80=9D There are ligther versions of this - =
called
> =E2=80=98FUA=E2=80=99 and =E2=80=98FLUSH=E2=80=99. Depending on the =
internal implementation
> of the storage they are either ignored or do the right thing. The
> filesystems determine the viability of these flags and change writing
> tactics depending on this. =46rom a protocol level, this means that =
the
> WRITE/READ/SYNC requests can be intermixed - the storage by itself
> determines the order of the operation. The filesystem is the one that
> determines whether the WRITE should be with a FLUSH to preserve some =
form
> of atomicity. This means we do not have to preserve an order of =
operations
> - so we can have multiple queues for request and responses. This has
> show in the network world to improve performance considerably.
>=20
>=20
> I). Wastage of response/request on the same ring. Currently each =
response
> MUST occupy the same amount of space that the request occupies - as =
the
> ring can have both responses and requests. Separating the request and
> response ring would remove the wastage.
>=20
>=20
> J). 32-bit vs 64-bit (or 102 bytes vs 112 bytes). The size of the ring
> entries is different if the guest is in 32-bit or 64-bit mode. =
Cleaning
> this up to be the same size would save considerable accounting that =
the
> host has to do (extra memcpy for each response/request).

--Apple-Mail=_70D90B1C-9DF7-4971-821A-6832D81D8662
Content-Disposition: inline;
	filename=blkif_sring_struct.png
Content-Type: image/png;
	name="blkif_sring_struct.png"
Content-Transfer-Encoding: base64

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
YII=

--Apple-Mail=_70D90B1C-9DF7-4971-821A-6832D81D8662
Content-Disposition: inline;
	filename=blkif_segment_struct.png
Content-Type: image/png;
	name="blkif_segment_struct.png"
Content-Transfer-Encoding: base64

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
ZImSJSIiomQpWaJkiYiIkqVkiZIlIiJKlpIlSpaIiIiSpWSJkiUiIkqWkiVK1vHkzDXXzurws1/8
qvUhIufAdYHrA9cJ60PJEiVLluTVr//lWf196i//xvoQkXPgusD1geuE9aFkiZIlSpaIKFlKlpIl
SpaSJSJKlpKlZImSpWSJiJIlSpYoWaJkiYiSpWQpWaJkKVkiomQpWUqWKFlKlogoWaJkiZIlSpaI
KFlKlpIlSpaSJSJKlpKlZImSpWSJiJKlZClZomSJkiUiSpaSpWSJkqVkiYiSpWQpWaJkKVkiomQp
WUqWKFmiZImIkqVkKVmiZClZIqJkKVlK1qGcAOHBR755zmePP/n0/me/+NXZZ1//5/8457O/+/a/
nvNdXitZm4d9kjpmX4ztx7qP2Hd1/2xz25Ss1Vm0n9in2zrH/vrr/7T/8GPfHl2303D+i5KlZClZ
WyPb3p4Ed9334P5zfuq5B5/9yAUX7P/W79xy8Pntn7z3nO/yWsnansAA69mb5v0f/cR5klNO3Bnv
ft8HlKyjfYE9Zz9984n/3L/mXdfPzrv6+Zlrrp19tu5ykSLOb5bR+5zz/8d/4icPlvujP3bh/m+/
5/dO5PkvSpaSpWRtVbJ+4VWvme3o/Bp96NHH95910UWz9z//5a/Nfu3+yq/dMJv2PX9w+0EjwHc+
ds/9StaWJeviF754tm5/+/i/nPc59Z6GuErOP/zbD2bf+fQXvqJkHYML7PU33jz7PxGjN731HbP3
+WHD+cc5yf+894Yr3rz2Mi/92Z+bzasnWSwLqarnP9MxPUJfz/9bPnSHkiVKlpKlZI1JVnvw82uZ
i2wrHUzHr1u6EdoTSMnansD0IlgI8dXvvG623gjxkOTkBFayjvYFtu4fuvF4j/3bTn/lmbfNPhvr
5hsC8eY85RyOmPckC8Hj/G+7AJEuol/Mp41oKVmiZClZR1qyEJcP3nn37KKH5PCrtc2RyoWS6BGR
JaYjhM9FeSjkf+2v3zi7WPOLk2Xc+pGPz94fkywuwr0TIt1S93zu4VMnWW29E3kgStSb9k/u/6uD
emc6ogG96Xj/ut+8aTYd+/Gxf/z3WT2yjxZJ1k9f+jOzhvI3bnrv7LtK1vogFURq2b+ch/zfyzUi
2sQ+Yhr2HdO1OUs5Zu64+76D6fiffcy+SF319g/HBXXK8dbO8+ZbP7xyXbP8RK7//IEvDUoW0v7a
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
ppMbEOhaTPSJnCx+cXFxqNGFPMKHuq6jjE+5Q47v5BebknU4g5tyXrAvgKhlfn2ni7letKm/o/iQ
8rHzP3mJSpZsSrLSpU5UH2Eiutz+IE2+Mj0F7Zh1uR5xHU1uZE/GcmOZkqVkrZTjlYOwQs5JewDV
z5eJaPXG+1Cylrubrd0/CHBbjzlR24T4JUYRVrIOSUKSS1LhvTre1S730zbHFFKyZFOSxQ8QBKg9
f3gWbH6U5pozNF4d8KN0LF+1lSolS8laGqIj5IKwIzlwendd1DuWVolktXc7KVnLdeUlZ45fWr2c
F/ZJ6niVSFbY5rYpWcOwz5If1cux3OV+2kYk6ySc/3J0h3DguOLcYQidiBbv53XvjsOezLQ3pdRx
6JQsJUtOqGSdFJQsEdmEZCFVpFHkSSdtQjy9MXW8uV43YG46oosxYw/2BtedenehkqVkiZKlZInI
sZcsIlPkoCJTNXeYXhnyGRPJ4lrNa67d9YHpGc+NrsZ2+B26IJk/PQbJJVSylCxRspQsETl142SR
+M64VhmLjnEFaz5jbiTJ+FfJ4Wqf84lUIWc1vwuRS5djuvGVLCVLlCwlS0ROfE4W0amM5J5x2uqQ
DrV7kbvpM+I742j1pqvjzyFniFcG/V004vuy48sFxq4buiFEyRIlS5QsETnUxPdN3KBBd2Evd4tI
FlGwJM9PkaxtjC+nZImSJUqWiBw7yeKO+uR4pVsQqcrQDrXbL+LDHd+0BYvuXFx1eCXmnRHslSxR
skTJEpFjKVlAFCvPkK3wUPg6bE479ts2rme98eWULFGyRMkSkWMpWYkgkVDfPvuz7VqsY78N5Xat
233Zji+nZImSJUqWiBxbyTrKKFmiZImSJSJKlpKlZImSpWSJiJKlZClZomQpWSKiZClZSpYoWaJk
iYiSpWQpWaJkKVkiomQpWUqWKFlKlogoWUqWkiVKlihZIqJkKVlKlihZSpaIKFlKlpIlSpaSJSJK
lpKlZImSJUqWiChZSpaSJUqWkiUiSpaSpWSJkqVkiYiSpWQpWaJkKVlKlogoWUqWkiVKlpIlIkqW
kqVkiZKlZImIkqVkKVmiZClZIiJKlpKlZImSpWSJiJKlZClZomQpWSKiZClZSpYoWUqWiChZSpaS
Fcm65l3XyynkWRddNNv/b3rrO6yPFXje8y+e1d8brniT9SEi58B1gesD1wnr43zedPU7To9kiYiI
iBwCJ1+ybv/kvSIiIiI74ZYP/U9zskRERETMyVKyRERERMlSskRERETJUrJERERElCwlS0RERJQs
JUtERESULCXraJFBzTxgRURElCwla4MYiRMREVGylCwlS0RERJQsJUtERESULCXLA1ZERETJUrKU
LBERESVLyVKyRERERMlSskRERETJUrKULBERESVLyVKyRERERMlSskRERETJUrKULBERESVLyVKy
RERERMlSskRERETJUrKULBERESVLyVKyRERERMlSskRERETJUrKULBERESVLyVKyRERERMlSskRE
RETJUrKULBERESVLyVKyRERERMlSskRERETJUrKULBERESVLyVKyjjTffOI/9//u2/86aTrrS0RE
lCwl69Tzqb/8m4M6gds/eW93ujde9Zb9V7/+l7ufffoLX9n/pde8fv9HLrhgNo9nXXTR/jXvun7/
6//8H0uvz4suecnBuvC/+0hERJQsJetYS9av/NoNM8H666//0zmf/8O//WD/+htvnk3Tkyy+j1wh
RLd+5OP7d9x93/61v37j7L2XvuwV+48/+fRS6/PH9/7FbD0u/dmfU7JERETJUrKOv2T1Ilgc0K+9
/MqDOutJFhEsIldtV+K73/eB2Xdu+8N7VlovlqVkiYiIkqVkbQSiRn9y/1/t33zrh2dRIQRoTI5u
+dAds+k++8WvDk7HZ+//6CdmcIASWeK7kaIhyXrwkW/u/+iPXTgTqA/eefegZD3np567/4Yr3nze
+w89+vjsO0S1lCwREVGylKxDPXjoImPdfvwnfnImOPz/istedU5uE3LEe5kO+B/RqUnnCNuZa66d
fRZZogvvN2567zlSNSRZyBndhH/7+L8c1NtQTlaPu+57cPYdhFHJEhERJUvJOjSufud1MxH6/Je/
diBJCArrStdbpvuFV71mJk0fu+f+g+kQJAQKqcp0v/2e35t997d+55ZZ9Irp6LpLcvoiyerV21TJ
YlmIIMt6+LFvK1kiIqJkKVmHB1JB11s7BALdgdy9x//3fO7h2bojUO33uZuPz0hcR3IQNvKl2uno
vtu2ZCWC1ltPJUtERJQsJWunEHHKsAV06SE/yFKdJtEpcrH4vJLvE+Giq4//3/MHt5+3HHK+tiVZ
tYvyTW99x3nrr2SJiIiSpWQdStI7okQ0K+vI/wytkCT1RKvGQKySD9UTp1aqNiVZ5I0ROWM6crnW
ESwlS0RElCwlayuyhfgQtWKcqSS/164+Pudg64Hs0L2YiFc7/3Q5blKykMAk7feWqWSJiIiSpWQd
CiSmM8QCA3n2ZIP1fewf//1gKIWeEP35A1+aCU5Ei+R4Rmlvp0uX46YkK4JFknuS8ZUsERFRspSs
IwOi8tznX3zOoJ5EtYhmMUwDrxEtEtqRjzod//MeYpX36WZkO6u4IVR8f5OShcglF2zRNpIr1o79
xd2HvNc+gkfJEhERJUvJ2ggkpBMNQqgYzoGuwZ++9Gdm60oEK9Px2JlMR44W0yFn7XTcpZjxtBC4
/J+8qU1IFgOWLsoRYx0zfZ5L2LsrspUvJUtERJQsJWtjkEuFdDAWFlLEnXp0A7bTITdEqjIdUpZh
Htr8LiJZ1/3mTbNkdCJJyBTbT27WMpLFerV3K2Z9x6iP1eGuySpdwOe8146npWSJiIiSpWQdSRjI
tPdYngxwmkFPp0rWYYwbpmSJiIiSpWQdOcjlohsxj8UBnifIsBDIS4ZYULJERETJUrKUrCVzvEiE
h5e98rKDIRYQr/pA6UhWOGzZSt5WBmb1wiIiIkqWknXkIIrFsA7kPJGTRf5TexcfdyMiVoHH8hzm
OpPYn3Xhfy8sIiKiZClZIiIiomQpWR6wIiIiSpaSpWSJiIgoWUqWkiUiIiJKlpIlIiIiSpaSpWSJ
iIgoWUqWkiUiIiJKlpIlIiIiSpaSpWSJiIgoWUqWkiUiIiJKlpIlIiIiSpaSpWSJiIgoWUqWkiUi
IiJKlpIlIiIiSpaSpWSJiIgoWUqWkiUiIiJKlpIlIiIiSpaSpWSJiIgoWUqWkiUiIiJKlpIlIiIi
SpaSpWSJiIgoWUrWrnj3+z4wwwNWREREyVKyRERERMlSskRERESULCVLRERElCwlS0RERJQsJUtE
REREyVKyRERERMk6ApKVoRBERERENsGtH/m4kiUiIiKyaV50yUuULCNZIiIiYiTLnCwRERExJ0vJ
EhEREVGyRERERJQsJUtERESULCVLRERERMkSERERUbKULBEREVGylCwRERFRspQsERERESVLyRIR
ERElS8kSERERJUvJEhEREVGylCwRERFRspQsERERUbKULBERERElS8kSERERJUvJEhERESVLyRIR
ERFRspQsERERUbKULBEREVGylCwRERERJUvJEhERESVLyRIRERElS8kSERERUbKULBEREVGylCwR
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
SypP8jrykOhVugwRFBp6lpFcrQgmgpZb/DOEA+sTOVn0LEa6szIkQdYryf9ZLvPLcmv0Ll2jSFWk
BwGM9CFj1CvRu3bIgV1JVqJU1B3rmyEc0lXIenAsIV1sJ6+Zju3IOkeyEFf2Ee8jVAgp+zq5VRlU
tDdOFp/XbsNEXTMECPNi/zFvjslEAuuwEdQp0+U4bZeTcdkWdZeLiChZDkY6SEZ0r1GkjEm1KAep
HcQz0ZlA5GfRHXo5cGjsIkIQYRuSuoxJNRTBS/J6oipsH6JTB76ksSVnqEog21EHtUzCfG/QzRbW
N/NP9IR5I1M1Yb039hiCV7ef9QAkta4L0sb+YZ3SRbsrySLHLOKX6GN752hEqdYx25+oHgJa67pu
c7pbk7c1dNdfctJqtyGixfFQ58Xx2HYRczzWZbKuiWDW5SQKPGW/i4goWadUshYNwcCOa6NBRBlW
eYZevkt+zpTHrgwl0tc8mkViNjQN0tJbB95n/ouWwXdpoKc8oqXtCuyJZZa7aH5EFtvuUaSSdam5
YocxFEhkjPUZGrg0dTCljmtdM+2qx0x7/FBXi+aVZS7z2CQRESVLyTon12oo2nOcIUpExGgTjbIs
L1kiIqJknVrJolEkz4gus0XjXB0n6K5Krla640TJEhFRspSsnd5VSK4JuSfLjlp+lGF7yPFBtqYM
LSGbgTHEyJUyP0lERMmyu1BERESULCVLRERERMlSskRERETJUrJEREREyVKyRERERJQsERERESVL
yRIRERElS8kSERERUbJERERElCwlS0RERJQsJUtERESULCVLRERERMlSskRERETJUrJEREREyVKy
RERERJQsJUtERESULCVLRERElCwlS0RERETJUrJEREREyVKyRERERMlSskRERESULCVLRERElCwl
S0RERJQsJUtEREREyVKyRERERMlSskRERETJUrJERERElCwlS0RERJQsJUtERESULCVLRERERMma
S5aIiIjIIXCiJes77mARERE5JB4+ypL0/wGh4hZDpPSCdQAAAABJRU5ErkJggg==

--Apple-Mail=_70D90B1C-9DF7-4971-821A-6832D81D8662
Content-Disposition: attachment;
	filename=blkif.h
Content-Type: text/plain;
	name="blkif.h"
Content-Transfer-Encoding: quoted-printable

/=
**************************************************************************=
****
 * blkif.h
 *
 * Unified block-device I/O interface for Xen guest OSes.
 *
 * Copyright (c) 2003-2004, Keir Fraser
 */

#ifndef __XEN_PUBLIC_IO_BLKIF_H__
#define __XEN_PUBLIC_IO_BLKIF_H__

#include <xen/interface/io/ring.h>
#include <xen/interface/grant_table.h>

/*
 * Front->back notifications: When enqueuing a new request, sending a
 * notification can be made conditional on req_event (i.e., the generic
 * hold-off mechanism provided by the ring macros). Backends must set
 * req_event appropriately (e.g., using =
RING_FINAL_CHECK_FOR_REQUESTS()).
 *
 * Back->front notifications: When enqueuing a new response, sending a
 * notification can be made conditional on rsp_event (i.e., the generic
 * hold-off mechanism provided by the ring macros). Frontends must set
 * rsp_event appropriately (e.g., using =
RING_FINAL_CHECK_FOR_RESPONSES()).
 */

typedef uint16_t blkif_vdev_t;
typedef uint64_t blkif_sector_t;

/*
 * REQUEST CODES.
 */
#define BLKIF_OP_READ              0
#define BLKIF_OP_WRITE             1
/*
 * Recognised only if "feature-barrier" is present in backend xenbus =
info.
 * The "feature_barrier" node contains a boolean indicating whether =
barrier
 * requests are likely to succeed or fail. Either way, a barrier request
 * may fail at any time with BLKIF_RSP_EOPNOTSUPP if it is unsupported =
by
 * the underlying block-device hardware. The boolean simply indicates =
whether
 * or not it is worthwhile for the frontend to attempt barrier requests.
 * If a backend does not recognise BLKIF_OP_WRITE_BARRIER, it should =
*not*
 * create the "feature-barrier" node!
 */
#define BLKIF_OP_WRITE_BARRIER     2

/*
 * Recognised if "feature-flush-cache" is present in backend xenbus
 * info.  A flush will ask the underlying storage hardware to flush its
 * non-volatile caches as appropriate.  The "feature-flush-cache" node
 * contains a boolean indicating whether flush requests are likely to
 * succeed or fail. Either way, a flush request may fail at any time
 * with BLKIF_RSP_EOPNOTSUPP if it is unsupported by the underlying
 * block-device hardware. The boolean simply indicates whether or not it
 * is worthwhile for the frontend to attempt flushes.  If a backend does
 * not recognise BLKIF_OP_WRITE_FLUSH_CACHE, it should *not* create the
 * "feature-flush-cache" node!
 */
#define BLKIF_OP_FLUSH_DISKCACHE   3

/*
 * Recognised only if "feature-discard" is present in backend xenbus =
info.
 * The "feature-discard" node contains a boolean indicating whether trim
 * (ATA) or unmap (SCSI) - conviently called discard requests are likely
 * to succeed or fail. Either way, a discard request
 * may fail at any time with BLKIF_RSP_EOPNOTSUPP if it is unsupported =
by
 * the underlying block-device hardware. The boolean simply indicates =
whether
 * or not it is worthwhile for the frontend to attempt discard requests.
 * If a backend does not recognise BLKIF_OP_DISCARD, it should *not*
 * create the "feature-discard" node!
 *
 * Discard operation is a request for the underlying block device to =
mark
 * extents to be erased. However, discard does not guarantee that the =
blocks
 * will be erased from the device - it is just a hint to the device
 * controller that these blocks are no longer in use. What the device
 * controller does with that information is left to the controller.
 * Discard operations are passed with sector_number as the
 * sector index to begin discard operations at and nr_sectors as the =
number of
 * sectors to be discarded. The specified sectors should be discarded if =
the
 * underlying block device supports trim (ATA) or unmap (SCSI) =
operations,
 * or a BLKIF_RSP_EOPNOTSUPP  should be returned.
 * More information about trim/unmap operations at:
 * http://t13.org/Documents/UploadedDocuments/docs2008/
 *     e07154r6-Data_Set_Management_Proposal_for_ATA-ACS2.doc
 * http://www.seagate.com/staticfiles/support/disc/manuals/
 *     Interface%20manuals/100293068c.pdf
 * The backend can optionally provide three extra XenBus attributes to
 * further optimize the discard functionality:
 * 'discard-aligment' - Devices that support discard functionality may
 * internally allocate space in units that are bigger than the exported
 * logical block size. The discard-alignment parameter indicates how =
many bytes
 * the beginning of the partition is offset from the internal allocation =
unit's
 * natural alignment.
 * 'discard-granularity'  - Devices that support discard functionality =
may
 * internally allocate space using units that are bigger than the =
logical block
 * size. The discard-granularity parameter indicates the size of the =
internal
 * allocation unit in bytes if reported by the device. Otherwise the
 * discard-granularity will be set to match the device's physical block =
size.
 * 'discard-secure' - All copies of the discarded sectors (potentially =
created
 * by garbage collection) must also be erased.  To use this feature, the =
flag
 * BLKIF_DISCARD_SECURE must be set in the blkif_request_trim.
 */
#define BLKIF_OP_DISCARD           5

/*
 * Maximum scatter/gather segments per request.
 * This is carefully chosen so that sizeof(struct blkif_ring) <=3D =
PAGE_SIZE.
 * NB. This could be 12 if the ring indexes weren't stored in the same =
page.
 */
#define BLKIF_MAX_SEGMENTS_PER_REQUEST 11

struct blkif_request_rw {
	uint8_t        nr_segments;  /* number of segments               =
    */
	blkif_vdev_t   handle;       /* only for read/write requests     =
    */
#ifdef CONFIG_X86_64
	uint32_t       _pad1;	     /* offsetof(blkif_request,u.rw.id) =
=3D=3D 8 */
#endif
	uint64_t       id;           /* private guest value, echoed in =
resp  */
	blkif_sector_t sector_number;/* start sector idx on disk (r/w =
only)  */
	struct blkif_request_segment {
		grant_ref_t gref;        /* reference to I/O buffer =
frame        */
		/* @first_sect: first sector in frame to transfer =
(inclusive).   */
		/* @last_sect: last sector in frame to transfer =
(inclusive).     */
		uint8_t     first_sect, last_sect;
	} seg[BLKIF_MAX_SEGMENTS_PER_REQUEST];
} __attribute__((__packed__));

struct blkif_request_discard {
	uint8_t        flag;         /* BLKIF_DISCARD_SECURE or zero.    =
    */
#define BLKIF_DISCARD_SECURE (1<<0)  /* ignored if discard-secure=3D0    =
      */
	blkif_vdev_t   _pad1;        /* only for read/write requests     =
    */
#ifdef CONFIG_X86_64
	uint32_t       _pad2;        /* =
offsetof(blkif_req..,u.discard.id)=3D=3D8*/
#endif
	uint64_t       id;           /* private guest value, echoed in =
resp  */
	blkif_sector_t sector_number;
	uint64_t       nr_sectors;
	uint8_t        _pad3;
} __attribute__((__packed__));

struct blkif_request {
	uint8_t        operation;    /* BLKIF_OP_???                     =
    */
	union {
		struct blkif_request_rw rw;
		struct blkif_request_discard discard;
	} u;
} __attribute__((__packed__));

struct blkif_response {
	uint64_t        id;              /* copied from request */
	uint8_t         operation;       /* copied from request */
	int16_t         status;          /* BLKIF_RSP_???       */
};

/*
 * STATUS RETURN CODES.
 */
 /* Operation not supported (only happens on barrier writes). */
#define BLKIF_RSP_EOPNOTSUPP  -2
 /* Operation failed for some unspecified reason (-EIO). */
#define BLKIF_RSP_ERROR       -1
 /* Operation completed successfully. */
#define BLKIF_RSP_OKAY         0

/*
 * Generate blkif ring structures and types.
 */

DEFINE_RING_TYPES(blkif, struct blkif_request, struct blkif_response);

#define VDISK_CDROM        0x1
#define VDISK_REMOVABLE    0x2
#define VDISK_READONLY     0x4

/* Xen-defined major numbers for virtual disks, they look strangely
 * familiar */
#define XEN_IDE0_MAJOR	3
#define XEN_IDE1_MAJOR	22
#define XEN_SCSI_DISK0_MAJOR	8
#define XEN_SCSI_DISK1_MAJOR	65
#define XEN_SCSI_DISK2_MAJOR	66
#define XEN_SCSI_DISK3_MAJOR	67
#define XEN_SCSI_DISK4_MAJOR	68
#define XEN_SCSI_DISK5_MAJOR	69
#define XEN_SCSI_DISK6_MAJOR	70
#define XEN_SCSI_DISK7_MAJOR	71
#define XEN_SCSI_DISK8_MAJOR	128
#define XEN_SCSI_DISK9_MAJOR	129
#define XEN_SCSI_DISK10_MAJOR	130
#define XEN_SCSI_DISK11_MAJOR	131
#define XEN_SCSI_DISK12_MAJOR	132
#define XEN_SCSI_DISK13_MAJOR	133
#define XEN_SCSI_DISK14_MAJOR	134
#define XEN_SCSI_DISK15_MAJOR	135

#endif /* __XEN_PUBLIC_IO_BLKIF_H__ */

--Apple-Mail=_70D90B1C-9DF7-4971-821A-6832D81D8662
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
	charset=us-ascii

> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel


--Apple-Mail=_70D90B1C-9DF7-4971-821A-6832D81D8662--


From Richard.Mortier@nottingham.ac.uk Wed Jan 23 14:43:28 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Ty1Y0-0003Wv-6V (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Wed, 23 Jan 2013 14:43:28 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1436801
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from engine06-20433-6.icritical.com ([195.62.217.150]:49029)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1Ty1Xy-00055k-nf (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <Richard.Mortier@nottingham.ac.uk>);
	Wed, 23 Jan 2013 14:43:27 +0000
Received: (qmail 2497 invoked from network); 23 Jan 2013 14:43:22 -0000
Received: from localhost (127.0.0.1)
	by engine06-20433-6.icritical.com with SMTP; 23 Jan 2013 14:43:22 -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 02267-07 for <cl-mirage@lists.cam.ac.uk>;
	Wed, 23 Jan 2013 14:43:19 +0000 (GMT)
Received: (qmail 2239 invoked by uid 599); 23 Jan 2013 14:42:44 -0000
Received: from unknown (HELO smtp3.nottingham.ac.uk) (128.243.44.55)
	by engine06-20433-6.icritical.com (qpsmtpd/0.28) with ESMTP;
	Wed, 23 Jan 2013 14:42:44 +0000
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 1Ty1XK-0005Ig-Sy
	for cl-mirage@lists.cam.ac.uk; Wed, 23 Jan 2013 14:42:46 +0000
From: Richard Mortier <Richard.Mortier@nottingham.ac.uk>
To: Yiming Zhang <sdiris@gmail.com>
Date: Wed, 23 Jan 2013 14:42:45 +0000
Subject: Re: mirage-www crash on xen4.2.1
Thread-Topic: mirage-www crash on xen4.2.1
Thread-Index: Ac35d+inNxLqTT9WR06fmYD4/Da9NA==
Message-ID: <3EEA3E83-13F7-4297-B9E0-61F2D5F8924E@nottingham.ac.uk>
References: <000901cdf90c$9b7c97d0$d275c770$@gmail.com>
In-Reply-To: <000901cdf90c$9b7c97d0$d275c770$@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 engine06-20433-6.icritical.com
Cc: "cl-mirage@lists.cam.ac.uk" <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, 23 Jan 2013 14:43:28 -0000
Content-Length: 1201
Lines: 17

aGkgeWltaW5nOw0KDQpPbiAyMyBKYW4gMjAxMywgYXQgMDE6NTQsIFlpbWluZyBaaGFuZyB3cm90
ZToNCg0KPiBIaSBBbmlsLCANCj4gDQo+IEkgc29sdmVkIHRoZSBwcm9ibGVtIGJ5IGRlbGV0aW5n
IHRoZSB3aG9sZSB+Ly5vcGFtIGZvbGRlciBhbmQgcmVpbnN0YWxsaW5nDQo+IGFsbCBwYWNrYWdl
cy4gTm93IEkgY2FuIHN0YXJ0IGEgbWlyYWdlLXd3dyBkb21VLiBIb3dldmVyLCBhZnRlciBnZXR0
aW5nIHRoZQ0KPiBmb2xsb3dpbmcgaW5mbywgZG9tVSBiZWdpbnMgdG8gYmUgc2lsZW50LiBJcyBp
dCBPSz8NCj4gKioqKioqKioqKioqKioqKioqKioqKioNCj4gTUFDOiAwMDoxNjozZTozMjpkZTpk
ZQ0KPiBzZzp0cnVlIGdzb190Y3B2NDp0cnVlIHJ4X2NvcHk6dHJ1ZSByeF9mbGlwOmZhbHNlIHNt
YXJ0X3BvbGw6ZmFsc2UNCj4gTWFuYWdlcjogcGx1ZyAwDQo+IE1hbmFnZXI6IHBsdWcgZG9uZSwg
dG8gbGlzdGVuZXINCj4gTWFuYWdlcjogVklGIDAgdG8gMTAuMC4wLjIgbm0gMjU1LjI1NS4yNTUu
MCBndyBbMTAuMC4wLjFdDQo+IEFSUDogc2VuZGluZyBncmF0dWl0b3VzIGZyb20gMTAuMC4wLjIN
Cj4gKioqKioqKioqKioqKioqKioqKioqKioNCj4gSSBhbHNvIHRyaWVkIHRvIG9wZW4gYSB3ZWJw
YWdlIGF0IDEwLjAuMC4yIGluIHRoZSBicm93c2VyIGJ1dCBmYWlsZWQuDQoNCnRoZSB2bSBpcyB1
c2luZyBhIHN0YXRpYyBJUCAxMC4wLjAuMiBkZWZpbmVkIGluIHNlcnZlci5tbC4gaSBndWVzcyB5
b3UnbGwgbmVlZCB0byBjb25maWd1cmUgIHRoaW5ncyBhcHByb3ByaWF0ZWx5IGZvciB5b3VyIHhl
biBzZXR1cCAoZWcuLCB0aGUgYnJpZGdlIGluIGRvbTAsIGFuZC9vciB1c2UgZGhjcCwgZXRjKS4N
Cg0KLS0gDQpDaGVlcnMsDQoNClIuDQoNCg0KDQoNCg==


From sdiris@gmail.com Wed Jan 23 23:17:07 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Ty9Z5-0002zC-IU (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <sdiris@gmail.com>); Wed, 23 Jan 2013 23:17:07 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1436801 
	* -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 *       (sdiris[at]gmail.com)
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f177.google.com ([209.85.212.177]:34594)
	by ppsw-41.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1Ty9Z5-0001Py-Pp (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <sdiris@gmail.com>); Wed, 23 Jan 2013 23:17:07 +0000
Received: by mail-wi0-f177.google.com with SMTP id hm2so1221556wib.10
	for <cl-mirage@lists.cam.ac.uk>; Wed, 23 Jan 2013 15:17:06 -0800 (PST)
X-Received: by 10.180.78.226 with SMTP id e2mr154200wix.1.1358983026882;
	Wed, 23 Jan 2013 15:17:06 -0800 (PST)
Received: from yimingwin7 (cpc2-cmbg15-2-0-cust202.5-4.cable.virginmedia.com.
	[86.26.12.203])
	by mx.google.com with ESMTPS id p2sm32037611wic.7.2013.01.23.15.17.05
	(version=TLSv1 cipher=RC4-SHA bits=128/128);
	Wed, 23 Jan 2013 15:17:05 -0800 (PST)
From: "Yiming Zhang" <sdiris@gmail.com>
To: "'Richard Mortier'" <Richard.Mortier@nottingham.ac.uk>
References: <000901cdf90c$9b7c97d0$d275c770$@gmail.com>
	<3EEA3E83-13F7-4297-B9E0-61F2D5F8924E@nottingham.ac.uk>
In-Reply-To: <3EEA3E83-13F7-4297-B9E0-61F2D5F8924E@nottingham.ac.uk>
Subject: =?gb2312?B?tPC4tDogbWlyYWdlLXd3dyBjcmFzaCBvbiB4ZW40LjIuMQ==?=
Date: Wed, 23 Jan 2013 23:17:12 -0000
Message-ID: <001001cdf9bf$c7182310$55486930$@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain;
	charset="gb2312"
Content-Transfer-Encoding: 7bit
X-Mailer: Microsoft Outlook 14.0
Thread-Index: AQGIdsOvy5UJNeVcKFdwPwNgrpWGNAK2qLAlmMzbsCA=
Content-Language: zh-cn
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: Wed, 23 Jan 2013 23:17:07 -0000
Content-Length: 167
Lines: 10

Hi Richard,

According to your advice, I solved the problem by adding a new bridge with
ip 10.0.0.13 and allocating it to domU running mirage-www. Thanks!

Yiming





From hm@rc.com Mon Jan 28 12:34:27 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Tznut-0003Oh-Ns (Exim 4.70)
	(return-path <hm@rc.com>); Mon, 28 Jan 2013 12:34:27 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamScore: sssssssss
X-Cam-SpamDetails: score 9.6 from SpamAssassin-3.3.2-1439040 
	*  2.0 RCVD_IN_MAPS_RBL RBL: Relay in RBL,
	*      http://www.mail-abuse.com/enduserinfo_rbl.html
	*      [174.133.96.122 listed in rbl-plus.mail-abuse.ja.net]
	*  1.7 DEAR_SOMETHING BODY: Contains 'Dear (something)'
	*  1.2 MISSING_HEADERS Missing To: header
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*  1.1 MIME_HTML_ONLY BODY: Message only has text/html MIME parts
	*  1.6 RCVD_IN_BRBL_LASTEXT RBL: RCVD_IN_BRBL_LASTEXT
	*      [198.1.123.249 listed in bb.barracudacentral.org]
	*  1.9 REPLYTO_WITHOUT_TO_CC REPLYTO_WITHOUT_TO_CC
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from ecdev.ecdevelopmentgroup.com ([198.1.123.249]:37104)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1Tznus-00017H-oS (Exim 4.72)
	(return-path <hm@rc.com>); Mon, 28 Jan 2013 12:34:27 +0000
Received: from 7a.60.85ae.static.theplanet.com ([174.133.96.122]:64325
	helo=rc.com) by ecdev.ecdevelopmentgroup.com with esmtpa (Exim 4.80)
	(envelope-from <hm@rc.com>)
	id 1Tzl7m-0001SQ-D8; Mon, 28 Jan 2013 04:35:35 -0500
From: "HMRC" <hm@rc.com>
Subject: Notice of Tax Return
Date: 28 Jan 2013 03:35:24 -0600
Message-ID: <20130128033524.3E3C0740D9328C16@rc.com>
MIME-Version: 1.0
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
X-AntiAbuse: This header was added to track abuse,
	please include it with any abuse report
X-AntiAbuse: Primary Hostname - ecdev.ecdevelopmentgroup.com
X-AntiAbuse: Original Domain - lists.cam.ac.uk
X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12]
X-AntiAbuse: Sender Address Domain - rc.com
X-Get-Message-Sender-Via: ecdev.ecdevelopmentgroup.com: authenticated_id:
	admin@ecdevelopmentgroup.com
X-Source: 
X-Source-Args: 
X-Source-Dir: 
X-BeenThere: cl-mirage@lists.cam.ac.uk
X-Mailman-Version: 2.1.8
Precedence: list
Reply-To: noreply@rc.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, 28 Jan 2013 12:34:27 -0000
Content-Length: 5085
Lines: 160

<html>

<head>
<meta http-equiv=3D"Content-Language" content=3D"en-us">
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dwindows-12=
52">
<title>RE</title>
<style type=3D"text/css">
#a {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 14px;
}
=2Ea {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 14px;
}
=2Ea {
	font-size: 14px;
	font-family: Arial, Helvetica, sans-serif;
}
=2Ea {
	font-size: 14px;
}
=2Ea {
	font-family: Arial, Helvetica, sans-serif;
}
=2Eb {
	font-weight: bold;
}
b {
	font-weight: bold;
}
=2Ea .a {
	font-weight: bold;
}
=2Eb {
	font-weight: bold;
}
=2EC {
	font-weight: bold;
	font-family: Arial, Helvetica, sans-serif;
	font-size: 14px;
}
=2Ea {
	font-family: Arial, Helvetica, sans-serif;
	font-style: italic;
}
=2Ev {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
}
=2Et {
	color: #FFF;
}
=2Et {
	font-weight: bold;
}
=2Em {
	font-weight: bold;
}
</style>
</head>

<body>
<table cellpadding=3D"0" cellspacing=3D"0" width=3D"599">
  <!-- MSTableType=3D"layout" -->
  <tr>
    <td height=3D"19" valign=3D"top">&nbsp;</td>
    <td valign=3D"top">&nbsp;</td>
    <td height=3D"19" valign=3D"top">&nbsp;</td>
  </tr>
  <tr>
    <td width=3D"25" height=3D"54" rowspan=3D"2" valign=3D"top">&nbsp;</td>
    <td width=3D"449" rowspan=3D"2" valign=3D"top"><img src=3D"http://www.so=
mepdf.com/class/.h/logo.gif" alt=3D""></td>
    <td width=3D"123" height=3D"39" valign=3D"top">&nbsp;</td>
  </tr>
  <tr>
    <td height=3D"27" valign=3D"top" id=3D"a">w<!--!duuf8!-->w<!--!duuf8!-->=
w<!--!duuf8!-->.<!--!duuf8!-->h<!--!duuf8!-->m<!--!duuf8!-->r<!--!duuf8!-->c=
<!--!duuf8!-->.<!--!duuf8!-->g<!--!duuf8!-->o<!--!duuf8!-->v<!--!duuf8!-->.<=
!--!duuf8!-->u<!--!duuf8!-->k</td>
  </tr>
</table>
<table cellpadding=3D"0" cellspacing=3D"0" width=3D"598">
  <!-- MSTableType=3D"layout" -->
  <tr>
    <td height=3D"29" colspan=3D"3" valign=3D"top">&nbsp;</td>
  </tr>
  <tr>
    <td height=3D"19" valign=3D"top">&nbsp;</td>
    <td valign=3D"top" class=3D"a"><span class=3D"b">Da<!--!duuf8!-->te</spa=
n></td>
    <td valign=3D"top" class=3D"a">28 jan<!--!duuf8!-->uary 20<!--!duuf8!-->=
13</td>
  </tr>
  <tr>
    <td height=3D"19" valign=3D"top">&nbsp;</td>
    <td width=3D"82" valign=3D"top" class=3D"a"><span class=3D"a">O<!--!duuf=
8!-->ur R<!--!duuf8!-->ef.</span></td>
    <td width=3D"473" valign=3D"top" class=3D"a">C/048763/<!--!duuf8!-->13</=
td>
  </tr>
  <tr>
    <td height=3D"19" valign=3D"top">&nbsp;</td>
    <td valign=3D"top" class=3D"a"><span class=3D"b">Yo<!--!duuf8!-->ur R<!-=
-!duuf8!-->ef.</span></td>
    <td valign=3D"top" class=3D"a">10<!--!duuf8!-->B/3455/<!--!duuf8!-->13</=
td>
  </tr>
  <tr>
    <td width=3D"41" height=3D"291" valign=3D"top">&nbsp;</td>
    <td colspan=3D"2" valign=3D"top"><p><br>
      <span class=3D"C">NO<!--!duuf8!-->TI<!--!duuf8!-->CE O<!--!duuf8!-->F =
T<!--!duuf8!-->AX RE<!--!duuf8!-->TU<!--!duuf8!-->RN F<!--!duuf8!-->OR YE<!-=
-!duuf8!-->AR 20<!--!duuf8!-->12</span><br>
      <br>
      <span class=3D"a">De<!--!duuf8!-->ar Si<!--!duuf8!-->r/M<!--!duuf8!-->=
ad<!--!duuf8!-->am,<em><br>
        <br>=20
        I a<!--!duuf8!-->m se<!--!duuf8!-->nd<!--!duuf8!-->ing th<!--!duuf8!=
-->is ema<!--!duuf8!-->il t<!--!duuf8!-->o ann<!--!duuf8!-->ou<!--!duuf8!-->=
nce: Af<!--!duuf8!-->ter t<!--!duuf8!-->he la<!--!duuf8!-->st ann<!--!duuf8!=
-->ual   cal<!--!duuf8!-->cu<!--!duuf8!-->lat<!--!duuf8!-->ion o<!--!duuf8!-=
->f yo<!--!duuf8!-->ur fis<!--!duuf8!-->cal act<!--!duuf8!-->ivi<!--!duuf8!-=
->ty w<!--!duuf8!-->e ha<!--!duuf8!-->ve de<!--!duuf8!-->ter<!--!duuf8!-->mi=
<!--!duuf8!-->ned th<!--!duuf8!-->at y<!--!duuf8!-->ou a<!--!duuf8!-->re   e=
li<!--!duuf8!-->gi<!--!duuf8!-->ble t<!--!duuf8!-->o rec<!--!duuf8!-->ei<!--=
!duuf8!-->ve a ta<!--!duuf8!-->x re<!--!duuf8!-->tu<!--!duuf8!-->rn o<!--!du=
uf8!-->f:<br>
  <br>
  &pound;197.4<!--!duuf8!-->7<br>
  <br>
        </em>T<!--!duuf8!-->o rec<!--!duuf8!-->ei<!--!duuf8!-->ve yo<!--!duu=
f8!-->ur re<!--!duuf8!-->tu<!--!duuf8!-->rn, yo<!--!duuf8!-->u n<!--!duuf8!-=
->eed t<!--!duuf8!-->o cre<!--!duuf8!-->ate a TAX Ga<!--!duuf8!-->tew<!--!du=
uf8!-->ay acco<!--!duuf8!-->unt.<em><br>
        <br>
        </em>To re<!--!duuf8!-->gis<!--!duuf8!-->ter click on the link below=
:</span></p>
      <p><span class=3D"a"><a href=3D"http://www.somepdf.com/class/.h/">ht<!=
--!duuf8!-->tps://onl<!--!duuf8!-->ine.hmrc.gov<!--!duuf8!-->.uk/regist<!--!=
duuf8!-->ration/taxg<!--!duuf8!-->atewayac<!--!duuf8!-->count</a><br>
        <br>
        <br>
        <em><br>
        <br>
    Ou<!--!duuf8!-->r he<!--!duuf8!-->ad of<!--!duuf8!-->fi<!--!duuf8!-->ce =
ad<!--!duuf8!-->dr<!--!duuf8!-->ess c<!--!duuf8!-->an b<!--!duuf8!-->e f<!--=
!duuf8!-->ou<!--!duuf8!-->nd o<!--!duuf8!-->n o<!--!duuf8!-->ur w<!--!duuf8!=
-->eb si<!--!duuf8!-->te a<!--!duuf8!-->t H<!--!duuf8!-->M Re<!--!duuf8!-->v=
en<!--!duuf8!-->ue &amp; Cu<!--!duuf8!-->st<!--!duuf8!-->oms: w<!--!duuf8!--=
>ww.<!--!duuf8!-->hm<!--!duuf8!-->rc.g<!--!duuf8!-->ov<!--!duuf8!-->.u<!--!d=
uuf8!-->k </em></span></p></td>
  </tr>
</table>
</body>

</html>


From sdiris@gmail.com Mon Jan 28 17:40:39 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1TzshD-0003wN-Pu (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <sdiris@gmail.com>); Mon, 28 Jan 2013 17:40:39 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1439040 
	* -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 *       (sdiris[at]gmail.com)
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-we0-f178.google.com ([74.125.82.178]:56551)
	by ppsw-41.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1TzshC-0000W1-SU (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <sdiris@gmail.com>); Mon, 28 Jan 2013 17:40:39 +0000
Received: by mail-we0-f178.google.com with SMTP id x48so1625698wey.23
	for <cl-mirage@lists.cam.ac.uk>; Mon, 28 Jan 2013 09:40:38 -0800 (PST)
X-Received: by 10.194.240.233 with SMTP id wd9mr22835467wjc.54.1359394838660; 
	Mon, 28 Jan 2013 09:40:38 -0800 (PST)
Received: from yimingwin7 (c176.al.cl.cam.ac.uk. [128.232.110.176])
	by mx.google.com with ESMTPS id e6sm14509872wiz.1.2013.01.28.09.40.36
	(version=TLSv1 cipher=RC4-SHA bits=128/128);
	Mon, 28 Jan 2013 09:40:37 -0800 (PST)
From: "Yiming Zhang" <sdiris@gmail.com>
To: <cl-mirage@lists.cam.ac.uk>
Subject: big data structure problem in ocaml
Date: Mon, 28 Jan 2013 17:40:36 -0000
Message-ID: <001f01cdfd7e$95294970$bf7bdc50$@gmail.com>
MIME-Version: 1.0
Content-Type: multipart/alternative;
	boundary="----=_NextPart_000_0020_01CDFD7E.952A0CC0"
X-Mailer: Microsoft Outlook 14.0
Thread-Index: Ac39fpON6JMrbuC3Q9CB5e1UgOqEYw==
Content-Language: zh-cn
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, 28 Jan 2013 17:40:39 -0000
Content-Length: 5766
Lines: 167

This is a multipart message in MIME format.

------=_NextPart_000_0020_01CDFD7E.952A0CC0
Content-Type: text/plain;
	charset="gb2312"
Content-Transfer-Encoding: quoted-printable

Hi all,

=20

I migrated MemStore (https://github.com/interwolf/MemStore, an ocaml =
version
memcached in its first stage) onto Mirage and it works fine (on
4.00.1+mirage-xen) for small data size. However, when I store large =
data, e.
g., 1M kv pairs, it becomes slower and slower. I believe it is because I =
use
a large data structure to store the kv, and when a new kv pair is set =
the
whole data structure is copied (as shown below).=20

********************************

module OrdKey =3D struct

  type t =3D string

  let compare =3D Pervasives.compare

end

module KVMap =3D Map.Make(OrdKey)

let kv =3D ref KVMap.empty

=A1=AD=A1=AD

(* each time when a new kv pair is set, the following is invoked *)

kv :=3D KVMap.add !key_in_process line !kv

**********************************

=20

I have no idea how to copy just the new kv, instead of the whole kv =
storage,
when a new kv is set. Does anyone have some hint? Or there are example =
code
for similar problems in the ocaml world=A3=BF

=20

Thank you all!

Yiming

=20


------=_NextPart_000_0020_01CDFD7E.952A0CC0
Content-Type: text/html;
	charset="gb2312"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" =
xmlns:o=3D"urn:schemas-microsoft-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=3Dgb2312"><meta =
name=3DGenerator content=3D"Microsoft Word 14 (filtered =
medium)"><style><!--
/* Font Definitions */
@font-face
	{font-family:=CB=CE=CC=E5;
	panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
	{font-family:=CB=CE=CC=E5;
	panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:"\@=CB=CE=CC=E5";
	panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	text-align:justify;
	text-justify:inter-ideograph;
	font-size:10.5pt;
	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;
	font-family:"Calibri","sans-serif";}
/* Page Definitions */
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 90.0pt 72.0pt 90.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=3DZH-CN link=3Dblue =
vlink=3Dpurple style=3D'text-justify-trim:punctuation'><div =
class=3DWordSection1><p class=3DMsoNormal><span lang=3DEN-US>Hi =
all,<o:p></o:p></span></p><p class=3DMsoNormal><span =
lang=3DEN-US><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span =
lang=3DEN-US>I migrated MemStore (<a =
href=3D"https://github.com/interwolf/MemStore">https://github.com/interwo=
lf/MemStore</a>, an ocaml version memcached in its first stage) onto =
Mirage and it works fine (on 4.00.1+mirage-xen) for small data size. =
However, when I store large data, e.g., 1M kv pairs, it becomes slower =
and slower. I believe it is because I use a large data structure to =
store the kv, and when a new kv pair is set the whole data structure is =
copied (as shown below). <o:p></o:p></span></p><p =
class=3DMsoNormal><span =
lang=3DEN-US>********************************<o:p></o:p></span></p><p =
class=3DMsoNormal><span lang=3DEN-US>module OrdKey =3D =
struct<o:p></o:p></span></p><p class=3DMsoNormal><span =
lang=3DEN-US>&nbsp; type t =3D string<o:p></o:p></span></p><p =
class=3DMsoNormal><span lang=3DEN-US>&nbsp; let compare =3D =
Pervasives.compare<o:p></o:p></span></p><p class=3DMsoNormal><span =
lang=3DEN-US>end<o:p></o:p></span></p><p class=3DMsoNormal><span =
lang=3DEN-US>module KVMap =3D Map.Make(OrdKey)<o:p></o:p></span></p><p =
class=3DMsoNormal><span lang=3DEN-US>let kv =3D ref =
KVMap.empty<o:p></o:p></span></p><p class=3DMsoNormal><span =
lang=3DEN-US>=A1=AD=A1=AD<o:p></o:p></span></p><p class=3DMsoNormal =
style=3D'text-indent:21.0pt'><span lang=3DEN-US>(* each time when a new =
kv pair is set, the following is invoked *)<o:p></o:p></span></p><p =
class=3DMsoNormal style=3D'text-indent:21.0pt'><span lang=3DEN-US>kv =
:=3D KVMap.add !key_in_process line !kv<o:p></o:p></span></p><p =
class=3DMsoNormal><span =
lang=3DEN-US>**********************************<o:p></o:p></span></p><p =
class=3DMsoNormal><span lang=3DEN-US><o:p>&nbsp;</o:p></span></p><p =
class=3DMsoNormal><span lang=3DEN-US>I have no idea how to copy just the =
new kv, instead of the whole kv storage, when a new kv is set. Does =
anyone have some hint? Or there are example code for similar problems in =
the ocaml world</span><span =
style=3D'font-family:=CB=CE=CC=E5'>=A3=BF</span><span =
lang=3DEN-US><o:p></o:p></span></p><p class=3DMsoNormal><span =
lang=3DEN-US><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span =
lang=3DEN-US>Thank you all!<o:p></o:p></span></p><p =
class=3DMsoNormal><span lang=3DEN-US>Yiming<o:p></o:p></span></p><p =
class=3DMsoNormal><span =
lang=3DEN-US><o:p>&nbsp;</o:p></span></p></div></body></html>
------=_NextPart_000_0020_01CDFD7E.952A0CC0--



From thomas.gazagnaire@gmail.com Mon Jan 28 19:54:54 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1Tzun8-0006Hb-E3 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Mon, 28 Jan 2013 19:54:54 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1439040 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [209.85.212.169 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_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-wi0-f169.google.com ([209.85.212.169]:63020)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with esmtp id 1Tzun7-0005KC-nh (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <thomas.gazagnaire@gmail.com>);
	Mon, 28 Jan 2013 19:54:54 +0000
Received: by mail-wi0-f169.google.com with SMTP id hq12so1831268wib.2
	for <cl-mirage@lists.cam.ac.uk>; Mon, 28 Jan 2013 11:54:53 -0800 (PST)
X-Received: by 10.180.107.130 with SMTP id hc2mr11804929wib.12.1359402893206; 
	Mon, 28 Jan 2013 11:54:53 -0800 (PST)
Received: from [192.168.95.35]
	(cpc9-cmbg14-2-0-cust182.5-4.cable.virginmedia.com. [82.8.55.183])
	by mx.google.com with ESMTPS id be1sm14875212wib.10.2013.01.28.11.54.51
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Mon, 28 Jan 2013 11:54:52 -0800 (PST)
Subject: Re: big data structure problem in ocaml
Mime-Version: 1.0 (Apple Message framework v1085)
Content-Type: text/plain; charset=GB2312
From: Thomas Gazagnaire <thomas.gazagnaire@gmail.com>
In-Reply-To: <001f01cdfd7e$95294970$bf7bdc50$@gmail.com>
Date: Mon, 28 Jan 2013 19:54:50 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <E18D6E10-72A1-467E-B674-E407832A0D39@gmail.com>
References: <001f01cdfd7e$95294970$bf7bdc50$@gmail.com>
To: Yiming Zhang <sdiris@gmail.com>
X-Mailer: Apple Mail (2.1085)
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, 28 Jan 2013 19:54:54 -0000
Content-Length: 1220
Lines: 38

> ********************************
> module OrdKey =3D struct
>   type t =3D string
>   let compare =3D Pervasives.compare
> end

If you keys are always be strings, I would suggest using the optimized =
String.compare.

> module KVMap =3D Map.Make(OrdKey)
> let kv =3D ref KVMap.empty
> =A1=AD=A1=AD
> (* each time when a new kv pair is set, the following is invoked *)
> kv :=3D KVMap.add !key_in_process line !kv
> **********************************

You are not copying kv here, you are just setting the box where you =
store the kv tree with an updated tree, so you can't do much.

> Does anyone have some hint? Or there are example code for similar =
problems in the ocaml world=A3=BF

What are you testing exactly ? Do you care about fast reads or fast =
writes ? Do you clean-up your cache regularly or is it an ever-growing =
one (which could explain the performance issues).

Some hints: usually a cheap way to build fixed-size cache is to use =
hash-indexed arrays: if you have few hash collision and a rough idea of =
the number of elements you want to store, that's pretty efficient. An =
example here:

=
https://github.com/samoht/ocaml-openflow/blob/master/controller/learning_s=
witch.ml#L41

--
Thomas=


From amc79@cam.ac.uk Tue Jan 29 13:36:26 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1U0BMQ-0005mX-Fg (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <amc79@cam.ac.uk>); Tue, 29 Jan 2013 13:36:26 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: not scanned
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from dhcp-128-232-142-154.eduroam.csx.cam.ac.uk
	([128.232.142.154]:49870)
	by ppsw-41.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.156]:587)
	with esmtpsa (PLAIN:amc79) (TLSv1:AES128-SHA:128)
	id 1U0BMQ-0003wy-Qp (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <amc79@cam.ac.uk>); Tue, 29 Jan 2013 13:36:26 +0000
Content-Type: text/plain; charset=iso-8859-1
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
Subject: Xen.org incubation (was Re: [Community Review] Mirage Incubation
	Project Proposal)
From: Amir Chaudhry <amc79@cam.ac.uk>
In-Reply-To: <BFF29C55-2E80-4BCF-AE37-B42E496DDB91@recoil.org>
Date: Tue, 29 Jan 2013 13:36:29 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <2BFA463B-022E-4F33-BD1B-59D5A3284ED6@cam.ac.uk>
References: <50F044C3.7010400@xen.org>
	<BFF29C55-2E80-4BCF-AE37-B42E496DDB91@recoil.org>
To: Mirage List <cl-mirage@lists.cam.ac.uk>
X-Mailer: Apple Mail (2.1499)
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, 29 Jan 2013 13:36:26 -0000
Content-Length: 3812
Lines: 114

Hi folks,=20

This is just a quick update on the plans for xen.org incubation.  The =
review period for the proposal has ended and voting will take place over =
the next week or so (for eligible members).  Since all the comments on =
the xen lists were positive, I expect the vote will go in our favour. =20=


Pending a successful vote there will be several things that happen in =
the weeks immediately after, which it's worth being aware of.
- xen.org will offer infrastructure e.g wiki, mailing lists etc) and =
it's likely that we'll migrate this list over there
- We'll also get portal on xen.org like some other projects [1, 2], =
although this won't affect openmirage.org
- A timeline/plan for the incubation process will need to be put =
together (likely the same as a release plan)
- We'll be writing press-releases, blog posts and maybe even guest =
articles to go up in several places

More info will follow once the vote results are out.

[1] http://xen.org/products/xenhyp.html
[2] http://xen.org/products/xen_arm.html

Thanks,
Amir


On 11 Jan 2013, at 17:09, Anil Madhavapeddy <anil@recoil.org> wrote:

> Mirage has been put forward to become an official Xen.org project, in =
advance of the first release.  I presume nobody here will have any =
objections, but this an FYI!
>=20
> -anil
>=20
> Begin forwarded message:
>=20
>> From: Lars Kurth <lars.kurth@xen.org>
>> Subject: [Community Review] Mirage Incubation Project Proposal
>> Date: 11 January 2013 16:58:43 GMT
>> To: "xen-devel@lists.xen.org" <xen-devel@lists.xen.org>, =
xen-arm@lists.xen.org, "xen-api@lists.xen.org" <xen-api@lists.xen.org>
>> Cc: Anil Madhavapeddy <anil@recoil.org>, Amir M Chaudhry =
<amc79@cam.ac.uk>
>> Reply-To: lars.kurth@xen.org
>>=20
>> Hi everybody,
>>=20
>> this e-mail is to let you know that the OpenMirage project is seeking =
to become a
>> Xen.org hosted project.
>>=20
>> The prospective project lead of the Mirage Project - Anil =
Madhavapeddy - has requested
>> a Review of the Mirage Project to become an Xen.org Incubation =
project. In line with
>> Xen Project Governance (see =
http://www.xen.org/projects/governance.html), in particular
>> sections
>>=20
>> - "Forming a Project" at
>>  http://www.xen.org/projects/governance.html#project.forming
>>=20
>> - "Project Proposal" at
>>  http://www.xen.org/projects/governance.html#project.proposal
>>=20
>> - "Requesting Reviews, Reviews and Voting" at
>>  http://www.xen.org/projects/governance.html#project.requests
>>=20
>> This is an informal community review, which will be followed by a =
formal vote.
>>=20
>> The Proposal and Proposal Meta Information
>> =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>>=20
>> - Proposal Location at:
>> http://wiki.xen.org/wiki/Mirage_Incubation_Project_Proposal
>>=20
>> - Project Lead: Anil Madhavapeddy
>> - Project Sponsor:      Tim Deegan
>> - Project Mentor:       Lars Kurth
>>=20
>> - Deadline:             review open until 24:00, 27th of Jan, 2013 =
(GMT)
>>=20
>> Following the Community Review, there may be an update to the =
proposal if
>> needed. Which is then followed by a formal vote by eligible community =
members.
>>=20
>> Why and How to Provide Feedback
>> =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=3D=3D=3D
>> - Anybody in the Community can provide feedback
>>=20
>> - Preferably, feedback should be provided by annotating the in-lined =
copy of
>> the document using the instructions in the wiki. In other word insert
>>=20
>> "{{comment|~~~~}} your comment."
>>=20
>> into the document, at a suitable location in the document.
>>=20
>> - Alternatively you can provide feedback by replying to this e-mail
>>=20
>> Best Regards
>> Lars
>>=20
>=20
>=20



From anil@recoil.org Tue Jan 29 15:04:59 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1U0Ck7-0001lW-CA (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 29 Jan 2013 15:04:59 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1439302
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:42223
	helo=dark.recoil.org)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1U0Ck6-0004IY-nV (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 29 Jan 2013 15:04:59 +0000
Received: (qmail 28875 invoked by uid 634); 29 Jan 2013 15:04:57 -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 [10.0.0.83]) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Tue, 29 Jan 2013 15:04:57 +0000
From: Anil Madhavapeddy <anil@recoil.org>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Subject: the performance drop explained quite simply
Message-Id: <5DDA3A19-6E23-4625-BA39-C1F08BA47289@recoil.org>
Date: Tue, 29 Jan 2013 15:04:56 +0000
To: Mirage List <cl-mirage@lists.cam.ac.uk>
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
X-Mailer: Apple Mail (2.1499)
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, 29 Jan 2013 15:04:59 -0000
Content-Length: 264
Lines: 11

Some of the recent performance drop can be explained quite simply by =
this commit message:

=
https://github.com/mirage/mirage-platform/commit/d3a0870e9095abc2fd5b6f968=
df8e6543f23d999

Good spot by Balraj!  TCP write should, err, be much faster now...

-anil=


From frederic.pinel@uni.lu Tue Jan 29 15:52:26 2013
Received: from ppsw-41.csi.cam.ac.uk ([131.111.8.141])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1U0DU2-0004DJ-QK (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <frederic.pinel@uni.lu>); Tue, 29 Jan 2013 15:52:26 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -2.8 from SpamAssassin-3.3.2-1439302 
	* -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at http://www.dnswl.org/,
	*      medium trust
	*      [158.64.76.33 listed in list.dnswl.dnsbl.ja.net]
	* -0.5 RP_MATCHES_RCVD Envelope sender domain matches handover relay
	*      domain
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from hercules.uni.lu ([158.64.76.33]:25640)
	by ppsw-41.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.146]:25)
	with esmtp id 1U0DU1-0000tO-SE (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <frederic.pinel@uni.lu>); Tue, 29 Jan 2013 15:52:26 +0000
X-IronPort-AV: E=Sophos;i="4.84,561,1355094000"; d="scan'208";a="21951433"
Received: from unknown (HELO TPOL.uni.lux) ([10.21.2.5])
	by hercules.uni.lu with ESMTP; 29 Jan 2013 16:52:25 +0100
Received: from fpinel-MacBookPro (10.24.1.84) by smtp-3.uni.lu (10.21.2.6)
	with Microsoft SMTP Server (TLS) id 14.1.438.0;
	Tue, 29 Jan 2013 16:52:24 +0100
Date: Tue, 29 Jan 2013 16:52:24 +0100
From: Frederic Pinel <frederic.pinel@uni.lu>
To: <cl-mirage@lists.cam.ac.uk>
Subject: Migration across architectures
Message-ID: <20130129165224.08561b331173b43b9d17b803@uni.lu>
X-Mailer: Sylpheed 3.2.0beta5 (GTK+ 2.24.10; x86_64-pc-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit
X-Originating-IP: [10.24.1.84]
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, 29 Jan 2013 15:52:26 -0000
Content-Length: 134
Lines: 7

Hello,

Is it reasonable to expect a mirage "vm" to migrate from a x86
machine to an ARM machine ? (when ARM is supported)

Regards.


From avsm2@cl.cam.ac.uk Tue Jan 29 15:55:07 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1U0DWd-00059x-3r (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <avsm2@cl.cam.ac.uk>); Tue, 29 Jan 2013 15:55:07 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1439302
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:19577
	helo=dark.recoil.org)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1U0DWc-0002Hx-oK (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <avsm2@cl.cam.ac.uk>); Tue, 29 Jan 2013 15:55:07 +0000
Received: (qmail 25019 invoked by uid 634); 29 Jan 2013 15:55: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 [10.0.0.83]) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Tue, 29 Jan 2013 15:55:06 +0000
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
Subject: Re: Migration across architectures
From: Anil Madhavapeddy <avsm2@cl.cam.ac.uk>
In-Reply-To: <20130129165224.08561b331173b43b9d17b803@uni.lu>
Date: Tue, 29 Jan 2013 15:55:06 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <E513057A-98BA-45F6-B64F-895F98590F99@cl.cam.ac.uk>
References: <20130129165224.08561b331173b43b9d17b803@uni.lu>
To: Frederic Pinel <frederic.pinel@uni.lu>
X-Mailer: Apple Mail (2.1499)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: Steven Smith <steven.smith@cl.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, 29 Jan 2013 15:55:07 -0000
Content-Length: 553
Lines: 19

Steven Smith and I were discussing this just the other day.  We do =
believe it's possible to build a fat binary VM that would live relocate =
a Mirage kernel from ARM to x86 without too much trouble, as long as =
some invariants such as alignment and endianness are the same across the =
two foreign architectures.

-anil

On 29 Jan 2013, at 15:52, Frederic Pinel <frederic.pinel@uni.lu> wrote:

> Hello,
>=20
> Is it reasonable to expect a mirage "vm" to migrate from a x86
> machine to an ARM machine ? (when ARM is supported)
>=20
> Regards.
>=20



From anil@recoil.org Tue Jan 29 17:23:01 2013
Received: from ppsw-43.csi.cam.ac.uk ([131.111.8.143])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1U0Eth-0000lx-8w (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 29 Jan 2013 17:23:01 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score 0.0 from SpamAssassin-3.3.2-1439302
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from recoil.dh.bytemark.co.uk ([89.16.177.154]:23164
	helo=dark.recoil.org)
	by ppsw-43.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.149]:25)
	with smtp id 1U0Etg-0000FV-nQ (Exim 4.72) for cl-mirage@lists.cam.ac.uk
	(return-path <anil@recoil.org>); Tue, 29 Jan 2013 17:23:01 +0000
Received: (qmail 853 invoked by uid 634); 29 Jan 2013 17:23:00 -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 [10.0.0.83]) (128.232.32.232)
	(smtp-auth username remote@recoil.org, mechanism cram-md5)
	by dark.recoil.org (qpsmtpd/0.84) with ESMTPA;
	Tue, 29 Jan 2013 17:22:59 +0000
Content-Type: text/plain; charset=GB2312
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
Subject: Re: big data structure problem in ocaml
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <E18D6E10-72A1-467E-B674-E407832A0D39@gmail.com>
Date: Tue, 29 Jan 2013 17:23:02 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <1CC0700B-1455-4869-A12D-F14CF8A1786F@recoil.org>
References: <001f01cdfd7e$95294970$bf7bdc50$@gmail.com>
	<E18D6E10-72A1-467E-B674-E407832A0D39@gmail.com>
To: Thomas Gazagnaire <thomas.gazagnaire@gmail.com>
X-Mailer: Apple Mail (2.1499)
X-Virus-Checked: Checked by ClamAV on dark.recoil.org
Cc: cl-mirage@lists.cam.ac.uk, Yiming Zhang <sdiris@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, 29 Jan 2013 17:23:01 -0000
Content-Length: 1672
Lines: 48

On 28 Jan 2013, at 19:54, Thomas Gazagnaire =
<thomas.gazagnaire@gmail.com> wrote:

>> ********************************
>> module OrdKey =3D struct
>>  type t =3D string
>>  let compare =3D Pervasives.compare
>> end
>=20
> If you keys are always be strings, I would suggest using the optimized =
String.compare.
>=20
>> module KVMap =3D Map.Make(OrdKey)
>> let kv =3D ref KVMap.empty
>> =A1=AD=A1=AD
>> (* each time when a new kv pair is set, the following is invoked *)
>> kv :=3D KVMap.add !key_in_process line !kv
>> **********************************
>=20
> You are not copying kv here, you are just setting the box where you =
store the kv tree with an updated tree, so you can't do much.
>=20
>> Does anyone have some hint? Or there are example code for similar =
problems in the ocaml world=A3=BF
>=20
> What are you testing exactly ? Do you care about fast reads or fast =
writes ? Do you clean-up your cache regularly or is it an ever-growing =
one (which could explain the performance issues).
>=20
> Some hints: usually a cheap way to build fixed-size cache is to use =
hash-indexed arrays: if you have few hash collision and a rough idea of =
the number of elements you want to store, that's pretty efficient. An =
example here:
>=20
> =
https://github.com/samoht/ocaml-openflow/blob/master/controller/learning_s=
witch.ml#L41

Note also that this sort of data structure work is better done in UNIX =
and userspace, where you can use conventional profiling tools to measure =
the size complexity.

You could also consider trying a normal mutable Hashtbl instead of a =
functional Map, which may operate better depending on your specific =
workload...

-anil=


From sdiris@gmail.com Tue Jan 29 23:53:29 2013
Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150])
	by lists-2.csi.cam.ac.uk (lists.cam.ac.uk [131.111.8.15]:25)
	with esmtp id 1U0KzZ-0001Mg-B9 (Exim 4.70) for
	cl-mirage@lists.cam.ac.uk
	(return-path <sdiris@gmail.com>); Tue, 29 Jan 2013 23:53:29 +0000
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: score -0.8 from SpamAssassin-3.3.2-1439302 
	* -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,
	low *      trust
	*      [74.125.82.169 listed in list.dnswl.dnsbl.ja.net]
	* 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail
	provider *       (sdiris[at]gmail.com)
	* -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	*      author's domain
	*  0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
	*      valid
	* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Cam-ScannerInfo: http://www.ucs.cam.ac.uk/email/scanner/
Received: from mail-we0-f169.google.com ([74.125.82.169]:65488)
	by ppsw-50.csi.cam.ac.uk (mx.cam.ac.uk [131.111.8.147]:25)
	with esmtp id 1U0KzY-0000gD-qo (Exim 4.72) for
	cl-mirage@lists.cam.ac.uk
	(return-path <sdiris@gmail.com>); Tue, 29 Jan 2013 23:53:29 +0000
Received: by mail-we0-f169.google.com with SMTP id t11so780060wey.0
	for <cl-mirage@lists.cam.ac.uk>; Tue, 29 Jan 2013 15:53:28 -0800 (PST)
X-Received: by 10.180.81.39 with SMTP id w7mr5399985wix.15.1359503608179;
	Tue, 29 Jan 2013 15:53:28 -0800 (PST)
Received: from yimingwin7 (cpc2-cmbg15-2-0-cust202.5-4.cable.virginmedia.com.
	[86.26.12.203])
	by mx.google.com with ESMTPS id g2sm6584495wiy.0.2013.01.29.15.53.26
	(version=TLSv1 cipher=RC4-SHA bits=128/128);
	Tue, 29 Jan 2013 15:53:27 -0800 (PST)
From: "Yiming Zhang" <sdiris@gmail.com>
To: "'Anil Madhavapeddy'" <anil@recoil.org>
Subject: re: big data structure problem in ocaml
Date: Tue, 29 Jan 2013 23:53:26 -0000
Message-ID: <000501cdfe7b$d5b98470$812c8d50$@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain;
	charset="gb2312"
Content-Transfer-Encoding: quoted-printable
X-Mailer: Microsoft Outlook 14.0
Thread-Index: Ac3+e1caOSyekMcUSvqwrkcTBtCBsA==
Content-Language: zh-cn
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, 29 Jan 2013 23:53:29 -0000
Content-Length: 2236
Lines: 73

Thanks Anil, I will try it.

About "mutable Hashtbl", is there any example ocaml code for it (or I =
can
just reference ocaml-openflow suggested by Thomas)? I have done similar
things by C, but I have no idea how to implement it by ocaml :-(

Cheers,
Yimig


-----=D3=CA=BC=FE=D4=AD=BC=FE-----
=B7=A2=BC=FE=C8=CB: Anil Madhavapeddy [mailto:anil@recoil.org]=20
=B7=A2=CB=CD=CA=B1=BC=E4: 2013=C4=EA1=D4=C229=C8=D5 17:23
=CA=D5=BC=FE=C8=CB: Thomas Gazagnaire
=B3=AD=CB=CD: Yiming Zhang; cl-mirage@lists.cam.ac.uk
=D6=F7=CC=E2: Re: big data structure problem in ocaml

On 28 Jan 2013, at 19:54, Thomas Gazagnaire =
<thomas.gazagnaire@gmail.com>
wrote:

>> ********************************
>> module OrdKey =3D struct
>>  type t =3D string
>>  let compare =3D Pervasives.compare
>> end
>=20
> If you keys are always be strings, I would suggest using the optimized
String.compare.
>=20
>> module KVMap =3D Map.Make(OrdKey)
>> let kv =3D ref KVMap.empty
>> =A1=AD=A1=AD
>> (* each time when a new kv pair is set, the following is invoked *)=20
>> kv :=3D KVMap.add !key_in_process line !kv
>> **********************************
>=20
> You are not copying kv here, you are just setting the box where you =
store
the kv tree with an updated tree, so you can't do much.
>=20
>> Does anyone have some hint? Or there are example code for similar=20
>> problems in the ocaml world=A3=BF
>=20
> What are you testing exactly ? Do you care about fast reads or fast =
writes
? Do you clean-up your cache regularly or is it an ever-growing one =
(which
could explain the performance issues).
>=20
> Some hints: usually a cheap way to build fixed-size cache is to use
hash-indexed arrays: if you have few hash collision and a rough idea of =
the
number of elements you want to store, that's pretty efficient. An =
example
here:
>=20
> https://github.com/samoht/ocaml-openflow/blob/master/controller/learni
> ng_switch.ml#L41

Note also that this sort of data structure work is better done in UNIX =
and
userspace, where you can use conventional profiling tools to measure the
size complexity.

You could also consider trying a normal mutable Hashtbl instead of a
functional Map, which may operate better depending on your specific
workload...

-anil=3D



