v1-0001-Try-ReFS-no-perf-gain.txt
text/plain
Filename: v1-0001-Try-ReFS-no-perf-gain.txt
Type: text/plain
Part: 0
From b12be7baf025287752b365cb59861f8d54fe2c0a Mon Sep 17 00:00:00 2001
From: Jakub Wartak <jakub.wartak@enterprisedb.com>
Date: Tue, 2 Jun 2026 11:43:56 +0200
Subject: [PATCH v1] Try ReFS
ci-os-only: windows
---
.github/workflows/postgresql-ci.yml | 52 ++++++++++++++++++++++++-----
1 file changed, 44 insertions(+), 8 deletions(-)
diff --git a/.github/workflows/postgresql-ci.yml b/.github/workflows/postgresql-ci.yml
index e2795ca0ffb..971fb9a705b 100644
--- a/.github/workflows/postgresql-ci.yml
+++ b/.github/workflows/postgresql-ci.yml
@@ -28,7 +28,7 @@ env:
# It's possible that some jobs benefit from an increased test concurrency,
# but a default of 4 is a safe bet. Individual jobs can override.
- TEST_JOBS: 4
+ TEST_JOBS: 8
CCACHE_MAXSIZE: "250M"
CCACHE_DIR: ${{ github.workspace }}/ccache_dir
@@ -45,6 +45,7 @@ env:
# Can be set to a non-empty value to run a limited set of tests
# (e.g. --suite regress to only run the main regression tests).
+# MTEST_TARGET: --suite regress --suite postgresql:recovery
MTEST_TARGET:
PGCTLTIMEOUT: 120 # avoids spurious failures during parallel tests
@@ -134,6 +135,9 @@ jobs:
- &nix_sysinfo_step
name: sysinfo
run: |
+ mount
+ lsblk -O
+ ps auxww
id
uname -a
ulimit -a -H && ulimit -a -S
@@ -307,10 +311,11 @@ jobs:
with:
name: logs-${{ github.job }}-${{ github.run_id }}-${{ github.run_attempt }}
path: |
- **/*.log
- **/*.diffs
- **/regress_log_*
- **/crashlog-*.txt
+ # avoids R:/System Volume Information (EINVAL)
+ R:/build/**/*.log
+ R:/build/*/*.diffs
+ R:/build/**/regress_log_*
+ R:/build/**/crashlog-*.txt
if-no-files-found: ignore
@@ -683,8 +688,35 @@ jobs:
name: Disable Windows Defender
shell: powershell
run: |
+ $diskpartScript = @"
+ create vdisk file="D:\a\refs.vhd" maximum=16000 type=expandable
+ attach vdisk
+ create partition primary
+ format fs=refs quick
+ assign letter=R
+ "@
+ $diskpartScript | diskpart
+ Get-Volume -DriveLetter R
+
+ $DiskNumber = (Get-Partition -DriveLetter R).DiskNumber
+ $PnpId = (Get-CimInstance Win32_DiskDrive | Where-Object { $_.DeviceID -match "PhysicalDrive$DiskNumber" }).PNPDeviceID
+ $RegPath = "HKLM:\SYSTEM\CurrentControlSet\Enum\$PnpId\Device Parameters\Disk"
+ if (-not (Test-Path $RegPath)) {
+ New-Item -Path $RegPath -Force | Out-Null
+ }
+
+ # 4. Turn off write-cache buffer flushing (CacheAttributes = 1 tells Windows to ignore OS flush requests)
+ Set-ItemProperty -Path $RegPath -Name "CacheAttributes" -Value 1 -Type DWord
+ Set-ItemProperty -Path $RegPath -Name "WriteCacheSetting" -Value 1 -Type DWord
+
+ Set-Disk -Number $DiskNumber -IsOffline $true
+ Set-Disk -Number $DiskNumber -IsOffline $false
+ Write-Host "Success: Force-flushing disabled for Drive R: (Disk $DiskNumber)" -ForegroundColor Green
+ Get-PhysicalDisk | Where-Object { $_.DeviceID -eq $DiskNumber } | Get-StorageAdvancedProperty
+
Set-MpPreference -DisableRealtimeMonitoring $true -SubmitSamplesConsent NeverSend -MAPSReporting Disable
# Verify Defender status
+ Get-PhysicalDisk | Get-StorageAdvancedProperty
$status = Get-MpComputerStatus -ErrorAction SilentlyContinue
if ($status) {
Write-Host "RealTimeProtectionEnabled: $($status.RealTimeProtectionEnabled)"
@@ -719,6 +751,9 @@ jobs:
run: |
icacls "${{ github.workspace }}" /grant "${env:USERNAME}:(OI)(CI)F" /Q | Out-Null
Write-Host "Granted Full Control to $env:USERNAME on ${{ github.workspace }}"
+ mkdir R:\build
+ icacls "R:\build" /grant "${env:USERNAME}:(OI)(CI)F" /Q | Out-Null
+ Write-Host "Granted Full Control to $env:USERNAME on R:\build"
# postgres' plpython3u loads python3.dll (the stable-ABI forwarder)
# which in turn loads whichever python3NN.dll the Windows loader finds
@@ -792,18 +827,19 @@ jobs:
-Db_pch=true ^
-Dextra_lib_dirs=d:\openssl\1.1\lib -Dextra_include_dirs=d:\openssl\1.1\include ^
-DTAR=${{env.TAR}} ^
- build
+ R:/build
- name: Build
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
- ninja -C build ${{env.MBUILD_TARGET}}
- ninja -C build -t missingdeps
+ ninja -C R:/build ${{env.MBUILD_TARGET}}
+ ninja -C R:/build -t missingdeps
- name: Test world
env:
ADDITIONAL_SETUP: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
+ R:
run: *meson_test_world_cmd
# FIX: We need to collect crashlogs but they are not collected. cdb.exe
--
2.43.0