WEBVTT

00:00.000 --> 00:10.000
Now, you should see my slides. Cool. Yeah, thank you. Thank you for your kind introduction.

00:10.000 --> 00:17.760
Yeah. You were always told, I'm showing you about skatex, and I've stick a slider, so

00:17.760 --> 00:23.200
you can teach us whatever. Anyway, let's get started. You probably all know that we have

00:23.200 --> 00:28.240
multiple CPUs, and I always assume for example, in this system, I have 8 CPUs, but

00:28.240 --> 00:34.560
I have multiple tasks. For example, I've fully like 8 IDs or something running, and so

00:34.560 --> 00:40.240
what we now want is we want to scale release on the CPU. To make it easier, we say we have

00:40.240 --> 00:44.960
only like 2 tasks, and we have only 1 CPUs, like in the older days. And what we want to do,

00:44.960 --> 00:50.960
we want to run both applications of both tasks. These tasks might be purchased. They might be

00:50.960 --> 00:59.120
referred to or what else. And so what we could do, we could just run task 1 all the time,

00:59.120 --> 01:03.440
but this won't be fair. We will be starving task 2 and everyone will be great. So what we

01:03.440 --> 01:08.800
usually do, we scale task 1 for a bit, we scale task 2 for a bit, then we are like a task 1,

01:08.800 --> 01:12.720
and we scale with it, but then task 2 doesn't want to come, because it's probably

01:12.720 --> 01:18.320
writing for a database connection, so we scale task 1 again, and so on. And that's essentially

01:18.320 --> 01:23.680
called scheduling. The thing is scaling is really nice, and everything, but the only problem is,

01:23.680 --> 01:29.040
it's in the older days, like before Linux 6.12, it was really hard to create your own,

01:29.040 --> 01:35.120
because as someone told me, within the now we taught my life here, it was like 3, 4 people in the

01:35.120 --> 01:41.680
whole world knew how to do it, it was a cane code. That was pretty much a problem, because we

01:41.680 --> 01:49.120
started innovation with this. And so what's nowadays is that we can create our own using

01:49.120 --> 01:54.960
the scalar extensions and EVPF. You probably all know about EVPF here, so I won't be

01:54.960 --> 02:00.480
going into details, but I tell you now about schedule a bit. So what is schedule, it's essentially

02:00.480 --> 02:06.640
the scalar extensions of the Linux code, which means these extensions made to EVPF like you,

02:06.640 --> 02:13.920
for example, know the XCP subsystem, which you can write, package filters, or other subsystems

02:13.920 --> 02:18.800
like the Linux security model, this is essentially the same bad for scheduling. The person that you

02:18.800 --> 02:25.120
see here with his halo, his vision, he wrote, tell us later, getting this in, and I quote him

02:25.120 --> 02:32.080
here with, or he thought was the most important stuff about analytics. He said, the benefits are

02:32.080 --> 02:38.000
of one, the ease of experimentation. I can show you here on the slides of full working

02:38.000 --> 02:43.360
scheduler that can run a whole presentation. It allows us to customize, because we can write

02:43.360 --> 02:48.800
our own scheduler, we're not stuck with like EVDF, that's in this code, it's called, but

02:48.800 --> 02:53.600
there are some instance where we might want to have a different scheduler, and it also allows us

02:53.600 --> 02:58.800
the rapid deployment of schedulers. The main thing is, as someone told me, who did some

02:58.800 --> 03:04.240
call involvement with like in the olden days when we wanted to write a scheduler, and deployed,

03:04.240 --> 03:10.480
we had to restart like 1000 machines, and then wait, of course, before we had to recompile a comma,

03:10.480 --> 03:14.800
everything, and that's horrible. So we get all the benefits of EVPF in the scheduler world,

03:14.800 --> 03:19.600
and that's pretty cool, and it allows us to make rapid progress, as many of you have

03:19.600 --> 03:25.600
probably seen because like the BVF scaler are beating scaler in the gaming world, for example,

03:25.600 --> 03:31.840
and it's pretty nice. So I want to show you the simple schedule dance. It's essentially how

03:31.840 --> 03:37.760
a basic scheduler works. More than more complex scalers have more things, but this is like the

03:37.760 --> 03:43.040
most basic version. So on top of our task day come in, and then we have essentially two kinds

03:43.040 --> 03:49.600
of cues. We have global cues that our scheduler uses to have state. These can be priority cues

03:49.760 --> 03:55.120
are usually day addressed, simple cues, as you know them from computer science classes.

03:55.120 --> 04:00.480
And then we have local cue scenes, local cues are fine to CPUs, so every CPU has a

04:01.680 --> 04:06.960
local key on what we do when the task comes free. It's like going into the trouble too,

04:06.960 --> 04:12.880
usually, and then every time a CPU is like, I need some work, or we tell the CPU,

04:12.880 --> 04:19.360
you need some work, drop everything you do, it's called kicking. So we literally kick our CPUs,

04:19.360 --> 04:24.160
which is kind of implored, but so what we do when the CPU asks us, I'll say,

04:25.200 --> 04:30.720
give me a task, and we're like, we're using our totally cool new algorithms,

04:30.720 --> 04:36.320
ask the global cue from the element, and then we'll find. And then when the CPU is like finished,

04:36.320 --> 04:40.720
and it's like with the task, because task run in a specific time size, as I showed you in the

04:40.720 --> 04:46.640
beginning, then the task goes back into a global cue. And essentially these distance,

04:46.640 --> 04:52.000
how we cope with the choreography of this dance, this is what we do with scale extensions.

04:52.000 --> 04:56.240
And the cool thing is, it's highly abstracted, so you don't have to implement the project. You

04:56.240 --> 05:01.680
don't have to implement all the medically details of how the signals really can scaling,

05:01.680 --> 05:08.080
which makes it usable. And even the best thing here is that whenever one task is stuck in

05:08.080 --> 05:13.920
not executing these parts, it's gone for like 30 seconds, then Linux is like 30 seconds is almost

05:13.920 --> 05:19.200
infinity and scaling. I just kick your scheduler, and it's really nice, and I can't tell you how

05:19.200 --> 05:23.360
often this happened with this machine, and it's cool, because don't have to restart the system.

05:23.360 --> 05:27.840
After 30 seconds, even if you do some creation mistake, it's back mobile, and it's cool for

05:27.840 --> 05:34.080
life timers, I can't tell you. As we see in a minute. Anyway, so essentially how our basic

05:34.080 --> 05:39.280
serial rigs is, we have here our NT work, that's essentially called whenever task is like,

05:39.280 --> 05:45.520
I'm ready to be pushed on, then we have our main scale link to you, and then essentially we move

05:45.520 --> 05:52.080
it to the local queue, and then we have an NQR, the NQR is also called when the task is like,

05:52.080 --> 05:57.200
finished with its time slides. Be aware that there have been name changes, so the names

05:57.200 --> 06:01.840
they show here are the 6, the 30 names. They were changed, because the openings were really

06:01.840 --> 06:06.240
confusing, because there were two things that were called dispatch. I can tell you, that's not

06:06.240 --> 06:12.800
great, and then we change it. That's cool, and my code in this, it's a really cool community,

06:12.800 --> 06:17.680
it's something that's confusing, just follow them, and in the end, you see your name on the

06:17.680 --> 06:23.600
local mail list. Anyway, so these are the main changes, I don't go over them, it's just when

06:23.600 --> 06:28.800
you see existing examples, but the openings work, because as we know, EPPF is like stable and such,

06:28.800 --> 06:35.280
so how to say now to our scale loss, a basic cell law works, a basic title scale law works

06:35.280 --> 06:40.240
essentially by we get tasks in, and the same all that they get, and we take them out. It's pretty

06:40.240 --> 06:46.800
simple, it has advantages, because we don't, we scale in, in like a deterministic fashion,

06:47.520 --> 06:55.360
but there are also another print, as we probably see now, if anything goes correct. So here you see,

06:55.440 --> 07:02.080
he's a simple schedule, before he's just some, some definition, some definitions that we need,

07:02.080 --> 07:10.080
but they are not important, so what we, what we start with, we start with creating our scale

07:10.080 --> 07:17.200
on Q, so in the end it method, we create our scale on Q and we can then use it as our global

07:17.200 --> 07:21.760
Q, and what we don't do, we have to end Q, so totally that's when the task is like,

07:21.760 --> 07:26.400
ready, and it's like, I want to be scheduled, please, and then what we do, we compute the

07:26.400 --> 07:32.560
slices like the amount of time that the process can run at the time, and then we insert into a

07:32.560 --> 07:38.480
local Q, here we just, and then we insert it into the global Q, so totally before, and then take

07:38.480 --> 07:43.920
it out later. The cool thing is here the slices in, in micro seconds, and I, in nano seconds,

07:43.920 --> 07:48.720
and I can show you later what happens when we make it a little bit larger, and you can see the

07:48.720 --> 07:54.400
direct effect, what we usually want to do is, and what makes the scale of, somewhat usable

07:54.400 --> 07:58.880
in the direct to seconds, that the longer the Q is the, the smaller our time slices become,

07:59.600 --> 08:04.320
it just makes it so that when our system gets overloaded, we can still schedule stuff,

08:04.320 --> 08:09.440
and then, um, to this point, it's pretty simple, which is so like, pet the fruit's task,

08:09.440 --> 08:13.280
I don't care, and it's just more than this, so for example, it takes care,

08:14.160 --> 08:19.760
you know, that maybe some process can't be run on all, some tasks can be run on all CPUs,

08:20.880 --> 08:25.600
and it takes cage of this, and it's pretty cool, because cave threads are slightly different,

08:25.600 --> 08:32.800
as you see in a minute, so that works. Let's see, it's a live demo, it's a live demo, wish me luck.

08:32.880 --> 08:41.760
Um, thank you, um, the major task for presentation, remember in one's password,

08:46.240 --> 08:52.960
I think that's like, that that's like the major task, so, no, I'm imploshing, it will get worse,

08:53.840 --> 09:05.360
it's quite embarrassing, but a bit, so, um, essentially, um, it's, it's essentially,

09:05.360 --> 09:11.760
I have to schedule our attention, it's cool, and what we can, to look at, what skin law we have,

09:11.760 --> 09:19.360
we can just say, um, you see, to cut, get a fruit up, so we can, we can look up the name,

09:19.360 --> 09:24.320
and we define the name here later, so it's just struck up, so we define the name here,

09:24.320 --> 09:28.800
and that's pretty simple, so we can have a schedule, as you see, maybe the demos is slightly,

09:30.400 --> 09:36.000
it could be a little bit more responsive, so if we add to your service, so our time source is

09:36.000 --> 09:47.120
now 50 milliseconds, don't do this at home, kids, um, start, now it's the out, yeah, I have to

09:48.080 --> 09:53.760
no, it should work, yeah, it's still the minimum skill, like it, now it's getting a little bit more

09:53.760 --> 10:03.200
choppy, um, and you can use this, and G, with like two cores, there should be some sloppiness,

10:03.200 --> 10:10.880
anyway, um, they is trust me, um, you see here, that's a pretty basic skill, and that's really cool,

10:10.880 --> 10:16.400
that you have like 10 lines of C-code, and you have a stellar, now on to more interesting

10:16.400 --> 10:20.960
servers, um, this is one scale that I really like when I was in operating system class,

10:21.760 --> 10:28.160
because it's called a lottery scale, so then she, um, like a lottery, you pull, um, you pull,

10:28.720 --> 10:34.320
you put all the tasks that you have in, in your queue, into a ball, in, in, like a lottery ball,

10:34.400 --> 10:41.040
and then from randomly from it, and that's nice, because, um, it gives us non, non-determinism,

10:41.040 --> 10:46.320
we can use this ball, for like a maybe in ranges of cryptography, I don't know, and for testing,

10:46.320 --> 10:49.520
if you want to know about how we can use non-determinism, and testing,

10:49.520 --> 10:54.160
there was a talk in the testing that room this morning, um, I can really recommend it,

10:54.720 --> 11:00.160
because it was mine, or by the person's alley there, because that only came after the talk was finished,

11:00.480 --> 11:06.240
um, trains are also under-deterministic. Anyway, um, how do you implement a lottery scale?

11:06.240 --> 11:09.920
It's pretty simple, let's get in it, as you see here, it's the same,

11:10.560 --> 11:14.880
the scattering queue is also the same, because we're also putting it in a cloud book here,

11:14.880 --> 11:20.240
the only difference is here. Um, it might seem like a lot of code, but it isn't, so essentially,

11:20.240 --> 11:25.600
what we do here, we, we loop, we can loop over the queue. We can, in, in, in this line, we can loop

11:25.600 --> 11:29.040
over the queue, and essentially what we're doing, we're first taking us to run the number,

11:29.040 --> 11:33.600
and then we like take a random number between like the, the start of between a zero,

11:33.600 --> 11:39.760
and the end of the queue, and then it's just walked away, got there, and also you see a BTF CPU

11:39.760 --> 11:46.000
mask has, we, we just sit more if we can't run it there and like skip it, because sometimes

11:46.000 --> 11:50.640
it's that like all flights, they can only be run on certain CPUs, and then we just switch it,

11:50.640 --> 11:55.840
and the important here in this example is I added a print, so I can show you that it really works,

11:55.920 --> 12:06.880
so let's, let's look at it, start as H lottery, now, and if everything goes well,

12:07.840 --> 12:13.280
you see here, um, well, it's still all of us. It tells us exactly, because it's just that

12:13.280 --> 12:18.320
BTF in case, you probably all know, like, for logging, and you see here, where we're

12:18.320 --> 12:23.680
selling the multicolored scaling cable, because the system is quite idle, when we move the

12:23.760 --> 12:29.120
cruiser, we see something more, and that's pretty cool, because we've now written a

12:29.120 --> 12:34.480
scale that locks us every scale length decision, we can insert BTF in case everywhere, we could

12:34.480 --> 12:42.080
even like, um, recorded to output sound and anything, I've done weird stuff, um, if you have

12:42.080 --> 12:50.880
other weird ideas, wait for it to all the end, um, so that's that's all, um, so of course, um,

12:50.960 --> 12:57.600
faster than I expected, but anyway, so of course, um, you don't have to write C code,

12:58.640 --> 13:04.480
um, you can also write Java code, because with a simple, with a simple, because with a simple,

13:05.520 --> 13:11.520
implement schedule, you have a scheduler, and in Rust, it's also, uh, comparably easy, so

13:11.520 --> 13:17.120
you don't have to write C code all the time, and what you also don't have to do, you don't have to,

13:17.200 --> 13:21.920
like, manually, use BTF tool, like, I did, um, if you want to know more of these,

13:21.920 --> 13:25.520
like, to correct code for this, and the cool thing with, well, for if the scale, like,

13:25.520 --> 13:30.320
sentient that it opens to door for, for other people to work with skills, because before it

13:30.320 --> 13:37.040
works like, the, the reclusive thing of, like, a few nodes, and now we can show this to people,

13:37.040 --> 13:41.600
and be like, and I can show you, like, write your own scheduler, like, it's not hard,

13:41.600 --> 13:46.240
and it's a cool thing with EVPF, because the choice of words at all, it is. But so,

13:46.320 --> 13:52.480
pretty small group of people that really distinguish it at a conference, ask us about scale X,

13:52.480 --> 13:58.560
when you see them, um, and that's pretty cool, and, and nothing they want to mention,

13:58.560 --> 14:04.320
during the, during the work and this, um, I felt that verify issues can be quite nasty,

14:04.320 --> 14:10.160
so it started a verify error project, so if you want to contribute, contribute your verify errors,

14:10.160 --> 14:15.360
because in the end I think, um, what we want to do with EVPF is, make it also

14:15.360 --> 14:20.720
educational to it, because before we start learning and scale in, in, like, operating system

14:20.720 --> 14:25.520
classes, we told them like, oh, scale, scale, scale, it's really hard, it's like,

14:25.520 --> 14:29.600
no, you can't implement your own, but now we can be like, here are 10 lines of sea code,

14:29.600 --> 14:33.760
and you have your scheduler, and that's, and that's very cool and do experiments on it.

14:33.760 --> 14:39.440
And, now I'm coming to the end, um, the thing that, that we launched just for customers,

14:39.440 --> 14:44.880
you see the t-shirt, and you see this mark. The thing is, we, we made a scheduler context,

14:44.880 --> 14:50.080
we, that's like, all the people behind scatex, you can win a mark, and the t-shirt,

14:50.080 --> 14:55.200
if you submit your own scheduler, um, so you can either submit your best-scaling ideas that

14:55.200 --> 15:00.640
gets you t-shirt, or you can submit the tiny implementation of a scheduler, whatever you want

15:00.640 --> 15:06.640
to do with the scatex, we're open to any language, program it in batch, if you write the

15:06.720 --> 15:12.800
library for this. But just submit it here, and, um, you have time till tomorrow at 10,

15:12.800 --> 15:18.560
and then be able to give the prizes to the best, whatever best means, that's, there are

15:18.560 --> 15:25.200
our interpretation, um, in, um, trail release talk, in the, uh, Linux, in the, I think it was the

15:25.200 --> 15:32.160
code that room, you can find all the informations here in this repository, and I hope you submit something.

15:32.240 --> 15:37.440
I was Johannes Bechtberger, you find my blog at mostly another study, but write random stuff,

15:37.440 --> 15:44.560
counting most scaling, um, and you can find more about, uh, my team, uh, which is submission here,

15:44.560 --> 15:51.120
and the QR code should lead you to the scheduler context. And I think that's all here. Thank you.

15:51.120 --> 15:53.120
Thank you.

15:57.120 --> 15:59.120
Do we have time for questions?

16:01.120 --> 16:03.120
Yes.

16:22.080 --> 16:28.000
Yes. So the question was, is, is, is, is, is it, it could be a real benefit for real-time

16:28.000 --> 16:32.720
comments, these custom scalars? This custom scalars are a benefit for everything that has

16:32.720 --> 16:37.520
dominated, where we know more than like the schedule developers, which are many applications,

16:37.520 --> 16:42.080
for example, that the companies developing their own scalars to improve gaming, to improve the

16:42.080 --> 16:48.720
server performance of websites that you use daily, because if they can like, inch out, get out,

16:48.720 --> 16:53.440
like, half a percent of performance, that's really a lot if you have a couple of hundreds of

16:53.440 --> 16:56.720
thousands of service. Um, yeah.

16:56.720 --> 16:58.720
Good for a lot of questions. Oh, even one more, yes.

16:58.720 --> 17:02.720
Thank you for the invitation. Thanks for that energy.

17:02.720 --> 17:09.760
I have anybody's right, sure, like, free hands, uh, the existing schedule just to see how much

17:09.760 --> 17:16.080
I covered the screen. So the, the question was, could we could implement existing scalars with this?

17:16.160 --> 17:22.000
The thing is probably, but it doesn't make any sense for honest. Uh, yeah, to check the overheads,

17:22.000 --> 17:27.120
yes, it could make sense, but the thing is in the end, the overhead is, uh, negligible,

17:27.120 --> 17:32.160
because scheduling is never like the thing that costs you performance, that she is going

17:32.160 --> 17:36.240
to say, and we want to make them as fast as possible, and typically we want to implement

17:36.240 --> 17:41.920
new cool scheduling decisions. So most of the workers focus there, you find more and you find

17:41.920 --> 17:47.360
more in this in like the schedule of contest. So please submit within have any submission.

17:47.360 --> 17:52.080
So your chances are really high together. Nice, you should. And this is exactly how.

