Unittests für Linux



  • nman schrieb:

    Steffo schrieb:

    Huge Pages erlauben große Seitengrößen. Multiple Pages Sizes erlauben verschiedene Seitengrößen.

    Die huge page size ist ja im Rahmen dessen was die Hardware unterstuetzt auch konfigurierbar. Aber fuer x86 ist es einfach nicht so spannend, zwischen den ein oder zwei Huge Page Sizes zur Laufzeit auf Prozessebene herumzuhuepfen.

    Was ist der Use Case, wo dir das abgeht?

    Wenn die Seitengröße zu groß ist, hast du eben großen Verschnitt. Wenn du viele malloc-Aufrufe machst, die kleiner als 1 Seite sind, ist der Rest eben Verschnitt. Dadurch hast du auch weniger Seiten im RAM, was dem Prinzip der Lokalität entgegenwirkt. D. h. Seiten, die als nächstes mit großer Wahrscheinlichkeit benutzt werden, sind wegen Platzmangel nicht im RAM. Diese zu laden kostet eben Zeit. Man kann dem entgegenkommen, in dem man Seiten etwas kleiner macht, andererseits lohnt es sich für manche Anwendungsfälle große Seiten zu haben, z. B. wenn du das Prozessimage in den RAM lädst: Da hast du großen zusammenhängenden Speicher, der dem Prinzip der Lokalität entgegenkommt.
    Kleine Seiten kann man auch für Thread-Stacks benutzen.

    L. G.
    Steffo



  • Du hast mich falsch verstanden. Mir ist die Idee dahinter schon klar. Meine Frage ist: Wo hattest du bis jetzt in der Praxis Schwierigkeiten weil gängige Betriebssysteme nicht so flexibel pagen können?

    Und wo setzt Du Hardware ein, die das unterstützen würde?



  • Nirgends, aber es gibt genügend Anwendungsszenarien wo Performance ne Rolle spielt. Oo



  • Wieviele gibt es, wo das eine messbare Rolle spielt?

    Und nochmal: Wo verwendest du Hardware, die das unterstützt?



  • Serverbereich, überall, wo Multithreading eine Rolle spielt.
    Hardware: Ich hatte schon AMD und Intel aufgezählt gehabt...



  • Steffo schrieb:

    Man kann dem entgegenkommen, in dem man Seiten etwas kleiner macht, andererseits lohnt es sich für manche Anwendungsfälle große Seiten zu haben

    Dafür werden ja typischerweise normale Pages auf der einen Seite und Huge Pages auf der anderen verwendet. Damit hast du die Anwendungsfälle "normal" und "groß" abgedeckt.



  • Steffo schrieb:

    Serverbereich, überall, wo Multithreading eine Rolle spielt.

    Sorry, aber das ist mal Blödsinn.

    Hardware: Ich hatte schon AMD und Intel aufgezählt gehabt...

    Hast du Quellen dafür? Ich dachte, dass x86 das nicht unterstützt.

    edit: Also Multiple Page Sizes abseits der bereits erwähnten Huge Pages.



  • nman schrieb:

    Steffo schrieb:

    Serverbereich, überall, wo Multithreading eine Rolle spielt.

    Sorry, aber das ist mal Blödsinn.

    Hardware: Ich hatte schon AMD und Intel aufgezählt gehabt...

    Hast du Quellen dafür? Ich dachte, dass x86 das nicht unterstützt.

    Finally, the design issue of page size is related to the size of physical main memory and program size. At the same time that main memory is getting larger, the address
    space used by applications is also growing. The trend is most obvious on personal computers and workstations, where applications are becoming increasingly complex.
    Furthermore, contemporary programming techniques used in large programs tend to decrease the locality of references within a process [HUCK93]. For example,
    • Object-oriented techniques encourage the use of many small program and
    data modules with references scattered over a relatively large number of ob-
    jects over a relatively short period of time.

    • Multithreaded applications may result in abrupt changes in the instruction
    stream and in scattered memory references.

    For a given size of TLB, as the memory size of processes grows and as locality decreases, the hit ratio on TLB accesses declines. Under these circumstances, the
    TLB can become a performance bottleneck

    ....

    Accordingly, a number of designers have investigated the use of multiple page sizes [TALL92, KHAL93], and several microprocessor architectures support
    multiple pages sizes, including MIPS R4000, Alpha, UltraSPARC, Pentium, and IA-64. Multiple page sizes provide the flexibility needed to use a TLB effectively.
    For example, large contiguous regions in the address space of a process, such as program instructions, may be mapped using a small number of large pages rather than
    a large number of small pages, while thread stacks may be mapped using the small page size. However, most commercial operating systems still support only one page
    size, regardless of the capability of the underlying hardware. The reason for this is that page size affects many aspects of the OS; thus, a change to multiple page sizes is a complex undertaking.

    -- Operating Systems - Internals And Design Principles - Stallings



  • Äh, ja, das ist genau der huge pages Support, von dem die ganze Zeit die Rede ist. Die unterstützt Linux ja auch. Hatte ich schon recht früh geschrieben.



  • Diesbezüglich: 👍
    Nur beim Anwendungsfall scheinen wir wohl anderer Ansicht zu sein. :p



  • Nein, die Huge Pages sind schon sinnvoll. Ich dachte dass du für etwas anderes argumentierst.

    Auch wenn selbst die Huge Pages eher was für recht wenige spezialisierte Anwendungsfälle sind. Für die sind sie aber praktisch.


Anmelden zum Antworten