Re: Some -serious- BPF-related litmus tests
From: Akira Yokosawa
Date: Tue May 26 2020 - 10:02:57 EST
On Tue, 26 May 2020 19:50:47 +0900, Akira Yokosawa wrote:
> On Mon, 25 May 2020 16:31:05 -0700, Andrii Nakryiko wrote:
>> On Mon, May 25, 2020 at 3:01 PM Akira Yokosawa <akiyks@xxxxxxxxx> wrote:
>>> Yes, that should work.
>> Ok, assigning to zero didn't work (it still complained about
>> uninitialized read), but using a separate int *lenFail to assign to
>> rLenPtr worked. Curiously, if I used rLenPtr = len1; in error case, it
>> actually takes a bit more time to verify.
>> So I've converted everything else as you suggested. I compiled latest
>> herd7 and it doesn't produce any warnings. But it's also extremely
>> slow, compared to the herd7 that I get by default. Validating simple
>> 1p1c cases takes about 2.5x times longer (0.03s vs 0.07),
Wait a moment!
This 0.03s was the run time of the original 1p1c litmus test, wasn't it?
Then you are comparing apples and oranges.
How long does your default herd7 take to complete the updated 1p1c test?
>> but trying
>> to validate 2p1c case, which normally validates in 42s (unbounded) and
>> 110s (bounded), it took more than 20 minutes and hasn't finished,
>> before I gave up. So I don't know what's going on there...
> herdtools7 has recently been heavily restructured.
> On the performance regression, I must defer to Luc.
> Luc, do you have any idea?
>> As for klitmus7, I managed to generate everything without warnings,
>> but couldn't make it build completely due to:
>> $ make
>> make -C /lib/modules/5.6.13-01802-g938d64da97c6/build/
> So you are on Linux 5.6.x which requires cutting-edge klitmus7.
>> M=/home/andriin/local/linux-trees/tools/memory-model/mymodules modules
>> make: Entering directory `/data/users/andriin/linux-build/fb-config'
>> make: Entering directory `/data/users/andriin/linux-build/default-x86_64'
>> CC [M] /home/andriin/local/linux-trees/tools/memory-model/mymodules/litmus000.o
>> In function âzyvaâ:
>> warning: ISO C90 forbids variable length array âthâ [-Wvla]
>> struct task_struct *th[nth];
>> In function âlitmus_initâ:
>> error: passing argument 4 of âproc_createâ from incompatible pointer
>> type [-Werror=incompatible-pointer-types]
>> struct proc_dir_entry *litmus_pde =
>> In file included from
>> /data/users/andriin/linux-fb/include/linux/proc_fs.h:64:24: note:
>> expected âconst struct proc_ops *â but argument is of type âconst
>> struct file_operations *â
>> struct proc_dir_entry *proc_create(const char *name, umode_t mode,
>> struct proc_dir_entry *parent, const struct proc_ops *proc_ops);
>> cc1: some warnings being treated as errors
>> make: *** [/home/andriin/local/linux-trees/tools/memory-model/mymodules/litmus000.o]
>> Error 1
>> make: *** [/home/andriin/local/linux-trees/tools/memory-model/mymodules]
>> Error 2
>> make: Leaving directory `/data/users/andriin/linux-build/default-x86_64'
>> make: *** [sub-make] Error 2
>> make: Leaving directory `/data/users/andriin/linux-build/fb-config'
>> make: *** [all] Error 2
> These errors suggest the klitmus7 you used is version 7.52 or some such.
> You said you have built herd7 from the source. Have you also built klitmus7?
> The up-to-date klitmus7 should generate code compatible with Linux 5.6.x.
> Could you try with the latest one?
> Thanks, Akira
>> But at least it doesn't complain about atomic_t anymore. So anyways,
>> I'm going to post updated litmus tests separately from BPF ringbuf
>> patches, because Documentation/litmus-tests is not yet present in
>>> You can find a basic introduction of klitmus7 in tools/memory-model/README.
>>> Thanks, Akira
>>>>> Please note that if you are on Linux 5.6 (or later), you need an up-to-date
>>>>> klitmus7 due to a change in kernel API.
>>>>> Any question is welcome!
>>>>> Thanks, Akira