Written in March by William Wordsworth, read for LibriVox.org by Betsy Bush on an iRiver T-10. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun. The oldest and youngest are at work with the strongest, the cattle are grazing, their heads never raising. There are forty feeding like one. Like an army defeated, the snow hath retreated, and now doth fair ill on the top of the bare hill. The plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, loose guy prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Esther on a Nexstar MA-566. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun. The oldest and youngest are at work with the strongest, the cattle are grazing, their heads never raising. There are forty feeding like one. Like an army defeated, the snow hath retreated, and now doth fair ill on the top of the bare hill. The plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, the small clouds are sailing, loose guy prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Esther on a Sansa C-200. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun. The oldest and youngest are at work with the strongest, the cattle are grazing, their heads never raising, there are forty feeding like one. Like an army defeated, the snow hath retreated, and now doth fair ill on the top of the bare hill. The plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, loose guy prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Glammic Knight on MP3 Player. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun. The oldest and youngest are at work with the strongest, the cattle are grazing, their heads never raising, there are forty feeding like one. Like an army defeated, the snow hath retreated, now doth fair ill on the top of the bare hill. The plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, loose guy prevailing, the rain is over and gone. End of poem, this reading is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Glammic Knight on Zoom H2. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun. The oldest and youngest are at work with the strongest and the cattle are grazing, their heads never raising, there are forty feeding like one. Like an army defeated, the snow hath retreated, now doth fair ill. On the top of the bare hill, the plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this reading is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Great Plains on an iRiver T10. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun. The oldest and youngest are at work with the strongest, the cattle are grazing, their heads never raising, there are forty feeding like one. Like an army defeated, the snow hath retreated, and now doth fair ill. On top of the bare hill, the plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, the small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Great Plains on an iRiver IHP140. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun. The oldest and youngest are at work with the strongest, the cattle are grazing, their heads never raising, there are forty feeding like one. Like an army defeated, the snow hath retreated, and now doth fair ill. On top of the bare hill, the plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Jerome Lawson on the Sandisk Sansa Clip. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun. The oldest and youngest are at work with the strongest, the cattle are grazing, their heads never raising, there are forty feeding like one. Like an army defeated, the snow hath retreated, and now doth fair ill. On top of the bare hill, the plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Joseph Rowland on the creative sand vision M. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun. The oldest and youngest are at work with the strongest, the cattle are grazing, their heads never raising, there are forty feeding like one. Like an army defeated, the snow hath retreated, and now doth fair ill. On top of the bare hill, the plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Sean McGahey on iRiver IFP780 with external analogue headset mic. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun, the oldest and youngest are at work with the strongest, the cattle are grazing, their heads never raising, there are forty feeding like one. Like an army defeated, the snow hath retreated, and now doth fair ill. On top of the bare hill, the plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Sean McGahey on iRiver IFP780 the cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun, the oldest and youngest are at work with the strongest, the cattle are grazing, their heads never raising, there are forty feeding like one. Like an army defeated, the snow hath retreated, and now doth fair ill. On top of the bare hill, the plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Sean McGahey on Kodak easy share camera Z650 the cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun, the oldest and youngest are at work with the strongest, the cattle are grazing, their heads never raising, there are forty feeding like one, like an army defeated, the snow hath retreated, and now doth fair ill. On top of the bare hill, the plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Sean McGahey on Ubuntu in audacity using a Logitech USB 350 mic. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun, the oldest and youngest are at work with the strongest, the cattle are grazing, their heads never raising, there are forty feeding like one, like an army defeated, the snow hath retreated, and now doth fair ill. On top of the bare hill, the plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Sean McGahey on Samson H4 recorder, the cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun, the oldest and youngest are at work with the strongest. The cattle are grazing, their heads never raising, there are forty feeding like one, like an army defeated, the snow hath retreated, and now doth fair ill. On the top of the bare hill, the plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Sean McGahey on Samson YPC1, the cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun, the oldest and youngest are at work with the strongest. The cattle are grazing, their heads never raising, there are forty feeding like one, like an army defeated, the snow hath retreated, and now doth fair ill. On the top of the bare hill, the plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Tina C., on a Griffin eye-talk with an iPod Nano, recorded at best quality. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun, the oldest and youngest are at work with the strongest. The cattle are grazing, their heads never raising, there are forty feeding like one, like an army defeated, the snow hath retreated, and now doth fair ill. On the top of the bare hill, the plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Alan Drake, on a Zoom H2 Handy Recorder. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun, the oldest and youngest are at work with the strongest. The cattle are grazing, their heads never raising, there are forty feeding like one, like an army defeated, the snow hath retreated, and now doth fair ill. On the top of the bare hill, the plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Alan Drake, on a Boss Digital Recorder BR600, settings on Vogue Comp 2. The cock is crowing, the street is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun, the oldest and youngest are at work with the strongest. The cattle are grazing, their heads never raising, there are forty feeding like one, like an army defeated, the snow hath retreated, and now doth fair ill on the top of the bare hill. The plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Icy Jumbo, on an Arcos Gmini 402. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun, the oldest and the youngest are at work with the strongest. The cattle are grazing, their heads never raising, there are forty feeding like one, like an army defeated, the snow hath retreated, and now doth fair ill on top of the bare hill. The plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Icy Jumbo, on an Arcos Gmini 402. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun, the oldest and the youngest are at work with the strongest. The cattle are grazing, their heads never raising, there are forty feeding like one, like an army defeated, the snow hath retreated, and now doth fair ill on top of the bare hill. The plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Laurie Ann Walden, on a creative Zen Nano Plus in P3 Player. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun, the oldest and youngest are at work with the strongest. The cattle are grazing, their heads never raising, there are forty feeding like one, like an army defeated, the snow hath retreated, and now doth fair ill on the top of the bare hill. The plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Mike, on a Samsung D600 mobile phone. The cock is crowing, the stream is flowing, small birds twitter, the lake doth glitter, the green field sleeps in the sun, the oldest and the youngest are at work with the strongest. The cattle are grazing, their heads never raising, there are forty feeding like one, like an army defeated, the snow hath retreated, and now doth fair ill on the top of the bare hill. The plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Mike, on a Korg D4 digital recorder. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun, the oldest and youngest are at work with the strongest. The cattle are grazing, their heads never raising, there are forty feeding like one, like an army defeated, the snow hath retreated, and now doth fair well on the top of the bare hill. The plowboy is whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Paul Curran, on a creative Muvvo N200. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun, the oldest and youngest are at work with the strongest. The cattle are grazing, their heads never raising, there are forty feeding like one, like an army defeated, the snow hath retreated, and now doth fair ill on the top of the bare hill. The plowboys whooping, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain. Written in March by William Wordsworth, read for LibriVox.org by Paul Curran, on an Aigo A208 MP3 player. The cock is crowing, the stream is flowing, the small birds twitter, the lake doth glitter, the green field sleeps in the sun, the oldest and youngest are at work with the strongest. The cattle are grazing, their heads never raising, there are forty feeding like one, like an army defeated, the snow hath retreated, and now doth fair ill on the top of the bare hill. The plowboy is woken, a-non, a-non. There's joy in the mountains, there's life in the fountains, small clouds are sailing, blue sky prevailing, the rain is over and gone. End of poem, this recording is in the public domain.


Hi, welcome everyone. I'm Jonas Oberhauser from Huawei Tristan Research Center and I'm talking today about the Linux kernel memory model. And when the Linux kernel memory model was published in the scientific paper, they titled it frightening young children and disconcerting adults, which reminds me of some old fairy tales I had to listen to as a young German child. But after getting to know the Linux kernel memory model a little bit better, I felt actually it's more like some cool futuristic thing than some frightening scary fairy tale. And I want to maybe tell a few things about the Linux kernel memory model to share that kind of view. And at the same time I want to answer a lot of questions I have been getting about weak memory models whenever I talk to people in industry about it. And the first of these questions is why weak memory model exists at all? Why can't we just kind of ignore the whole thing? And historically we all know Moore's law and some people are saying it's getting slower, but if you look at the actual transistor count it's still grown kind of exponentially. It's just that the single threaded performance isn't keeping up with that development and instead what the higher transistor count gives us is more processors. So basically we have at the one hand side that this multi-core tries performance. On the other hand, if you look at the ratio between performance of the CPU core and the performance of the memory in terms of bandwidth and latency, you see that that latency is also falling exponentially behind. So latency is getting much worse from the viewpoint of the processor. At the same time performance is still getting better. And how is that making sense? The answer is in order to keep this kind of throughput high we need to execute memory operations out of order and not wait for that long latency. So if we look for example here at this instruction stream, which are the instructions that the processor sees in this order, we might have some stores, some loads, maybe some arithmetic stuff and some branch conditions in there. And if we execute them actually on the hardware, this is not executed in order at all. It's executed in some kind of parallel way. And so what we get is actually more like a two-dimensional picture of time and instructions where we see that some logical operations that are started quite early and are early in the instruction stream actually completed much later. And this gives some interesting effects. For example, let's say we store to some variable and then later we load from the same variable. We're able to see the value of that load before the store that writes that value completes. And this is called forwarding. And another interesting thing we see is that if we have a branch condition which is evaluated based on a former load, we don't have to wait for that load to complete before executing the code that comes after the branch. It's speculation. And these effects, they can hide this kind of out-of-order parallelism inside of the CPU from the programmer as long as the programmer writes only single-threaded code. And I think that's why most people might not even be thinking about this at all. But what happens if you have a multiprocessor program? For example, here with two CPUs, one writing first to Y and then to X. And the other one reading first from X and then reading from Y and doing this with a loop to make sure that by the time it starts reading the Y value, the X value has already been updated. And maybe the programmer thinks if he writes the code like this, he's guaranteed that the execution looks something like this. First, the two CPUs at the same time execute their first instruction. One of them writes to Y, the other one loads from X. And because X hasn't been updated yet, it loads to zero value. Then the processors in parallel execute the next operation, writing to X and the other one is evaluating the branch condition, which of course fails because it read X equals zero in the first iteration. And then the second processor starts another iteration of the loop, reads one this time because the value of X has been updated, completes the loop execution and reads the value of Y finally as one. And maybe programmers think, okay, it should always be like this. And on some processors like X86, you will see only this kind of behavior. But if you look at weak memory architectures like ARM, power, risk five, the answer can be quite different. And the reason is that the store to Y can be reordered with a store to X. And the load from X can be reordered in the sense with the load to Y in the sense that we speculatively guess that the value is going to be one, already execute the loads that come after the loop and then see some out of date value. And the only way to prevent this is by adding so-called barriers. So two most important barriers are store release and load acquire, which basically impose some kind of ordering constraint both on the processor as well as on the compiler to make sure that the stores of the first thread and the loads of the second thread happen in order here. And when you add these kind of barriers, you can make sure that you will always read the value of Y equal one and never Y equal zero. And then people might say, okay, this week memory model exists, but why do we need a model? Why do we need to think about it like in some form of abstraction? We could just do it like Calvin's dad suggests in this awesome comic where Calvin asks, how do they know the load limit on bridges? And Calvin's dad says, well, they just drive bigger and bigger trucks over the bridge until it breaks, right? And this is how a lot of software has developed. And why don't we just do the same thing for this kind of concurrent software? Of course, this works on my machinism and we can see how that worked with one very concrete example from the Linux corner. So the code here that's too small for you to see is the Q spin lock code from 2015. And this code was written by complete experts, very, very smart people. And if you run this code on x86 processors, it will always work. And if you run it on risk five processors from 2015, it will always work. And if you run it on R processors, well, as long as you're not using the big server machines, I think it will always work. But if you run it on PowerPC, it will most of the time work, but sometimes it just hangs. Okay? So now we see this code, which is extremely complicated concurrent code with lots of crazy stuff happening in there. And we have to identify where's the hang. And because most programmers don't even have maybe access to this kind of PowerPC machine to see this kind of strange behavior happening themselves, they might not even realize that the bug is in the code. And as a result, the code was not fixed for three years. So this hang was in the Linux corner for three years inside of the lock itself. And now let's try to debug this code. And I've done already the most important part of the work for you. I've cut that down to like a very small part of the code where the problem is. Okay? And the way we debug code is, well, we maybe have like the watchdog to trigger that the kernel is hanging without doing anything. The watchdog creates a core dump. And we look at the core dump and we try to guess back what happened. Okay? And if you look at the core dump, we see, okay, let's go through the code first. So we have two threads here. One of them is the current lock holder, that's thread two. And one of them is trying to acquire the lock. That's thread one. And the value of the lock variable is basically telling us a kind of queue, tail pointed to a queue of the threads that want to enter the critical section. And currently, in the beginning, the thread that wants to enter the critical section is thread two. So the current tail pointed to thread two's node N2. And what thread one wants to do is it wants to insert its own node N1 into that queue, using this atomic exchange, which reads the current value, which is N2 and stores its own value N1 into it. And then it wants to go to the previous owner, which is N2, and tell it, hey, by the way, the next guy to enter the critical section is me. So please, once you're done with the critical section, let me go in. And it does this by writing this next pointer to its own node, N1. Originally, the next pointer is now. And thread two is waiting until that next pointer is set. And it will get the next pointer, N1. And then thread one simply waits until thread two says, okay, I'm done with the critical section, you're good to go. And it does that by looking at its own lock bit. As long as the lock bit is zero, it means someone else is currently in the critical section. When the lock bit is set to one, it means, okay, it's my turn to go into the critical section. And that's what thread two does. After it sees the next pointer to be set to N1, it will store the lock bit to one. And that will allow thread one to enter the critical section. Now, if you look at the cordon, we see a couple of things happened. Thread one, as expected, set the lock value to N1. It set N2's next pointer to itself. Thread two read that and left its code completely, so it already executed the store setting the lock bit to one. But thread one is somehow still stuck in its loop, waiting for the lock bit to be set to one and it's somehow zero. And now I can ask the audience to have any idea where I need to insert the barrier to fix this code. Okay, someone has an idea. You can shout it and I can try to repeat. Which one? On the right. You want to change this part. So, no, that doesn't have. Actually, where we need to insert the barrier is this right once needs to be a store release. And you can see this is almost impossible to guess. So you did a good effort. I have never had anyone guess correctly where the barrier needs to be put. Okay. And we changed this right once to store release and the bug disappears on the compound server, for example. Okay. What does that tell us, right? Did we really fix the bug? Is it just maybe we added some complicated code there that makes it slow enough that it happens to work? Is it correct for all ARM chips or just the one I tested on? We don't know. And that's why we need some memory model. And maybe the better way for that to answer his son's question here is to give an answer like this. Okay. The way we know the load limit is we have a model of bridge. Okay. And we use that model to do some kind of like stress analysis and so on. And, yeah. And what is this kind of model? Well, it's an abstraction of the bridge and it helps us make predictions. And in the case of the bridge model, it abstracts away from some intermolecular forces and whatever and allows us to predict what we in the industry call inconvenient user experience. And for memory models, we want to abstract away from like the concrete gate level design of the architecture from all of the crazy optimizations GCC can do to memory operations. And we also want to predict some inconvenient user experience. And so because of that, yeah, what's the question now? And because of that, a group of very, very cool people sat together and said, okay, let's make a Linux kernel memory model. And basically they tried to create this unified abstraction of many different architectures because Linux has to run kind of everywhere of compiler optimizations that do crazy stuff with your code. And of course, combining the kind of two worlds from the mathematics point of view where the model should be like really correct and be reasonable and meaningful. And of the systems people who want to make sure the model actually helps us predict real stuff and not is just some abstract nonsense that people cannot use. And then in order to make sure that there's like the kind of marriage between these things is really working out, they created thousands of test cases, I think over 5,000 that highlight different use scenarios and so on and made sure that the model predicts the right thing on all of these thousands of test cases. And now I want to show a little bit what that model looks like. And when I created these slides, I realized I made a big blunder by actually trying to cram two weeks of memory model lectures into 10 minutes of a talk.  But let me start first by trying to remind ourselves of the sequential model of execution, maybe most of us have in mind for concurrent software. And in that model you have the different threads, each thread has a position in the code where it's currently executing indicated by this arrow here. And initially they of course at the start of the code and then in some order they execute operations. For example maybe thread one first executes its first operation, sets the lock bit to zero, then it tries to do this exchange tail operation that's an interlocked operation consisting of a read reading the current value and a store updating the value to itself and they are kind of interlocked so nothing should happen between these two operations. And then it writes and then it starts spinning but of course because thread two hasn't yet set the lock bit it will just be stuck there. And then thread two will leave its loop reading the updated value of n1 that was written by thread one. Thread one maybe spins a little bit more and then thread two sets the lock bit to one and thread one can leave. So this is one possible execution written here as a sequence of memory operations and there of course many other possible executions of this code each of them has a different sequence. So for example here's a sequence where thread two starts spinning a little bit earlier and sees a null pointer for a while or here's one where thread two starts reading the next pointer immediately reads the n1 which will be written later and then performs a store release then thread one sets the lock bit to zero that's the exchange and so on and in the end keeps spinning forever. And I happy many of you have very concerned faces because what I said makes no sense because actually it's not possible for this read once to read the value of n1 that is written actually much later. And so if you want to like make a general definition of what is a sequential execution, sequentially consistent execution we could say it's a sequence of memory operations with some conditions not every sequence makes sense. First of all each read has to see the current value and that is the condition that was violated in this nonsensical execution I just showed. Secondly operations of each thread have to follow the program order and third interlocked operations are atomic and now here's some lingo that people in the formal methods community use for this kind of stuff they call these conditions axioms okay it's just a word you have to remember whenever you have these kind of conditions they call them axioms. And knowing this we can also start defining what's a lkm execution what does lkm consider an execution and the main point is that instead of you looking at an execution as a sequence of memory operations lkm looks at an execution as a graph of memory operations so and I go to some more example later and then there's some axioms as well for example each read has to read from a right to the same location so in this graph you cannot have some read to x reading from a right that wrote to y or something like that and then there are some axioms that read like the happens before relation is acyclic the propagates before relation is acyclic whatever those mean right we don't know what that means right now and there are lots of these axioms and then maybe you didn't notice because I very very skillfully hid it between these egyptian hieroglyphs but what you have there is not some message written by the aliens that built the pyramids but this is actually part of the definition of the linux color memory model and there you can see they define what these relations mean using some strange syntax that I'll try to explain very briefly in a second and they say for example here hb is defined as this and this and hb is this happens before relation and then they say acyclic hb which means it happens before relation acyclic so this would be the second axiom here and now let's try to to understand these strange writings here so as I said a graph is the model of the execution and in the graph we have nodes and edges of course and then edges are the operations so here are all of the nodes of one particular execution and the edges between these nodes are relations between the events for example there's the int relation int means internal which relates any two events that come from the same thread so in this case for example this exchange tail operation and the load or quiet operation came from the same thread so there is an edge an arrow going from one to the other and that arrow is labeled int and of course this exchange tail operation here comes from the same thread as itself so there's an arrow going to itself and so on so you can see there's actually a lot of them it looks kind of like a Christmas tree or something and because it looks so so confusing usually when we write these graphs we don't write all of these edges we just keep them in our hand and there's another one external that relates all of the events of different threads and there's something called program order which is really really important program order basically relates the events of the same thread in the order in which they're seen in the instruction stream which may not be the order in which they actually execute it okay and here we usually write only the directly next one okay the next important class of relations or edges between these events are the ones that connect events to the same location and there are three the first one is reads from and it starts from the right that provides the value and goes to the read that reads that value so here we read the one which means we read from this store so we have the read from edge like this and there are lots of them of course because there are lots of reads then there's coherence which tells us the order in which things are being overwritten so we have the initial write which is being overwritten like this which is being overwritten like this so we get all of these errors and then we have from reads which tells us when a read is reading some more out of date value and you don't have to remember all of these right now all you have to remember is these kind of orangey reddish ones are basically telling us the order of the events to the same location in kind of a logical order okay and then the next kind of edge that is really relevant for this kind of for understanding these models are the so-called event types or tags and they basically are cycles on note on memory operations that have a certain kind of property or form so for example this one is a read so they will be the R tag going in a loop from itself to itself and there are a couple of them there's reads writes I won't go through all of them another very important one though is the marked one and this marked one differentiates between accesses that use LKM and primitives like exchange tail write once read once and the plain accesses that you write in the normal C program like n1 sub locked equal zero is just a plain access it's not marked with any kind of LKM and primitive and this is important because these LKM and primitives even if they do nothing else they prevent a lot of compiler optimizations and therefore allow the LKM and to be defined very very precisely but the unmarked accesses all kinds of crazy compiler optimizations are possible there and therefore the LKM makes very very little predictions about them okay and another important type are the release operations which provide some kind of ordering with the preceding operations okay and then there's something like a regular expression language used to define other kinds of edges so for example there's and which defines edges whenever both subrelations hold then there's override which holds then there's this pipe which means one or the other and then there's the semicolon which means first one and then the other and you don't need to remember any of these in detail but I just wanted to give you an idea of what the memory model kind of definitions and stuff look like so that you have a chance if you ever want to like read it or someone talks about it to have an idea in your head of what these things mean okay and then we can look at this example from before of the HP definition defined in LKM and what it means is you have a marked axis followed by one of three options either something called PPO which means preserve program order and tells us anything that is ordered by a barrier or a read from external or this kind of complicated thing that we don't talk about today and then the second line here defines one of the axioms saying that HP has to be acyclic and we'll try to go through an example like that and in a little bit slower time so first we have here a marked axis because it's using the right ones LKM and primitive and not just the plain axis then we have a read from external because it's a read from and between different threads and then we have another marked loop here because the other axis that is reading from it is also marked using the read ones LKM and primitive and because of that we have this HP edge and using the same kind of reasoning we can also show that there's an HP edge here and an HP edge here and so we have these three HP edges and we can follow these edges and ask the question do we ever get like back to the starting point and that is what acyclic means we can never get back to the starting point and what the way to understand the axiom is if we can ever get to the starting point following these kind of HP edges it means the graph cannot happen which means that any bugs that occur in this graph cannot happen according to the LKM so this kind of axiom it really gives us a prediction of the Linux kernel memory model and all of the other axioms can be understood in the same way and now we get back to the part that I think more people should pay attention to so now if we want to use the LKM basically one way to do it is we think of an inconvenient scenario like for example an alien attack and then we construct all the graphs in which this kind of inconvenient scenario would occur and then we try to find the HP edges in this graph by manually reading through that huge definitions that are there in the Linux kernel memory model and when we find these edges we can look whether we can ever reach back to the same point and if we can then we know that this scenario cannot happen in reality and this is the case for all of these tiny examples here these blue edges here other HP edges each of them form a cycle so all of these graphs here cannot happen in reality and as a conclusion we know this bug can never happen and there's an example here from the QSpinlock and the bad behavior that we're worried about is that the thread is stuck forever here reading the zero and now we will look at this kind of we try to construct all of the graphs and we construct everything basically based on that we end up with this and the only question that is kind of open is what is the order between the two stores to the locked bit so there's one here initializing it to zero and another one which is supposed to set it to one and we figure out if the one that sets it to one comes later then we will definitely eventually see that update and we will not be stuck in this loop forever because we will eventually see that one so the only case in which we can't be stuck in here forever is the one in which the locked bit is overwritten by this kind of initialization store and so this coherence edge should go in this direction saying that this is the logical order and this one came last and now we try to look and look and look and we find all of the HP edges and we see oh that's quite bad there's no cycle here whatsoever so I put all of the HP edges in here and we can see we can never reach back the same node the longest we can go is from here to here that's it and so according to the LKMM this behavior can happen and so we found our bug um but that doesn't help us immediately fix it right but what will help us fix it is the observation that there's another kind of cycle in here and that cycle is if we follow here the program order then we have here reads from program order and coherence and then we're back here at this point and this kind of cycle is always forbidden by the sequential model and we can use this knowledge because it means whenever we have this kind of cycle if we add just the right amount of barriers along the events on that cycle we can make this cycle also forbidden in LKMM and we can prevent the bug in LKMM so in this case we know either this this this or this operation need to be strengthened with some barrier and then the bug will disappear and in this case we already know if we put the release store here then the bug will disappear and that is because we get a new HP edge going from here to here why? well we need to read the model to know that and then we get this cycle and the cycle says okay LKMM says this behavior can no longer happen okay but of course that's completely like insane like you have to read this huge model you have to look at the graphs manually inspect everything so what do we do instead? in practice in my company where I work we use some electronic helpers to actually do all of that work for us automatically and there are two main tools that are now quite ready for use in real code one of them is called GenMC and the other one is called Datania and I try to give a short demo of the Datania tool so I'm running now the code directly on the real queue spin lock not on the tiny example I've shown before I'm using the Linux kernel memory model that is specified here LKMM and now it starts running and what it will do is it will generate all of these graphs that could create a hang or other kind of bug in this queue spin lock so each iteration here is one graph where bad behavior could happen and each time it will find okay the behavior cannot happen except on the 34th one it actually says there is a bug and this is the current version of queue spin lock in the current repository so this is not the old version so we know there's some safety violation according to the LKMM on the real queue spin lock in the Linux code right now and you saw it took like just a couple of seconds to find not three years okay that's pretty cool but it just tells us fair right no that's not true it also gives us the graph according to which the problem happens that graph is quite huge but if you like have the time you can go through this graph and figure out where the problem is or you can use another tool to do that automatically okay and so what happened here we have the current queue spin lock code and according to the tools there's a bug in it whether three possibilities basically either there's really a bug in the queue spin lock code luckily we have analyzed it and on the hardware models if you compile it there's no problems so that issue we can clear up the second possibility is that the tool may be implementing the model incorrectly and even though the model says that there's no problem the tool has a bug and accidentally mentions this we can also rule this out or the model may be a little bit too conservative in order to protect people from doing stupid things and really says that there's a bug here and this is the case so depending on where the issue is you can you have to adjust either the model or adjust the tool or maybe adjust the code which is the most likely thing to happen in this case okay and that brings me towards the end of the talk and I just want to show a few more interesting examples what can happen according to the linux column memory model and the first one is basically what I call relativistic frame of reference and we have here this code with four threads and the first one writes to x the last one writes to y and the others they read from x and y and now what we will do is we will look at one particular execution where cpu2 reads the update from cpu1 and then executes this rmb which is a read memory barrier which provides ordering between these reads so we expect that these reads should be definitely executed in the order they're written in the program so we actually get this hb edge and then cpu2 executes the read ones but it reads the old value of y it reads zero from the initial store it doesn't read the more up-to-date one so the logical order here is that the read ones of y logically occurred before cpu4's store and cpu4 store in turn logically occurred before the read ones of cpu3 because it sees the value of 1 and then cpu3 executes the read memory barrier again ensuring that the order between these two reads should be exactly as written in the program and then we can ask what do we know about the read ones of x in relation to the write ones of x and to summarize we know logically the write ones of x happened before this read this read definitely happened before this read because of the read memory barrier then the read ones here logically happened before cpu4's write because we read the old value and cpu4's write logically happened before cpu3's read which again happened before cpu3's other read because of the read memory barrier but that shouldn't mean that we will definitely see the up-to-date value of x here right and that's not the case yeah I see people shaking their heads very nice and that is not the case actually according to LKMM and actual hardware it's possible for the read ones of x to still see the outdated value and the way to make sense of this from my point of view is to say okay each cpu actually has a different view of the order of the writes to x and y and cpu2's view is that the write to x happened before the write to y and cpu3's view is that the write to y happened before the write to x so it's a little bit confusing maybe in the beginning but that's memory models for you okay now the next interesting example can be explained at hand of future armor which is another very great show and in that show there's a young handsome guy called Fry and he travels back in time and meets a young lady and they have a son together and that son meets another young lady and they also have a son who happens to be Fry and so in short Fry happens to be his own grandfather and the same kind of thing can actually happen in LKMM and here's the example and it's a little bit complicated we'll just focus on the core part in the middle for now and there we have basically cpu1 copying a value from a into b and cpu2 copying a value from b into a and when cpu1 and one way to see this is basically here the b value stored by cpu1 will be 42 somehow and he travels back in time and meets a beautiful read here and the read has a store using its value and that store gets read by another read which has another store reading its value which is 42 and so we have this value b equal 42 which is nowhere in the program just being generated by this store to be here copied over and over and eventually ending back to itself which is how the store to b equal 42 came to be in the first place and one way to see why this can happen is that we're using unmarked accesses here and as I mentioned before unmarked accesses in LKMM have very very little guarantees and in fact what the compiler is allowed to do to this b equal a assignment is to insert a trashy store b equal 42 right before why would the compiler do that in reality there's no good reason but in theory you could imagine that it wants to prefetch the cache line of b in exclusive mode so it stores some trash value so it can paralyze the load from a and the fetching of the cache line of b and then when the load of a is done it can immediately store to that cache line because it already has it in exclusive mode and the reason that doesn't happen is because we have prefetched instructions that do this for us without having to store but in theory on an architecture that doesn't have that kind of instruction something like this could happen and so you can see on unmarked accesses store the compiler can really introduce some crazy things and make crazy things happen and so the takeaway for basically everyone in the audience is don't try to be smart by using some plain stores whenever you have racy accesses because there are already LKM imprimatives which are marked and guarantee no such thing happens that if everything goes right generate exactly the same code as a plain copy unless the compiler somehow optimizes it in a crazy way which would be completely okay for sequential code but for racy concurrent code we'll just bring you a world of trouble okay and that brings me basically to the conclusion of the talk so like I mentioned the LKMM is a graph-based abstraction that predicts if bad things can happen modern platforms have lots of crazy behaviors that we cannot easily manually predict or even for experts are hard to predict sometimes and so the right way to write any kind of concurrent code that doesn't use only locks is to use the tools because they're now powerful enough to actually run on real code like the Qspin line okay that's it thank you so much for your attention okay I'm very happy to hear any questions yes there's a microphone there so well all right a couple of years ago I read a read a paper that said that's everything weaker than sequentially consistent is in principle undecidable so perhaps I read it wrong or maybe so I'm not sure if you so my question is is it's like theoretically completely sound this model or is it just like a very best effort approach that should you know should work well in practice okay so your question is that since everything weaker than sequential consistency is undecidable whatever that means improving yeah proving that the program is consistent okay that the the notion in that paper was that if you want to prove that the program is consistent and the program has is correct and the program has weak memory model than in in principle it's an undecidable problem like the problem of stop yes so so let me try to to repeat your question for the online audience and then try to give an answer from my point of view so your question is since sequential consistency is the only model under which we can decide certain things without clarifying what those certain things are are these weak memory models really sound or are they just the best effort okay and the thing is I think there are lots of levels of abstraction that are being mixed here like one of them is what exactly is the thing that is the problem that is being that is undecidable so we already know program verification in general is undecidable even for sequential consistency right like halting problem and so on but then there's a simpler problem which is if you look only at finite state machine programs instead of full Turing machines then for sequential consistency you can get decidability and indeed for many weak memory models you don't but that is luckily not the problem we have to solve because we don't have to look at arbitrary finite state programs and arbitrary Turing machine programs we have to look at very very practical programs and even though maybe in general it's impossible to decide the correctness of certain programs on weak memory models or even sequential consistency for practical programs and maybe some practical correctness properties that we care about we can very well decide like you could see we ran the thing on the Q spin lock and it decided within like 20 seconds there's a bug okay now the next question is are the weak memory models themselves a kind of best effort thing or not and the answer is that we can actually do weak memory model proves all the way down to the architecture so I have done this very recently some proofs at the gate level construction of for example the boom open source load store unit which implements the weak memory model of the risk five architecture in the Berkeley out of auto machine and you can prove that that processor correctly implements the weak memory model which means that the weak memory model that is written in the manual is sound at least for that processor and then you can build this kind of tower we say okay now we have the architecture level but we have one level on top which is the LKMM and then we have the LKMM mapping to this lower level using some compiler intrinsic some assembly code that has been handcrafted and we can also prove that that level is also sound so the compiler things are correct and actually in the LKMM Victor Vafiades recently found an unsoundness but only one when mapping to power but you can fix it and then prove okay the fix is sound so the model itself is definitely not just the best effort kind of thing and the tools I would say are best effort kind of thing but usually in practice the best effort is good enough I hope that answered your question okay any more questions yes yes please I like your questions be kind of simpler but I'm not sure it's possible to answer it so I was working for a company pre-producing ARM V8 chips and they had some internal benchmarks that were proving that the weak memory model is in some cases worth the effort so but there are very little like strong arguments backed by numbers that would show that the whole issue is really worth the effort I mean the yeah so what's your opinion on that so this is a really really great question I think it's great pain right for programmers and me we had the same issue like you like here with the Rinnix kernel we had like years old code that we found bugs yeah so this is a really great question so your question is are weak memory models really worth the effort in terms of performance and so there's two parts of the answer one of them is that we have some concurrent accesses in the code like these right ones right read ones SMP right release and so on but they actually make up a really really tiny faction of the code that we really run and 99% of the time you run some plain accesses using some kind of local logic and actually that part is the part that the weak memory model is for so the weak memory model doesn't really have those concurrent accesses but it helps us execute these other accesses out of order and there are some performance benefits for that so the company I work for also produces armchip and we have also some benchmarks proving that there's some benefits especially if you have long pipelines and huge out of order speculation windows and then for this kind of local code you get a benefit now the other thing is that we have done some previous work automatically choosing the optimal barriers for these kind of less than 1% of concurrent accesses so this was the v-sync work we published some years ago and what we found is that even though we could get really really nice performance benefits in some micro benchmarks really stress testing that kind of concurrent data structure if you put it in a real product then you're optimizing less than 1% of the runtime and it doesn't matter anymore so my feeling now is that in reality weak memory models are very important to optimize all the plain accesses but the barriers you choose for the marked accesses almost never matter and there you can almost always just go with sequential consistent accesses and then that brings us back to your previous question then you get something if you only really use these kind of sequential consistent accesses for those parts then you get something that's called DRFSC theorem which says then your whole program will behave as if it was sequentially consistent and then you could use in theory sequentially consistent tools to verify but we have not found really a good need for that in our company more questions all right thanks so much hope I didn't put everyone to sleep


My name is Cheryl Matsuoka, the Executive Director of the Hawai'i Restaurant Association and the Hawai'i Restaurant Association Educational Foundation. Mahalo for joining me here on Restaurants of Hawai'i on the ThinkTech platform. Today we're going to be talking about a very heavy subject, and our hearts are very heavy as we think about those who have been affected by the Maui wildfires. Although in the face of this tragedy, we have also witnessed incredible strength and unity in our state. It's heartwarming to see the outpouring of love and support from all corners of our state. And today I'd like to have my guests introduce themselves. I'm honored to have two very special guests who will share with us exactly what is needed today and Maui on the Lahaina front. So first I'd like to have Auntie Blanche. My dear Auntie Blanche was introduced to me by my dear Auntie Peggy. And as soon as the wildfires hit, I was in Auntie Peggy's office and I had an opportunity to speak to Auntie Blanche over the phone. That next morning, Monday morning, I drove to Waimanalo to meet Auntie Blanche and to see how we could support her in her initiative. Auntie Blanche, could you please introduce yourself? Aloha, my name is Blanche McMillan. I am the CEO of the Huyumahi Aina of the Homeless Shelter, Auslan Shelter and the Poor. Mahalo. Mahalo Auntie. And I'd like to now introduce Major Troy, you know, how do I say this? Major, I don't know if you heard the story, but I was introduced to people over at the Salvation Army on the Saturday after the wildfires. I don't know if you heard the story that Naomi even know me at 4am in the morning. The email came through and what she was requesting was take out containers because now this is Saturday, right? So there's been a few days that we've been dealing with the wildfires. Immediately as her request came in for take out containers because everybody right needed to serve food. I was able to get a truckload of take out containers and utensils over to the Salvation Army so that you all could continue all the great work that you do. Major Trimmer, please introduce yourself. Well, thank you. Major Troy Trimmer, I'm the Salvation Army's divisional headquarters here in Hawaii. I'm the division commander for the Hawaiian Pacific Islands Division. So that oversees all of the Hawaiian Islands clear out to Guam, Saipan and beyond. Thank you for joining me. So Major, how has the Salvation Army been affected by the Maui wildfires? Well, first of all, Maui is our family, right? The Salvation Army has been in Maui since 1895. In fact, during the fires, our own operation in Lahina, we've lost everything. Praise God we didn't lose our personnel, but we lost our core building or that's a church for the Salvation Army. We lost our administration. We lost our thrift store. We lost our services to the community that happened there and even lost the parsonage or the Salvation Army quarters. But that very first night, our team made their way over to Kahului and got into the kitchen, even having lost their own homes, got into the kitchen and began preparing meals, which is what the Salvation Army does. So it's impacted us greatly. The most boring or difficult thing right now really is that we've lost the Lahina operation. So we're still efforting trying to get back into the west side. You know, we're looking at every opportunity and options is there, but we're not there. So prior to the fires, you know, the Salvation Army fed on daily basis, our houseless friends provided hygiene kits, did services to Kapuna. And so being primarily focused on our station in Kahului right now, all of our personnel goes over there every day to make sure where all of our services continue and happen. It lays heavy upon the hearts of our people that they're not back in the community in which they had to flee from. So we're really efforting hard to get there. That's probably the biggest impact personally to us as an organization. And then of course, all of the Ohana around all the neighboring islands, Salvation Army is a huge family. And when one part of the family hurts, just like everyone else in Blanche and her team, the rest of us hurt. So that's probably been the most significant manner. And I heard stories, major tremor of even your, your staff losing homes in Lahaina and still work through that. Yeah, they have almost all of our volunteer base and our staff who lost homes there were immediately serving still serve today. We have a fabulous guy we call Uncle Dino who has helped a lot with the Salvation Army over the years and has been helped by the Salvation Army. And when we were with him and Maui just a few weeks ago, he was able to tell me, you know, you know, major, the most pressing thing upon my heart that's been meaningful to me of all the time I've been with the Salvation Army is during this fire to just be able to be with people and to cry with people. And so while they're serving meals, they're taking time to talk story and to be with people who are impacted deeply by this, this tragedy. Thank you for all that you do at empty Blanche. Oh my God, I drove up there on Monday and I saw your facility out there at Mahi, I was impressed. Auntie, while I was there, the Waimanalo healthcare staff was also over there, you know, providing all of the checkups that they need to all of the different things that they need to do for record keeping. So, yes, such a significant leader in our community.  Yes, and I've seen you the Waimanalo community at Oahu, and now you're on Maui. Can you please share with us what you've been going through in the last four weeks? Actually, when I first started, I got a wake up call, and I never thought Maui would have fired there in Lahainau. And it was, and I got on a phone, just one phone call, made a millions of viewers came over and say, what can I do? Well, how can I help? And what I did, I decided, you know what, it is time for me to help our people in Maui. You know, this amazing thing, what really, really, the people of Hawaii really got together in this special thing that what happened to one of our islands, and we really went and pulled through with each other. It was so unbelievable how touching, how chicken skin it was when people started to come here and started to donate. And then from one thing, it became a 420 pallets of things that we needed. We needed a generator. It just came in one after another. But I didn't know my nephew who lives in Maui had 75 people on his property that came from Napeleway out from Lahainau. And I said, what a blessing. What I did, I got two containers to his home and made sure that our 75 families or people was there to feed them, medical, whatever the babies needed, they had everything. We supplied everything. And because of the love of the people that made what it is today, and that we continue on to bless each and every one of them. And that's why, you know, we had important people that brought things like Augi Tea, we had some big companies like Clementes, we even had our Waimanalo stores that donated a lot of things and brought food to feed all of us. There were hundreds and hundreds of volunteers every single day here. 13 days straight, nonstop. We started from 5 in the morning to 10 at night. And I never stopped anyone from bringing things, even if they come like 11 out the door will always be open for everyone. So that's why we kept on continuing. And people were calling me, how are you going to get things there? It was only simple. I prayed to God, God gave me the containers. I had 15 containers, but total of 17 containers that went to Maui. And then we had families that collected the containers there, plus the mayor's wife, Kaihi, who was the leader of Maui for our containers and her two daughters. They were very amazing. How beautiful it was, how things just falls in place when you do this kind of work. When you see this kind of thing, you just, I mean, it's unbelievable. There's no words that can explain that things can work. I mean, you know, things just work out. And today I continue on in collecting for Maui because when I went there, I went to Kula. Yes, I went to the hubs and whatever. And that's where our stops are going to Kula. And then from there, we went to Kihei. Kihei was another place. That's another hub. And then we have Kio Pilani. I think that was a park and that's where other supplies are going. So I wanted to be one of those for the emergency hubs. Whenever they run out, there will always be things to give out to the people. And this is what I want to do for the whole year or maybe continue on doing what is my job is all about. And I want to make sure that I hope and I pray that I will be one of them that will open up a shelter. Right now, I want to open shelters for homeless and homeless. But today, because of our people of the disaster of the fire, they have nowhere to go. And I want to be there because we do have a lad, but I have to pray on it because it belongs to the state. And I'm trying to see if it can put temporary homes because there's a lot of people that called me that have shelter. I mean, you have homes that it's already made to be put on the land. If I can do 200 houses, I'll be so happy. Let me tell you, I'd be so glad. I want to bring our people home and in a safe environment and a safer place for the family. And that is my goal. And thank you very much. No, thank you, Auntie Blanche. I've been out to your Waimanalo location. And what Auntie Blanche was saying to me, asking me is, you know, if you know anybody who has lumber, Cheryl, I could use lumber. I've been out there. I've seen the farm, Auntie. I've been out there and seen the people and the Waimanalo healthcare system over there. So with their, yes, taking out over there, doing their tests and providing medication and things like that. So thank you, Auntie, for all that you do. Yes. And one more thing you want to tell you about my shelter. Our shelter is not run by the city, state or government. I mean, I'm sorry. It is run by my nonprofit. It's because of the love of the people that brings things into this area and always serving our people. And that's where we continue to build many more homes. And today we have 75 people I have here and I have 50 homes. And I brought the old Hawaiian style. If you believe in the land, the land would take care of you. And that's exactly what I do here. And we all work together. There's no one who lives in their house all day, 24 hours. Everybody's outside in the garden. We have garden. We have, we have heads. I mean, people who take care of the kitchen. It's all community kitchen, bathrooms, showers. We do security on our own. We do everything together. And this is where everywhere in this entire Hawaiian islands should bring back that. And we all work together as one. And Auntie was on the midweek cover. Auntie, I want to say, was it like five weeks ago? Was it, it feels like... It was during the time of the fire. It was during the time we were collecting. And we had, I had HON news. I had midweek and then we had our old televised going on at the same time. I had to sneak my body into three different parts. But you know what? Let me tell you something. It all came out beautiful. Everything came out beautiful. Yes. We go out to meet you on Monday and then here it is on Wednesday.  I was like, Hey, I was just with Auntie Blanche. You're right. And then you see me on the midweek. Yes. They wanted to just make a story about it. How fast I moved on this project for Maui. Yes. Because you know, one thing my heart goes to my people. And that's where I'll be always, I will always be there for them. And you know, don't waste any time. Do it. I believe you do it so that things can move. Yes. Thank you. Thank you. And major, major trimmer. As we discussed, I have a dear, dear friend, Victor Leonardo. I don't even know. We've probably known each other for 15 plus years and he is a dear, dear friend. And when all this happened, I heard that he flew from Guam straight to Maui, missed me, didn't even come to check in on Yanawao. So what kind of assistance has the Salvation Army been providing since the onset of the Maui wildfires? Well, Cheryl, before we get into that, yeah, I apologize on Victor's behalf. He was out in Maui in Guam for us and he'd been there for three months responding, which is what the Salvation Army does. So we don't just come into disaster and move out quickly. We stay because we're, you know, we're in 134 countries. We're positioned in almost every location in the United States. And so we respond quickly and we stay long, which is what Victor did. So he is a dear friend, which speaks highly of your character as well. He's a great man. And you're right. He was there on the fires the night it happened. I was on the phone with him or, you know, the WhatsApp with him while he was in Guam trying to figure out how to get back. And he was back by Friday morning from Tuesday night when the fires hit. He was back on Friday morning and at the emergency operation centers and then running the state VOAD, which is volunteer organizations active in disaster. So that's the caliber and character of people that we have in Hawaii. And we're so, so pleased and honored to have him as part of the team. And under his leadership as our emergency disaster services director, you know, we've been feeding since day one. Salvation Army is often first to respond or one of the first organizations respond because we're physician so well. And so we've been feeding since day one. We ourselves have been responsible for the delivery of over 90,000 mills. You know, in partnership, we've helped coordinate an additional, you know, there's about 700,000 mills from vetted organizations for volunteers organizations active in disaster. Not to mention all of those other countless hundreds and thousands of mills that have been provided people at the empty here so that, you know, people are being served on a regular basis. So been doing that and then being present with people. We've had the privilege of interviewing over 900 households, taking time and detailed interviews trying to find out what next steps what next needs are just kind of being with them. And then from that, we do something called emotional and spiritual care. And he mentioned earlier that that need came up and she prays, and then God brings the answer right. And so one of the one of the greatest privileges we have is just to be present with people and often those people allow us to pray with them. So we spent, we spent over, you know, multiple hours with with over 2200 of the survivors and just being alongside of them and prayer support and encouragement and just listening to their story, hugging and wrapping arms around them and and just encouraging them through the day. So that's been some of the most significant things we've been doing. Obviously, we continue to feed today and now we're pivoting into additional services which were really blessed to be able to do based upon the 900 family interviews. And those family interviews are going on that numbers continuing to build. But from those 900 we found that this transportation needs, we found that there's, you know, other needs that we can come alongside of additional material assistance. So, so we're giving, you know, gifts or gift cards to Walmart and other places where people can pick up some of their own things and start to return as crazy as it sounds to a little bit of normalcy in the midst of what is not normal. So, yeah, I've been very active, and it's because of people like Victor Leonardi and others who are, you know, his house, his home is in Maui, as you well know, right? It's that's his home. And when he first got back for several weeks, fortunately, he didn't lose his house of country. But his house just smelled like smoke. He'd go home from from contributing to the disaster response every day and, you know, it just smelled like smoke. But what a faithful man. And just like Anthony, all the people who come around us is really what helps us to actually contribute back to our neighbors on Maui. So, I hope that gave you a little bit of a glance what we're doing. Yes. And thank you so much. The two of you, as I mentioned in the beginning of the show, shows really what is resiliency, even though this tragic incident happened, how people are just banding together. And I'm so sorry to be crying again. I too lost somebody in the Maui fire. Her funeral is this Friday. It was at the bars and she survived the fire, but as of the smoke and she did pass. And so it's very close to me. And thank you to the two of you for what you're doing. And major, you hit on it right there. I get every day from our businesses. You know, we have members and businesses in Lahaina that were affected. And they're looking for money. They're looking for, as you mentioned, the cards and things that they can just like just get some small essential things that they need. That's not being provided through the donations. Are you providing direct donations to those individuals affected by the fire? Yeah, direct services and direct donations in the format of like gift cards. We don't, we don't give away cash. It's a selfish army policy. And often is not beneficial. You know, for many people it is, but it is often not. So we do, we're providing gift cards and food, land certificates and times and Safeway and Walmart American Express, you know, granted us, gave us $35,000 with the gift cards. So that people can use for some of those material assistance. And so yeah, we've been very honored and blessed to be able to contribute in small ways, you know, to people's lives. And as you say, the reality is, is, you know, all those who've been displaced have lost everything, those who are survivors, and not to mention those who've lost their lives, right. And almost everyone who's lost everything is also have a direct and deep connection with somebody who's lost their life. So this is, you know, a gift card's really not a significant issue. But it is an expression of grace and it is an expression of. And, you know, every opportunity we have as, as, you know, residents and family in Ohana in Hawaii to express love, whether it's a small tangible way like a gift card or whether it's a hug or a prayer. You know, I think we need to find ways to do that. And we're very privileged of the Salvation Army that we're trusted to come alongside of people in those type of situations and express the love of so many beyond us. You know, the outpouring and benevolence of the world toward toward Maui has just been incredible and to be able to be trusted as anti is to express part of that grace and love to people is just a rich rich rewarding experience. Yes. And one more thing I want to explain. I had a lot of phone calls. They wanted to send money, but once you with me, I'm not the kind of person would accept the money, but I will try to see where they can send the money. And but most of all was the items. And I'm plus I have my grandson who plays for Arizona Wildcats, the University. They had donated money, but I don't know where it went. But I said just send it to actually the only one that I remember was CNAK and Hawaii Foundation was another one. I think was the one that they wanted to know where they can send the money to. So that's what it was. And, you know, because of being out there out in the mainland, a lot of people heard about Maui, and they really wanted to support. I mean, they're still supporting people still yet trying to send money, but I just given to whoever is available. I mean, who I know that would accept the money and give it to the people. And but my heart goes to the people there. Where can we put them? Where can we, the only thing what I always do, I always pray to the Lord. I said there's only one thing is who can provide for the people. We need shelters for them because there are nowhere they can go and know where they can turn to. And the only way that they can turn to is all of us who believe in the Lord, that we can do it and we can make it happen. Am I correct Salvation Army? You're so well spoken. It's so right. You know, while for a short term people can be in non congregate shelters like the hotels.  Yeah. And so the hotel would not be there forever. Yeah, so therefore there. Yes. So we're praying along with you for solutions to that and willing to partner with you. If there's any way we can help in solutions to that. We're, we're, we're looking at every option and every open door. The Lord brings so that the people of Mallard can be service. Yeah. So you're so right. Thank you so much. And you know, thank you so much for putting us on the, you know, on this special program. It is an opening for everybody's eyes and it's an opening for everybody's heart to see and hear what we do for the people. Yes. And to get a current situation is why I brought the two of you here because in the beginning, you're right. People were contacting me and saying, you know, one of the football teams, the Raiders, they donated $100. And they contacted on one of our directors and said, where do we put it?  So we just say these are the top three, right? The Salvation Army, the High Community Foundation, you know, so we give them suggestions as they donate. And I'm happy to hear that major term that you were able to give gift cards, especially to things like gas, you know, people need to get back and forth. It's so important. And, you know, there is no one giving out gas. So gas cards are so dumb. And that's what the show is all about today. So anti-plant, you've been on the front lines from the beginning. You know, after the day after I saw you, you flew out. Yes, I did. Yes. All your time and effort. Right. We've got five minutes left today. What do the people of Maui need? If people are calling me, I'm still asking them to drop off at your Waimanalo location. You know, the necessary items, if they're going to drop something off in Waimanalo and what do the people of Maui need? The Maui need supplies, medical supplies. That is the most important thing that they need right now. They don't need clothing. They just need medical supplies, campers, toiletries, and everything that they need. I'm sorry, but my mind is blank on this one because I have so many things. And they're actually they need your love. That is the most important thing that the people of Maui need. It's our love. They need a cuddle. They need us. They need all of us to be there for them. Yes. Thank you. Thank you. So major trimmer, my last question to you is, you're, you're there out there, your, your staff is out there. What do the people of Maui need and how can they get it to the solution? Well, that's a great question.  And as we go further along into this disaster, the needs will change. I agree with Auntie that primarily they need the presence of people. They need the presence of people on a Wahoo and Hawaii, and Hawaii, who know them and who love them who are willing to take the extra 15 minutes on the phone and just let them talk through their day and talk through their stories from that. Also understand and realize what needs are. It's very important that we do, you know, the interviews with families and try to find out what their specific needs are. But you're like transportation. Some of those things that return to normalcy are some of the things that we're seeing and that we're needing to help our survivors with. But most, more than anything else, it's the presence of people, both on Maui and those. So we are one Ohana. We are really one credible family. And, you know, you often end up in disaster fatigue. As a disaster goes on, people start to get tired of the reality because it's been forefront forever and ever and ever. So they need a long term commitment from from Auntie and from the Salvation Army and from the government and from all of the nonprofits and private sector people working together that we are going to endure this together and work through to the end. We've been there since 1895. We intend to be there till 2295 or beyond. And then I know that Auntie and others will be right beside us trying to find solutions that are meaningful to Maui. Yes.  You can always contact and we have a whole industry that wants to help, you know, when the fires first broke out, you know, our members over on Maui, they have the refrigerated trucks. They have the high cube trucks with liveries and Pala Jax. They were sending out all their drivers paying for the gas, paying for their staff to pick up and unload containers of things just to jump into action. As I mentioned, the donation of food, the donation of takeout containers were all needed in the beginning just to get through that period, but we're not out of it yet. We still need continually contribute at the Hawaii Restaurant Associations, the organization unifying, representing and supporting the Hawaii's restaurant and food service industry. To our food service industry and to the state of Hawaii together, we stand as one state demonstrating our resilience and our Loha spirit. We are Hawaii and we are united in Aloha. Thank you very much for joining me today. Thank you.


Jordan Peterson, huge f***ing beta male, pretends to be anti-feminist and he's got some good digs on feminism. I can't deny that. He's actually said openly, you know, if you look to us through his content, he agrees with most of feminism. He is mostly a feminist. By the way, the makeup is real.  This is your hero. This is a man run by his daughter. That's his daughter on the right, Michaela Peterson. Famous, has half a million followers just on YouTube, Twitter and all this bull****. This is her 95% naked posting on Instagram. This isn't like some secret photo. You notice in the background, I blocked out the face so you guys wouldn't see her face. That's Jordan Peterson's granddaughter. This is like Maximum Hoage taking a naked selfie with your kid on the bed in the background. Jordan Peterson, I could never verify it, but the screenshots I could find, he liked it. This is terrible. Any level-headed father, even who hadn't even an ounce of masculinity would be ashamed of this to see your daughter doing this and even how to include in your granddaughter.


A young girl who grows up as an indentured servant at a desert saloon in the American West pre-Civil War. When her indenture comes at an end on her 16th birthday, she signs a deal with the devil thinking she will become his apprentice. Instead, he puts her on a horse and sends her out on the road to be mentored by a lone frontiersman who has signed his own deal with the devil. In a word, this book is excellent. It held my attention and kept me wondering what was going to happen. It's a real accomplishment, I think. This is an entirely new American mythology that has no roots at all in European or classical fairy tales. This is a book that delivers on the promise it makes to the reader in its early chapters. It never wavers from its established purpose, and it does not turn into a silly romance. This is another book that I found because of the vaginal fantasy book club, and Felicia Day and her friends will be discussing it in their next episode. I recommend it, 100%. You can support 30 Seconds Sci-Fi and my other projects by becoming a patron. There's a link in the description below. And visit the 30 Seconds Sci-Fi Tumblr, that's my headquarters. In addition to my videos, I publish links and updates there every day.


that is pretty close. You might have to do a tiny bit more grinding there to get that perfect but I'm going to leave it for now. Okay what is next on this crazy sawing machine? I need to make another frame that this whole thing goes on so this thing can slide like back and forth along another frame and then that other frame has to go up and down on a totally other thing. All right let's make the frame that this attaches to. In other words let's make the red part that's the yellow part over there. All right this whole thing needs to be attached to this frame. I have one of these and another one over there and this whole thing needs to be able to slide back and forth so I need to make this frame be just the right size to fit on either side of this. Kind of snug because I don't want this middle piece wobbling at all. I want it to be in there pretty good. Even better if it takes me a bit of effort to move it around because I don't want it to move around on its own. Yeah just like that exactly and then this whole middle thing maybe have some little pieces that stick out over this part so it rests on top of there and it can slide this way and that way. All right how do I get these things to stay in this orientation without being clamped to that? I'm thinking maybe I have more of this stuff. I can bolt one on here. I have to check the back what I can do back there without getting in the way of a motor and stuff because since the motor sticks out so far that way if it hits something over there I'm going to lose a lot of space where I can cut. Although now that I'm looking at this this thing is big enough I'm not going to have trees so big that I need to move this thing past the end of there so yeah I can just put a piece there and it'll be fine. You know worst case scenario if I have some giant log that takes up so much space that I have to start cutting all the way at the end and go past where this is sticking out and I have a piece up here. The only thing is I won't be able to tilt the motor up when it's all the way over there. Like I can move it really far that way and the motor can go right under a piece that's up here. It's just I won't be able to tilt it so I'd have to pull the motor back tilt it up and then I could push it back to where because if it's tilted up it can also go away over there. So yeah I think I could just put a piece up there and a piece up here maybe a piece down there too. Okay where do I need my strength on this thing? I need something at each end to keep this from pushing out or in. So anything across the top and even on the bottom would be great for that. That's going to be really easy. I also need these to not like tip over and actually this other piece the yellow piece whatever the slider. It already has something a couple reinforcements to keep it from tilting so that would keep these from tilting. So I should still do something on this as well that can work with those and they can all work together to keep themselves lined up. So yeah this would do that. First bolt down nice and good. Let's tip over the whole thing. I'm going to put one of these at the other end and then when I set this end maybe I can get two pieces of the same one. That would be amazing. I think that's slightly more than half whatever. Okay so I get one of those at each end and then I don't think I need one of these along the bottom there. I think it needs to be that. Let's try just something thinner like that along the bottom would be fine. And then I have to think about how this is going to attach to the big main frame part. I should probably think about that a little bit now before I build this. How is it going to attach? So the big frame part is going to have mast pieces which are like oval. They've got a flat here, a flat here and then around there and around there. They'll probably be in that orientation. They could go that way. No. Gotta think about it. That is looking excellent. Man this thing is going to be amazing. Presuming I don't screw it up. All right I have one good strong piece here. One at the other end there. I think I still want to put something on the bottom here. Although I'm out of drill battery and it's really cloudy out so I'm not getting any solar power right now. I'm not going to run my house down to charge my tools. And you know having these clamps here makes me think that when I first test the saw I'm probably just going to put a clamp there to lock it in place like I'll just keep one clamp here. I still need to put pieces bolted into this hanging over here and once I have four of those it'll pretty much stay in place. Even without a clamp I don't think it's going to move much. So I'll just put one clamp in place to lock it from sliding and I should be able to solve it. Other than that this part is almost done like another reinforcement down there. I don't want to put another one on the bottom at the other end because it'll get in the way of the motor. I don't even know if it needs the one here but I'll do it just in case you know. And I guess the tricky thing next is just to figure out how this attaches to the um the mast pieces the big frame.  I can work on this and the big frame without that attached to it. Oh that's so nice because that weighs like 100 pounds and this weighs like I don't know 20 or something. So I can just take this build it with the the big frame part and then when that's all together I can put that on here. Oh that's great. But since I'm out of drill batteries I'm going to make some sandwiches which means first I need to make the bread. Egg sandwiches I have a whole bunch of eggs. Oh egg sandwiches. My friend came over yesterday and we were talking about going to town soon and he started talking about all the food he wants to eat while in town. Oh pizza and Chinese food. Oh deliciousness and yeah man. Oh now I'm hungry. This whole piece here needs to slide back and forth on this. Not fast or anything I actually want it to have friction so it's a little bit hard to move so it stays in place easily. And I was thinking about what I could put here like bolt something to here that would overhang here that could rub on here but not wear through. So I started thinking I could make some like put a piece of something here bolt a ball bearing in there and then put like four of those and then it would be easy to roll back and forth without wearing down this. Okay the problem with putting a bearing here one of the problems is that if this gets sawdust on it the bearings are going to roll up onto the sawdust.  But if I have like a plastic block here it's going to push the sawdust out of the way as it moves back and forth. All right I'm going with the bearing even the two. These are a skateboard or roller blade bearings. I put them on my amazon wish list and someone sent them to me which is amazing and here they are. Oh two looks great maybe I should use two I have I have a hundred of them comes in a pack of a hundred so two four six eight yeah okay put that in there it should be lined up right right good wow that's beautiful you're both touching that's good although now I feel like I should put a bigger screw up here I need that to go there oh can you get it yeah the cut side of the washer against this wall I knew you could get it oh wait go put your hand back in and hold it up so we can put this on good job are you holding it just get the washers uh nice work so you just gotta relax and do the thing not get so worked up okay bolt uh yeah put it on the bearing then lock washer and then hold and I'll get right now we need to do the thing that's right you take it yep that way so it took about 20 minutes to get that first bolt in there but the second one it went in in like a second and a half I call that leveling up all right should we test the slidiness what do we need to do to do that we need to we need to support the big frame so that the smaller one isn't pushing on anything oh I better go I gotta kick what all right it's a little wobbly but good enough nice look at that it's a bit of friction so it stays wherever you put it which is what I want but pretty easy to move still yeah I mean first test I can just put a clamp on here lock it in place I mean even without a clamp pretty much stays where you put it beauty all right I guess I can take this off and then finish this thing take this big huge heavy part off because I don't need this attached here to work on this part and this part weighs hardly anything and then I can work on this make the frame that it goes on yeah although sometimes a little bit crooked like these two wheels are not touching these ones are barely touching and these most of the weights on these two so this is a little bit like twisted either this is twisted or this big frame is twisted it could have to do with the fact that I'm supporting it on the ends here not very well okay yeah the twist is such a tiny amount it's just you know I adjusted these poles down here slightly and it fixed it so um I think it's all well within tolerances oh I still do at this end want to put a piece across the bottom here similar to this maybe something a little smaller though it doesn't end up hitting the ground if I'm cutting really low or not the ground but the stuff at the bottom all right that looks pretty good yeah I think that part is finished well other than the connection onto the next part but I think I need to build the next part first all right I've got my cutter part it swivels on the yellow part the yellow part's made I got that sliding back and forth on the red part and I just need to make this blue thingy the biggest piece of course although not nearly as complicated as that middle piece