On 27/04/13 12:06, David Bruant wrote:
Le 26/04/2013 23:23, Brian Anderson a écrit :
I do think 50,000 I/O-performing tasks in a 32-bit process is within our reach. Last year I demonstrated 500,000 simultaneous Rust tasks (that did nothing but wait) in a 32-bit process, but there have been severe regressions since. On Linux I think we can get the initial allocation overhead for a single task into the ~2k range for sure.
Still, one stack per I/O operation has a bad smell to it. Being forced to create a new task (even if "only" 2k) because the 49000 previous ones are sitting idle doesn't sound right. Not contacting the remote resource (disk, network) would be worse. To do efficient IO, there got to be a cheap way to start an IO and wait for it. Creating a task, doesn't sound cheap enough to work at scale.

But we're not talking about creating a new task for every io operation as the io module's usual under-the-hood strategy, surely?

It seems to me that, by default, what we'd want is a sync api which under the hood, creates one task per drive accessed, or maybe max(drives_in_use, number_of_cores). I think the OS will make them async with the drive hardware anyway, though, so number_of_cores doesn't matter.

We wouldn't want to request 1000 different files (or seeks) at the same time, from one drive, though, right? I know there is command queuing on drives and all, but still...


--
Lee


_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to