On 2015/8/13 21:58, Cyril Hrubis wrote:
Hi,
Thank you for your reply and advice, first.
> Have you used checkpatch.pl to check the patch before sending?
> (checkpatch.pl is shipped with Linux kernel sources)
I forget it, sorry.
>
>> +#include <errno.h>
>> +
>> +#include "test.h"
>> +
>> +char *TCID = "edf_test01";
>> +int TST_TOTAL = 1;
>> +
>> +#define gettid() syscall(__NR_gettid)
>
> Even since this is not particulary harmful, can we use static inline
> function instead?
OK.
>
>> +#define SCHED_DEADLINE 6
>
> This is defined in /usr/include/linux/sched.h, Why don't just include
> the header.
>
"EDF(earliest deadline first algorithm) was added to the Linux scheduler in
version 3.14".
And the glibc doesn't support it now.
So the 'SCHED_DEADLINE'(and 'sched_attr') can't be found in the system which
has kernel 3.13 or before.
Should I create include/lapi/sched.h file in LTP and add to it?
>> +/* XXX use the proper syscall numbers */
>> +#ifdef __x86_64__
>> +#define __NR_sched_setattr 314
>> +#define __NR_sched_getattr 315
>> +#endif
>> +
>> +#ifdef __i386__
>> +#define __NR_sched_setattr 351
>> +#define __NR_sched_getattr 352
>> +#endif
>> +
>> +#ifdef __arm__
>> +#define __NR_sched_setattr 380
>> +#define __NR_sched_getattr 381
>> +#endif
>
> You should add these to the tables in testcases/kernel/include/,
> regenerate them and include linux_syscall_numbers.h here.
OK.
>
>> +struct sched_attr {
>> + __u32 size;
>> +
>> + __u32 sched_policy;
>> + __u64 sched_flags;
>> +
>> + /* SCHED_NORMAL, SCHED_BATCH */
>> + __s32 sched_nice;
>> +
>> + /* SCHED_FIFO, SCHED_RR */
>> + __u32 sched_priority;
>> +
>> + /* SCHED_DEADLINE (nsec) */
>> + __u64 sched_runtime;
>> + __u64 sched_deadline;
>> + __u64 sched_period;
>> +};
>
> Where is this structure from?
We can find it in include/linux/sched.h of kernel source (linux 3.14 or later).
Glibc doesn't support it now, so I define it in testcase.
Should I add it to include/lapi/sched.h?
>
> I can find it in manual page, so I guess that it's correct, but even
> then it should be in include/lapi/sched.h and we should use userspace
> types, i.e. uint32_t instead of __u32 (wich are glibc internal types if
> I remeber correctly).
I have a problem there. Use u32 (get by include/linux/sched.h), __u32 (get by
Documentation/scheduler/sched-deadline.txt
in linux 4.1) or uint32_t ?
>
>> +int sched_setattr(pid_t pid,
>> + const struct sched_attr *attr,
>> + unsigned int flags)
> ^
> Spaces before tabs.
>> +{
>> + return syscall(__NR_sched_setattr, pid, attr, flags);
>> +}
>> +
>> +int sched_getattr(pid_t pid,
>> + struct sched_attr *attr,
>> + unsigned int size,
>> + unsigned int flags)
> ^
> Here as well.
>> +{
>> + return syscall(__NR_sched_getattr, pid, attr, size, flags);
>> +}
>
> These should go to the lapi/sched.h as well.
OK.
>
>> +
>> + if ( (10000000 != attr_copy.sched_runtime) ||
>> + (30000000 != attr_copy.sched_period) ||
>> + (30000000 != attr_copy.sched_deadline) ) {
>> + tst_brkm(TFAIL, NULL, "edf_test01 failed\n");
>
> Do not include name of the test in the
> error message. It will be include there
> in the test library.
>
>
> Also split this if to three ifs and print
> what exactly was different that we
> expected. I.e.
>
> #define RUNTIME_VAL 10000000
>
>
> ...
>
> int fail = 0;
>
> if (attr_copy.sched_runtime != RUNTIME_VAL) {
> tst_resm(TINFO, "sched_runtime is incorrect (%" PRIu64
> ") expected %u", attr.sched_runtime,
> RUNTIME_VAL);
> fail++;
> }
>
>
> ...
>
>
> if (fail)
> tst_resm(TFAIL, "attributes were read back incorrectly");
> else
> tst_resm(TPASS, "attributes were read back correctly");
>
>
>> + }
It looks better than mine. Thank you.
>> + pthread_create(&thread, NULL, run_deadline, NULL);
>> +
>> + sleep(1);
>
> Do not use sleep this way in testcases ever. The main thread will sleep
> in the pthread_join() until the thread that does the test exits. This
> will only slow the execution because it will wait 1 second even after
> the test thread has finished allready.
>
OK.
>
> Looking at the test it may be more suitable to be in
> syscalls/sched_getattr/ directory, since it's not testing nothing more
> than the syscalls can set and read back it's parameters.
It's good.
I want to add some testcases for testing edf scheduler which be supported by
linux 3.14.
And there may be a lot of mistakes. Thank you for your advice.
Thanks,
Cui Bixuan
------------------------------------------------------------------------------
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list