Article View: pl.comp.os.linux.programowanie
Article #72943Re: Blokujący read i niepełne dane
From: Bogdan
Date: Sun, 02 Aug 2020 15:05
Date: Sun, 02 Aug 2020 15:05
49 lines
2734 bytes
2734 bytes
W dniu 16.07.2020 o 16:04, heby pisze: > Cześć. > > Mam named pipe (mkfifo). > > Po jednej stronie ktoś robi 1000000 == ::write (pointer, 1000000); > > Po drugiej stronie ktoś robi 1000000 == ::read (pointer, 1000000); > > Wszystko działa, dostaje dane. > > I przychodzi kernel 5.6.x gdzie "coś naprawiono w rurkach". > > https://www.phoronix.com/scan.php?page=news_item&px=Linux-Pipe-Parallel-Job-Opt > > > I teraz, ku mojemy zdziwieniu, dostaje: > > size = ::read (pointer, 1000000); > > Gdzie size jest 61578. > > Coś podejrzanie blisko rozmiarowi bufora rurki, czyli 64k. > > Manula klęczy na kolanach i zapewnia mnie że read w trybie bookującym > nigdy nie wyjdzie z innym size niż kiedy jest fatal lub INTR, ale > nawet wtedy size jest -1. Stackoverflow nieśmiało mu przytakuje. > > A tu read wychodzi sobie w połowie czytania zwracając częśc danych ... > > O rzesz... > > Ja mam buga/zaćmienie czy Torvalds odwalł dziadówę w kernelu? Nikt jeszcze nie odpisał, to może ja się podzielę swoim przemyśleniem: jeśli "::read" to odpowiednik read(2) (a pytam, bo brakuje parametru), to jeśli mogłeś zapisać milion bajtów i od razu odczytać też milion, to masz dość wydajny system lub szczęście, że nic nie przeszkadzało w trakcie (lub jeszcze jakieś czynniki). Generalnie, read() powinno umieszczać się w pętli i czytać tyle razy, aż uzbiera się tyle danych, ile się chciało od początku. Być może najnowsze zmiany w jądrze po prostu to ujawniły. -- Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS) Kurs asemblera x86 (DOS, GNU/Linux): http://bogdro.evai.pl Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 www.Xiph.org www.TorProject.org Soft(EN): http://bogdro.evai.pl/soft
Technical Details
Message-ID:
<rg6knp$trq$1@gioia.aioe.org>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!feeder1.feed.usenet.farm!feed.usenet.farm!aioe.org!.POSTED.YGlYgy4UiKzOsWMcQQTs4Q.user.gioia.aioe.org!not-for-mailReferences:
<repmov$olv$1@dont-email.me>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!feeder1.feed.usenet.farm!feed.usenet.farm!aioe.org!.POSTED.YGlYgy4UiKzOsWMcQQTs4Q.user.gioia.aioe.org!not-for-mail From: Bogdan <bogdan@poczta.gazeta.pl> Newsgroups: pl.comp.os.linux.programowanie Subject: Re: Blokujący read i niepełne dane Date: Sun, 2 Aug 2020 17:05:30 +0200 Organization: Aioe.org NNTP Server Lines: 49 Message-ID: <rg6knp$trq$1@gioia.aioe.org> References: <repmov$olv$1@dont-email.me> NNTP-Posting-Host: YGlYgy4UiKzOsWMcQQTs4Q.user.gioia.aioe.org Mime-Version: 1.0 X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.11.0 X-Notice: Filtered by postfilter v. 0.9.2 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit