You Finding life rather dull Dreaming again of exotic places Wishing you were somewhere else We offer you escape Escape with us now to the barren wastes of northern Mexico and the story of a fortune in cash to be had for the asking as Anthony Ellis tells it in his exciting story this side of nowhere You want to know where you can pick up a quarter of a million dollars Well, I know a place the monies and hundred dollar bills The last time I saw it. It was all in one place and the people who had it with the friendliest people in the world That is if you Don't mind their particular kind of friendship There hadn't been much business in Missouri too much competition and the yokels were spoiled taking rides and the new stuff flying around My old Stenson didn't look like much and I couldn't rest doing tricks in it With me when the customer paid three bucks for a ride. That's what I got a ride So there wasn't much business in Missouri. I've been luckier in Kansas though Hit a couple of towns where a plane is still a fancy contraption As I head at West I was a couple of bucks ahead About 50 miles east of Wichita. I put down in a grass field outside willing And I figured a day or so here would get me enough to buy a new tire Oh, hello there, is this your field? Hey, that was pretty coming down out of the sky like that I've seen you from a long way. You like planes, huh? Sure. Is this your field? Yep Down spurs bogey stream. Well, look, I'd like to make a deal with you. That's all I'll be here for a couple of days Let me keep the plane here, and I'll give you five bucks five Well, and a free ride. Mr. You got a deal. My name is Bill may do shake I put up my posters in town and waited and by six o'clock that night. I made 36 bucks It looked as if the town of willing would keep me around for maybe three or four days. I Put the stents in the bed and Bill may do his barn and then started out to find a place for myself The old man walked along with me Say have you got any suggestions where I can put up while I'm here see that flying red horse sign up there? Yeah, yeah, right across the street is may do his willing hotel nice and quiet $2 a night breakfast 50 cents. Oh yours, huh? fancy, but it's restful Got a city woman staying there down from Kansas City now taking the rest. Oh, that sounds fine Hey, we're having steak for dinner. I'll get the wife to put on an extra one for you With the steak inside I felt pretty good About an hour after dinner. I got a look at the hotel's other guest she was tall with a big city bright crisp figure and special-looking too She didn't seem to notice me as she went over to the desk and started to write a letter. I Got quiet and long about nine o'clock.  Yes, that's right. Name's Gannett. Mr. May do told me about you No, I'm Phyllis Naylor. Well, it's nice to meet you I wonder if you do me a favor. Well, sure I wanted to go to Wichita tomorrow, but the bus service is so bad I'd have to wait until afternoon. Oh, you want me to fly you? Yes That's about 50 miles. I uh, I'd lose business here. I'll pay you $50 50. I Wouldn't lose that much. Let's make it 25. If that's what you want. Can we leave early anytime seven, okay? I'll meet you down here at seven all right So long Mr. Naylor, I put your suitcase on the plane. Oh, no, thanks. Mr. May do I can manage We'll miss you come visit us again sometime. Yes, I will. Well, let's go Okay, it's all right with me. No, I'd rather he didn't Well, it's your ticket anything you say. I'll take you up when I come back Bill a couple of hours I'll wait for you. I'll sell me up some business. Ah, so long Have You've done much flying Quite a bit. Oh Do any yourself? Yes Well, well, well, would you like to move up here beside me and take over? Oh, no, thanks. Oh Mr. Gannett, yeah, how much would you want to fly me to Mexico? Are you kidding? No, don't you think it might be nice? Oh sure, but not in this great Short hops for me try the airline in Wichita. I can pay now bet you can but not me the old windmill wouldn't take it Five thousand dollars five I could buy a ticket, but I prefer you to take me.  Of course not. Then why don't you use a scheduled line? That's not your business? I've got the cash. Will you do it? No, you better try somebody else We're not going to land Wichita. That's what you think I've got a gun. Mr. Gannett. Don't turn around Here Hey, look, I'll be a good girl. Well, yeah, we've only got enough gas to get to Wichita. You're lying the gauge says full Well, it's it's broken. I'll take a chance. We can't make it in one hop. I'll have to come down sometime That's all right You don't want to get me in trouble. Do you know? I Told you I like you Just as long as you take me where I want to go head south Go on Okay, where do you want to go? Torion That's over a thousand miles. We'll never make that. I think we can Where do you think you'll have to stop to refuel I guess we can make dollars if we don't blow up all right Please remember mr. Gannett. I'm quite serious. I can easily shoot you and fly myself I'd rather not Yeah I'll remember An hour later. We were flying over Tulsa, Oklahoma, and I turned around just once to look at it She hadn't been bluffing the gun lay in her hand steady and pointed at me. I Began to think about Dallas We'd have to come down there. It wouldn't be hard to get the gun away from her then but There was something else 5,000 bucks I Thought of what I could do with it and the more I thought the more I wondered if I was a sucker Why fly with a gun in your back when you can make a deal just for the asking? She was in trouble. That was her business. I didn't know anything about it and I didn't want to I Reach for the map What are you doing? Don't get nervous honey. I just want to take a look at the map. Oh Torion Yeah And I'd say that's about 300 miles below the border southwest. I know that's bad country in between if we had to come down I know that too Are you kidding about that five grand? No All right put away your gun What happens when we land at Dallas gas up check the motor and go on if you try any trick Why should I?  Yeah, sure come on.  You've been reading hotel registers. Yes You won't be sorry about this I'll bet I won't I was proud of the old windmill and never thought she could make it But by five o'clock that afternoon we landed at a town a little north of Laredo We talked about how we were gonna get across the border She still hadn't told me anything, but I knew that she wanted to get into Mexico with no questions asked So we decided to steer clear of Laredo and border guards and hang around until it got dark and then take a chance Took some extra gas aboard and went over the motor Then there was nothing to do but wait for the night We went to a cafe to eat That's the American idea of Mexican food unless it burns your tongue off. It's not the real thing You done much night flying? Oh plenty used to be with a commercial outfit. No, they fired me for fighting with a passenger That was before the war Flew B-24s out of England and came back Now I'm too old for jets and too independent for commercial jobs. So just a sky bum What's so funny?  I Wonder what about you? I Think you'd make love like a high school boy You want to find out? No How soon do you think we can take off a terri on? No, about an hour or so. What about our lights when we cross the border? We won't have any good anyone ever tell you that You're good to look at Yes, but you can tell me again. I like your eyes They're soft sometimes Sometimes mean it's exciting Got patrol. Hey, you're not listening to me That's the first time I've seen that what you look scared when the cop came in Come on. It's time to go We took off soon after dark I took her up to about 8,000 feet and we crossed the border next stop Tarion Burrito was nearly 200 miles behind us when the Stinson guy just quit cold We went down nice and easy. I couldn't see anything below all I knew was that we weren't going to make to early on Villas didn't scream. She just watched me Then before we hit grabbed a suitcase up and held it in a lap. I remember thinking then it was a funny thing to do And that was all for a while I Escape under the direction of Norman McDonald returns in just a moment You may hail from Harvard with a PhD or you may come from ps 00 with an e-minus average It makes no difference You're always welcome at our miss Brooks class on CBS Sunday nights for our miss Brooks is played by Hollywood's Eve Arden The star whom the nation's radio editors just voted woman of the year Now in her third successful season as the romantic school teacher of Madison High Eve Arden will have you out ringing the bells for class every Sunday once you've heard her join her tonight class meets on most of the same CBS stations and now back to escape I woke up for A moment everything was a surprise. I was alive It was getting light A lock of the girls hair was falling over her eye. I reached out for it Pelted Was wet bloody She was alive, but I couldn't tell how much I looked at my watch It was 430 As the gray light came through the broken window. I saw something else Her suitcase it had broken open and spilled out four or five neat green packages Thing was full packages of new hundred dollar bills Must have been a quarter of a million dollars Phyllis Phyllis Phyllis you okay? Come on. Come on. Come on.  Oh, you all right?  I'll take it easy for a while. Hey now. Give me your gun. No. Come on. Come on I want to have a look outside All right I'll be right back We'd come down in a kind of basin and all around were ridges and low peaks It was rough country. All right from what I could see mean I Had an idea water was going to be a problem Far as you could see there was nothing but cactus and yucca trees. I started back for the plane and that's When I saw him Sitting under a bush his hat on his knees He was round and his face was the color of sand and as a smile where lots of flashing white and gold teeth I guess he was mostly Indian They had the happiest voice I'd ever heard You've had a terrible accident, sir. I'm so glad you're alive. How long have you been here since earlier? How much earlier? Oh much earlier, sir. Well, why didn't you try and get us out? If you were that one must await a reasonable time to allow the spirit to depart Oh Well, I'm glad to see you. My name is Gannett. Yeah, Gannett. Mm-hmm. You're American. Yeah Oh good. I love the Americans They're so rich. I am a stevan. I will help you There is another in the machine with you. Yeah girl. She's hurt. We take her to my village There she will be taken care of I'm so happy that you are alive, senior. Where are we? From my village. No, I mean how far from Torreón Torreón It is many days from here. Oh What's the name of your village? It means heaven, senior. You will like it. My people will be so happy to see you. Come We must help your friend When we got back to the plane, Phyllis was on her feet and I noticed that the suitcase was closed again She had a cut on her head, but otherwise she was okay She let me carry the case and we followed a stay bun for about a mile to a little canyon and there we saw Cielo a dozen adobe hot sprawl over the canyon floor Let me take your suitcase, senior. I will put it where it will be safe. No, thanks. I'll take care of it as you wish Won't you step in here? I'll bring you food and water. Thank you. Oh, it is a pleasure. I love Americans You are our guest. We are happy to see you. How do you feel? Oh much better. Thank you I'm not so sure about that guy. I've heard about these Indians They're not usually very fond of Americans or any strangers for that matter. Do you think you'll help us get to Torio? I don't know the way he talks. It must be about a hundred miles from here. Oh, this and honey It's none of my business, but That suitcase of yours. What about it? There's no sense kidding. I know what's in it. Oh It's a good idea not to let these people know they steal not the way we do but because they feel it's right Americans are rich and anything they've got must be valuable. They see another thing wrong in it We've got a gun. As soon as not have to use it. You want to tell me about the suitcase? No Okay We let it go at that The stable brought us food and afterwards we met the rest of the village They were very polite too polite I Couldn't figure it out. Maybe I don't trust people, but nobody nobody can be that happy to see a stranger Now they gave us a hut for the night and after the dogs had quieted down it Got very quiet You asleep? No How's the head? Fine. Thanks I'm sorry about this. It's alright We're gonna have to get out as soon as we can these people. Do you think they'll make trouble? I don't know I just too happy. There's something wrong the way our fat friend looks at you Maybe you think I'm pretty. Yeah, maybe What are you gonna do about it? Look in the morning. We're going back to the plane. There's a chance. I can do something to fix it up just a chance. Oh Yeah Well You were telling me something back at the cafe in Laredo About me Yeah, I was wasn't I I Guess you're not very scared about all this. Are you I don't want to think about it. You ought to be thinking about it Deak Look, we're in a tight spot. I don't care, but I do maybe If we ever got out of here that Alright high school boy Good night The next morning a stay bond went with me back to the plane was still there. That is most of it Of course, they'd taken everything moveable from inside stripped the rubber tires off stolen the prop Now I know why I hadn't trusted them What about it a stay bond it? Senior nice hospitality.  Oh, no No, not your people. I'm so happy then Well, we'll have to run a couple of your mules Maybe you'll guide us to a town that's got a bus or a railroad or something. You have money to pay for these things. I uh Little yeah, we talk about it. Maybe tomorrow now we go back to the village We didn't talk about it tomorrow or the next day or the next it's stable and always made some excuse We weren't prisoners, but wherever we went. There was always one of them watching just watching and smiling But there was something about those smiles It was on the fifth day that things really went wrong the villagers had left our hut alone And I guess we got a little careless about the suitcase Phyllis and I had been up to a ridge four miles away to take a look at the country and our chances for hiking out When we got back, it was almost dark The suitcase what it's gone. Well, I'll be stolen it You think it's funny What's that for?  Where are they gonna spend it on what? Got to get it back You help me. I'll share it with you You will yes Listen, you might as well know Remember the bank hold up in Chicago last year. Yeah Million bucks and securities that suitcases part of it a friend of mine left it with me He got out of the country now. He's in Torion. Yes, I Was to hang around in small towns until things got quieter When you came along it gave me a chance. I Was to meet him in Torion. I Don't care about him now It's you and me No, we've got to get away from here and go to Mexico City here anywhere. How far do you think we'd get in this country? We'll take their mules Now we can try Stay buns the boy to find You and me Yes Yes, don't you know that by now? Okay What can I say? No one known has been in your house. It is unthinkable. Look, you know what this is It is a gun, sir. Yeah, only the rich can afford such things I'm telling you to round up that suitcase or else now tell your friends. I mean it now go ahead El americano dice que tenemos que devolver la maleta Si no se van ajar mucho y nos juzgará a todos incluyendo a los niños Well They say they are very much afraid Get me the suitcase we've brought you here when you might have died in the desert Surely you would not harm us. That's a lot of double-talk. You brought us here to steal us blind Say you have made a terrible accusation We're very unhappy Perhaps you would care to search the village You get that soup What's the use There wasn't any use I couldn't shoot them down in cold blood I knew I'd never find the suitcase. I also knew that we had to get out of there We'd lost the money, but at least for the moment we still had our lives.  It is a great loss. Oh, I could call him a liar He was too, but I couldn't find the mules That decided it I'm afraid of them. Yeah, I don't like the way a stay bond's been looking at that ring of yours We're gonna have to make it out on foot. Well anything's better than staying here. I only had that map Now well, I don't think they'll try to stop us. We'll start tonight when it gets cool You better get some sleep That evening I heard the villagers moving around outside the hut I kept our gun ready, but nothing happened and then about midnight We took a couple of skins of waters and tortillas and walked out of El Cielo Nobody said goodbye Nobody tried to stop us But as I look back I saw in the moonlight a group of people huddled together Watching us We walked for three days desert heat night cold Then the water was gone How you doing? I Try not to think about it Here we can we rest a minute. Hey, but I'm not Not yet try to get to the hills. It's only a few miles It'll be Holly I'll save you breath Don't move don't move it's a healer monster All right now fellas don't move Just don't move now blow his head off I keep still That's it keep She lived on for about two hours Then died raving cursing me the money in herself a Week later I was picked up. I was six months ago The Mexican police tried to find my plane, but I couldn't tell them where it was they'd never even heard of El Cielo so Somewhere in Coahuila, Mexico. There's a village Maybe if you go down there you'll find a suitcase with a quarter of a million bucks Or maybe you'll just find kids cutting paper dolls out of $100 bills Just crash your plane this side of Torreón and then look for a round smiling Indian and his Happy friends Under the direction of Norman McDonald escape has brought you this side of nowhere by Anthony Ellis William Conrad was starred as Deke and Virginia Greg is Phyllis with Don Diamond as Esteban in the supporting cast were Luke Krugman and Ralph Moody The special music for escape was composed and conducted by Ivan Dittmars Next week escape with us to a small freighter in the China seas and a sinister traveler who brought destruction to crew and ship alike as Ellis St. Joseph tells it in his most unusual play a passenger to valley Later this afternoon Georgia Gibbs and Nancy Reed will join Frank Sinatra on his hour-long CBS program You'll also meet Arthur Godfrey with the latest addition of his Sunday afternoon digest and JC Flippen with Another entertaining session of earn your vacation Make believe town will bring you a Hollywood adventure entitled no job for a lady So stay tuned now for make believe town which follows over most of these same CBS stations This is Roy Rowan speaking This is CBS where you spend an hour with Frank Sinatra every Sunday afternoon on the Columbia broadcasting system


Hey, what's up everybody? I just wanted to make a quick tutorial on something I just figured out. This may have already been covered somewhere else, but I didn't do a very exhaustive search to figure it out. And the question was asked by Richie D over on his channel, someone who's trying to do lots of these same things in Unreal Engine. I was talking about how to save camera settings. And I looked around and the easiest way that I saw to do this was to select your cine camera actor and use this blueprint button and to just create a blueprint. And so to me this is like a wrapper around this object, around this actor.  It has all of your settings that you, let's see if you select the camera component here. You can see that it's got, you know, my 50 millimeter prime. It's got everything that I had configured over here already for my scene. Let's say I want to use this in another project and I don't want to have to rebuild all of this. So you can do this, compile, save, close this out. And so now I've got this camera actor blueprint here. And so the easiest way that I've found to add this into a new project is like this. All right, so we'll start with a, just a blank project, nothing in it. We're just going to add this resource. All right. And so now we have our brand new project with nothing in it. So we're going to go in the file system. All right. And so here is where my project is located for the content folder. And you can see I've got nothing in it so far. So I'll go back over to the other my glasses test project here and its content folder and where I saved this blueprint. And so this is the easiest way that I've found to import this into your project. It doesn't really seem to import through any of the menu things for some reason. It doesn't like this U asset thing on the, through the import process. So we'll switch back over. We'll go to this project 10, which is the new one I just did. Go into the content folder and we'll just paste it. And you look over here and here it is. And so I'll drag this maybe drag this into my project. And you can see that it has the same settings that I had in my, my other project. So this is going to save me lots of time because I usually go through here and I set up things, you know, with the exposure and the bloom, you know, in the, the lens flare oftentimes for the camera. And I have to go through and do that multiple times for each camera. And so now I can just create a blueprint. I can copy that into other projects and it's going to save me a lot of time. So I hope it saves you guys some time too. Thanks for watching.


Hello. I am Alberto. I am the co-founder of a small company that offers development and system integration services. And today I will present you a framework and an application that we built to bring back fun into the development of web applications. So what I mean with web application, usually web application today means many things, but for the purpose of this talk I mean those applications that are usually developed today to replace desktop application that used to access relational databases and show data to the user, let the user filters, query, sort. They usually show many data at once. They usually offer advanced filtering, sorting capabilities and so on. And usually those applications are used for data entry and so they show very complex forms and they show master tables and so on. I think that such applications have a narrower user base than public web page publishing and so on. Usually those applications are called single page applications. Many times they are installed on premise or they are installed on cloud and then used inside an internet or so on. So the framework we developed its goal is to serve these kind of applications. It's not to serve 10,000 web pages to anonymous users. Usually the user of our application is always unknown users, so the first thing he does is to enter his credentials and login to the system. So today how it's built an application using Python tools. Usually we start with developing the database structure and so on and then we pick our favorite server framework like Django, Pyramid, Turbogears, Flask and so on. Maybe we develop an object relational mapper on top of our database, but it's not always needed. And usually we expose those data using rest services or get and post entry points and so on. But then because they are web apps, then we choose, we pick a JavaScript framework and we develop all the application level logic with JavaScript. So all the user interaction, all the flow of the user inside the application and so on is coded in JavaScript. How many of you do that, for example? Is it fun? Is it still fun? So I don't think that it's so fun. And yes, dealing with JavaScript is inevitable because there is nothing else on the browser, but it's stressful because it has many consequences, many things that you maybe learn one time and then you forget. There is something you know about its base types, not a number and so on. And every time you approach the development of a JavaScript web application, usually the scenario of available toolkits is changed because it changes with a very fast piece. And usually the JavaScript community reinvents the wheel every time in a fancier, more quick way and so on. But for us that we want to code in Python, it seems not so good to always learn a new JavaScript framework, maybe the version 2 of the JavaScript that we learned some months ago that changed the language from JavaScript to TypeScript and so on. And many times the libraries of JavaScript libraries compared to those available in Python and to the standard library do have very poor quality. You end up installing tens of megabytes, hundreds of megabytes of JavaScript code just to let your toolkit work and so sometimes you don't understand why you have to install all those things. So many of you can say that ES6 is better because it classes, promises, iterator, generators, many, some of these features come from Python and also it has map and set that are implemented natively. For the first time you can put not just strings into dictionary keys but you can use any kind of object as key and this is surely an advantage. But then, for example, when I learned about a weak map on weak set, I thought that they were comparable to those available into the Python standard library and so I said fantastic, very, very, they were what I was waiting for because then I can keep weak links to objects without worrying to free those links and so it's a very nice feature but then you learn, I discovered that for example weak maps, you cannot know what's inside a weak map. If you know what's inside a weak map is because you have put it there so it's not possible to ask a weak map for its keys. It's not possible to iterate over its keys or its values and so on. It's just possible to check given an object to check if it's a key in that object and it seems incredibly wrong to me but the JavaScript community found that feature instead. So, one of the more prominent JavaScript developers said that it is a security feature, something that you can, that it's really useful because you can have an object that no one can look into. But I think that it is a misunderstanding of what a weak map should do. It should firstly give you a way to use weak links, weak references to other objects and then maybe a being used as security property or security object because you cannot look into it. So, JavaScript, even in JavaScript, is as many things that seems wrong from a Python side. If you read blogs and articles around the internet, some suggest that you should use, for example, TypeScript, which is a very, very good language that has interfaces, types. But, for example, a few days ago I found this example in a Reddit blog actually when they were explaining why they chose TypeScript. And you see that code where a foo is declared as an array that can contain just birds and the next row they add an animal, which is the super class of birds. And the TypeScript interpreter and checker is okay with that. So, while having types may help maintaining the code and so on, the language that has type in its name fails to check a very simple block of code. So, again, I would say what, it seemed very, very strange to me and that's because I know that we have to deal with JavaScript, TypeScript, coffee script, what you want script. But, I will put it in a cage and control it from very, I will like to at least. So, it's enough about talking about JavaScript, so let's get back to Python. And what's the role of Python in modern web applications? Usually, when you have such separation between application logic and data access logic, one, the first developed in JavaScript and the second developed in Python. The Python server that you develop in one of such application servers that I told you before is used like a data hub. And you expose your data in some way and really for me and for us, the fun part of developing application stops when we develop our database structure, we confront with the customer about the domain data and so on. And really, what comes after the database structure, the exposing, the create a rest API, create a get post API, it's boring. We do really need that. So, when do we really need the rest APIs and so on? We think that we need the rest APIs just when your service, as to your application, as to interface with other services by using standardized interfaces, such a rest and so on. Or if you give an API to your user to use and to interact with, for interaction with your application, instead of using the GUI. This is the normal way of how Django, Pyramid, Flask, you name it, do they work more or less. More or less, they all wait for a request and then they will, the request contains all the data, the context data that your application, your controller, your handler needs to understand what it should do. And then it retrieves the data from the database. It builds up a response and stream it back to the client. Maybe it saves some data in a session that usually is used like a poor man dictionary. And then your objects are destroyed and your system is waiting for the next query, next get, post, patch, and so on. How, where the things, oh, are the things, because we, there are still, those toolkits are still used today to do desktop application. Oh, where are things with, always developing an application with desktop toolkits. Those that were, that are now supplemented by web application and so on. Usually developing application with PyQT and PyGTK, the role of the GTK or QT toolkit and Python is, their interaction is much more tighter than with web apps. In web apps we have the application logic completely moved to the client, but instead in normal desktop application we have the application logic is completely driven by Python with the app of classes. And UI widgets that the toolkit provide us. So they are very different from today web application. So we found ourselves at the end of last year in the need of decide if we were maintaining an old application developed with one of those frameworks. It was much, much older indeed, it was developed in Zope. In Zope or we have made the decision instead of replacing it with a new app and we wanted to bring back the fun into web development. So we developed a framework from scratch and the idea was to use an asynchronous system not just to achieve better concurrency but also to ease the maintenance on the server of the state of the application. We thought to have two equal system on the server and the client and to have them freely talk to each other using modern RPC systems that can use HTTP as backend protocol. But that they obstruct you from the notion of having an HTTP and even they work without HTTP at all. So we developed these framework Raccoon with Postgres at the bottom level. All the framework has to be asynchronous so we chose async.pg to drive to the data access to the database and SQL alchemy to construct the queries. Crossbar has been chosen to as the intercommunication backbone between the two pieces on the client and the server. And AEO HTTP is used as an HTTP publisher for the stuff that cannot be transferred for the initialization part and so on. And then we used SQL alchemy but not DRM because the object relational mapper cannot be used with async code. And the RPC, we chose crossbar because it allows your system to interface not just between Python and JavaScript but between many, many different languages. And as both a twisted and async client library and as such nice features like error transfer between the caller and the colleague. If the colleague raises an error, this error is brought back to the caller and so on. It's really nice and has many features. So we designed an API that our API has composed by a tree of nodes object where the initialization is split in two parts because the under init cannot be an asynchronous method. So we have to split the initialization in two parts and node is a mixing class that just deal with the communication part of the problem. The rest of the object is supposed to do, it's your application logic and so on. What the node class gives you is a way to declare callable things and signals and handlers at the class level with the decorators and so on. And it does that in a way that it's possible to construct your object trees with relative references to each other and then attach them to the crossbar connection machinery and have them published on the, have them published. Here you see some nodes and the methods and the signals. Signals are events that the nodes allows you to declare to use. So this is, let's jump to an example of a test and you see that at the line 12 we have the first node, which is just a node that's used for structure. And then we have two other nodes, the second and the third where we customized our, and we added some handlers, some signals, an handler, a signal, a call and so on. The node is automatically instrumented to expose those methods. And you see that, for example, the line code third, a line 17 that calls the third node with a relative path. It depends on where those nodes are mounted into, are bound to. There is a base path, this is test, and then first is bound to base plus first that will become test dot first. And then third is bound to base dot third. And then the first node adds the second as with the name second. And so its node path will become test dot first dot second. So you saw before that the handler on line 25 listened for the signal on first second. And all these are relative addresses that when they are realized when the node is connected to the machinery, which is in line 37 and 38 and so on. And this is a variable also in JavaScript. This is actual JavaScript code and it is in JavaScript code because we use a tool we made to compile Python to JavaScript. And yes, it compiles, we use the same syntax, the same abstraction. And then we compile them to a JavaScript that also a very old browser can run and that has no asynchronous, no promises and so on. This is actually anatomy of our session of our application user session, how it starts. There is a service that is the only thing that is both HTTP and crossbar and connects to crossbar. And then each other side can talk to each other very freely. I have many more slides but I am out of time. So if you are interested, we have developed, the application is nearly complete. I cannot show you it now. But if you are interested, we will, I can show you, we can give you an access and demo us to the application. We will probably publish this framework when it's ready, it's in good shape. We need to completely separate it from the application, but it's going very well. It has more 4,400 commits. If you want or see the code, just ask me or drop me a line. Thank you. Thanks Albert for your presentation. Questions for Albert? No? Thanks again. Thanks Albert.


Okay team, we're here in the post office. One of the most important places in Grishiniano or Capitacino today we're in Grishiniano and I'm here with Sergeant Kennan who's running the show. I want to tell you last time I was here with Sergeant Harp, I asked him, I said are you going to keep the mail running? And it was no matter rain, nor snow, nor sleep, nor shine, the United States mail will keep coming into your post office box. We just got a shipment of over 8,000 pounds. If you saw some of the pictures on the Facebook page or on the internet, you know that was an enormous task for these guys to be able to unpack and get that mail to you and they're still doing it. We took a break, I came up here, we're trying to maintain social distancing, but I want Sergeant Kennan to introduce the people that keep the mail coming to you and if you come up here, maintain your one meter or your six feet, but say thank you to them for a job extremely well done. Sergeant Kennan. I'm Sergeant Kennan, I'm the deck supervisor here at the support site post office. None of this can get done without the team. We have the LSE Chief Glover, we have the LSE Chief Glover, we have Mr. Francesco, we have Lieutenant Reddy which is the ace up hope. We have the post officer, Mr. Callaghan, the COPE, the man behind the financial operations who is LSE Thomas. We have LS3 Clay, who is one of the postal clerks here. We have another postal clerk, LS3 Rosa, Mr. Simmons, who is a postal clerk up front, dealing with a lot of financial customers. We have Mr. Gonzalez, another postal clerk. You have the new LS2 Lumbain. She'll be the LPO here pretty soon. You have the LSSN or teams. You have Sergeant Hart, he's the deck supervisor over over at the FNC post office. This is the team. Outstanding. Let's give him a round of applause. Where are you from? North Carolina, sir. Yeah, got a family here or are you single? Yes, I'm single. How about everybody back home? They doing okay? Yes, sir. All right.  I think we're watching the statistics. Italy has really clamped down as you all know because you're all subject to those laws and rules. It's the right thing to do. And with that minimal social contact, I think soon we will start seeing the numbers go down. So keep the faith, keep the mail coming. It really means a lot. It really keeps the morale up around here. Couldn't do it without you. And thank you from the bottom of my heart for coming in here every day and working really hard on behalf of everybody, civilians, military and dependents on the team here in Davis. Outstanding. All right. Thanks guys. Appreciate everything.


Good morning everybody. My name is Matthew Wilcox and I'm a technical advisor at Oracle. I'm in the Vince Kern development team. I've been a Vince Kern developer for about 20 years now. I'm here to talk to you today about using large pages in Linux. So when we talk about managing memory, the default unit that we manage memory in is pages. And on the next 86 CPU, those pages are 4 kilobytes in size. And so when you look at a computer like the Oracle Server x8-8, it's an 8 CPU system. It has up to 6 terabytes of memory. And that's one and a half billion 4 kilobyte pages. And that's a lot of memory. That's a lot of objects to be managing. Now, we do divide things up a bit. We actually divide things up on a per-numer node. And so there's only 192 million pages per node. But still, 192 million pages is a lot. And in case you're thinking that this really only affects large computers, it doesn't. My laptop has 16 gigabytes of RAM. That's 4 million pages. My phone has 4 gigabytes of RAM. So even my phone is dealing with managing a million pages. As you can expect, that takes a lot of CPU time to do. So we use this thing called a last recently used list. So every time we access a page, we take out its current position in the list, and we move it to the beginning for us. And that involves touching a lot of cache lines, modifying a lot of cache lines. And if you're on a system that has something better to do with its caches, those are going to be cache calls. And so we're going to bring a lot of cache misses. And those caches are done with a spin lock held. And there are several patches out there at the moment trying to fix the problem that an LRU list, the lock protecting the LRUs, is heavily contended. So if our LRU list were shorter, we would not see the same kind of contention that we do today. So how can we solve this? Well, one of the ways that's being discussed is to manage memory in larger pages. So just increase the size of a page from being the same size as the CPUs to being the size of a larger size. I have 64 kilobytes. Obviously, this approach is going to waste some memory, because things that, you know, if you have a file that's only perhaps eight kilobytes in size, all of a sudden instead of using exactly eight kilobytes for it, you'll be using 64 kilobytes to cache it. And maybe that's not a problem with a larger system, but this is also from on phones, remember. And so the phones may actually also have a problem. A bigger concern is that it's hard to maintain the user API, because the user API thinks it can end map on four kilobyte boundary. And so if we're using 64 kilobyte pages and we're trying to map the four kilobyte granularity, that starts to get quite tricky to do. And so this approach has never really found much favor. Another approach which was attempted earlier on is to manage just page cache memory in large pages. This also has some of the difficulties of managing, of the previous approach, just managing all the memory in large pages. It has some benefits. It has not quite as many disadvantages, but it does confuse people, because people are never quite sure when it is they're supposed to be using page size and when they're supposed to be using page cache size. And since the two were not actually different for very long nobody noticed for a long time, nobody noticed when people get it wrong. And so we had a flurry of patches which tried to fix some of this. And in the end in 2016 we just ripped out the page cache size macros entirely. So the approach that I chose to investigate here was an adaptive use of large pages. That is keep page sizes the same. But allocate them in multiples whenever we could. And the real question to understand is well, how do we decide when it's going to be beneficial? And I'll get into that a bit later. So then it already has the capability of allocating something called a compound page. So compound page is necessarily a pair of two in size. So if you allocate a single page that's more to zero page. If you want to even allocate a pair of pages that's more to one page and so on. If you want to read more about this it's called the buddy allocator. There's a lot of good documentation on it out there. So the first page is called the head page. And then all the other pages are tail pages which points to the head page. And if you try and call this function on a tail page like lock page, it will actually redirect to the head page and it will lock the head page. And this can confuse people when they try and lock one tail page and then lock the next tail page. And then they find that actually they've just deadlocked because they've just tried to lock the same page twice. I fixed a couple of bugs along those lines. So we've had the ability to allocate compound. We've used compound pages for memory for a while in the form of transparent huge pages. And 2016 when Carill added them to TempFest, that was when the page cache first got the ability to store transparent huge pages. In 2019, Tom added support for doing read-only huge pages and he was building on the work that Carill had done for TempFest. But now it was also available for file systems which use block storage or indeed network storage. And the way this is implemented is that you allocate compound pages. But it was very limited in that it would, you were only, there were only two sizes supported. Order zero pages, normal pages, base pages, and PMD size pages. And on x86 that would be an order nine page, which is two megabytes of memory. So about, around about the beginning of this year, I started working on something that I called new transparent huge pages. And so I was recycling a lot of the transparent huge pages work that had been done and generalizing it. So a transparent huge page is now no longer just two megabytes in size. It could be almost any pair of two in size. And that led to, because TempFest is a fully in memory file system, there was little attention paid to things like how something like dirtiness or whether the page was up to date or whether the page was under right back. All the things don't make any sense from any memory file system. So we didn't bother to track any of that. So I had to make a few changes to track some of that page state for the transparent huge page.  These three things are all linked to each other, but some code wants to know one thing and some code wants to know another, so I provided all three. THP heads, so given any struct page, it will give you the head page of it. And then offset in THP, that will give you a byte offset within this particular struct page of whatever you pass to it. In general, that's a file offset. And so that tells you how far into the page, into a particular page and addresses. When I came to merge, I have got a very long way with this approach. And it was really only when I came to explaining it to other people and trying to justify what I'd done, what I'd done, and persuade maintainers that they should merge it, I really started to wonder whether I had indeed made the right decision there. It was definitely expedient to use the transparent huge page code paths. But it turns out that file system authors are generally unfamiliar with transparent huge pages because the only file system that's really supported up to now has been the shared memory file system, tempFS. Other file system authors have paid no attention to it at all. The tempFS is kind of a special file system by itself. Regular file system developers don't look at it, whereas file system authors tend to look at other file systems like theirs to gain inspiration. So if you talk to somebody who works on NFS, they may well know things about several different network file systems. And if you talk to, say, an EXT4 developer, they'll probably be quite familiar with how ButterFS and XFS do things. Because we're all looking at each other's code, we're trying to figure out the best way to do something. Somebody comes up with a good idea then. Let's do that. The other thing that I noticed was that, obviously I was working on x86, but only some architectures support transparent huge pages. It's actually something that an architectures has to opt into. And that makes a lot of sense if you're talking about the original use of transparent huge pages to do things like insert a TLB entry that covers a much larger page. That is something that an architectures needs to support. It's something that you actually need to write code. For example, the alpha CPU has hardware support for larger page sizes, but nobody's ever written the code for it. So it's not activated. The alpha does not support transparent huge pages. Even though the hardware does, the Linux port doesn't. But I don't care. I'm not writing this code in order to make more efficient use of hardware TLBs. I'm writing this to reduce the software overhead. Because that software overhead has now got to a point where it is beyond acceptable. So why shouldn't N68K and alpha and PA risk and all the other architectures have support for using large pages in the page cache? And one way to do that would be to make some of these things not depend on transparent huge pages or make transparent huge pages to split the config option. So you could say, well, use it for P and D size pages or just use it in general. But then I was also trying to explain how fastest and people exactly what a transparent huge page is. And it became increasingly difficult to justify some of the voices I've made. And one of those being when we call the file systems read page operation, do we want to read an entire transparent huge page? Or do we want to read a specific sub page? Do we just want to read 4k? Or do we want to read the whole thing? And a file system can ask, or any piece of code can ask, is this page a head page? Is it a tail page? Is it a base page, an order zero page? But actually, that doesn't matter. That isn't necessarily, just because it's a tail page, doesn't tell you, I just want to read this tail page. It might mean I'm really interested in this tail page, but I want to read the whole transparent huge page that contains this tail page. And then there's a similar kind of question with the page fault handler. Do we want to satisfy the page fault with an entire transparent huge page? Do we want to satisfy just this specific one? Do we want to say, well, put in as many as many teal the entries as we can around this page? Exactly what are we dealing with? And it becomes very tricky. And what I had done is put in assertions a lot of points that a page definitely was a head page. But that didn't really, I mean, that worked out well for what I was doing for my prototyping work. But I didn't really want to leave all that in for production code. And I also don't want to have to replicate this to other file systems when other file systems are also adding support for this. And finally, it's very hard to document exactly what suits you want. I frequently catch myself saying, oh, this must be a head page, and then people would turn around to me and say, well, yes, but can't it also be a base page when you're not guaranteed it's going to be a transparent huge page? Yes, okay. What I really mean here is it's either a base page or the head page would be transparent huge. And that quickly made the documentation very messy. So I have decided to adopt a new approach, which I call page folios. And so when an interface says this is a folio, this parameter is a folio, that means it is either a base page, or it's the head page of a transparent huge page. And in either case, whatever operation it says that this function is doing, it is definitely doing it on the entire size of the folio. When we're not referring to a specific page of the folio, we're referring to the entire folio. And that way, when somebody passes in a structured page for an operation, you know you're referring to a specific four kilobytes, or depending on the architecture, maybe 16 kilobytes or eight kilobytes or something. But if somebody passes you a folio, you're dealing with whatever size that folio happens to be. And so we have to replicate a lot of the page infrastructure that we have. So we have a page dirty macro, now we need a folio dirty macro, because the entire folio has to be tracked as a single unit. And similarly for up-to-date, active, right-back, logged, and there's about a dozen different flags that we set on pages. The next step will be modifying some APIs. For example, the re-page I was talking about, that's going to want to take a struct folio to indicate operating on the entire struct folio. And then the new APIs that I added, just recently for transfer huge pages, I'm going to have to pull those back out and put in these new folio equivalents. There's a couple of new ones in here that weren't in the don't have any equivalents in the previous slide. One is folio page. So given the index within a file and a struct folio, it would turn you the exact struct page for that particular index. And then page folio, does the opposite, is given this struct page return me the folio which this page is in. And you'll notice that struct folio is not a particularly big structure. Indeed, it's not really a structure of its own. Its purpose is to tell the C compiler and indeed the programmer. This struct page is definitely not a tail page. And so you literally can just cast between a struct folio and struct page. But if you do that, you are throwing away the type information which struct folio gives you. And sometimes that's the right thing to do. Sometimes you really do want to just cast that away. But usually, you know, I don't want to see lots of files. This one shouldn't be doing that. Indeed, the core VFS generally shouldn't be doing that. That should be something being done really by the macros folio page and page folio. It's not something that should be done outside. Maybe some debug code. So once we've got all that out of the way, we can return to our earlier interesting problem of when should we allocate large pages. And some people say, well, we should allow user space to hint to us. We should have an API where the program opens a file and then it calls fctl and says, I want to use large page. Here's the size of page I want you to use to cache this file. And we could do that. But often the user doesn't know. And if they do know, sometimes they tune on one particular hardware and they moved to a different hardware and a different decision would have made a better decision. There's also the case that files are not usually used by just one program. They may be written by one program and then read by three other different programs. And if all four of those programs set different hints, we don't know which one, which hint we should be using. And I don't like hints because it means that the user space has to change. And I think this is a general system level optimization. And it should just work naturally without anybody changing anything. Another important thing, I think, is that file systems should not have to develop their own heuristics. This is a caching decision being made by the VFS. It's not something that a file system should necessarily get involved with. There are a few cases where file systems want to tell the VFS, hey, that's a bad decision for me. Can we modify that decision slightly? But they shouldn't have to do that all themselves. And so I was looking around at how this should be done. And I settled on page cache read ahead because that already makes caching decisions. It decides how many pages to read ahead. That's currently capped around 256 kilobytes on those systems today. And I enhanced it to decide how large those pages should be. And it actually ramps up fairly aggressively in my testing, just because I want to test with a lot of large pages. Originally, I thought maybe this is too aggressive. I'm going to want to dial it back some, maybe not ramp up large pages quite as efficiently, quite as aggressively. But now I'm starting to think, well, maybe it's right. Maybe we do want to increase it quite aggressive. I mean, there are downsides to using large pages. The larger page that you use, the larger the right amplification.  That said, most devices handle that quite well. There aren't really a lot of bandwidth limitations on most systems. You can find systems that don't have enough bandwidth on their PCIe bus or something. But it is generally not a problem. And you find that a lot of storage devices actually perform better with larger sizes. I just recently bought a new SSD and I discovered that it actually takes longer to read a 512 byte sector than it does to read 4 kilobytes. And that's weird. I mean, I would understand if it took about the same length of time, but it actually takes longer. I find really quite weird. So that's an indication that storage vendors are optimizing their devices for having larger IOs and that smaller IOs are these days inefficient. I haven't done anything to allocate large pages for writes yet. That to me is future work. I want to try and get the work that I've done upstream more than I want to more than I want to have writes use large pages. But it is a deficit. But I want to push out the benefits that I currently see so that everyone can take advantage of them. Page faults. The reader headcode works for both reads and page faults. But one of the patches that I did recently looks at an existing hint. And I advise huge page. And if you do have that set, then it will use PMD size pages. And also it will start to read ahead in PMD sized units. So two megabytes at a time. So the first time you take a page fault, it will actually read four megabytes. It will read the two megabytes you're looking at. And then the next two megabytes. And then if you fault in that next two megabytes, it will read it will start to read ahead the two megabytes after that. So it's it's got the pipelining effect of read ahead. But it's doing two megabytes at a time rather than 256 kilobytes at a time. So one of things that I had to do in order to make the read ahead code work was that I had to change the API between the VFS and the file system so that the read ahead code would actually add the pages to the page cache and then tell the file system here are the pages I've added, go off and update them. We used to have the file system. We used to have read ahead code would allocate some number of pages and then the file system would read into them and add them to the page cache. But because pages have to be aligned, so if you allocate a two megabyte page, it has to be at zero, two megabytes, four megabytes, six megabytes. You can't put a two megabyte page at one megabyte offset in the file. So because you've got that kind of restriction, it was going to be very very hard for file systems to know about those restrictions and try to add them themselves. So it's much easier to do all that work up in the read ahead code and then let the file system just take care of working with the page caches which it already knows how to do. It was also a nice cleanup. I have not finished this conversion yet. It's very hard to convert the file systems which use FS cache. So that cleanup is still in progress and it will be able to delete a few hundred more lines of code once that is in progress because we'll be able to remove the support in the VFS for the old read page function and just leave the new read ahead function. So one of the things that I think I said earlier that what's not present was support for doing IO to large pages because ShemFS or TempFS is an in-memory file system. There's really been no need to support large pages. So Ming Li added support for multi-page BIOS and this was an optimization because pages were often sequential. This was where we're getting a performance boost. If the pages were sequential then we could describe an IO with many fewer data structures with many fewer entries in array. But this turned out to be very critical for me because it actually meant that I didn't have to split up IOs. I could do a single IO. I could say here is a 64 kilobyte page. Please read all of it. I turned out not to quite work so I had to fix a bug but in the end I got support for large pages into the IOMAP code. Now the IOMAP code used to be part of XFS and it got moved out into its own code and now it's shared with ZonaFS as well. We hope, I think we all hope, that file systems will be converted to use IOMAP. So far many of them have not been and if somebody's looking for a project to take on then converting your favorite file system to use IOMAP would be a great and very large project. Then in collaboration with Dave Howells we're working on support for network file systems and so this actually works with the FS cache that I was talking about in the previous slide. Part of the problem is that opportunity is that Dave Howells is also writing on an FS cache rewrite at the same time and so he and I have been collaborating a lot over the last few months making sure that FS cache is going to be PHP, it's going to make it possible to support PHP. There'll be a certain round of work to be done in each file system but the FS cache work will insulate the file system from the details of how the page cache works and so we may actually see support for all five of these network file systems and transparent huge pages before we see support for many block based file systems and here's a good long list of file systems which use buffer heads and that's not even all of them. Basically every block file system uses buffer heads except for XFS and butter FS and butter FS has its own set of problems it doesn't currently support block sizes not equal to page size and so there are a lot of assumptions that one struck page deals with exactly one block on disk that is being worked on not by me and I look forward to collaborating with the butter FS people whenever they're ready to work with me on it they have more important things to do right now that's fine I'm busy enough without working on that at the moment so with the IO path taking care of we can then move on to looking at what it takes to actually support large pages in the page cache a lot of the patches that I've already got in simply remove the assumption that a compound page is exactly the size of a PMD so instead of saying oh is this page a compound page yes then do two megabytes of stuff instead we ask the page how large are you and currently the answer always comes back either I'm a four kilobyte page or two megabyte page because none of the other code is upstream yet but the support is there and that was perhaps 50 patches to to rip out all of the assumptions that a compound page was necessary PMD sized another strand of development was supporting operations which aren't just aren't used by TempFS so nobody had ever done the work to make them support transparent huge pages yeah transparent huge pages so TempFS doesn't support direct IO nobody tries to de-duplicate files on TempFS and stable pages are a concept which only makes sense for block-based file systems or network file systems but anyway they don't make it doesn't make sense for backing source nobody had ever looked at the stable pages code to say hey does this work as a transparent huge page shadow entries are fun they are used when you you have a page in the page cache it goes on to the LIU and then it falls off the end of the LIU due to memory pressure so it would have still been on the LIU if we had if it was purely time-based but because the LIU is sometimes sometimes a lot of memory pressure uh this this so this this page gets removed from RAM but rather than just saying oh well then it fell off the end of the LIU list we effectively extend the LIU list by putting some summary information into what's called a shadow entry and so if we then refold on this page we look at its shadow entry and say well would this have still been on the LIU list if the LIUs were infinitely long and if so we treat it as a refold and if it would have been taken off the LIU list by now because it's so old then we treat it as a new fault uh this helps us track the working set of a process and helps us make better decisions about when the when the process is going to need which kinds of pages another big chunk of work I had to do was making possible to find large pages which were tagged if you call something like msync and the the the range of the file that you're looking at is within a transparent huge page and that transparent huge page is dirty it must find that transparent huge page even though you're starting after the beginning of the page and that that proved to be that that's that proved to be very hard to do and it involved changing how the page cache worked so that one isn't upstream yet that that is still pending and yet another problem I had is that various page cache functions were returning individual pages rather than just the head page or as I should now say the folio it doesn't push the folio it turns the struck page and so when we had a compound page and we said give me all the pages between here and there it would actually return each of the individual pages whereas what almost every user wants is to be given just the head pages and so I had to go and audit all the places that use those functions and make sure that they were actually okay with receiving just the head page and some of those patches are currently in some are not there's you know for about 50 patches so outstanding and there are some things I haven't fixed I haven't figured out how to do it all um one of them is a splitting a folio so you'd want to do this if for example you have you know a cached file on the page cache and then you punch a hole in the middle of it or you or you truncate it down you need to trim off the end of the page and a lot of file systems will keep uh sub page information so often the block size of a file system will be smaller than the page size particularly if you're using a transparent huge page it will definitely be smaller than than the size that the block size will definitely be smaller inside the page and so file systems will allocate small data structures and uh this is for example buffer heads are used for one of the things buffer heads are used for is to keep track of individual disk blocks and whether the uh whether they individually are dirty or up to date and so when we come to split a page we then somehow have to redistribute the information that the files system has stored in the head page amongst all of the sub pages that the the huge pages being split into and that is very hard to do and so I'm trying to figure out various different ways to make that more efficient um than it currently is and uh I'm I'm currently working around it by saying well we only allocate we only allocate huge pages on lead ahead and that makes my life a lot easier because um you know the the the the page cannot be both dirty and up to date and not up to date so I don't have to distribute quite as much information between the the the sub pages as so on but it's it's definitely a problem that needs to be fixed before I do the right support because then you can definitely have pages which are partially up to date and and partially dirty and it gets to be very very complicated and and you can't lose any of this information because then you you end up actually losing users data and people don't like it when you sell data and of course there are many many bugs to fix that's basically my entire life right now is fixing bugs in in this patch set and then of course there's there's there are things to do like allocating photos on right we have this kernel thread called k huge page d which tries to combine individual pages into a transparent huge page a p and d size transparent huge page and right now it sees that we have we have large pages which are not necessarily p and d size and it just gives up it says no I don't know how to how to deal with that it probably wouldn't be a lot of work to do I just haven't prioritized doing it so somebody wants a task to take on that that's that's something that definitely could be done so despite saying earlier was I'm doing this entirely for software reasons and not for hardware reasons there are architectures which support TLB entries which are larger than order zero but smaller than than a p and d size and one example that is our arms support 64 kilobyte pages and right now we don't have a good API for telling the architecture hey I want you to put in this this 64 kilobyte page I've allocated I want you to put all 64 kilobytes of it into the into the page tables and it would be nice to have that I again this has just not made it to the top of my list yet and I would also like to support folios in butterfless and dxc4 there are problems with both of those file systems but not insurmountable we absolutely can put them under some circumstances in both of those file systems it's just I chose to start working on XFS and it's the only one currently working I shouldn't say the only one because Dave Howells has AFS working with transparent huge races as well so there's I think the other files the other network files systems are not too far behind it I I want to take a crack at NFS fairly shortly but yeah there's that you know I have to I have to fix the bugs in the code that I currently have before I start writing anymore so was it worth it well so Kernbench is a benchmark which just compiles the kernel which is obviously the most important workload and one my colleague was kind of to run the benchmark for me and he saw a six percent reduction in kernel time and so the the actual time went down I think from maybe 210 seconds to 204 seconds but you have to remember that most of that time is spent in user space running GCC so the the the bit that we can control i.e kernel time went went down substantially six percent I mean that that that's pretty good for a benchmark which we optimize so heavily for because those are in purpose so I've put the the Git tree in my slides you can go off and take a look at what I currently have so to summarize we get shorter LRU lists what a lot of hold times fewer cache misses a tangential effect is that it's very hard at the moment to allocate larger pages and we actually allocate larger pages for a lot of things but it can be quite tricky and there's a lot of fragmentation a lot of the fragmentation is actually due to the page cache the page cache will just allocate all to zero pages all the time and it will it will make it very hard for larger pages to be created if the page cache is allocating larger pages then the page cache can free larger pages too and it will make the entire system less fragmented we do larger IOs to storage and maybe we have to get rid of 16 kilobyte or 64 kilobyte page size configurations I have while I'm the main developer on this I'm doing most of the work this would not be possible without the help of so many people these are the people who I was able to think of this afternoon while I was writing these slides I know if I know I missed some off this list I'm sorry for that but yes we have contributions from all over the landscape the first is from people here memory management people people who are just generally interested in this kind of thing lots of people are giving their time to help make this possible and I want to thank all of them it's been really fun working on this project we've covered a lot of ground so thank you all for attending if you want to ask questions I'm looking at the chat window right now I believe we have about five minutes left in this presentation well I don't see any questions so thank you all for attending and I will stop the broadcast now please enjoy the rest of the conference


The Equitable Life Assurance Society presents this is your FBI. This is your FBI. The official broadcast from the files of the Federal Bureau of Investigation presented as a public service by the Equitable Life Assurance Society of the United States and the Equitable Society's representative in your community. A-H-O. A-H-O. In a few minutes, two Equitable Society policyholders will tell you how A-H-O saved them from a mortgage foreclosure. A-H-O means Assured Home Ownership. It's the name of a money-saving home-saving plan offered by the Equitable Life Assurance Society. It combines a low-cost first mortgage with life insurance protection. Results? A mortgage that's practically foreclosure proof. So please listen carefully to the Equitable Society's middle commercial on this program. You get full information on this ideal plan for homeowners offered by the Equitable Life Assurance Society of the United States. Tonight's FBI file of Francis Avlarsani. Pick up the latest edition of your daily paper or listen to the news on your local radio station. And you will have later crime statistics than even the Federal Bureau of Investigation. Unfortunately though, you will only have the facts as they pertain to your community. And crime is nationwide. It might be if you live in a particularly law-abiding city that a day will go by without a murder. Maybe even two days. But while you are enjoying that pitifully short holiday, the American Army of Criminals is at work. Its members never rest. For when one sleeps, another wakes to take his place. And between them, they manage to murder an average of 20 people in this country every single day. In an era of large numbers, of millions and billions, 20 may not seem like very many people to you. But over the period of a year, and these are the figures as gathered for the past 12 months by your FBI, 13,000 and 10 people were murdered. If you are still unimpressed, then regard the fact that when D-Day came in Europe, and millions of troops of all nations were thrown into the breach, when every available weapon was blazing, fewer men were killed, fewer men, and died here in this year of peace. Elephants in a corner saloon located in the downtown district of a large Midwestern city. It is early afternoon, a lone customer sits at the bar bringing beer, a young man at it. He goes to the jukebox, unlocks it, and removes the coins. Then he calls to the bartender. Say Pete. Yeah, what do you want? Can I see a minute? Yeah. What's on your mind? There wasn't much going there. People just ain't playing the jukebox the way they used to. Why not? The television. It's just as good and it's for free. But you make money on the box? I make more on the television. Customers sit here and watch the fights for a couple of hours, drink a lot of beer. Pete, you'll have to take it out. Are you kidding? No. I'll throw the jukebox out first and you with it. Now get out of here. You hurt me. Get out. Hey, wait a minute. Huh?  That's right. That's my name. You any relative of Duke Allbright? He was my father. No kid? Uh-huh. Are you still working, old man? Uh-huh.  But the bum like this truck, you're that way. Look, mister, you stay out of this. Kid, you want to take the television set out? Sure. Ask him once more. He's got his mind made up. I'll ask him for it. Mister, you're going to take the television set out? No. And you can pay for your beer and get out of here with him. Kid, now you make him take it out. Ah, you see this bear mug? Uh-huh. Bring it back slow and let it go. Here he is! Come on, kid, let's go. Not right now. I guess I've been talking too much, huh? Ah, of course not. You see, Al, it's just that...  Everybody expects so much of you. Yeah, that figures. They expect you to talk like him, act like him, and do like him. Well, I... I just couldn't be that. Don't you like larceny, kid? Oh, sure. But I just... Well, I just ain't like my papa. Look to me. Your old man started in 23, worse off than you are now. Inside of a year, he's got his own territory. I know I was driving a beer truck for him then. By the time he got sent away in 29, Big Duke owned this whole city. It happened it was easier on those days. It's never been easy, Danny. There's only one way to get successful. You gotta work at it. If your old man was alive today, he'd still be the biggest guy in town. With jukeboxes? With anything. And you can be the same thing. Where's your family pride? Oh, I got that all right. Well, then use it. All you gotta do to be a big man is change your way of working. What do you mean? Well, take that thing that happened back in the other saloon. You see the way I settled it? Uh-huh. Muscle, that's what does it. You gotta show a muscle or you get no place. But, Al, I can't. I just ain't a muscle guy. Then I'll be one for you. Huh? We'll be partners. Gee, I don't know what... It's good business for me, kid. You can use my muscle. I use your name. Only one thing. What? From now on, act like you're Duke. Duke Jr. I'll try. What do we do, Al? What do you mean? Well, the bartender in that joint was right. There's no dough in jukeboxes anymore. Television knocked it out. Then let's go into the television. Oh, that takes dough. But what? The cents, they cost a lot of money. Duke will steal them. A few days later at the local FBI field office, Special Agent Jim Taylor meets Agent Michael Drew in the hall. Hello, Mike. Oh, hello, Jim. I was hoping to see you before I'd signed out. There's been another hijacking. Oh, where? Out on Route 11, at Green Ridgewood in here. When did it happen? Early this morning, about 4.30. Any details? Yes, a gray sedan forced the truck to pull over to the side of the highway and stop. Two men were in the sedan. One got out, drew a gun and forced the driver to step down. They tied the driver up, slugged him and threw him into the ditch beside the road, and then the two of them drove off. Gray sedan. Yeah, I've already checked on it. It was stolen sometime during the night. Nobody noticed the driver in the ditch until about half an hour ago. They untied him, and he called the local police who asked him to contact us. What was in the truck? Television sets. $20,000 worth. Pretty good haul. I'd say the thieves apparently were looking for this particular truck, too. Why? One of them told the driver he was an hour behind schedule. Well, that might be an inside job. Now, we'll check on that angle, Mike. The truck was seen here this morning. By whom? One of the local police. That was before the alarm went out. How do you know it was the same truck? It had a banner across the front of it advertising a plot. Any description of the thieves? No, not yet. The driver couldn't give them to me over the phone because the doctor was just about to start treating him. Where is he now? He's at the central hospital. I'm going over there now to see him, Mike. Look, why don't you stay here and see if anything comes in on that alarm on the truck? Okay. As soon as I'm finished with the driver, I'll be back. The kitchen of every home. Let me show you a few of his speeches. See the handy action? Danny. Yeah? What are you doing? Watching a television? Note the compact size. What's this? This guy goes shopping for things. It's real interesting. Here we have the four store-away shelves. An infallible aid to all housewives. Why don't you tune in a fight? The fights are only on at night, Al. In the day times, it's this guy. Oh, no. Sometimes it's a woman's shopper. Turn it off. Okay. We still got a dozen sets to paint yet. Think we'll have any trouble getting rid of them? Yes. We don't get rid of them. We rent them. That's the whole idea. So it's the loans and stuff, you mean? That's right. The first thing we do is cut up the town. Oh. Get at this fix. The way we do it. The way we do it. Then we put a guy in charge of a territory. It's his job to see that our television set goes into every saloon in his section. He's like a lieutenant. Uh-huh. Over there, you've got to have captains. And over to captains, you've got two guys running the whole thing. That's us. And once we get the television right at money, we'll move in and take the horse for our own business. We'll really get it. We'll have big apartments, dames, banquets. And it... Hey. Speaking of banquets, we better eat something.  You got any dough? No. Neither have I. Put the guy on the cuff for it. Okay. Hey, what do you think we ought to plant the first set? Uh, what's the name of the place where I met you? Pete Craig. He gets the first one. Tie it up in court, Jim. Oh, that's all right, Mike. My calendar is pretty clear now. Good. Oh, did you happen to go by the teletype room? Yeah. Oh, nothing's coming in on that truck. That's what you're looking for. Yes, of course. So you were in court when I heard from Washington, weren't you? I guess I was. Now, you remember my going to the hospital to get a description from the driver of that truck? Mm-hmm. All I sent the description he gave to one of the bandits to our identity section, asked them if they had anything of help. And they did. Oh, they sent back five photographs from the general appearance cloud. I took them up to the hospital and the driver identified one of them. That's one of the bandits. Who was it? A man named Al Harrison. Oh, I don't think I know that now. There's no reason why you should, Mike. He's been in jail for the past 20 years. Oh. He used to drive a beer truck during probation. Mm-hmm. What'd he get sent up for? Bank robbery and attempted murder. He shot his way out of a trap one night and wounded a policeman. Mm-hmm. Fortunately for him, the policeman lived. So a kind-hearted jury convicted him with a recommendation for mercy. Uh-huh. Anything in Harrison's record that'll help us in this case, Jim? Oh, I'm waiting for the file room to send it in now. As soon as it gets here, let's both study it and see if we can get a lead. Now, the only customer Pete Craig had just left. Good. Let's take the set in. OK. You can handle it. OK. I'll hold the door. All right. Let's go. I'll go ahead and get the saloon. Right. Brought you no set. What? Here's a television set to take the place of the one I busted. I'll put it on the bar, huh? OK. How do you like it, Pete? Better than the other one, huh? I must say, I didn't expect this. What do you mean? I was swearing a warrant out to you guys. Now, I'll call it off now. Let me buy you a beer. OK, Pete. Uh, you got any brandy? No television. OK. Well, look it up for you, Pete. No, no, no. Don't bother. One of my customers is in the business. Let me install the other set. You pay him a service charge, and he keeps it in shape for you. We'll take that job off his hands. What do you mean? We're the guys that service this set. That's part of the deal. Now, wait a minute. You just gave me the set, didn't you? Sure. But we charged by the week for keeping it up. Ah, I might have known. Well, take it out. I don't want it. You've got no choice. Maybe I'll take the set, or tomorrow you've got no saloon. Who do you think you're scaring? Hey, Al, maybe we should make it easier, huh? I'll handle it, Duke. You'll handle nothing. Now, let me tell you something. I had all I wanted you guys 20 years ago. Times have changed now. You old-time haspins can't get away with it. Come on. Get up and give us the first week's payment in advance. I cracked his head pretty hard. You feeling sorry for him? No, but I don't think he's going to say it. Why not? Because he ain't breathing. When you ain't breathing, you're dead. We will return in just a moment to tonight's file which shows how your FBI protects American citizens and American homes. Now, another type of home protection. A typical case from the files of the Equitable Life Assurance Society. Let Mr. and Mrs. Ralph Orman tell you about it. About four years ago, I had to spend two months flat on my back in the hospital. Well, you know what that cost these days. Ralph, that's my husband. He didn't know where he was going to get the money to carry the mortgage on our home. Then one day I was talking to Ed Newcomb, my Equitable Society representative. Ed tells me that's what the cash fund in my assured home ownership plan is for. To help out in emergencies that threaten home ownership. Well, that cash fund really saved our home for us. The Ormans didn't have just an ordinary mortgage. Their Equitable Society Assured Home Ownership Plan combined a low-cost first mortgage with life insurance protection. A growing cash fund was created which can be used whenever sickness and unemployment threaten home ownership. That cash fund can also be used to pay off the mortgage way ahead of schedule. Right. Many 20-year mortgages have been paid off in about 15 years. Furthermore, under the Assured Home Ownership Plan, if the owner dies, the Equitable Society not only cancels the mortgage, but also returns to the widow every dollar her husband had paid to reduce the principal. Finally, during its life, the mortgage draws interest at only 4%. And there's a liberal allowance to cover title search, lawyer's fees, and other closing costs. So for many reasons, a man may consider himself lucky. If his health, age, income, and the location of his home enable him to qualify for an Equitable Assured Home Ownership Plan. For full information, see your Equitable Society representative. Or write care of this station to the Equitable Life Assurance Society of the United States. And now back to the FBI file, a practice of larceny. Bureau of Investigation has cooperated in bringing this drama to society because it wants to make sure that you are not among those who favor the popular misconception that the gangster, as we in the United States knew him in the prohibition era, is an extinct animal. Nothing could be further from the truth. He not only lives among us today, but in some places, he is present in even greater numbers than before. In great measure, the job of exterminating these gangsters belongs to the various law enforcement agencies. But in some part, the responsibility for getting rid of them is yours too.  In recent weeks, a man resisting capture killed his wife and three police officers before being killed himself. A review of his previous record showed that he had been tried once before for murder, had been convicted, and had been sentenced on recommendation of the jury to a term of but three years on the reduced charge of manslaughter. It is the duty of every citizen when called for jury duty to face the facts and be governed by the evidence. If he honestly thinks a man on trial is innocent, it is his bound and duty to so vote. However, it is wrong to let any false sympathy enter into his deliberation. If he feels that the evidence presented warrants it, then his duty to himself and to everyone else is to vote for one verdict and one verdict only. Guilty. Tonight's file continues in the local FBI field office. I was hoping you'd be back here, Mike. Why, Jim, what's up? I just got through down at the morgue. What were you doing down there? The body of a bartender was found in a saloon at 9th and Adams. I'm pretty sure he was murdered by Al Harrison Well, there was a new television set on the bar in the saloon. Part of the loot? Yeah, the set brought back to the lab. They examined one of the panels and brought up some serial numbers that had been filed off. I also got some prints off the chassis of the set. I didn't say they belonged to Harrison. Well, you've gotten a lot accomplished, Jim. Yeah. Yeah, not soon enough to save that bartender from being murdered, though. I got a lead on who Harrison's accomplice might be. Oh, how'd you do that? I looked up Harrison's record before he went to jail. Most of them were closed, of course, but a few of them were still running. I checked and found that he'd been back. With his friend? Yeah. I got a description of the friend and looked up the local police records. Aren't you finding anything? No, no, not at first. Then I remember the one bartender told me that Harrison had called his friend Duke. Hey, how about our nickname file? Yeah, that's where I went. Well, all we have to do now, Mike, is find young old Bryton Harrison. Hey, look at the television. What's on now? Them are puppets. Where's the shopping guy? He comes on after the puppets. Sometimes I wonder why we stole these things. Turn it off, kid. But I want to see how it comes out. Look, that's the last set. As soon as we get it back in a crate and out of the truck, we move. Move? Where? In the territories. The districts with the lieutenants and the captains. Well, we work that again in the next place. Again? We never even got started here, Al. Look, do you want to stay partners? Well, sure, but I don't... Well, I don't start any trouble. Give me your hand with this set. Where are we going, Al? We'll head west. There's a lot of good towns at the other end of the state. We'll move the sets into a place, divide the town up into territories, and then we have lieutenants and captains. And we're the head of the whole thing. That's right, yes. I'll go out and get the hamburgers now, Al. Drew speaking. Jim Taylor, Mike. Oh, hi, Jim. Only one thing. That was a maybe. A man called in a little while ago. He said his boy told him he saw the truck. The one we're looking for? That's right. On 12th Avenue and 58th Street. The boy is very young, Jim, so there's no telling whether he's trying to attract attention. I think the boy might be right. Oh, why? How'd you get there? I thought the address and his record turned out to be a vacant lot. You found Albright's name there. His name and correct address. Did you find anything at the apartment? One block from where the boy saw the truck. That's right. Sounds like they kept the truck near there, huh? Yeah. I think we came to the right place. Here's some sales tags and every one of them is from a television set. Yeah, I think we just missed them. How about sending out a new alarm on that truck? Hey, wait a minute. Let me see the description of that truck again, will you? Yeah. Yeah, that's what I thought. Come on, let's get out of the car, Mike. Where are we going? I think I know which road they took. Come on. We're out of the city. These country cops ain't going to give us any trouble. How do you know? I know the road. This is the one I used to drive when I was delivering beer if you're old man. Hey, you see that house up ahead on the right? Uh-huh. Fred Smith, the bookmaker, used to have his office there. One night my brother, Harry, decided to crack Smitty's safe open. So I let him ride with me and I waited for him. Very soon I see Harry coming out the front door. And he's wheeling the safe in front of him. What'd he do that for? He couldn't get it open, so he took the whole thing. We put it in the truck and took it along. How'd he finally open it? He called Smitty and told him he had the safe to deal with him. If Smitty would tell him the combination, he'd bring the safe back. Well, did he? Sure. Safe was worth about a G. We delivered it the next night. Hey, what are you slowing down for? That's a weighing station up ahead. What's that? Well, they weigh the truck. Why? There's a law. You ain't allowed to have more than a 20,000-pound load. You've changed the FBI and you're both under arrest. ...from interstate shipment. Both Al Harrison and Danny Albright were turned over to local authorities. They were tried and convicted on the more serious charge of murder. The two criminals in tonight's case from the vials of your FBI were apprehended because Special Agent Taylor knew that the only road by which the truck could travel was Route 11. Every other road leading out of the city had either a railroad or a highway overpass, which was too low to permit passage and had bigger truck. He also knew that Al Harrison had once driven a beer truck and that he would know about Route 11 being his sole avenue of escape. Because the two Special Agents had no way of knowing whether or not Harrison and Albright were armed, and also because they did not want to risk a possible gunfight in which an innocent person might be shot, they decided to wait at the weighing station. And so two more criminals who joined forces after a chance meeting, the death of the bartender, had their illegal careers ended. In just a moment, we will tell you about next week's exciting case from the files of your FBI. Now one last word to homeowners about the kind of mortgage you get in the equitable society's assured home ownership plan. First, it's a mortgage that's practically foreclosure proof. Right, if the owner dies, the mortgage is automatically cancelled. During his life, the cash fund is based against emergencies such as illness and unemployment. Second, it's a mortgage that draws interest at only 4%. So what are you waiting for? See your Equitable Society representative soon. For full information about the assured home ownership plan designed for you by the Equitable Life Assurance Society of the United States. Next week, we will dramatize another case from the files of the Federal Bureau of Investigation. A graphic account of the exploits of an escaped convict. It's subject to manhunt. It's titled The Swampland Pugetage. The incidents used in tonight's Equitable Life Assurance Society's broadcast are adapted from the files of the Federal Bureau of Investigation. However, all names used are fictitious, and any similarity they're of to the names of persons living or dead is accidental. Tonight, the music was composed and conducted by Frederick Steiner. The author was Jerry D. Lewis. Your narrator was William Woodson and special agent Taylor was played by Stacey Harris. Others in the cast were Whitfield Connor, Hal Dawson, Herb Ellis, Tony Hughes, and Ed McDonald. This is your FBI is a Jerry Divine production. This is Larry Keating speaking for the Equitable Life Assurance Society of the United States and the Equitable Society's representative in your community. Tune in again next week at this same time when the Equitable Life Assurance Society will bring you another thrilling story from the files of the Federal Bureau of Investigation. The Swampland Pugetive on This Is Your FBI. This is ABC, the American Broadcasting Company.