APCu-Autor Joe Watkins erklärt, worauf wir achten müssen
Kommentare

APCu ist der neue APC für PHP-Installationen, die Zend Optimizer als Opcode Cache verwenden — und das werden seit der Implementierung desselben in PHP 5.5 in Form des opcaches wohl bald sehr viele

APCu ist der neue APC für PHP-Installationen, die Zend Optimizer als Opcode Cache verwenden — und das werden seit der Implementierung desselben in PHP 5.5 in Form des opcaches wohl bald sehr viele sein. Doch was bedeutet das für den Alltag? Wie muss ich jetzt vorgehen, will ich bestehende APC-Implementierungen in opcache+APCu überführen? Der leitende APCu-Entwickler Joe Watkins erklärt uns in einer E-Mail, dass man eigentlich gar nicht viel machen muss.

By default, APCu will build with backwards compatibility for the PHP API, declaring a dummy APC module, all apc_* functions with the exact same prototypes, and relying on the same apc.* INI entries. For apc_bin_dump and apc_bin_dumpfile, its first argument ( a list of files to include in the binary output ) is simply ignored.

Because of the above, in the vast majority of cases, [you have to do] absolutely nothing 🙂

Wenn die Caches miteinander kompatibel sind, was unterscheidet sie dann unter der Haube? „Es gibt grundlegende Unterschiede auf der C-Ebene“, sagt Watkins. So wurde von Mutex-Locking auf Read/Write-Locking als Default-Einstellung umgestellt. Im Laufe der kommenden Tests wird sich zeigen, welche Feinjustierung diesbezüglich noch notwendig werden wird. En detail schreibt Watkins dazu:

There are some functional differences at the C level, APC used to use, by default, mutex locking (which means reads and writes are exclusive, nothing can read while another context writes and vice versa). APCu uses read/write locking by default, a native read write lock can safely support multiple readers, exclusivity is only required to write. Where there are no read/write locks available, or they are disabled at configure time, APCu provides an emulated kind of read write lock, it cannot support multiple readers ( it is assumed where the OS implementation does not include it, it would not be safe to support multiple readers ), however, by operating in a particular way it is able to give preference to readers or writers, the default behaviour will be decided in time, based on the experiences of users relying on it and testing.

Being able to revise the codebase in the knowledge there will always be a read/write lock available reduces the margin for error, and increases simplicity.

Des Weiteren erklärt Watkins genauer, warum er vor dem Einsatz externer Caching Tools warnt. Er sagt, dass verteilte Lösungen einen erheblichen Netzwerk-Overhead verursachen, und keine von ihnen wirklich in der Lage ist, mit PHP dieselbe Sprache zu sprechen. Dies macht APCu der Konkurrenz überlegen.

On github, I mention in passing that it would be a grave error to use distributed or external caching mechanism as a replacement for APC, I guess that’s mentioned with the assumption that the reader knows why. Other than the obvious, network overhead, interaction with external processes etc, APC is able to „talk PHP“: when you store an array in APC, it is not serialized, it is not copied and converted to some external format, it is simply copied to shared memory, bucket by bucket. On the way out (apc_fetch) , it does not require converting into a format PHP understands, or de-serializing, again, it is simply copied, bucket by bucket … this is, rather quick !

Mit opcache und APCu wird PHP bald zwei parallele Caching-Mechanismen besitzen. Auch wenn ihre Unterschiede sichtbar sind, fragten wir dennoch nach, ob man künftig vielleicht mit einer Verschmelzung der beiden rechnen könnte. Doch besonders im Hinblick auf die Speicheradressierung zeigt sich, dass die Teilung der Caches ein sehr sinnvoller Schritt sein sollte.

Both ideas rely on the use of a shared memory allocator.
APC’s allocator is highly suited to the task at hand, able to handle deletion just as well as insertion.
While Opcaches is much simpler in it’s design, and much better suited to the task it is charged with.
Additionally, when both ideas share a single allocator contention for locks increases, considerably.
Having the opcode cache and APCu have separate allocators is infact quite beneficial.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -