Mold the redbean binary to minimize page faults
This change brings page faults for precompressed static asset serving down from 27 to 20 (or fewer) after fork. This is more of an art than science. Hopefully Blinkenlights can visualize page faults soon.
This commit is contained in:
@@ -21,6 +21,8 @@
|
||||
#include "libc/mem/mem.h"
|
||||
#include "libc/str/internal.h"
|
||||
#include "libc/str/str.h"
|
||||
#include "libc/testlib/ezbench.h"
|
||||
#include "libc/testlib/hyperion.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
|
||||
#define MakeMemory(SL) memcpy(malloc(sizeof(SL) - 1), SL, sizeof(SL) - 1)
|
||||
@@ -60,6 +62,22 @@ TEST(memmem, testEndOfMemory) {
|
||||
free(needle);
|
||||
}
|
||||
|
||||
TEST(memmem, testOneNo) {
|
||||
char *needle = MakeMemory("z");
|
||||
char *haystk = MakeMemory("abc123");
|
||||
EXPECT_EQ(0, memmem(haystk, 6, needle, 1));
|
||||
free(haystk);
|
||||
free(needle);
|
||||
}
|
||||
|
||||
TEST(memmem, testOneYes) {
|
||||
char *needle = MakeMemory("3");
|
||||
char *haystk = MakeMemory("abc123");
|
||||
EXPECT_EQ(&haystk[5], memmem(haystk, 6, needle, 1));
|
||||
free(haystk);
|
||||
free(needle);
|
||||
}
|
||||
|
||||
TEST(memmem, testCrossesSseRegister) {
|
||||
char *needle = MakeMemory("eeeeeeeeeeeeefffffffffffff");
|
||||
char *haystk = MakeMemory("eeeeeeeeeeeeeeeeffffffffffffffffrrrrrrrrrrrrrrrr");
|
||||
@@ -113,3 +131,12 @@ TEST(memmem, testEmptyHaystackAndNeedle_returnsHaystack) {
|
||||
TEST(memmem, testWut) {
|
||||
ASSERT_STREQ("x", memmem("x", 1, "x", 1));
|
||||
}
|
||||
|
||||
BENCH(memmem, bench) {
|
||||
EZBENCH2("memmem", donothing,
|
||||
EXPROPRIATE(memmem(kHyperion, kHyperionSize, "THE END", 7)));
|
||||
EZBENCH2("memmem", donothing,
|
||||
EXPROPRIATE(memmem(
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
|
||||
62, "aaaaaab", 7)));
|
||||
}
|
||||
|
||||
@@ -46,6 +46,12 @@ TEST(strstr, test_notFound) {
|
||||
free(haystack);
|
||||
}
|
||||
|
||||
TEST(strstr, test_notFound1) {
|
||||
MAKESTRING(haystack, "abc123def");
|
||||
ASSERT_EQ(NULL, strstr(haystack, gc(strdup("x"))));
|
||||
free(haystack);
|
||||
}
|
||||
|
||||
TEST(strstr, test_middleOfString) {
|
||||
MAKESTRING(haystack, "abc123def");
|
||||
ASSERT_STREQ(&haystack[3], strstr(haystack, gc(strdup("123"))));
|
||||
@@ -80,8 +86,40 @@ TEST(strstr, test) {
|
||||
|
||||
BENCH(strstr, bench) {
|
||||
EZBENCH2("strstr", donothing, EXPROPRIATE(strstr(kHyperion, "THE END")));
|
||||
EZBENCH2("strstr", donothing,
|
||||
EZBENCH2("strstr torture 1", donothing,
|
||||
EXPROPRIATE(strstr(
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
|
||||
"aaaaaab")));
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
|
||||
"b")));
|
||||
EZBENCH2("strstr torture 2", donothing,
|
||||
EXPROPRIATE(strstr(
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
|
||||
"ab")));
|
||||
EZBENCH2("strstr torture 4", donothing,
|
||||
EXPROPRIATE(strstr(
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
|
||||
"aaab")));
|
||||
EZBENCH2("strstr torture 8", donothing,
|
||||
EXPROPRIATE(strstr(
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
|
||||
"aaaaaaab")));
|
||||
EZBENCH2("strstr torture 16", donothing,
|
||||
EXPROPRIATE(strstr(
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
|
||||
"aaaaaaaaaaaaaaab")));
|
||||
EZBENCH2("strstr torture 32", donothing,
|
||||
EXPROPRIATE(strstr(
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab")));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user