Add kswapd experiment.

See go/pixel-perf-25q1-experiments for the info.

Bug: 365855872
Test: build/flash, set .Perf__experiments_delay_seconds=0, set .Perf__kswapd_experiment=true, observe /sys/kernel/vendor_mm/kswapd_cpu_affinity changes
Flag: NONE controlled by Mendel instead
Change-Id: Id63690f0dcd38de92e4c2fde5b0ab814ed3d9db1
Signed-off-by: Dmitry Skiba <dskiba@google.com>
diff --git a/performance/experiments/experiments.mk b/performance/experiments/experiments.mk
index b52d0e6..191332d 100644
--- a/performance/experiments/experiments.mk
+++ b/performance/experiments/experiments.mk
@@ -1,3 +1,5 @@
 BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/performance/experiments/sepolicy
 
 PRODUCT_PACKAGES += pixel-experiments-recovery.sh
+
+include device/google/gs-common/performance/experiments/kswapd/kswapd.mk
diff --git a/performance/experiments/kswapd/Android.bp b/performance/experiments/kswapd/Android.bp
new file mode 100644
index 0000000..23af711
--- /dev/null
+++ b/performance/experiments/kswapd/Android.bp
@@ -0,0 +1,10 @@
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+prebuilt_etc {
+    name: "pixel-kswapd-experiment.rc",
+    src: "pixel-kswapd-experiment.rc",
+    vendor: true,
+    sub_dir: "init",
+}
diff --git a/performance/experiments/kswapd/kswapd.mk b/performance/experiments/kswapd/kswapd.mk
new file mode 100644
index 0000000..15d762f
--- /dev/null
+++ b/performance/experiments/kswapd/kswapd.mk
@@ -0,0 +1 @@
+PRODUCT_PACKAGES += pixel-kswapd-experiment.rc
diff --git a/performance/experiments/kswapd/pixel-kswapd-experiment.rc b/performance/experiments/kswapd/pixel-kswapd-experiment.rc
new file mode 100644
index 0000000..36dcac3
--- /dev/null
+++ b/performance/experiments/kswapd/pixel-kswapd-experiment.rc
@@ -0,0 +1,28 @@
+# Kswapd experiment - allow kswapd to run on all cores. We only target zuma and
+# zumapro because these are the only platforms where kswapd avoids big cores by
+# default.
+
+on property:vendor.perf.allow_experiments=1 \
+    && property:ro.board.platform=zuma \
+    && property:vendor.pixel.system.phenotype.Perf__kswapd_experiment=true
+    write /sys/kernel/vendor_mm/kswapd_cpu_affinity 1ff
+
+on property:vendor.perf.allow_experiments=1 \
+    && property:ro.board.platform=zumapro \
+    && property:vendor.pixel.system.phenotype.Perf__kswapd_experiment=true
+    write /sys/kernel/vendor_mm/kswapd_cpu_affinity ff
+
+
+# Kswapd experiment rampdown - restore CPU affinity to the default.
+
+on property:vendor.perf.allow_experiments=1 \
+    && property:ro.board.platform=zuma \
+    && property:vendor.pixel.system.phenotype.Perf__kswapd_experiment=""
+    # Value is from device/google/zuma/conf/init.zuma.rc
+    write /sys/kernel/vendor_mm/kswapd_cpu_affinity ff
+
+on property:vendor.perf.allow_experiments=1 \
+    && property:ro.board.platform=zumapro \
+    && property:vendor.pixel.system.phenotype.Perf__kswapd_experiment=""
+    # Value is from device/google/zumapro/conf/init.zumapro.soc.rc
+    write /sys/kernel/vendor_mm/kswapd_cpu_affinity 7f