{
  "created": "2026-10-29T10:51:59.903687+01:00",
  "source": "result archive of the lab run on October 29, 2026, SHA-256 ed0b39b0502f435d37ea4e9288a63d3207ad7f6bceec4a594342261ea798bf94",
  "setup": {
    "paper": "1.21.11 build 132 (STABLE channel)",
    "java": "Temurin 21.0.13+9",
    "platform": "Linux container (WSL2) on our own test machine, job limit 2 CPUs / 4 GiB",
    "heap": "-Xms512M -Xmx2G",
    "players": 0,
    "view_distance": 3,
    "simulation_distance": 3,
    "seed": 952026,
    "profiler": "spark profiler start --thread *  …  spark profiler stop --save-to-file",
    "sampling_interval_ms": 4,
    "synthetic": true,
    "note": "Controlled synthetic lab without players, not a hosting benchmark."
  },
  "cases": [
    {
      "case": "A",
      "measurement": "chunks-before",
      "condition": "generator on: one new, distant chunk requested synchronously per tick",
      "raw_profile": "profile-2026-10-29_01.29.58.sparkprofile",
      "raw_profile_sha256": "ac9c4f216ab300be2dfc2970d23e91b5a9ff9dc22fb2b9b51b13c9415f230b9c",
      "window_utc": [
        "01:29:04",
        "01:29:50"
      ],
      "window_duration_s": 46.4,
      "ticks_in_window": 27,
      "ticks_per_second": 0.58,
      "entities": 7,
      "server_thread_samples_ms": 21372,
      "spark_tps_1m_display_at_profile_end": 10.3,
      "spark_tps_output_at_profile_end": {
        "time_utc": "01:29:49",
        "tps_5s_10s": "1.62 / 3.0",
        "tick_duration_last_10s_min_median_p95_max_ms": "0.5 / 0.9 / 1745.0 / 13616.2"
      }
    },
    {
      "case": "A",
      "measurement": "chunks-after",
      "condition": "generator off, everything else unchanged",
      "raw_profile": "profile-2026-10-29_01.30.54.sparkprofile",
      "raw_profile_sha256": "034d2de189867a48827cea267eaf4f2cf1bc189c8119000da346b86659d10e1a",
      "window_utc": [
        "01:30:05",
        "01:30:53"
      ],
      "window_duration_s": 48.2,
      "ticks_in_window": 961,
      "ticks_per_second": 19.94,
      "entities": null,
      "server_thread_samples_ms": 41812,
      "spark_tps_1m_display_at_profile_end": 9.65,
      "spark_tps_output_at_profile_end": {
        "time_utc": "01:30:53",
        "tps_5s_10s": "20.0 / 20.0",
        "tick_duration_last_10s_min_median_p95_max_ms": "0.2 / 0.3 / 0.5 / 0.8"
      }
    },
    {
      "case": "B",
      "measurement": "entities-before",
      "condition": "500 villagers packed into one permanently loaded chunk",
      "raw_profile": "profile-2026-10-29_01.31.59.sparkprofile",
      "raw_profile_sha256": "8932014b8963db4e7ac52a615324ddcd711d86279a494175e48ba2b49941fbbb",
      "window_utc": [
        "01:31:10",
        "01:31:58"
      ],
      "window_duration_s": 48.5,
      "ticks_in_window": 491,
      "ticks_per_second": 10.13,
      "entities": 508,
      "server_thread_samples_ms": 40044,
      "spark_tps_1m_display_at_profile_end": 14.1,
      "spark_tps_output_at_profile_end": {
        "time_utc": "01:31:58",
        "tps_5s_10s": "14.67 / 15.74",
        "tick_duration_last_10s_min_median_p95_max_ms": "22.6 / 58.5 / 107.0 / 157.7"
      }
    },
    {
      "case": "B",
      "measurement": "entities-after",
      "condition": "exactly the 500 villagers we spawned removed",
      "raw_profile": "profile-2026-10-29_01.33.03.sparkprofile",
      "raw_profile_sha256": "329120fd078e7c87b88858f9212728a08eb0ee7e789a710017bcd2d17728e528",
      "window_utc": [
        "01:32:14",
        "01:33:02"
      ],
      "window_duration_s": 48.1,
      "ticks_in_window": 960,
      "ticks_per_second": 19.95,
      "entities": 8,
      "server_thread_samples_ms": 47548,
      "spark_tps_1m_display_at_profile_end": 19.9,
      "spark_tps_output_at_profile_end": {
        "time_utc": "01:33:02",
        "tps_5s_10s": "20.0 / 20.0",
        "tick_duration_last_10s_min_median_p95_max_ms": "0.2 / 0.3 / 0.5 / 6.1"
      }
    },
    {
      "case": "C",
      "measurement": "plugin-before",
      "condition": "custom synchronous task with about 65 ms of work per tick",
      "raw_profile": "profile-2026-10-29_01.34.07.sparkprofile",
      "raw_profile_sha256": "8ca41b8397e165aeede70f81e9bb9e1926cdae9348911e862ba9d0d1ad7732cd",
      "window_utc": [
        "01:33:18",
        "01:34:07"
      ],
      "window_duration_s": 48.2,
      "ticks_in_window": 714,
      "ticks_per_second": 14.83,
      "entities": 8,
      "server_thread_samples_ms": 43676,
      "spark_tps_1m_display_at_profile_end": 16.04,
      "spark_tps_output_at_profile_end": {
        "time_utc": "01:34:07",
        "tps_5s_10s": "14.85 / 14.84",
        "tick_duration_last_10s_min_median_p95_max_ms": "65.3 / 65.6 / 73.2 / 99.2"
      }
    },
    {
      "case": "C",
      "measurement": "plugin-after",
      "condition": "task off, everything else unchanged",
      "raw_profile": "profile-2026-10-29_01.35.12.sparkprofile",
      "raw_profile_sha256": "c479dee8baf3d289096b13433c59515e6dab406160d6de1643721fa71004a8b0",
      "window_utc": [
        "01:34:23",
        "01:35:11"
      ],
      "window_duration_s": 48.1,
      "ticks_in_window": 961,
      "ticks_per_second": 19.98,
      "entities": 8,
      "server_thread_samples_ms": 47580,
      "spark_tps_1m_display_at_profile_end": 19.8,
      "spark_tps_output_at_profile_end": {
        "time_utc": "01:35:11",
        "tps_5s_10s": "20.0 / 20.0",
        "tick_duration_last_10s_min_median_p95_max_ms": "0.2 / 0.3 / 0.4 / 0.8"
      }
    }
  ],
  "reading_note": "ticks_in_window and window_duration_s come from the WindowStatistics of each raw profile and apply only to that window. The spark readings “1m” and the rolling tick durations also include ticks from before the window; they are listed only as supplementary values."
}
