1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Writing a scheduler

Discussion in 'FreeBSD Development' started by justint, Jan 23, 2010.

  1. justint

    justint New Member

    Messages:
    5
    Likes Received:
    0
    Hi, I'm trying to write my own custom scheduler.

    I'm having trouble knowing where to declare my code and what's the best way to "stick it into the kernel".

    1. I have a global: custom_scheduler = 0, which the user can toggle
    2. in kern/kern_switch.c:
    Code:
    runq_choose() {
    ...
      if(custom_scheduler)
         return my_scheduler(rq);
    ...
    }
    What's the best way to include my function my_scheduler(struct runq* rq)? Can I create a kld module? Or must I #include <kern/my_scheduler.c> or something along those lines?

    Sorry for such a dumb question, but I'm just starting with freebsd development.

    Thanks!
     
  2. GPF

    GPF New Member

    Messages:
    25
    Likes Received:
    0
    Questions concerning the low level implementation of the kernel are better addressed at the hackers mailing list. I'll give you enough to get you started though.

    Take a look at /sys/kern/sched_4bsd.c and /sys/kern/sched_ule.c

    These are the two schedulers you 'll find in fbsd, ule is used by default. grep the code in /sys/kern with the right keyword and perhaps you 'll find your answer alone before someone just hands it to you.

    Good luck!
     
  3. FDeveloper

    FDeveloper New Member

    Messages:
    4
    Likes Received:
    0
    I don't understand

    Hi,

    can you tell me what's wrong with justint's solution for implementing the new scheduler if we change all runq_choose functions?
     
  4. FDeveloper

    FDeveloper New Member

    Messages:
    4
    Likes Received:
    0
    how to call syscall in kernel

    Hello,
    I have another question.
    I want to change the ule scheduler a little.
    for this purpose I decided to call a lkm(syscall) in tdq_choose function in sched_ule.c file and implement my code in that module.
    Is that correct to do call a lkm in kernel?
    If yes, how can I call the module?
    I used syscall(syscall_num,...) it has compile error and the error is:
    Code:
    usr/src/sys/kern/sched_ule.c:1233: warning: implicit declaration of function 'syscall'
    can anyone help me how to fix the problem?
    thanks.
     
  5. richardpl

    richardpl New Member

    Messages:
    841
    Likes Received:
    0
    Isn't syscall for userland?
     
  6. FDeveloper

    FDeveloper New Member

    Messages:
    4
    Likes Received:
    0
    I think, we can open, exit, fork and other syscalls in kernel, don't we?

    I don't know how we should call a syscall(lkm) in kernel codes?
     
  7. Alt

    Alt New Member

    Messages:
    726
    Likes Received:
    0
    fork/exit in kernel ? o_O
     
  8. richardpl

    richardpl New Member

    Messages:
    841
    Likes Received:
    0
    You can certainly fork and exit kernel processes and kernel threads in kernel.
     
  9. FDeveloper

    FDeveloper New Member

    Messages:
    4
    Likes Received:
    0
    So, does anyone know how can we call a syscall (lkm) in kernel codes?
     
  10. richardpl

    richardpl New Member

    Messages:
    841
    Likes Received:
    0
    Ask on mailing lists.
     
  11. fidaj

    fidaj New Member

    Messages:
    49
    Likes Received:
    0
    Hi!
    Well - there are some results?
    Can I have something to test?

    Do you know about the existence of alternative scheduling FBFS? http://rudot.blog.com/