Eliza Weisman
๐ค SpeakerAppearances Over Time
Podcast Appearances
But it's a testing tool that will execute a test potentially hundreds of thousands of times. Sometimes you're really sitting there for like an hour waiting for the thing to run one test. So a great deal of perf work was sort of done more recently to try and make it not just mind-numbingly slow. But yeah, that's really, that's its heritage.
But it's a testing tool that will execute a test potentially hundreds of thousands of times. Sometimes you're really sitting there for like an hour waiting for the thing to run one test. So a great deal of perf work was sort of done more recently to try and make it not just mind-numbingly slow. But yeah, that's really, that's its heritage.
At a meta level, one last note on just how long it takes for this thing to run. At a meta level, I would add that the length of time that the loom model of a concurrent data structure takes to run is sort of a good warning metric too. If it takes an hour to test this thing, maybe this thing is actually too complicated and you could make it simpler.
At a meta level, one last note on just how long it takes for this thing to run. At a meta level, I would add that the length of time that the loom model of a concurrent data structure takes to run is sort of a good warning metric too. If it takes an hour to test this thing, maybe this thing is actually too complicated and you could make it simpler.
Postcard, if memory serves, is very similar to Hubris's sort of indigenous serialization format, but with a couple of key differences. I think that Cliff skipped the varint.
Postcard, if memory serves, is very similar to Hubris's sort of indigenous serialization format, but with a couple of key differences. I think that Cliff skipped the varint.
I had on my list another one of postcards at James Munn's thing. And I had one of his other projects on my list of crates, which is BBQ, which is a queue like the data structure. And BBQ is a multi-consumer, multi-producer byte queue that... allocates exclusively in contiguous regions in memory.
I had on my list another one of postcards at James Munn's thing. And I had one of his other projects on my list of crates, which is BBQ, which is a queue like the data structure. And BBQ is a multi-consumer, multi-producer byte queue that... allocates exclusively in contiguous regions in memory.
And the idea is that this is a queue that you can grab sort of a chunk of bytes of a given size off the front of, and then you can do a DMA directly into that lease and release it to the queue, and then you can wake up the other end. And he's got a bunch of
And the idea is that this is a queue that you can grab sort of a chunk of bytes of a given size off the front of, and then you can do a DMA directly into that lease and release it to the queue, and then you can wake up the other end. And he's got a bunch of
The interface for it is kind of hairy, but it allows you to say, I want this static region that I've declared as the backing storage for the queue, or I want to be able to dynamically allocate a byte buffer that is the backing storage for the queue so that you can use it really in both embedded projects where you don't have any capacity to do dynamic allocation. You can make them on the stack.
The interface for it is kind of hairy, but it allows you to say, I want this static region that I've declared as the backing storage for the queue, or I want to be able to dynamically allocate a byte buffer that is the backing storage for the queue so that you can use it really in both embedded projects where you don't have any capacity to do dynamic allocation. You can make them on the stack.
You can make them on the heap. and they're really nice, and they're DMA safe, so you can just have your NIC or whatever write directly into the region and queue that will then be consumed by somebody else. It's quite nice.
You can make them on the heap. and they're really nice, and they're DMA safe, so you can just have your NIC or whatever write directly into the region and queue that will then be consumed by somebody else. It's quite nice.
I do have one last draw. I have a hard stop, 630, so I just really wanted to get this one in. This is a crate that I really like because of its sort of implementation and its sort of cleverness and beauty. And it is also sort of an example of a thing where there
I do have one last draw. I have a hard stop, 630, so I just really wanted to get this one in. This is a crate that I really like because of its sort of implementation and its sort of cleverness and beauty. And it is also sort of an example of a thing where there
right design for this category of of data structure and instead you like really have to pick the correct one for your use case which this may or may not be uh which is concurrent hash maps And my personal favorite concurrent hash map is John Gangset's Evie Maps, which is an eventually consistent hash map. And the way it works is it's just sort of got two hash maps. And one of them you read from.
right design for this category of of data structure and instead you like really have to pick the correct one for your use case which this may or may not be uh which is concurrent hash maps And my personal favorite concurrent hash map is John Gangset's Evie Maps, which is an eventually consistent hash map. And the way it works is it's just sort of got two hash maps. And one of them you read from.
And that allows you to read from it without acquiring any kind of lock. And then there's one that you write to. And periodically, you swap them. And this is quite nice, because there's actually nothing scary going on in having two maps and a read-write lock. And if you choose to have them be only eventually consistent, you don't refresh the read replica on every write.
And that allows you to read from it without acquiring any kind of lock. And then there's one that you write to. And periodically, you swap them. And this is quite nice, because there's actually nothing scary going on in having two maps and a read-write lock. And if you choose to have them be only eventually consistent, you don't refresh the read replica on every write.