From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <0x66726565@gmail.com> Received: from mail-io1-xd2c.google.com (mail-io1-xd2c.google.com [IPv6:2607:f8b0:4864:20::d2c]) by sourceware.org (Postfix) with ESMTPS id 5E8463850415 for ; Wed, 26 May 2021 09:36:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 5E8463850415 Received: by mail-io1-xd2c.google.com with SMTP id k22so301080ioa.9 for ; Wed, 26 May 2021 02:36:47 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=hWhh/+6MPNsgsqYSYqYqjmXQfI+jZAq+QEfYWtARM3A=; b=oALb6/f40QcJ9K25+vgzQLAprluFrVSRgRVQPqw3XtHzmhm2Pd0vlM7424e20RlHP0 w53fw4bauj+OtLksjVwbSWXMS0qiwCtK9+18ozhmxesPtDSqDzeN9TnCWrqrHWaQNv50 qupzH2f2zsb/rkhR7MY3TWMgzXzdnlQGQIWlb87mOTNxN6K/8Ebx3OBnw33M9UzFsKGO PfZQdJhcoAdvXh2sUi/WoX/EULd2WcPzr4sRrt44xeteaUl8lZViOItIKi5JO3zWmLc5 X6ZqCF7XOMuzf6vpFKBaycgs/ZiTfMXCIeEPkSCTGBhBDevICK6uwCMo5JHk25zE4gEq +tiQ== X-Gm-Message-State: AOAM532mEUkoEuKAIyPY7fzuM5OvXM30xPCBELRryzb1F5KvKYtDLK68 Aac0gZz8px56JqvjbCRPn6FAFsOdcvzoN75CYQ== X-Google-Smtp-Source: ABdhPJzA2W00k3HbrIP6UY+tH/H15MGLXcP84R/DJUFAzsEflQC/aUrAeRdLNnWs2JJsK5tJt8nlVzguy/cXOFs9S2Q= X-Received: by 2002:a05:6602:2186:: with SMTP id b6mr23508606iob.128.1622021806548; Wed, 26 May 2021 02:36:46 -0700 (PDT) MIME-Version: 1.0 References: <877djtsm5h.fsf@oldenburg.str.redhat.com> <75365b7da217aab24c686e18399bc017aa6c9ac7.camel@yandex.ru> <7eb8d574-45c0-32d8-2b9d-c719535fd246@linaro.org> In-Reply-To: <7eb8d574-45c0-32d8-2b9d-c719535fd246@linaro.org> From: Tadeus Prastowo <0x66726565@gmail.com> Date: Wed, 26 May 2021 11:36:35 +0200 Message-ID: Subject: Re: Yield to specific thread? To: Adhemerval Zanella Cc: Alexandre Bique , Konstantin Kharlamov , Florian Weimer , Alexandre Bique via Libc-help Content-Type: multipart/mixed; boundary="000000000000990c3d05c33861ab" X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-help@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-help mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 26 May 2021 09:36:50 -0000 --000000000000990c3d05c33861ab Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Based on my observation with the attached C program (please read the comments for usage instruction and note that it requires root privilege to use the POSIX real-time scheduling policy) when compiled by defining or not defining the macro UNICORE, the priority support works with glibc at least in Ubuntu 16.04 provided that the process is not allowed to migrate to another processor core. --=20 Best regards, Tadeus On Tue, May 25, 2021 at 8:58 PM Adhemerval Zanella via Libc-help wrote: > > I think you will need a conditional variable with a priority support. > Unfortunately POSIX requirements makes hard to provide it on glibc, > > There is a project that aims to provide it [1] and I think it would > fit better in the scenarios you described: you setup a conditional > variable on a shared memory between the two processes A and B, you > setup B with higher priority than A, and when A produces a request > the condvar wakeup event will wake the highest priority waiters > (in the case B). > > This library uses the FUTEX_WAIT_REQUEUE_PI futex operations with a > different (and I think non-POSIX conformant) conditional variable > implementation. > > [1] https://github.com/dvhart/librtpi > > On 20/05/2021 08:54, Alexandre Bique via Libc-help wrote: > > Oh I think I fixed it using 3 mutexes. > > Alexandre Bique > > > > On Thu, May 20, 2021 at 1:20 PM Konstantin Kharlamov wrote: > >> > >> On Thu, 2021-05-20 at 13:09 +0200, Alexandre Bique via Libc-help wrote= : > >>> On Thu, May 20, 2021 at 1:03 PM Florian Weimer w= rote: > >>>> > >>>> * Alexandre Bique via Libc-help: > >>>> > >>>>> Ideally I'd like to do: > >>>>> A produces a request > >>>>> A sched_yield_to(B) > >>>>> B processes the request > >>>>> B sched_yield_to(A) > >>>> > >>>> This looks like an application for a condition variable or perhaps a > >>>> barrier. If there is just a single writer, the kernel should wake u= p > >>>> the desired thread. > >>> > >>> I don't think conditions or barriers would solve the problem. Because > >>> they would just put the waiting threads on the wake up queue like the > >>> read() on the pipe would. > >> > >> I assume it should work. I remember Torvalds ranting about people usin= g sched_yield() for the wrong reasons=C2=B9, and he mentioned mutex (which = apparently worked for you) as one of possible solutions. Quoting: > >> > >>> Good locking simply needs to be more directed than what "sched_yield(= )" can ever give you outside of a UP system without caches. It needs to act= ively tell the system what you're yielding to (and optimally it would also = tell the system about whether you care about fairness/latency or not - a lo= t of loads don't). > >>> > >>> But that's not "sched_yield()" - that's something different. It's gen= erally something like std::mutex, pthread_mutex_lock(), or perhaps a tuned = thing that uses an OS-specific facility like "futex", where you do the nonb= locking (and non-contended) case in user space using a shared memory locati= on, but when you get contention you tell the OS what you're waiting for (an= d what you're waking up). > >> > >> > >> 1: https://www.realworldtech.com/forum/?threadid=3D189711&curpostid=3D= 189752 > >> --000000000000990c3d05c33861ab Content-Type: text/x-csrc; charset="US-ASCII"; name="multicore-condvar.c" Content-Disposition: attachment; filename="multicore-condvar.c" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kp59ug0s0 I2lmZGVmIFVOSUNPUkUKLyogX0dOVV9TT1VSQ0UgbXVzdCBiZSBkZWZpbmVkIHRvIHVzZSBzY2hl ZF9zZXRhZmZpbml0eSgpICovCiNkZWZpbmUgX0dOVV9TT1VSQ0UKI2VuZGlmCgojaW5jbHVkZSA8 c3RkbGliLmg+CiNpbmNsdWRlIDxwdGhyZWFkLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVk ZSA8c2NoZWQuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKc3RydWN0IHRocmVhZF9kYXRhCnsKICBp bnQgKnNoYXJlZF9kYXRhOwogIHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXg7CiAgcHRocmVhZF9jb25k X3QgKmNvbmR2YXI7CiAgcHRocmVhZF9jb25kX3QgKmRvbmU7CiAgaW50ICpyZWFkeV9jb3VudDsK ICBpbnQgdmFsdWVfdG9fd3JpdGU7CiAgcHRocmVhZF90IHRpZDsKfTsKCnN0YXRpYyB2b2lkICpq b2JfYm9keSh2b2lkICphcmcpCnsKICBzdHJ1Y3QgdGhyZWFkX2RhdGEgKnRocmVhZF9kYXRhID0g YXJnOwoKICBwdGhyZWFkX211dGV4X2xvY2sodGhyZWFkX2RhdGEtPm11dGV4KTsKICArKyp0aHJl YWRfZGF0YS0+cmVhZHlfY291bnQ7CiAgcHRocmVhZF9jb25kX3dhaXQodGhyZWFkX2RhdGEtPmNv bmR2YXIsIHRocmVhZF9kYXRhLT5tdXRleCk7CiAgKnRocmVhZF9kYXRhLT5zaGFyZWRfZGF0YSA9 IHRocmVhZF9kYXRhLT52YWx1ZV90b193cml0ZTsKICBwdGhyZWFkX2NvbmRfc2lnbmFsKHRocmVh ZF9kYXRhLT5kb25lKTsKICBwdGhyZWFkX211dGV4X3VubG9jayh0aHJlYWRfZGF0YS0+bXV0ZXgp OwoKICByZXR1cm4gTlVMTDsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewog IGludCBzaGFyZWRfZGF0YSwgb2xkX3NoYXJlZF9kYXRhLCByZWFkeV9jb3VudDsKICBwdGhyZWFk X211dGV4X3QgbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwogIHB0aHJlYWRfY29u ZF90IGNvbmR2YXIgPSBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVI7CiAgcHRocmVhZF9jb25kX3Qg ZG9uZSA9IFBUSFJFQURfQ09ORF9JTklUSUFMSVpFUjsKICBzdHJ1Y3QgdGhyZWFkX2RhdGEgKnRo cmVhZF9kYXRhOwogIGludCB0aHJlYWRfZGF0YV9zaXplOwogIHN0cnVjdCBzY2hlZF9wYXJhbSBz Y2hlZHBybSA9IHswfTsKICBwdGhyZWFkX2F0dHJfdCB0aHJlYWRfYXR0cjsKI2lmZGVmIFVOSUNP UkUKICBjcHVfc2V0X3QgY29yZXM7CiAgQ1BVX1pFUk8oJmNvcmVzKTsKICBDUFVfU0VUKDAsICZj b3Jlcyk7CiAgc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGNvcmVzKSwgJmNvcmVzKTsKI2Vu ZGlmCgogIC8qIENyZWF0ZSB0aGUgZGF0YSBvZiBldmVyeSBub24tbWFpbiB0aHJlYWQgKi8KICB0 aHJlYWRfZGF0YV9zaXplID0gKHNjaGVkX2dldF9wcmlvcml0eV9tYXgoU0NIRURfRklGTykKICAg ICAgICAgICAgICAgICAgICAgIC0gc2NoZWRfZ2V0X3ByaW9yaXR5X21pbihTQ0hFRF9GSUZPKSAr IDEpOwogIHRocmVhZF9kYXRhID0gbWFsbG9jKHNpemVvZigqdGhyZWFkX2RhdGEpICogdGhyZWFk X2RhdGFfc2l6ZSk7CiAgaWYgKCF0aHJlYWRfZGF0YSkgewogICAgZnByaW50ZihzdGRlcnIsICJF cnJvcjogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSB0byBob2xkIHRocmVhZCBkYXRhXG4iKTsKICAg IHJldHVybiAtMTsKICB9CiAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRfZGF0YV9zaXplOyAr K2kpIHsKICAgIHRocmVhZF9kYXRhW2ldLnNoYXJlZF9kYXRhID0gJnNoYXJlZF9kYXRhOwogICAg dGhyZWFkX2RhdGFbaV0ubXV0ZXggPSAmbXV0ZXg7CiAgICB0aHJlYWRfZGF0YVtpXS5jb25kdmFy ID0gJmNvbmR2YXI7CiAgICB0aHJlYWRfZGF0YVtpXS5kb25lID0gJmRvbmU7CiAgICB0aHJlYWRf ZGF0YVtpXS5yZWFkeV9jb3VudCA9ICZyZWFkeV9jb3VudDsKICAgIHRocmVhZF9kYXRhW2ldLnZh bHVlX3RvX3dyaXRlID0gMSArIGk7CiAgfQogIGZwcmludGYoc3RkZXJyLCAiQXMgbWFueSBhcyAl ZCB0aHJlYWRzIHdpbGwgYmUgY3JlYXRlZFxuIiwgdGhyZWFkX2RhdGFfc2l6ZSk7CgogIC8qIFBy ZXBhcmUgdGhlIGF0dHJpYnV0ZXMgc2hhcmVkIGJ5IGV2ZXJ5IG5vbi1tYWluIHRocmVhZCAqLwog IHB0aHJlYWRfYXR0cl9pbml0KCZ0aHJlYWRfYXR0cik7CiAgcHRocmVhZF9hdHRyX3NldGluaGVy aXRzY2hlZCgmdGhyZWFkX2F0dHIsIFBUSFJFQURfRVhQTElDSVRfU0NIRUQpOwogIHB0aHJlYWRf YXR0cl9zZXRzY2hlZHBvbGljeSgmdGhyZWFkX2F0dHIsIFNDSEVEX0ZJRk8pOwoKICBmb3IgKGlu dCBrID0gMDsgayA8IDEwMDA7ICsraykgewogICAgcmVhZHlfY291bnQgPSAwOwogICAgCiAgICAv KiBDcmVhdGUgdGhyZWFkcyBzdWNoIHRoYXQgYSB0aHJlYWRfaSBoYXMgcHJpb3JpdHkKICAgICAg IHNjaGVkX2dldF9wcmlvcml0eV9tYXgoU0NIRURfRklGTykgLSBpICovCiAgICBzY2hlZHBybS5z Y2hlZF9wcmlvcml0eSA9IHNjaGVkX2dldF9wcmlvcml0eV9tYXgoU0NIRURfRklGTyk7CiAgICBm b3IgKGludCBpID0gMDsgaSA8IHRocmVhZF9kYXRhX3NpemU7ICsraSkgewogICAgICBzY2hlZHBy bS5zY2hlZF9wcmlvcml0eSAtPSBpOwogICAgICBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJhbSgm dGhyZWFkX2F0dHIsICZzY2hlZHBybSk7CiAgICAgIGludCByYzsKICAgICAgaWYgKHJjID0gcHRo cmVhZF9jcmVhdGUoJnRocmVhZF9kYXRhW2ldLnRpZCwgJnRocmVhZF9hdHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBqb2JfYm9keSwgdGhyZWFkX2RhdGEgKyBpKSkgewogICAgICAg IGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IENhbm5vdCBjcmVhdGUgdGhyZWFkICMlZDogJXMiLAog ICAgICAgICAgICAgICAgaSArIDEsIHN0cmVycm9yKHJjKSk7CiAgICAgICAgZnJlZSh0aHJlYWRf ZGF0YSk7CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICB9CgogICAgLyogV2FpdCB1bnRp bCBldmVyeSBub24tbWFpbiB0aHJlYWQgaGFzIHdhaXRlZCBvbiB0aGUgY29uZHZhciAqLwogICAg cHRocmVhZF9tdXRleF9sb2NrKCZtdXRleCk7CiAgICB3aGlsZSAocmVhZHlfY291bnQgIT0gdGhy ZWFkX2RhdGFfc2l6ZSkgewogICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbXV0ZXgpOwogICAg ICBwdGhyZWFkX211dGV4X2xvY2soJm11dGV4KTsKICAgIH0KCiAgICAvKiBSZWxlYXNlIGp1c3Qg b25lIHRocmVhZCBmcm9tIHRoZSBjb25kdmFyJ3MgcXVldWUgKi8KICAgIHB0aHJlYWRfY29uZF9z aWduYWwoJmNvbmR2YXIpOwoKICAgIC8qIExldCdzIHNlZSBub3cgd2hpY2ggdGhyZWFkIGdldHMg ZGVxdWV1ZWQgKi8KICAgIHB0aHJlYWRfY29uZF93YWl0KCZkb25lLCAmbXV0ZXgpOwoKICAgIC8q IElmIHRoZSBuZXh0IG93bmVyIG9mIHRoZSBjb25kaXRpb24gdmFyaWFibGUncyBtdXRleCBpcyBk ZXRlcm1pbmVkIGJ5IHRoZQogICAgICAgc2NoZWR1bGluZyBwb2xpY3kgYW5kIHBhcmFtZXRlciwg dGhlIHZhbHVlIG9mIHNoYXJlZF9kYXRhIHdpbGwgbmV2ZXIKICAgICAgIGNoYW5nZS4gIEFuZCwg dGhlIHZhbHVlIGlzIG5vbmUgb3RoZXIgdGhhbiBvbmUgYmVjYXVzZSB0aGUgdGhyZWFkIHdpdGgK ICAgICAgIHRoZSBoaWdoZXN0IFNDSEVEX0ZJRk8gcHJpb3JpdHkgd2lsbCBydW4gZmlyc3QuICov CiAgICBpZiAoaykgewogICAgICBpZiAoc2hhcmVkX2RhdGEgIT0gb2xkX3NoYXJlZF9kYXRhKSB7 CiAgICAgICAgb2xkX3NoYXJlZF9kYXRhID0gc2hhcmVkX2RhdGE7CiAgICAgICAgZnByaW50Zihz dGRlcnIsICJzaGFyZWRfZGF0YSBpcyBub3cgJWQgKGsgPSAlZClcbiIsIHNoYXJlZF9kYXRhLCBr KTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZnByaW50ZihzdGRlcnIsICJzaGFyZWRfZGF0 YSBpcyAlZCAoayA9ICVkKVxuIiwgc2hhcmVkX2RhdGEsIGspOwogICAgICBvbGRfc2hhcmVkX2Rh dGEgPSBzaGFyZWRfZGF0YTsKICAgIH0KCiAgICAvKiBMZXQgZXZlcnkgb3RoZXIgbm9uLW1haW4g dGhyZWFkIHRlcm1pbmF0ZSAqLwogICAgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmY29uZHZhcik7 CiAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbXV0ZXgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkg PCB0aHJlYWRfZGF0YV9zaXplOyArK2kpIHsKICAgICAgcHRocmVhZF9qb2luKHRocmVhZF9kYXRh W2ldLnRpZCwgTlVMTCk7CiAgICB9CiAgICAKICB9CgogIGZyZWUodGhyZWFkX2RhdGEpOwogIHJl dHVybiAwOwoKfQo= --000000000000990c3d05c33861ab--