<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Making GHC&#8217;s I/O manager more scalable</title>
	<atom:link href="http://www.serpentine.com/blog/2009/12/17/making-ghcs-io-manager-more-scalable/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.serpentine.com/blog/2009/12/17/making-ghcs-io-manager-more-scalable/</link>
	<description>Bryan O&#039;Sullivan&#039;s blog</description>
	<lastBuildDate>Wed, 08 Feb 2012 06:41:38 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Playing with the new Haskell epoll event library &#171; Control.Monad.Writer</title>
		<link>http://www.serpentine.com/blog/2009/12/17/making-ghcs-io-manager-more-scalable/comment-page-1/#comment-253517</link>
		<dc:creator>Playing with the new Haskell epoll event library &#171; Control.Monad.Writer</dc:creator>
		<pubDate>Mon, 18 Jan 2010 03:23:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/?p=540#comment-253517</guid>
		<description>[...] Making GHCâ€™s I/O manager more scalable &#8211; Dec 17, 2009 [...]</description>
		<content:encoded><![CDATA[<p>[...] Making GHCâ€™s I/O manager more scalable &#8211; Dec 17, 2009 [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: teideal glic deisbhÃ©alach &#187; Blog Archive &#187; Progress on GHC&#8217;s I/O manager</title>
		<link>http://www.serpentine.com/blog/2009/12/17/making-ghcs-io-manager-more-scalable/comment-page-1/#comment-253136</link>
		<dc:creator>teideal glic deisbhÃ©alach &#187; Blog Archive &#187; Progress on GHC&#8217;s I/O manager</dc:creator>
		<pubDate>Mon, 11 Jan 2010 08:52:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/?p=540#comment-253136</guid>
		<description>[...] couple of weeks, I have been working with Johan Tibbell on an event library to use for replacing GHC&#8217;s existing I/O manager. The work has been progressing rather nicely: I now have both the epoll and kqueue back ends [...]</description>
		<content:encoded><![CDATA[<p>[...] couple of weeks, I have been working with Johan Tibbell on an event library to use for replacing GHC&#8217;s existing I/O manager. The work has been progressing rather nicely: I now have both the epoll and kqueue back ends [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Brian Bloniarz</title>
		<link>http://www.serpentine.com/blog/2009/12/17/making-ghcs-io-manager-more-scalable/comment-page-1/#comment-252132</link>
		<dc:creator>Brian Bloniarz</dc:creator>
		<pubDate>Tue, 22 Dec 2009 03:49:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/?p=540#comment-252132</guid>
		<description>Really interesting and promising stuff.

FYI: I investigated libev for an application, had a pretty good impression overall -- well thought out and functional. It had a major drawback for us, though: the main loop supports various timers, and to implement that it calls gettimeofday() twice for each call to poll(). This occurs regardless of whether you&#039;ve registered any timers or not.

We decided that was too much overhead for our app (lots of small UDP reads). It also didn&#039;t help that libev uses a direct gettimeofday() syscall by default, instead of glibc&#039;s faster vdso implementation (see EV_USE_CLOCK_SYSCALL).</description>
		<content:encoded><![CDATA[<p>Really interesting and promising stuff.</p>
<p>FYI: I investigated libev for an application, had a pretty good impression overall &#8212; well thought out and functional. It had a major drawback for us, though: the main loop supports various timers, and to implement that it calls gettimeofday() twice for each call to poll(). This occurs regardless of whether you&#8217;ve registered any timers or not.</p>
<p>We decided that was too much overhead for our app (lots of small UDP reads). It also didn&#8217;t help that libev uses a direct gettimeofday() syscall by default, instead of glibc&#8217;s faster vdso implementation (see EV_USE_CLOCK_SYSCALL).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Johan Tibell</title>
		<link>http://www.serpentine.com/blog/2009/12/17/making-ghcs-io-manager-more-scalable/comment-page-1/#comment-251908</link>
		<dc:creator>Johan Tibell</dc:creator>
		<pubDate>Fri, 18 Dec 2009 07:22:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/?p=540#comment-251908</guid>
		<description>Bryan,

It&#039;s at http://github.com/tibbe/event

We could use the libev benchmark for inspirations. It opens a number of pipes and sends a byte over each like you said.</description>
		<content:encoded><![CDATA[<p>Bryan,</p>
<p>It&#8217;s at <a href="http://github.com/tibbe/event" rel="nofollow">http://github.com/tibbe/event</a></p>
<p>We could use the libev benchmark for inspirations. It opens a number of pipes and sends a byte over each like you said.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kazu Yamamoto</title>
		<link>http://www.serpentine.com/blog/2009/12/17/making-ghcs-io-manager-more-scalable/comment-page-1/#comment-251900</link>
		<dc:creator>Kazu Yamamoto</dc:creator>
		<pubDate>Fri, 18 Dec 2009 01:14:46 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/?p=540#comment-251900</guid>
		<description>Hello,
First of all, thank you for your work. I have been waiting for this kind work for a long time. 

I&#039;m implementing a Web server
with GHC. To get over the select() limitation, I wrote a C10K server library which use the *prefork* technique. That is, N processces are preforked, and a process limits acceptable connection to M. So, N * M connections can be handled.

I would contribute the benchmark stuff since my team already
know curl-loader and jMeter well. Please tell me what you want to measure...

Keep in touch.</description>
		<content:encoded><![CDATA[<p>Hello,<br />
First of all, thank you for your work. I have been waiting for this kind work for a long time. </p>
<p>I&#8217;m implementing a Web server<br />
with GHC. To get over the select() limitation, I wrote a C10K server library which use the *prefork* technique. That is, N processces are preforked, and a process limits acceptable connection to M. So, N * M connections can be handled.</p>
<p>I would contribute the benchmark stuff since my team already<br />
know curl-loader and jMeter well. Please tell me what you want to measure&#8230;</p>
<p>Keep in touch.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bryan O'Sullivan</title>
		<link>http://www.serpentine.com/blog/2009/12/17/making-ghcs-io-manager-more-scalable/comment-page-1/#comment-251875</link>
		<dc:creator>Bryan O'Sullivan</dc:creator>
		<pubDate>Thu, 17 Dec 2009 16:39:22 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/?p=540#comment-251875</guid>
		<description>Johan, do you have a darcs or git repo for your event library handy?

I&#039;ll write a benchmark some time in the next few days. It&#039;s not a very hard job: simply open some number of connections between a client and a server, and then send a byte over a random socket every so often.

The tricky part is in accounting where the time spent goes. We might want to use the new event logging mechanism in 6.12 and ThreadScope for that.</description>
		<content:encoded><![CDATA[<p>Johan, do you have a darcs or git repo for your event library handy?</p>
<p>I&#8217;ll write a benchmark some time in the next few days. It&#8217;s not a very hard job: simply open some number of connections between a client and a server, and then send a byte over a random socket every so often.</p>
<p>The tricky part is in accounting where the time spent goes. We might want to use the new event logging mechanism in 6.12 and ThreadScope for that.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andrey Popp</title>
		<link>http://www.serpentine.com/blog/2009/12/17/making-ghcs-io-manager-more-scalable/comment-page-1/#comment-251855</link>
		<dc:creator>Andrey Popp</dc:creator>
		<pubDate>Thu, 17 Dec 2009 09:33:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/?p=540#comment-251855</guid>
		<description>Johan, I&#039;d like to see your event library in base. Maybe, we should move discussion to GHC trac?</description>
		<content:encoded><![CDATA[<p>Johan, I&#8217;d like to see your event library in base. Maybe, we should move discussion to GHC trac?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Johan Tibell</title>
		<link>http://www.serpentine.com/blog/2009/12/17/making-ghcs-io-manager-more-scalable/comment-page-1/#comment-251844</link>
		<dc:creator>Johan Tibell</dc:creator>
		<pubDate>Thu, 17 Dec 2009 08:33:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/?p=540#comment-251844</guid>
		<description>If we had a common benchmark I could try to drop the event library in GHC base and see how it performs. It already supports select, epoll, and kqueue and has a very similar interface to the EventManager in your patch.</description>
		<content:encoded><![CDATA[<p>If we had a common benchmark I could try to drop the event library in GHC base and see how it performs. It already supports select, epoll, and kqueue and has a very similar interface to the EventManager in your patch.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andrey Popp</title>
		<link>http://www.serpentine.com/blog/2009/12/17/making-ghcs-io-manager-more-scalable/comment-page-1/#comment-251840</link>
		<dc:creator>Andrey Popp</dc:creator>
		<pubDate>Thu, 17 Dec 2009 07:10:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.serpentine.com/blog/?p=540#comment-251840</guid>
		<description>Hi, first of all â€” thanks for your work on thit ticket. This is my the most awaited feature I am missing in GHC.

Why do you consider using libev over raw calls to kqueue/epoll? As an another option, there is pure Haskell Event library by Johan Tibell.</description>
		<content:encoded><![CDATA[<p>Hi, first of all â€” thanks for your work on thit ticket. This is my the most awaited feature I am missing in GHC.</p>
<p>Why do you consider using libev over raw calls to kqueue/epoll? As an another option, there is pure Haskell Event library by Johan Tibell.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

