Skip to content

Document and perform benchmarks #481

@withinboredom

Description

@withinboredom

This is an issue to perform some "scientific" benchmarks, leveraging 20 years of finagling this stuff. Scientific is in quotes because I intend this to be a scientific endeavor, but read on.

Goals:

  1. Fully tuned php.ini
  2. Fully tuned nginx + fpm
  3. Fully tuned apache
  4. Discover caddy + FrankenPHP's best tuning
    • What Go environment variables make a difference, and how to set them
    • Compilation options?
    • worker mode vs. cgi mode vs. static binary
  5. Documentation to perform the benchmarks
    • kernel settings/parameters
    • device characteristics (arm/x86/etc, cores, etc)
    • use rented device that is cheap and always available -- anyone should be able to reproduce -- but also represent realistic production machines.

Non-goals:

  1. Generic benchmarking suite (I am not building anything)
  2. Framework benchmarks (Not comparing frameworks)

Known Caveats:

  1. Extensions and code will make a difference, but if the documentation is good enough, people can perform their benchmarks with their desired configuration.
  2. The PHP code under test must be chosen carefully to illustrate typical PHP characteristics from the perspective of a SAPI (setting headers, outputting data, JIT'able code, etc.)
  3. From casual testing, we're much more likely to saturate network links long before CPU with FrankenPHP, thus we either need high performing links, or underpowered machines. Needs further investigation.

Considerations:

  • Considering terraform for technical documentation + writeup of approach/whys.
  • We will probably want to have SigQ eventually gets full #440 released by PHP to test CGI mode properly.
  • Many people use containers/Kubernetes; testing multiple nginx|caddy|apache running on the same machine in separate containers would be interesting. Mostly out of curiosity: does horizontal scaling on the same machine make a difference, or is vertical scaling better?

Related:

#444

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentation

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions