accel_compress Subroutine

Zweck

Komprimiert Daten mithilfe der Hardwarebeschleunigten Speicherkomprimierung.

Syntax

#include <sys/types.h>

#include <sys/vminfo.h>


int accel_compress (void *uc_buf, size_t uc_len,
void *c.buf, size_t *c_lenp, int flags);

Beschreibung

Bei einem Zeiger auf einen Puffer mit zu komprimierenden Daten komprimiert die Subroutine accel_compress die Daten in dem Puffer, auf den der Parameter c_buf verweist.

Die Komprimierungssubroutine sollte mit dem Parameter c_lenp aufgerufen werden, der mit der Gesamtgröße des Parameters c_buf initialisiert wird. Nach erfolgreicher Rückgabe wird der Parameter c_lenp mit der Größe der komprimierten Daten im Parameter c_buf aktualisiert. Für diese Subroutine gelten die folgenden Einschränkungen:
  • Der Parameter uc_buf und der Parameter c_buf überschneiden sich nicht. Eine Überlappung führt zu einem Fehler.
  • Die Parameter uc_buf und c_buf müssen mindestens an einer 128-Byte-Grenze ausgerichtet werden. Für die besten Ergebnisse müssen die Parameter uc_buf und c_buf an einer 4096-Byte-Grenze ausgerichtet werden.
  • Die Parameter c_len und * uc_lenp sind auf maximal 1044480 Byte pro Subroutinenaufruf begrenzt, wenn Puffer an einer 4096-Byte-Grenze ausgerichtet sind. Für Puffer, die nicht an einer 4096-Byte-Grenze, aber an einer 128-Byte-Grenze ausgerichtet sind, sind die Parameter c_len und * uc_lenp auf 1040384 Byte pro Subroutinenaufruf und jeden Ausrichtungsabstand von einer 4096-Byte-Grenze begrenzt.

  • Die Parameter uc_len und c_lenp müssen ein Vielfaches von 8 Byte sein.
  • Die Zuordnung von Dateisegmenten mit der Funktion shmat () und der Funktion mmap () ist nicht zulässig. Die Zuordnung von Nicht-Dateisegmenten mit der Funktion shmat () und der Funktion mmap () ist jedoch zulässig (z. B.MMAP_ANONYMOUS).
  • Der Aufrufende ist für die Bereitstellung eines ausreichend großen c_bufverantwortlich.

Die Subroutine verwendet den Algorithmus 842, um die Daten zu komprimieren. Der komprimierte Puffer enthält eine zyklische Blockprüfung (CRC), die von der Subroutine accel_decompress () automatisch überprüft wird. Die Funktionen Active Memory Expansion (AME) und Active Memory Sharing (AMS) dürfen nicht für die Verwendung dieses Aufrufs aktiviert sein. Die Subroutine unterstützt 32-und 64-Bit-Anwendungen. Die Subroutine kann über einen Einzel-oder Multithread-Prozess aufgerufen werden.

Hardwarebeschleuniger sind eine begrenzte Ressource auf jedem System und Sie müssen darauf achten, die Beschleuniger nicht zu überfordern. Wenn Sie über einen großen Pool von Threads verfügen, die alle um einige der verfügbaren Akzeleratoren konkurrieren, können Sie mit einer schlechteren Leistung als mit reiner Softwarekomprimierung enden.

Parameter

Element Beschreibung
uc_buf Zeiger auf Eingabepuffer mit zu komprimierenden Daten.
uc_len Länge der zu komprimierenden Daten im Parameter uc_buf .
c_buf Zeiger auf Puffer, der mit komprimierten Daten geschrieben wurde.
c_lenp Zeiger auf Ein-/Ausgabeparameter. Bei der Eingabe ist der Parameter c_lenp die verfügbare Gesamtgröße im Parameter c_buf und beim Exit ist der Parameter c_lenp die Anzahl der Byte, die in den Parameter c_buf geschrieben werden.
Flags Für künftige Verwendung reserviert. Dieser Parameter muss auf null gesetzt werden.

Ausführungsumgebung

Die Subroutine accel_compress kann nur aus der Prozessumgebung aufgerufen werden.

Rückgabewerte

Element Beschreibung
0 Erfolg
-1 Fehler. Bei einem Fehler wird die globale Variable errno wie folgt gesetzt:
EFAULT
Fehler beim Zugriff auf den Speicher, auf den der Parameter c_lenp verweist, oder Zugriffsfehler im Quellen-oder Zielpuffer.
EINVAL
Fehler aufgrund einer der folgenden Bedingungen:
  • Die Parameter uc_buf und c_buf weisen eine falsche Ausrichtung auf.
  • Die Parameter uc_buf und c_buf überschneiden sich.
  • Der Parameter uc_len oder c_lenp ist kein Vielfaches von 8.
  • Der Parameter uc_buf, c_buf oder c_lenp ist NULL.
  • Es konnte keine Liste der Seiten des Parameters uc_buf oder c_buf erstellt werden, die an die Beschleunigerhardware übergeben werden sollen.
  • Die Parameter uc_buf oder c_buf befinden sich in einer Datei.
  • Der Parameter Flags ist ein Wert ungleich null.
ENOSYS
Der Hardwarebeschleuniger ist nicht vorhanden, AME ist aktiviert oder AMS ist aktiviert.
ENOMEM
In der Subroutine konnte kein Speicher zugeordnet werden.
EFBIG
Der Parameter uc_len oder c_lenp überschreitet 1.044.480 Byte.
EIO
Der Firmware-Aufruf ist fehlgeschlagen oder die Accelerator-Hardware hat einen Fehler unbekannten Typs zurückgegeben. Dies kann Fehler einschließen, die durch falsche Eingabeargumente für die Subroutine accel_compress () verursacht wurden.
ENOSPC
Der Parameter c_buf ist zu klein, um die gesamte komprimierte Ausgabe aufzunehmen.
BEREICH
Die komprimierten Daten sind größer als die nicht komprimierten Daten.