From 95f88e5d939218b038ab8d0dd6776120aee53ceb Mon Sep 17 00:00:00 2001 From: kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com> Date: Mon, 10 Mar 2025 17:21:56 +0000 Subject: [chore] add warning message when wazero compiler not supported (#3894) * add warning message when wazero compiler not supported, update supported platforms in README * whoops don't return a reason string for arm64, since it should always be supported --- internal/media/ffmpeg/wasm.go | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) (limited to 'internal/media/ffmpeg/wasm.go') diff --git a/internal/media/ffmpeg/wasm.go b/internal/media/ffmpeg/wasm.go index 29e547364..51735bec1 100644 --- a/internal/media/ffmpeg/wasm.go +++ b/internal/media/ffmpeg/wasm.go @@ -28,6 +28,7 @@ import ( "codeberg.org/gruf/go-ffmpreg/embed" "codeberg.org/gruf/go-ffmpreg/wasm" + "github.com/superseriousbusiness/gotosocial/internal/log" "github.com/tetratelabs/wazero" "golang.org/x/sys/cpu" ) @@ -50,14 +51,20 @@ func initWASM(ctx context.Context) error { var cfg wazero.RuntimeConfig - // Create new runtime config, taking bug into account: - // taking https://github.com/tetratelabs/wazero/pull/2365 - // - // Thanks @ncruces (of go-sqlite3) for the fix! - if compilerSupported() { - cfg = wazero.NewRuntimeConfigCompiler() - } else { - cfg = wazero.NewRuntimeConfigInterpreter() + // Allocate new runtime config, letting + // wazero determine compiler / interpreter. + cfg = wazero.NewRuntimeConfig() + + // Though still perform a check of CPU features at + // runtime to warn about slow interpreter performance. + if reason, supported := compilerSupported(); !supported { + log.Warn(ctx, "!!! WAZERO COMPILER MAY NOT BE AVAILABLE !!!"+ + " Reason: "+reason+"."+ + " Wazero will likely fall back to interpreter mode,"+ + " resulting in poor performance for media processing (and SQLite, if in use)."+ + " For more info and possible workarounds, please check:"+ + " https://docs.gotosocial.org/en/latest/getting_started/releases/#supported-platforms", + ) } if dir := os.Getenv("GTS_WAZERO_COMPILATION_CACHE"); dir != "" { @@ -121,7 +128,7 @@ func initWASM(ctx context.Context) error { return nil } -func compilerSupported() bool { +func compilerSupported() (string, bool) { switch runtime.GOOS { case "linux", "android", "windows", "darwin", @@ -129,15 +136,23 @@ func compilerSupported() bool { "solaris", "illumos": break default: - return false + return "unsupported OS", false } switch runtime.GOARCH { case "amd64": - return cpu.X86.HasSSE41 + // NOTE: wazero in the future may decouple the + // requirement of simd (sse4_1) from requirements + // for compiler support in the future, but even + // still our module go-ffmpreg makes use of them. + return "amd64 SSE4.1 required", cpu.X86.HasSSE41 case "arm64": - return true + // NOTE: this particular check may change if we + // later update go-ffmpreg to a version that makes + // use of threads, i.e. v7.x.x. in that case we would + // need to check for cpu.ARM64.HasATOMICS. + return "", true default: - return false + return "unsupported ARCH", false } } -- cgit v1.2.3