Welcome to Toffy TV, it's the Everton News Daily. Everton today have been linked with a move for Southampton forward Chey Adams. Reports doing the rounds that the Blues are very interested in the 26-year-old Shrekari escort. Four goals for Southampton this season. Leeds are also credited with an interest in the forward. Everton of course were interested in taking them in the summer transfer window under Frank Lampard. He did inquire about them. Southampton didn't want to sell them. And apparently that interest has remained for this season. Obviously four goals isn't a lot. He will be Evans during leading goalscorer with that tally though, which shows you how few goals Everton have solved. And this one again, listen it's a link that's as simple as that. But if this is who Evan Natargan then to me they're still not learning from the mistakes. We need goals and a good number of goals and that might mean opening your eyes a little bit and looking around your and seeing what else the world has got to offer. But obviously this is dependent on Evan staying up with Evan to be relegated into the championship. Then you know they may well still go for Chey Adams. They may choose a different path as well. But one thing is for clear, Evan do need strikers and he do need to be making that list now to work on in the summer. Another striker Evan of being linked with today is Middlesbrough Striker, Tuba Akpom. The 27-year-old striker is the leading goalscorer in the championship. He's got 21 goals so far this season. Doing really well for Michael Carrick side. Again another one he was linked with Evan in January. I think Evan had a little tentative enquiry early on in January. Probably pulled away but Middlesbrough said we need actual money to buy him. But Evan have kept apparently the interest up for him as well. Obviously going to get a lot of these armies when we move forward. But you do have to take them with a pinch of salt because we don't even know what division we're in. Going to be in next season but he is doing really well for Middlesbrough. 27, you would worry about that age. You would be trying to get players a bit younger and develop them and hopefully have them for a few seasons. But he's the latest one who's been linked with a move to Evan today. On loan Evan midfielder Deli Alley. His long spell at Besiktas has not gone as planned. I think that's a fair comment. A fair to say. Alley has been left out of the Besiktas squad by head coach Senol Gunes. And there's a lot of reports coming out of Turkey that Alley may spend the rest of the season in the stands and not part of the squad. Gunes just hasn't been impressed with Deli at all since he's took over there. Deli's had little moments where he scored a goal and you're thinking we might be able to get on a run but it's just not happening for him out there. Not sure where that lies. You'll still have a year left on his Evan contract this summer. Obviously if Evan were to be relegated there's not a chance he could afford Deli's wages in the championship. That's if Evan even looked at him. So he may well be looking for another club this summer to take him both for him and on a personal level. It's really, really sad to see a lad. He was 26 just career just seemed to be going one way. Not in a positive way and I don't know. He's just looked come to us trying to get a kick start after his situation at Tottenham wasn't great. Didn't really do anything here and he's gone out of the take. He's not been able to do it there. So I don't know how he turns it round. But there you go. Gabby George and Seamus Coleman have become Evan's official advocates for Hair Game 2. That has been announced today. It is of course International Women's Day and it's good that Evan have got some advocates for that one from the men's team, one from the women's team as well. It's important that the club do identify with that. Do make sure they are aligned with the Hair Game 2 movement as well. And that has been announced today that both of those players are the official Everton advocates. And finally, Evan under 18 side through 1-1 with Wolves yesterday. Evan's goal coming from Jacob Bowman-Clark for Leighton Baines aside. That is it for the news daily. Give the video a thumbs up. Subscribe if you haven't. And if you want to become a Trophy TV Premier member, the link is in the description. Or simply scan the QR code when it comes on the screen in a minute. See you later.


I'm going to demonstrate installing Ubuntu Linux inside VirtualBox. This assumes you've got VirtualBox already installed. I've got VirtualBox open here. We can see the VirtualBox manager. What I'll do is I'll download the Linux image and loading in VirtualBox and go through the Ubuntu installation procedure. The Linux image to get there are different mirrors available to download. The one I'm going to use is the RNET mirror, which is probably the fastest within the Australian University network. I'll go to Ubuntu and we look for releases. In this case, I'm looking for a specific version, 16.04.3. We're going to install the server version, not the desktop, so it's going to be command line only. I scroll down looking for server version. There's AMD64 and i386. 64-bit operating systems are referred to as AMD64, so that's what we want. Ubuntu 16.04.3 server edition AMD64. We want the ISO image, like it's a CD image. 825 megabytes. We save that and it's downloading. It's taking a few minutes. I've already got this downloaded, so we can bypass those few minutes and immediately load it up. What we need to do in VirtualBox is create a new machine and give it a name. I'm going to just call it Linux demo, but you should give it a more meaningful name, maybe about the Ubuntu server version. In fact, if we include Ubuntu in the name, you'll see that VirtualBox detects the most common version, Ubuntu 64-bit type Linux. Next, we need to choose the amount of memory we're going to allocate that Ubuntu Linux machine. It's defaulting to 1,024 megabytes, a gigabyte. My computer has 8 gigabytes. This would be fine, but I'm actually going to drop it down to 512. I could possibly try 256 megabytes. Since we're just running a cut-down server with no GUI, you'd probably get by with 256, but with 512, it should be fine. The problem with having larger is that if I want to run multiple machines at the same time, then I start to use up some of my 8 gigabytes of memory and things may slow down. So 512 is a good compromise. We need a disk for this virtual machine, so let's create a hard disk now and use the default VirtualBox disk image. You can choose either dynamically or fixed size. Fixed size is generally faster to operate, but takes some time and space up front. Because I'm only going to use a small disk, we'll use fixed size, and I'll just keep the same name. Use the default location. I'm going to set it to, let's say, 2.5 gig. We could probably get down to 2 gig, not a problem. 2.5 we'll see later. We'll have some swap space automatically created, which we'll use up some of that. So that creates a disk image file in VirtualBox. It takes a few seconds. And that 2.5 gigabyte file.  We have a new machine created. We haven't done anything with it yet. You know that it's powered off. So we'll have a look at the settings before we do anything with it and boot a machine. If we right-click on the virtual machine and choose settings, we can see some of the things we can change for this virtual machine. Most of the settings were unchanged, so we'll quickly go through some of them. The name, the type we set before, the folders and description are not needed. If we go to system, there's a few things of importance there. It refers to the amount of memory, so we can change that later. We've got half a gig RAM. We could increase that later. The boot order, some details about the chipset used or emulated by VirtualBox. The processor, we have a single processor allocated to this virtual machine. When you have a quad-core CPU, you essentially have four processes in your computer, and what you could do is you could allocate multiple of those to a particular virtual machine. In this case, because the server edition of Ubuntu is quite low on resource consumption, we don't need anything special here. Acceleration allows the VirtualBox to use some of the features of the chipset and the instruction set inside the Intel or AMD CPU in your host computer, and if you can enable the VTX or AMD-V, then generally that will give you better performance. They're not necessary, but hardware virtualization will generally give much better performance than software virtualization. Enable them if you can. If you're using your own computer, you may have to change some BIOS settings to turn them on. We're going to use a command line operating system, so the video display is not of interest to us. It's allocated 16 megabytes, and we could change it. It won't make any difference. The storage, it's referring to a hard disk we've created. We can add new disks. For example, we want to boot from the CD when we first start up, so we could do that later, but now we can choose a disk to boot from. So I'll choose the virtual optical disk file and try and find my downloaded ISO image. Here it is. So the 840 megabyte file we downloaded before, that will act as the disk inside our CD drive, so when the machine boots first, it will boot from the disk. Mostly other settings, we don't need to change audio, we don't care about with command line. Serial ports, no USB, the default ones, shared folders, user interface. The one thing we should look at is the network settings. Firstly, note the virtual box allows you to emulate your guest machine having multiple network adapters. For example, imagine you've got two LAN cards in a PC or in a server. We can enable two adapters. By default, adapter one is enabled, the other adapters are disabled. Virtual box allows you to connect from your guest machine to the host machine and out to the internet in different ways. By default, it's network address translation, but we're going to change that. And the manual for virtual box has a good description. So here's the help page on virtual networking. There's a good explanation of the different modes that are available, so it's worth reading through. This table gives an overview. We're currently using NAT as the default option. That allows quite easily my virtual machine to communicate out to the internet, say for web browsing or sending emails. It's a little bit more complicated if I want to allow someone on the internet to connect into a server on my virtual machine in this fourth column. I need to set up port forwarding to get that to work. It's possible, but we need to do some additional setup. If I have two virtual machines inside virtual box, they can't talk to each other. And there's no direct communications between the virtual machine and the host. In some cases, we'd like to have multiple virtual machines talk to each other and make it easier to communicate between the virtual machine and the host, as well as allow computers on the internet to access our virtual machine. So we're going to use bridge mode. Another option is internal mode, which is a little bit more secure or safer, the bridge mode. So you may consider that. But again, it requires a little bit of extra setup for port forwarding. So we'll go for the simple bridge mode in this case. We'll set that and bridge adapter and the name. These are adapters available from your host computer. Note there's a wireless adapter in my laptop and the Broadcom Gigabit Ethernet adapter, which I'm currently using for network access. Choose the one that you're going to use for internet access. And be careful there if you plug in a LAN cable and previously you chose a wireless, then you may lose network connectivity inside your guest machine. The other default settings should be sufficient. So we've chosen a bridge adapter. And now let's boot our machine. So my machine is currently powered off. I start the machine and that's going to boot up my virtual machine. Remember it's going to load up the CD, which was in the, which we specified, which contains the downloaded ISO image that we used. We'll choose our installation language, English. And before we go to installing the Ubuntu server, there is one thing that we need to change. Note down the bottom there are some options. We can choose a mode in particular. F4 allows us to choose to install, not the server as if on real hardware, but install a minimal virtual machine, which only installs software which is needed to run inside VirtualBox or any virtual virtualization software. If you didn't do that, it would be okay, but that may save a little bit of space. Then we install the server. And while that's getting started, I'll just minimize some of my windows and we'll focus on here. So I'll go through some of these steps very quickly. I'll just choose the options. Some of them will stop and explain. First we choose the country we're in, the keyboard. Let's choose just English standard keyboard. Now it's going to detect some hardware, which is presented by VirtualBox. And it's checking the CD-ROM there and it should move on to the next step in a moment. Remembering that what we need to do is we will need to choose some options of where to install Ubuntu on which disk. And in this case we have a single disk, that 2.5 gigabyte disk that we started or we created when we created a new machine. So it's setting up the components, which are important for the base operating system. And then the other steps that we will need to do and take care in is choosing a username and password, the login. We need to choose some software or some different configurations and also get networking working. So there it was detecting network hardware. Because we've chosen bridge mode, it should work correctly there and automatically get an IPv6 or an IPv4 address from my network. In this case university network. So that proceeded okay. Here's my first option. Choose a hostname. Choose a name for our computer. It defaults to Ubuntu, but I'm just going to call mine for this demo. You can choose a more meaningful name. And now a username. And you can get your full name there. Sorry that was the full name of the user. Now this is the username that you'll use for login. I'll leave mine as Steven. You can choose another one. Choose a password. And note that when I type it, show stars. Here if I want to show, which I normally wouldn't do. I'm using student. Now that's an insecure password. I've just chosen that for this demo. You should generally think about choosing stronger passwords for your servers. And type it in again. It's a weak password. Yes, I'm okay with this because I'm not going to use this machine. So after I create the demo, I'm going to delete it again. There's no need to encrypt our home directory. We're going to use this as a server. So no. It gets the time. It tries to work out what time zone I'm in via the network. And hopefully it will choose that I'm in Australia and in Queensland or the time zone pointing to Brisbane. Australia, Queensland. Yes, this is correct. Now it's going to detect what disks because soon I need to choose where to install Ubuntu. And this can be quite complicated. How to partition disks and setting up those partitions to store all your file system. There are different options. Guided. Use the entire disk. Remembering I've got a 2.5 gigabyte disk. So wipe out anything on that disk and install on top of that Ubuntu. If you are installing Ubuntu on your laptop, but not inside VirtualBox, you need to be careful here and make sure you don't overwrite windows, for example. But here in VirtualBox we're safe. There's nothing else installed. There are other options like using logical volume management, LVM and encryption which will avoid at this stage. We may discuss them in a later topic. Use the entire disk. It's detected that there's a 2.7 gigabyte. Be careful of the rounding there. Disk, yes, select the disk to partition and it will automatically determine a partitioning. And it's going to say create two partitions on that disk split it into two parts. One part is referred to as using the Format EXT4 and that's going to be the main hard drive probably about 2 gigabytes. And then the swap space is for virtual memory. We're going to keep the default and write the changes to disk. It may be useful taking a screenshot of these settings so you can recall them at later stages. Write the change to disk so it sets up and now it starts installing the system. So installing the software on those disks or on that disk in those partitions. Okay, it's asked that we want to use a proxy. Generally that will be no. We'll just continue. And now it may download some additional files to install. So, and that may take probably the longest of all of these phases of installation. Quite fast in this case though. It's going to take a few seconds so we can sit and wait. So it may download software that we don't have in the CD image but I suspect most of it's already there. Okay, now it's asking do I want to have automatic security updates? Generally you would want to set up automatic security updates but we may do that at later stage. So for simplicity I'm going to say no automatic updates. We can see how that can be done within the operating system later. And now it's saying do I want to install some additional software while I'm here? And again we'll do that later. What I'll just do is choose the basic Ubuntu server and then continue. We'll show how to manually install things like the open ssh server the lamp server in a later stage. And it starts retrieving those files either from the included ISO or from the internet and installing the packages. So it's installed those packages and now I've got to the stage where it's installed GRUB and GRUB is the boot loader. So the operation of your computer is that the BIOS when you're boot the computer the BIOS runs first and then that loads some special software which will then load the operating system. And that special software is a boot loader and in Linux it's commonly we use the GRUB boot loader. This is important when you install multiple operating systems on the one computer. But here we're using VirtualBox and our one computer has just Ubuntu Linux on it. So we can choose the default option and yes install on the master boot record. If you're installing direct on your laptop you'd need to be careful there and think about the different options for installing GRUB. And it's now finishing off the installation. So setting the clock probably remove some software or files that are not necessary do the final updates and then we should be good to go. There we are. Installation complete. It's time to boot your new system. So let's continue and give it a try. It's called to reboot and that triggers to shut down and boot up again. And it's that was that screen that we saw for a couple of seconds was GRUB Ubuntu. It automatically chose it because there's only one operating system to choose. Now it's going through the boot process giving us some output and now we have our system up and running and we can log in. It notes that we've got Ubuntu 16.04.3 the name of the machine is demo. It's asking us for a login username My name is Steven and my password in my case student you would have a secure one. Note that when you type your password it's not shown but it's being entered and there I am logged in. Welcome to Ubuntu. The next thing we need to do is look at updating the system, setting it up and learning how to use the command line. The before we do all that we may shut down the machine and you can do that via the menu. We can call a shutdown like pressing the power button on your computer but we should do a software or graceful shutdown inside the operating system and our first command we'll introduce you to is the shutdown or power off. Pseudo power off ask for my password and then it goes through the closed down process and is powered off that machine. Ubuntu Linux server has been installed inside virtual box set up and run.


From the CUBE studios in Palo Alto in Boston, connecting with thought leaders all around the world, this is a CUBE Conversation. Hi everybody, this is Dave Vellante, and welcome to the special CUBE Conversation. I'm really excited to have Keith Bradley here. He's the vice president of IT at Nature Fresh Farms. Keith, good to see you. Hey, good to see you too there, Dave. All right, first of all, I got to thank you for sending me these awesome veggies. I got these wonderful peppers. I got red, orange, I got the yellow. I got to tell you, Keith, these tomatoes almost didn't make it. It's my last one on the vine. These guys are like candy. It's amazing. They are the tasty thing. You know, I'll probably just join you right here now too. I'll have one right here, you know, we're out here right now and I'll join you right now. My kids love these, but I'm not bringing them home. And then I got these other grape tomatoes. And then I got these mini pepper poppers that are so sweet. You know what's what I'm talking about here. And then I got the tomatoes on the vine.  Big kukes, little kukes. Wow, thank you so much for sending these. Delicious, really appreciate it. Yeah, well, thank you for having them. It's a great little treat.  Now, tell me more about Nature Fresh Farms. Let's talk about your business. I wanna spend some time on that. We got IoT, we got a data life cycle, all kinds of, you know, cool stuff, scanners, paint a picture for us.  So Peter Kweiner, our owner, actually was a builder by nature and he was actually back in the year 2000, really wanted to get into the greenhouse business. He was a manufacturer and he built our phase one facility back in 2000 under the concept that he said, there's computers out there and Pete will be the first one to say, I don't know how to use them, but I know that it can do a lot for us. So even back in 2000, we were starting to experiment with using the computers back then to control the greenhouse, to do much of the functionality. Then he bought it under the concept as our sister company, South Essex Fabricating, that he would sell the greenhouse term key to somebody else. Well, talking to him, and I've been around since about phase two, he basically said, when I built phase three, which is our first 32 acre range, I realized it's actually in the pepper business now. And he realized he was a grower and then he fell in love with the industry. And again, kept pushing how we can do things automated. How do we can do things? How do we get more yield? More everything out of what we do. And as a lover of technology, he made it a great environment for everybody, including the growers to work in to just do something new. Well, I mean, the thing that we know that as populations grow, we're not getting more land. Okay, so you have to get better yield. And the answer is not to just pound vegetables with pesticides. So maybe talk about how you guys are different from sort of a conventional farming approach, just in terms of maybe your yield, how you treat the plants, how you're able to pick throughout the year. Give us some insight there. So basically I started through the life cycle of the pepper. So it's basically planted at a propagator and it comes from our facility and it comes in the little white boxes here behind me. And they actually are usually about that tall, they're about a foot tall, living a little more when they come to us. And right from that point in time, we start keeping track of everything, how much we put water in, how much water it doesn't take, what nutrients it takes, how much it weighs. We actually weigh the vines to know how much they are in real time. We do everything top to bottom. So we actually control the life cycle of that plant. On top of that, we also look and have a whole bioscout division. So it's a group of people that are starting to use AI to actually look at how the bugs are attacking the plants. And then at the same time, we release a good bug that will eventually die off to kill the bugs that are starting to harm the plant. So it basically allows us to basically do a, as close to natural way of growing a plant as possible without spraying or doing anything like that at night.  And actually for the most part, it is dry all the time. Like I'm very hot, it's very dry and it's just how we work. We don't let anything inside.  And now with our newest range, we even control how much light it gets. So we basically give it light all night too. And even some nights, when it's little days, when it's a little dark out, not like today, but when it's a little dark out and the sun's not up there, we'll actually make sure it gets more light to get that more yield out of it. So we can grow 24, 7, 12 months a year. Okay, Keith, so it sounds like you're using data and AI to really inform you as to nature's best formula for the good bugs, the bad bugs, the lighting to really drive yields and quality. Yep, yeah, we analyze, like I said, everything from the edge that we collect. Like I said, we have over 2,000 sensors out in the greenhouse and we keep expanding it more and more every year to collect everything from the height of the van, the length of the vine, the weight of the vine in real time. And we basically collect it from the day the plant is born to the day that we actually take it all out to be composted. We know how much light it got, does it need to get more light that day. We analyze everything in general and it allows us to take that data back in real time to make it better and to look at the past day to do it better again. Like you can hear sometimes, well I actually have a cart going by here now, that data from that cart will go back to our growers and they will know how much weight they got out of that row in the next 15 to 20 minutes. So they can actually look, okay, how did that plant react to the sun? How is tomorrow, does it need more nutrients? Does it need a little less? They take all that data from the core and make sure it's all accurate and it's up to date as possible. So Keith, maybe even you can give us approximations so how much acreage do you have and how much acreage would you need with conventional farming techniques to get the kind of yields and quality that you guys are able to achieve? So we own 160 acres of greenhouse that's actually under glass. It's actually 200 acres total of land but it's 160 acres approximately of greenhouse that's actually under glass. A, we're always constantly growing. Our demand is up that that's why we grow so fast. Usually you're looking at about a 12 to one. So for every foot squared of space, you're looking for the equivalent is about 12 feet squared for a conventional farm. That's the general average. Mostly because we can harvest year round, we can continually harvest, we maximize the harvest amount and everything total. I'm also interested in your regime, your team. So obviously you're supporting from an IT perspective but you've got all this AI going on. You've got this data lifecycle. So what does the data team look like? We're actually, I always laugh though.  They're not really part of my IT team but they basically have learned the role of how to analyze data. So we'll have basically one or two junior growers per range. So probably I'd say about, we have about 10 to 12 junior growers and then one senior grower per whole farm. So probably about three or four senior growers at any one time. But my IT staff is actually, we're a team of four, five, including myself and we are always constantly looking at how to improve data and how to automate the process. That's what drives us to do more. And that's where the robots even come in is every time we look at something, it's not even from an IT perspective but even just from a picking perspective, how do we automate this? How do we do it better tomorrow? How do we continually clean this up? And it just never ends. And every year we look back, okay, it cost us a dollar per meter squared or per foot square for the people down South America there now, we look at that and how do we do that better next year? How do we do better the next day? And it's a constant looking. And it's something that we look at refining and now that's why we're going so much into AI because we wanna not look at the data and decide what to do. We want the data to tell us what to do. You guys are on the cutting edge and this is the future of farming. I wonder if we could talk about the IT, what does the IT group look like in the future of farming?  Are you all in the cloud or you can't be in the cloud because this is really a sort of an IoT or an edge use case, paint a picture of the IT infrastructure for us if you would. So the IT infrastructure, it's a very large amount at the edge. We take a lot of the information from the edge and we bring it back to our core to do our analyzing. But for the most part, we don't really leverage the cloud much yet and most of it is on-prem. We are starting to experiment with moving out to the cloud. And a lot of it is you'll laugh though is because the farming and agriculture industry really was stagnant for a long time and not really stagnant, but just didn't really progress as fast as the rest of the world. So now they're just starting to catch up and realizing, wow, this is a growing industry. We can do a lot of cool things with technology in this range and now it's just exploded. So I'm going to say in the next five to 10 years, you're going to see a lot more private clouds and things like that happening with us. I know we're right now starting to just look at creating with a VxRail, a private cloud and a concept like that to start to test that water again of how to analyze and how to do more things on site and in the cloud and leverage everything top to bottom. So you got your own servers at the edge. So what Intel based servers, what's your storage infrastructure look like? Describe the network a little bit. Yeah, okay.  We're basically everything top to bottom. We are, right now we're on an FX2, Dell FX2 platform. It's basically our core platform we've been using for the last five years. It does all of our analysts and stuff like that and we have just transformed our unstructured data to Icelon. It's been one of the best things for us to clean that up and make things move forward. It was actually one of those things that management actually looked at me and kind of looked at me and said, what are you nuts because we basically bought our first Icelon and then four months later I said, I love this, I gotta have more because everybody loved it so much in the way it stored things. So we actually doubled the size of it within four months which was a great, it was actually very seamless to do but we're now also in a position where the FX2 and that type of situation didn't quite work for us to expand. It wasn't as easy to expand. So we wanted to get away that we could expand at a moment's notice. We can change, we can scale out much faster and do things easier. So that's why we're transforming to a VxRail to basically clean that up and allow us to expand as we grow. So you're essentially trying to replicate the agility and speed of the cloud but like you say, you're an edge use case so you can't do everything in the cloud. Is that the right way to think about it? You mentioned private cloud but just sort of cloud experience but at the edge. Yeah, we try to keep everything at the edge. It just makes it a lot easier to control because we're so big, think about it like bringing all this information back from everywhere it's a lot of data to come back to one spot. So we're trying to push that more to keep it at the edge so that we can analyze it right there in the moment instead of having to come back and do it. But yeah, I think you'll see in the next few years a lot of change to the cloud. I think it'll start to be there but again, like I said, the private cloud will probably be the way most will go. Okay, so I got to ask you then.  How were you able to respond? What role did the data play? You had supply chain considerations. Obviously you got a lot of online ordering going on. You got to get produce out. You've got social distancing. How were you able to handle that crisis? Well, it was a really great thing for our team. I think our team really came together in a great way. We had a lot of people that did have to go home and we started, because we had so many ranges all over, already about a year and a half ago, we started implementing an SD-WAN solution to allow us to connect to different areas and to do all kinds of stuff. So it was actually very quick for us to be able to send users home. We used our VeloCloud SD-WAN to expand it. It was very seamless and we just started sending people home left, right and center. The staff that had to stay here, like the workers out in the green house here now, our offshore labor as we call it, they were great. They work with it every minute of the day and they dug right in. We haven't lost a heartbeat. Like actually our orders have gone up and a lot through this COVID experience more than anything else. And it's really learned, it really helped from an IT perspective. And I laugh about this and it's one of the greatest things about what I do. I love this moment. Is where sometimes we were very hesitant to jump on this video collaboration. I said, Hey, it's a great way of doing this. But sometimes people are very stuck in their ways and they love it. And they're like, I don't know about this whole team zoom and all that fun stuff. But because of this, they've now embraced it and it's actually really changed the way even they've worked. So in a way it kind of took sped up the processes of us becoming more agile that way in a way that would have taken a long time. They now love teams. They love being able to communicate that way. They love being able to just do a quick call. All that functionality has changed and it even made us more efficient that way. So how does this all affect, how does this affect your IT budget allocation? Did you get more budget? Was it, you know, flat budget? Did you, did you have to shift budget to sort of work from home and securing the remote workers? Can you just sort of describe that dynamic? So it did, I'll be true. There's no way around it to not up my budget. They basically said, yep, you have to do what you have to do. We have to continue to function. We cannot let our greenhouse go down. And what do you need to do to make it happen? So I quickly contacted Dell and got things coming and got improved our infrastructure as much as we could to get ready. I contacted support, you laughed though. I basically made it so that my team could support every single part of our facet from home if they actually had to go home. So for example, if I had to get stuck at home I could do every single part of my job from home including the growers, as much as possible. So say our senior grower had to get home. I locked him up. He asked me, you'll see everything and do everything. So we actually expanded that very quickly and it was a cost to us. But again, there was no technology we didn't implement that we hadn't talked about before. We just hadn't said, you know what? It's just not the right time to try that. And now we just went ahead and we just said we got to do it now. And there's not one part of our aspect that we don't reuse. What was Dell able to deliver? Did they have supply constraint issues?  Were you able to get what you needed in time? Yeah, you know what? I think that we headed a little ahead of the scope of when things started to go bad.  We got to get some stuff coming. We never ran out of some things. The corkiest thing and it is just a reality. The biggest thing was webcams was trying to get webcams. Other than that, there was issues with UPS and PureLater and FedEx because they were just inundated too. But for the most part, we kept everything moving. There wasn't a time that I was actually really, really waiting on something that we had to have. One of the other great things of our senior team that is here is they've really given me the latitude to say, what do you need and how do you need to do it? And so I have my own basically storage area of stuff everywhere. And my team does laugh at me because they called me a hoarder and I basically have too much and we were able to use either some older stuff or some newer stuff and combine it and we got everything running. There's only a little hiccups here and there but nothing ever is going to go perfect. Yeah, but it's enabling business results. We've asked a lot of IT pros like yourself, like what do you expect the shape of the recovery? And obviously our hearts go out to those small businesses that have been decimated. You're clearly seeing industries like airlines and hospitality and restaurants are obviously in rough shape but there is a bifurcated story here, some businesses and it sounds like you're in this camp where the pandemic was actually a tailwind. Online demand is up, food, vegetables, people, there were a lot of meat shortages so people really turn to vegetables. Is that right that the shape of the recovery actually is maybe not even V shape, it's been a tailwind for nature, fresh farms. Yeah, yeah, you know what? It has been a tailwind and that's the right way to say it. We've just increased our yieldage, we've increased that. It's not a new for us, we've actually, that's been the biggest driving force for us is basically the demand for our product and building fast enough to keep up to that demand. Like we continually build and expand, we got more ranges being built in the coming years, like looking forward to 21, 22, 23 year, it's just, we're going to continue to expand and that is purely because of demand and this COVID just again escalated that little bit because everybody's like, I really want the peppers and like you learned, we actually do have some tasty peppers and tomatoes so it does make it a nice little treat to have at home for the kids. Well, it's an amazing story of tech meets farming and as you said, for years, your industry, kind of quiet when it came to tech but this is the future of farming in my opinion and Keith, thanks so much for coming on the story, coming on theCUBE and sharing the story of Nature Fresh Farms. Well, thank you for having me. It's been a great pleasure. All right, thank you for watching everybody. This is Dave Vellante for theCUBE and we'll see you next time.


Thanks for coming. I'm Uri Lele, some of you already know. I've been working for ARM for the last three years. I've been following the energy-aware scheduler effort. I'll talk about it a bit later. But basically, I'm here to say that I don't know if you actually know Skadedle, but it's actually alive. So that's basically the main news I have here. I think there is people sitting over there. If you can come forward, it's probably easy also for me.  Can you actually sit like there are all these places here? I won't, I mean, it would be a pretty relaxed presentation. I just, thanks. I won't, I mean, I won't make any questions or anything. So, okay, thanks a lot. Well, actually, I'm lying. So I'll actually make questions because the problem is that I have to assume this presentation that you have a little background on what Skadedle is because I won't have time to cover the basics and I cover the new features. So I'll be making questions. And I also get prices. So let's see how it goes. All right. That's the intended agenda. I'll quickly cover. There is one slide set in the background of Skadedle. Then basically there is a why. So why all of a sudden we have this new set of features that we actually developing. And then I'll cover the features that are actually being under development. So there will be a banner reclaiming, then a frequency in CPU scaling, coupling, and with the frequency selection, so CPU flag governor, and then group scheduling. All right. Let's get started. So what and why? Deadline scheduling. So this thing has been around for, yeah, something like three years. It's been merged in 314 kernel. And I'm saying that it's alive now because basically in the last three years, I basically had a bit maintaining it that there's been like several bugs to fix and other stuff to do, but nothing major actually happened on the scheduling class. What's a Skadedle? Skadedle is basically another scheduling class is an RT scheduling policy. RT like for example, Skadarar, Skadafifo. And the difference is that using Skadedle, you can actually explicitly give actually the kernel per task latency constraints. So there is actually an API with which you can give this information to the kernel. And it basically the algorithm itself by design avoids salvation. And in general it's basically reaching the shared knowledge about the quality service constraints that tasks might have. It basically implements EDF and CBS. And that's the first question. So who's going to tell me what EDF and CBS stands for? Okay? Okay? CBS? Anybody else? So you actually get the price. So this question was actually two pens. I left one pen handed to you. This is a very nice pen. This is for you. I put it here. Then you can collect afterwards. I mean, as you know, I mean, there are pretty cheap items, but we do pretty inexpensive chips in arms. So that's why, right? So CBS, who's going to tell me for another pen? Nobody, really? All right. So I get my pen and CBS stands for constant bandwidth server. It's actually a nice, I'd say it's a nice thing here because EDF is basically pre-dummy. So you basically schedule the task with the earliest deadline. It's like a priority based algorithm based on deadlines. But the nice thing is that the CBS, it's an algorithm and this algorithm actually picks the, let's say, the dynamic deadlines of the different tasks. And actually, it's that algorithm that it makes, for example, temporal isolation and avoiding service possible. All right. If you want to actually have more details, I actually gave a presentation to last year, ELC, you find the link there and through the slides also be referring to papers describing the algorithms. So you can actually go and offline search more about this. So, but why this developing is now happening? Well, the why is that in ARM, we have been working in the last four or five years on this thing that we call energy aware scheduling. It's basically a set of extension to both Linux scanner scheduler and several subsistence, for example, CPU freak to actually make them power and performance aware. So both like meeting the performance requirements of user space application while saving energy. And the effort so far has only been basically modifying and taking care of modifying schedule wise. Then last year, this set of changes got merged in the Android common kernel and it's basically now used by Android. And then in that particular case, basically for Android performance, for the workloads that we care most, it's actually meaning meeting latency requirements more than actually performing more work. So when you actually have strict latency requirements, schedule normal can be maybe it's not like the best fit. And what's actually happening currently is that schedule five also RT scheduling class and policy are currently used to actually be able to meet this latency requirements for certain tasks. Now, basically my point here is that for the same, I actually believe I had to prove this because this is really experimental and working progress stuff that I'm actually going to talk about. But I really believe that for the same use cases, we can actually make better job using deadline. It should be it's theoretically better fit. And actually also, let's say that Android actually already does make some modification to the main lines get five. And I'm not sure that those modifications can ever get upstream, just because I guess the feeling that I got from maintenance is that schedule five is probably not the best thing you want to modify. Instead, you probably have to do to schedule. So what I'm saying is that if we know and we know that we are going to make modification to schedule, discussing those on many lists should be less contentious. That's my personal feeling. Yeah, actually, I want to mention that this work is not only arm doing this, but we are basically collaborating currently with the School of Superiors Santana of PISA. School of Superiors Santana of PISA is basically the university I've been studying before joining ARM. And actually, the old scheduling project was born there. So while I was there, actually, we got this thing made. So it's basically the same guys that continue working on the project. All right. Okay. So that was basically the general introduction. But let's talk about what are the new features. So Ben, we're reclaiming. What's the problem with the current SCAD deadline implementation? So I guess the main problem, the main thing that might be problematic while trying to use SCAD deadline for basically a software time type of application, like for example, drawing rendering pipeline, is that the task banded it. So the amount of CPU that they can actually associate to the task is fixed. So basically, you have these SCADs called SCADs et cetera.  So it's basically a fraction of CPU time. And it's actually enforced. So if the task tries to execute for more than it's actually granted to him, it will be stopped. And that, I mean, it can be problematic because, for example, what happens if you casually need more bandwidth than what you actually asked for? I don't know. It might be fluctuation in the network traffic or, for example, if you are a task that belongs to a rendering pipeline, there might be some certain heavy frames you actually have to render. And just for one of those, you need more bandwidth. So you might be missing your deadlines just because the bandwidth allocation is so strict. So the proposed solution, and it's proposed, basically, there have been at least four sets under discussion on the Linus Karimini list. It's going to be most probably a post in, like, next week or week after next. It's something that we call bandwidth time. The idea is that you would allow tasks to consume more than what they've been allocated at syscall time, at the admission control time. Of course, to don't risk to jeopardize everything, everybody else, so because we have still scared others, scared fee for task, you can allow this reclamation to happen up to a maximum of the CPU time. And of course, if this doesn't break other scared deadline guarantees, so you don't want to jeopardize other scared deadline tasks. So the algorithm that we actually implement is called GRAB. It stands for greedy reclamation of unused bandwidth.  And the idea is that the task is currently running will greedily use the portion of bandwidth that is not currently used by the others. So that's why greedy reclamation of unused bandwidth. And that makes the implementation algorithm more very simple. It's really a, I mean, minor modification that actually be made to implement this thing. So it basically composed by three main components. One is we had to track the utilization of the active tasks, so the tasks that are currently active on the system, because we want to reclaim the portion that is not active. Then we have, we can use this information to modify the accounting rule. It's basically how we keep track of the runtime that we actually are granting to a task. And then, well, I quickly go through one of the issues that we found out while implementing this thing and extending the support to multiprocessor systems. So the original algorithm was actually designed for uniprocessors, so as soon as you try to support multiprocessor, you'll find some issues there, and I'll detail about one of those just to give you an idea. As said, there are references to the papers, and you can find way more details there. Okay, so let's try to understand what tracking of the active utilization means. I guess this is basic. This and the next one are kind of the most tricky slides of the whole presentation, so please bear with me. Let's see if we can get through this. All right, so I'll make an example to try to make this thing easier. So let's say that you have a task that has been turned to the system, and, of course, this task has a runtime and a period. The runtime here is depicted by the capital QI, and the period is capital TI. So those are the two parameters you actually specified when calling the SCAD-setout syscall. Now, this task, let's say that was sleeping, then it activates for the first time during a period. The idea is that you will be tracking the sum of the active utilization of all the tasks per CPU, so you have, we basically added a pair rank queue variable called running bandwidth that actually keeps track of this sum. So when the task wakes up for the first time, it's pretty easy. So you know that this bandwidth, this utilization is basically runtime divided by period, so QI divided by TI, and you can just increase your act by this amount of bandwidth as soon as the task wakes up, so that you know that the other task cannot reclaim this task bandwidth. Okay? That's easy. Then the tricky bit is that what happens, so the tricky bit is understanding when you can actually remove this task contribution from your act. Because the problem is that if, for example, the task goes to sleep and you remove instantaneously his contribution to the reclaiming, so his contribution to the active utilization, the other task can actually reclaim instantaneously his bandwidth. So if he then wakes up again in the same period, he could actually find out that the others used his bandwidth, so he will be basically potentially jeopardized. So you don't want that. Let's say that there are basically two things that can happen. One is the simplest one. The simplest one is the task executes for a bit. I'm not repeating this one. What I'm repeating is the more tricky one. But let's say that the simplest one is that starts executing and then it consumes all its runtime in this period. In that case, it will be throttled because we implement basically throttling. And at that point in time, you actually know that you can remove his contribution to the actualization just because he already depleted all its available runtime. But what happens if the task actually goes to sleep and has some leftover runtime to consume? Now, the tricky bit is that you have to remember what the constant bandwidth server does when the task wakes up. There is one of the rules implemented by the algorithm that checks this inequality. So second question. It's going to tell me what this inequality actually checks. So why do we want to use the remaining runtime divided by basically the deadline minus this amount of time when the task wakes up and compare that with the theoretical worst case benefit? Any idea? Maybe not. So basically, let's see if I can help you. As said, the task goes to sleep at decision time. It has some runtime, leftover runtime. Then you want to know if it wakes up in the same period, if it's going to use its runtime, it's a leftover runtime no matter what. The problem is that if it wakes up, for example, here pretty close to the deadline, it will actually go and execute for the... I mean, using more than what are located. Just because it's basically free to execute because it's probably the highest priority task. So if there is, for example, another task that is running concurrently with him, it will basically execute in the other task reservation. So this thing actually just check if we can recycle or not the current runtime. So basically, what we do in practice is that when the task goes to sleep, we actually have to compute this point in the time in the future called the zero-luck time. This is actually deriving from this inequality. So basically you make this an equality and then you calculate t from this thing. And t is actually your zero-luck time. So basically you know that after this is inside, the task cannot reuse the leftover because if he actually is going to use the leftover, it's going to cause troubles to other tasks. More or less. Okay. Let's say that maybe you believe me. So it's basically what's happening.  That's in practice how the implementation works. Okay. So that's the tracking of active utilization. This thing happens on each CPU. All right. Now that you have your active utilization thing, you can actually use that to implement the reclaiming itself. The current accounting rule, it's pretty easy.  At each tick also the last time when the task goes to sleep. And this function basically uses the delta xx. So it's basically the deltas between the last time and now. It can be four millisecond, one millisecond depending on the health rate. And then decrement the runtime of that value. So that you know when the task will be depleting its runtime. Because you then want to stop the task as soon as the runtime becomes zero or negative. To be able to actually reclaim the other's bandwidth, the idea is that you want to reclaim basically... So uact is the value that's between one and zero. So it's a fraction of the 100% CPU time. The idea is that you want to reclaim one minus the uact. And if you do the math, you actually come up with this equation here. So instead of removing the whole delta xx, you actually remove a fraction of that delta xx. To make an example, if the task is 30% utilization task, you will multiply the delta xx by 0.3. So if you execute for nine milliseconds, you actually remove three milliseconds. So basically you have more time to complete. But that... I mean, if you actually allow this task to actually reclaim 100% of CPU time, that will be a problem for non-deadline task. So you will end up starving other guys. A simple example to try to understand better this point is... So let's say that you have five seconds over 10 seconds task, the connection you reclaim. So if you can reclaim 100% of CPU, what does it happen? Anybody that can help me here? Because that's actually another quiz. So this is probably easier to compute. So let's say... So what's the current uact? So consider there is only this task on the run queue. And as a run time of five seconds and a period of 10 seconds. Sorry? 0.5. So 0.5 is actually the current uact. So let's say that this task is executing. And basically at each instant in time, let's say that it executes for one millisecond. But instead of removing one millisecond of runtime from each runtime, how much do you remove by using this formula here? 0.5. So basically you remove 0.5 millisecond every one millisecond. If you do this for... Considering that the runtime is five seconds, basically you will end up executing for 10 seconds. And that's basically all... You'll be constantly executing over your period. That's basically... I'll give you a USB pen because anyway, I have it here. So that's basically what happens. You multiply by 0.5 and you will deplete in your run time in 10 seconds. So that's basically... If the task doesn't reclaim, it gets topped after five seconds. And the other tasks can actually run and they're happy. But then if you implement the reclaiming and it's unbounded, it has to be constantly executed over the 10 seconds and constantly do that. So the others cannot execute anymore. Does it make sense? Okay. So the solution here and you... Well, again, you had a bit to believe me here but that's basically easy to compute is to actually have another variable called umax that you can actually set to be the limit of bandwidth you can actually reclaim. In this case, for example, in the same example, if you set the max to be 0.9, the task will only reclaim up to 90% of the available run time. And so it basically gets to execute for a maximum of nine seconds and you will have one second of time for the others to execute. That's basically the solution for this problem. Okay. Yeah, multiprocessor. Let's say that we actually discovered this problem just because they said the algorithm was actually designed for a single processor. Let's say that you have two CPUs and you have a task that goes to sleep at this time. So you actually, when you woke up the first time, his contribution to the UAC has been added to the UAC.CPUK. Then it goes to sleep. You set the zero time. But then let's say that when you wake up again, so in this point in time, you wake up again, you have another higher priority task executing on the CPUK in this case. So the task is actually put to run on the CPU. Since basically nothing happens if the task wakes up before the zero lag time at the UAC of the CPU, the task was running on. What you do is basically you don't do anything to the UAC. You just remove the zero lag time. But then when the task actually, for example, depletes his run time, you will be subtracting his contribution to CPUJ UAC. And that's going to be a bug because it's basically it's going to be negative. So in this case, the fix was pretty simple. So basically what we do when the task is actually migrating, you both cancel the zero lag time and also instantaneously migrate the task contribution between the two CPUs so that everything is fine when the task is blocked again. All right? Okay. Some simple data and results from synthetics. As I said, this is a work in progress. Basically my next step, as I will tell you why it is to try and start using this thing, for example, on Android. But I mean, this thing is basically a simple example. Here I have one task that is executing inside a six millisecond over 20 millisecond reservation. A task is it actually has a constant execution time. So every time it's activated, it's executing for five milliseconds. You have another task on a single CPU here that actually has a reservation of 45 milliseconds over 260 milliseconds. The problem with this task is that it experiences occasional variation in its actual runtime. So it varies between 35 millisecond and 52 milliseconds. So there will be instant timing in which it will try to execute for more than 40, 45 milliseconds. And you see here that basically this is task two without reclaiming. Here I'm basically executing a cumulative distribution function of the major response time of the task at each activation. So we actually measure how much time the task actually required to finish its current activation. And basically this means that there is basically at least 40%, 35%, 40% of the cases in which the 25, maybe a bit less. There is a normal percentage of the activation of task two in which the response time is actually higher than what task two actually wanted, the 260 millisecond. So that's why basically the problem I was telling right at the start that this mechanism is too strict, is too fixed. Using instead of reclaiming, so reclaiming basically the one millisecond plus up to the UMACs that you set up in the system, you can actually, task two can actually always in this case finish before its reservation period. So that's basically meeting always its deadlines. That basically depicts easily how the algorithm actually helps and works. Okay, so once it is in what we need, so the idea is that since now we assume that the clock frequency was fixed and that's when the clock frequency is fixed, it's easier because basically you can ignore the fact that at the runtime of your task actually scales with the clock frequency. But what happens if the clock frequency varies? It's pretty simple to actually deal with it. We just have to scale the reservation runtime. So the idea is that since basically you can assume that the actual runtime scales linearly with the frequency, you'll be scaling linearly also the runtime. It's the best case runtime. And that's the formula you have to apply. You basically take the original runtime, and then you multiply by the ratio between max and current frequency. And that basically allows your task to still execute inside the same reservation without modifying the reservation. So you specify your parameters considering the highest OPP. So let's say 10 millisecond over 100 millisecond. And then you get the runtime adapt to the current frequency using this formula. That's basically the idea. Yes. Yes. Basically the algorithm works in the same way. I actually have an example here probably answering your question. So let's say I run this test on an i keyboard. The keyboard has five operating points in the A53 CPUs. Those are the operating points. So it goes between from 208 MHz to 1.2 MHz. And there's an associated capacity in 1024 scale. So the formula, let's say that you have this task that actually has 12 millisecond over 100 millisecond reservation at max frequency. That translates, for example, if you then try to run the task at minimum frequency, that translates to 69 milliseconds. So you let to extend the runtime, the 12 millisecond, up to 69 milliseconds. And that's actually what's happening. So here, basically, in the first plot I'm running the task. So basically I'm running a 10 millisecond over 100 millisecond task inside the 12 millisecond, 100 millisecond reservation. So everything is fine. The task computes and ends up computing before it's actually throttled. If I then run the same, but at the minimum frequency, the actual runtime is extended. I mean, it takes 60 milliseconds then to actually execute the same amount of work. And that's still fine because I know that my reservation actually gets extended to 69 milliseconds. So as soon as the task, for example, here, I incremented of 10 millisecond, the third one, the actual runtime of the task. So as soon as the task, in this case, tries to execute for more than 69 milliseconds, it's actually throttled. So the algorithm is actually working consistently. Yeah? Right. So for the question is what about basically big, little systems? And basically it's the last point I had here. You have to apply the very same formula by considering the max capacity of the two CPUs type. Basically it will be, you have to scale twice. You scale one for the frequency and then you take the same scale again comparing the max capacity of the CPUs of the system all over and the current, so the max capacity of the CPU you are executing. It's basically applying the same scaling twice. And that's actually what, for example, the parented lot raking in the scale fair is actually doing. So it's very the same solution. All right. So now we basically have all the ingredients to actually be able to scale, I mean, control the clock frequency from the scheduler. So you're probably aware of the schedule till CPU flag governor. This governor has been managed recently in the last year. It's basically a small thin layer between the scheduler and the CPU flag driver. And with that you can actually drive the clock frequency from the scheduler. Currently it uses Foursquad normal. Foursquad normal, so fair task. It uses the utilization average, utilization signal. And then uses that compared to the max capacity of the CPU to actually compute the frequency needed to meet the task requirements. This is basically a running average of the task it's executing on the system. Currently the problem is that both schedule Foursquad normal, as soon as you schedule schedule Foursquad normal task, you go to max. Because basically there is no idea of how much utilization bandwidth and clock frequency is actually required to meet those task requirements. The idea is that once bandwidth reclining will be in, we can use the running bandwidth, so it's our Uact I was talking about, to actually have a per-CPU utilization contribution of schedule deadline. So the idea would be I have the utility leverage coming from fair. I sum up this with the Uact, so running bandwidth of deadline, and then I can translate this amount of utilization into a frequency, a clock frequency. So that's how I'll be driving frequency selection also for deadline. Another, let's say that it's not the only modification needed currently in mainline, so one of the problems is that the triggering points for actually driving frequency selection, so when basically the points where the scheduler actually asks the governor and the driver to actually change frequency, for both for FIFO and deadline, there are sites in the basically tick handling code, which for deadline, I mean makes sense now because it's, I mean commonplace you always call when you have something active, but in the light of what I've been actually talking today, we have to move those points where the running bandwidth is, so where the Uactive actually changes. That's a special question actually. So if you actually was able to follow, so where do you think this running bandwidth actually changes? Anybody? So well, one point is probably easy. So let's say you have a task and then when do you actually have to increment the UAC for the CPU? Sorry? That's basically the finishing, so let's say the first thing you have to do is actually increment the variable when the task wakes up the first time. So that's one of the points where you actually potentially want to trigger a frequency selection. The other one is actually what you were saying basically. When a task goes to sleep, you potentially want to actually remove his contribution to the active utilization and that's where you potentially want to trigger a frequency selection. It's not instantaneously when a task goes to sleep. It's the infamous zero lag time I was talking about before.  That's basically it. Yeah, another modification that will be most probably I mean required is that on platform that actually needs a sleepable context to actually change a K worker thread to actually do and to actually call in the driver and actually perform the frequencies which and that the thread is currently a schedule five for thread. Of course if you are, if you want to change the frequency to for a deadline task we let to make also the thread deadline and maybe treat it like especially because you basically want to always that the guy always preempt any other deadline task just to be able to change the frequency in a lot of those. So those are basically three main modifications. Some results I probably scheme through this because I don't have much time left just saying that for example here the basic idea then you can go offline and see better I have actually extensive results collected and you can there you can actually look at them basically the idea is that at least with the simple example you are meeting both tasks requirements so deadlines you don't have any let's say that what you actually want to see is that the red line doesn't go below zero and while you are not running the maximum frequency so that's basically the trade-off you actually want to achieve and it seems to be to be working. So instead I don't spend much time in this because I have to cover the next bit so group scheduling why we want this so currently scheduling works one-to-one so you have one-to-one association between task and reservation. The idea is that sometimes it's actually might be easier or better to be able to group a set of tasks inside the same reservation because for example you can post applications like a rendering pipeline where you don't actually know which beats and you can actually you can't actually come up with the runtime period for each task that belongs to the pipeline or for example you just have a legacy application composed by different threads and you can go and modify the application source code or for example you have to manage the way to reserve a portion of the CPU bandwidth using group scheduling what we have to implement that there are working progress patches also for this they're not being yet discussed on the mini-list so they're going to be posted hopefully in the next months or so it's what we call group or hierarchical scheduling support again there are a lot of references on the slide so please go and check them out the idea is that you will then have temporal isolation but between groups that contains more than one task the approach will be hierarchical in the sense that at root level so the first level will be managed by EDF like deadline already does and inside the deadline reservation you'll be scheduling considering FIFO basically you'll have in this case for example T1, T2 T3 and 4 are FIFO tasks that actually are scheduled inside deadline reservation so the the root scheduler will pick a group of tasks considering the deadlines and those deadlines are managed by the constant bandwidth server again like with simple one-to-one tasks and then you have to actually execute again the scheduler inside the group of tasks to pick one of the tasks you actually are scheduling with FIFO the idea I think Peter actually mentioned this several times is actually to remove the RT throttling and actually substitute that with this mechanism so what's the RT throttling mechanism right so it's basically it's mostly let's say the bug mechanism to actually prevent FIFO RT tasks to actually jeopardize whole the CPU and that's basically more I mean theoretically it's the same thing because here I will reserve a portion of the CPU using deadline and so that I can after I have this I can remove that mechanism then the API let's say the user space API won't change because you still have RT groups it just who manages those groups will change it won't be RT anymore it will be deadline managing those groups but you still I mean from user space you still be creating groups and then put in inside tasks and then manage the RT runtime, RT period of those groups so no changes required from an application point of view I'd say sorry yeah but that's the same thing you are doing today so you have to configure groups if you want if you want to use RT throttling let's say not the global one but the per group one you still have to create a group assign the RT runtime and period for the group and then put your FIFO task inside the group and that's basically won't change it's only managed by a different guy will be deadline instead of FIFO and it basically on a multi-process system how it will work basically you'll have so each group has only two parameters it's runtime over period and that is basically you will replicate the same amount of reserve bandwidth across all CPUs so you will have a scheduling entity on each of your CPU and then you'll basically those guys the FIFO guys will be executing inside those scheduling entities which basically represent like some kind of virtual processors because virtual processors because for example when you have to perform global scheduling so the push-pull mechanism will actually pull and push task between the scheduling entities that you have on each CPU that's basically the the idea I don't have much more details about this just because it's really more work in progress than the other one but I mean if you have any more questions just ask me also offline of course and we are mostly done so future what I didn't cover and what's still me missing so I said that the real near thing that's happening right now for me it's actually try to start experimenting with all this new feature on Android see if we can convert like the current user FIFO to actually start using Deadline and see how it goes another idea that will be probably needed to implement is that in principle you can actually think to let the task run for more than reserved at the mission control time by demoting them towards lower priority task class sorry so when the task gets trot instead of trot in the task I will demote it to run on FIFO or normal so it can actually continue executing but together with the other lower priority tasks on the system and then of course the capacity and energy awareness so the fact that for example if you have a big little system now that we actually have a notion of how much capacity actually each task needs we'll have to make modification to actually know where I have to put a task considering the spare capacity of the different CPUs also considering that they can have actually different max capacities and then using this dead information then I will also have to consider energy in the picture so the energy aware scheduler energy aware scheduler actually adds an energy model of the platform and makes it available to the scheduler so the idea is to start consuming that information also from deadline to make energy aware decisions in the sense that nobody is currently really working on this so you're more than welcome to contribute is mostly it's the priority inheritance so currently priority inheritance for deadline means deadline inheritance what we want to actually have is to implement proxy execution so I can actually execute inside someone else's reservation and then maybe some kind of the feedback mechanism in which I can still adapt the tasks reservation and that's it so thanks again for coming if you have any questions just ask me I'll be here for the whole week should we email just ask staff on the Linux mini list on Linux RT users there is also an energy aware scheduler focus mini list called yes dev we're actually organizing this going to be in Italy from Italy so we're going to organize the summit around the scheduling and power management you'll find more details at the link there so if you are it's going to be in April so it's really happening like next month so I guess for the use US based residents can be tricky to to come because just because flights are extremely expensive I guess but if you are in Europe and you want to come you're more than welcome and oh yeah whoever got prizes please come and collect us thanks