Groups | Search | Server Info | Login | Register


Groups > de.comp.os.unix.programming > #3005

Re: mmap oder read?

From Rainer Weikusat <rweikusat@talktalk.net>
Newsgroups de.comp.os.unix.programming
Subject Re: mmap oder read?
Date 2022-06-09 20:37 +0100
Message-ID <87h74tmxuw.fsf@doppelsaurus.mobileactivedefense.com> (permalink)
References <t7qnab.5fg.1@stefan.msgid.phost.de> <t7si7m$1nq5k$1@gwaiyur.mb-net.net> <t7tbt3.4m8.1@stefan.msgid.phost.de>

Show all headers | View raw


Stefan Reuther <stefan.news@arcor.de> writes:
> Am 09.06.2022 um 12:32 schrieb Jakob Hirsch:
>> On 2022-06-08 17:46, Stefan Reuther wrote:
>>> Was für Gründe kann es geben, sich bewusst für die eine oder die andere
>>> Art zu entscheiden? Bisher bin ich - wie gesagt, Framework
>> 
>> TLDR: Wenn man nur sequentiell liest, lohnt sich das wohl nur bei
>> "großen" Dateien. Die Grenze liegt wohl irgendwo zwischen 1 und 8 MiB,
>> wie man z.B. unter https://github.com/david-slatinek/c-read-vs.-mmap
>> sieht (Werte sind bei mir ähnlich, hab allerdings nicht den code
>> angeschaut).
>>
>> Eine recht interessante Diskussion gab es z.B. unter
>> https://news.ycombinator.com/item?id=19806804
>
> Danke für die Links. Für normale, handliche Daten ist also read() aus
> Performancegründen zu bevorzugen.

«Aus Performancegründen» (insofern das eine Rolle spielt) ist zu
bevorzugen, wodurch man größere Lokalität erzielt, weil man dann mehr
von diversem Caching hat, daß hier transparent von der Hardware und auch
von der Virtualpeicherverwaltung gemacht wird[*]. Read mit einem
Anwendungspuffer benutzt normalerweise Speicher, der dem Prozeß bereits
zugeordnet ist. Damit sind die amortisierten Kosten des/ der dafür
notwendigen page faults pro read 0. Ferner sorgt die durch read
vorgenommene Kopie als Seiteneffekt dafür, Nutzdaten in den Cache and
Adreßdaten in die TLB zu bringen (insofern sie nicht bereits
drinstehen).

Allerdings ist der Micro-Benchmark-Ansatz zu simpel: Mit read arbeitet
die CPU trotzdem mehr, dh währenddessen kann niemand anderes die dafür
benutzten CPU-Ausführungseinheiten verwenden. Es verbraucht auch mehr Strom
und erzeugt mehr Abwärme. 

[*] Im Grundgenommen ist der virtuelle Addreßraum eines Prozesses ein
teilweise bevölkerter/ gefüllter (populated) Cache für Speicherseiten,
die der Kernel diesem grundsätzlich beliebig zuordnen oder wieder
entziehen kann.

Back to de.comp.os.unix.programming | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

mmap oder read? Stefan Reuther <stefan.news@arcor.de> - 2022-06-08 17:46 +0200
  Re: mmap oder read? Rainer Weikusat <rweikusat@talktalk.net> - 2022-06-08 17:27 +0100
    Re: mmap oder read? Stefan Reuther <stefan.news@arcor.de> - 2022-06-09 17:52 +0200
  Re: mmap oder read? Jakob Hirsch <jh.expires-20221231@plonk.de> - 2022-06-09 12:32 +0200
    Re: mmap oder read? Rainer Weikusat <rweikusat@talktalk.net> - 2022-06-09 15:17 +0100
    Re: mmap oder read? Stefan Reuther <stefan.news@arcor.de> - 2022-06-09 17:50 +0200
      Re: mmap oder read? Rainer Weikusat <rweikusat@talktalk.net> - 2022-06-09 20:37 +0100
        Re: mmap oder read? Bonita Montero <Bonita.Montero@gmail.com> - 2022-06-10 07:30 +0200
  Re: mmap oder read? Bonita Montero <Bonita.Montero@gmail.com> - 2022-06-09 13:18 +0200
    Re: mmap oder read? Bonita Montero <Bonita.Montero@gmail.com> - 2022-06-10 09:06 +0200
    Re: mmap oder read? Bonita Montero <Bonita.Montero@gmail.com> - 2022-06-11 09:42 +0200
  Re: mmap oder read? Jan Bruns <ebay@abnuto.de> - 2022-07-02 05:27 +0000

csiph-web