diff --git src/encoding/gob/encoder_test.go src/encoding/gob/encoder_test.go
index dc9bbcf35d..10c30a91af 100644
--- src/encoding/gob/encoder_test.go
+++ src/encoding/gob/encoder_test.go
@@ -1131,13 +1131,7 @@ func TestBadData(t *testing.T) {
 
 // TestHugeWriteFails tests that enormous messages trigger an error.
 func TestHugeWriteFails(t *testing.T) {
-	if runtime.GOARCH == "wasm" {
-		t.Skip("out of memory on wasm")
-	}
-	if testing.Short() {
-		// Requires allocating a monster, so don't do this from all.bash.
-		t.Skip("skipping huge allocation in short mode")
-	}
+	t.Skip("skipping test due to huge memory requirement")
 	huge := make([]byte, tooBig)
 	huge[0] = 7 // Make sure it's not all zeros.
 	buf := new(bytes.Buffer)
diff --git src/runtime/crash_cgo_test.go src/runtime/crash_cgo_test.go
index 9ff4bbe121..5fa1340cb2 100644
--- src/runtime/crash_cgo_test.go
+++ src/runtime/crash_cgo_test.go
@@ -238,14 +238,7 @@ func TestCgoCCodeSIGPROF(t *testing.T) {
 }
 
 func TestCgoCrashTraceback(t *testing.T) {
-	t.Parallel()
-	switch platform := runtime.GOOS + "/" + runtime.GOARCH; platform {
-	case "darwin/amd64":
-	case "linux/amd64":
-	case "linux/ppc64le":
-	default:
-		t.Skipf("not yet supported on %s", platform)
-	}
+	t.Skipf("skip running remotely")
 	got := runTestProg(t, "testprogcgo", "CrashTraceback")
 	for i := 1; i <= 3; i++ {
 		if !strings.Contains(got, fmt.Sprintf("cgo symbolizer:%d", i)) {
@@ -264,10 +257,7 @@ func TestCgoTracebackContext(t *testing.T) {
 }
 
 func testCgoPprof(t *testing.T, buildArg, runArg string) {
-	t.Parallel()
-	if runtime.GOOS != "linux" || (runtime.GOARCH != "amd64" && runtime.GOARCH != "ppc64le") {
-		t.Skipf("not yet supported on %s/%s", runtime.GOOS, runtime.GOARCH)
-	}
+        t.Skipf("skip pprof test")
 	testenv.MustHaveGoRun(t)
 
 	exe, err := buildTestProg(t, "testprogcgo", buildArg)
diff --git src/runtime/crash_test.go src/runtime/crash_test.go
index 3607992788..e53ffb6a81 100644
--- src/runtime/crash_test.go
+++ src/runtime/crash_test.go
@@ -481,6 +481,7 @@ func TestPanicLoop(t *testing.T) {
 }
 
 func TestMemPprof(t *testing.T) {
+	t.Skipf("skip pprof test")
 	testenv.MustHaveGoRun(t)
 
 	exe, err := buildTestProg(t, "testprog")
diff --git src/runtime/crash_unix_test.go src/runtime/crash_unix_test.go
index 02891ec1ad..fd2723f16e 100644
--- src/runtime/crash_unix_test.go
+++ src/runtime/crash_unix_test.go
@@ -174,9 +174,7 @@ func TestPanicSystemstack(t *testing.T) {
 	// The GOTRACEBACK=crash handler takes 0.1 seconds even if
 	// it's not writing a core file and potentially much longer if
 	// it is. Skip in short mode.
-	if testing.Short() {
-		t.Skip("Skipping in short mode (GOTRACEBACK=crash is slow)")
-	}
+	t.Skip("Skipping (GOTRACEBACK=crash hangs on arm)")
 
 	if runtime.Sigisblocked(int(syscall.SIGQUIT)) {
 		t.Skip("skipping; SIGQUIT is blocked, see golang.org/issue/19196")
@@ -244,6 +242,7 @@ func testPanicSystemstackInternal() {
 }
 
 func TestSignalExitStatus(t *testing.T) {
+        t.Skipf("skip running remotely")
 	testenv.MustHaveGoBuild(t)
 	exe, err := buildTestProg(t, "testprog")
 	if err != nil {
diff --git src/runtime/fastlog2_test.go src/runtime/fastlog2_test.go
index ae0f40b2bb..a93933d7ac 100644
--- src/runtime/fastlog2_test.go
+++ src/runtime/fastlog2_test.go
@@ -16,11 +16,7 @@ func TestFastLog2(t *testing.T) {
 	const randomBitCount = 26
 	var e float64
 
-	inc := 1
-	if testing.Short() {
-		// Check 1K total values, down from 64M.
-		inc = 1 << 16
-	}
+	inc := 1 << 16
 	for i := 1; i < 1<<randomBitCount; i += inc {
 		l, fl := math.Log2(float64(i)), runtime.Fastlog2(float64(i))
 		d := l - fl
diff --git src/runtime/hash_test.go src/runtime/hash_test.go
index 7b8ebc4f3c..9fc5b995fc 100644
--- src/runtime/hash_test.go
+++ src/runtime/hash_test.go
@@ -164,9 +164,7 @@ func TestSmhasherTwoNonzero(t *testing.T) {
 	if GOARCH == "wasm" {
 		t.Skip("Too slow on wasm")
 	}
-	if testing.Short() {
-		t.Skip("Skipping in short mode")
-	}
+	t.Skip("skipping test due to huge memory requirement")
 	h := newHashSet()
 	for n := 2; n <= 16; n++ {
 		twoNonZero(h, n)
@@ -273,9 +271,7 @@ func TestSmhasherPermutation(t *testing.T) {
 	if GOARCH == "wasm" {
 		t.Skip("Too slow on wasm")
 	}
-	if testing.Short() {
-		t.Skip("Skipping in short mode")
-	}
+	t.Skip("skipping test due to huge memory requirement")
 	permutation(t, []uint32{0, 1, 2, 3, 4, 5, 6, 7}, 8)
 	permutation(t, []uint32{0, 1 << 29, 2 << 29, 3 << 29, 4 << 29, 5 << 29, 6 << 29, 7 << 29}, 8)
 	permutation(t, []uint32{0, 1}, 20)
diff --git src/runtime/pprof/pprof_test.go src/runtime/pprof/pprof_test.go
index 44d514393e..f46f00894c 100644
--- src/runtime/pprof/pprof_test.go
+++ src/runtime/pprof/pprof_test.go
@@ -283,14 +283,7 @@ func profileOk(t *testing.T, need []string, prof bytes.Buffer, duration time.Dur
 func TestCPUProfileWithFork(t *testing.T) {
 	testenv.MustHaveExec(t)
 
-	heap := 1 << 30
-	if runtime.GOOS == "android" {
-		// Use smaller size for Android to avoid crash.
-		heap = 100 << 20
-	}
-	if testing.Short() {
-		heap = 100 << 20
-	}
+	heap = 100 << 20
 	// This makes fork slower.
 	garbage := make([]byte, heap)
 	// Need to touch the slice, otherwise it won't be paged in.
