Skip to content

Commit 711262c

Browse files
authored
Merge pull request #577 from evoskuil/master
Comments on madvise, disable for now, restore artifacts.
2 parents bd1e32e + 811b4a2 commit 711262c

5 files changed

Lines changed: 56 additions & 11 deletions

File tree

.github/workflows/ci.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ jobs:
9797
llvm: "llvm@16"
9898
secp256k1: "--build-secp256k1"
9999
cc: "clang"
100-
flags: "-Os -fPIE -DBOOST_NO_CXX98_FUNCTION_BASE"
100+
flags: "-Os -fPIE"
101101
options: "--enable-isystem"
102102
packager: "brew"
103103
packages: "llvm@16 icu4c"
@@ -114,7 +114,7 @@ jobs:
114114
llvm: "llvm@16"
115115
secp256k1: "--build-secp256k1"
116116
cc: "clang"
117-
flags: "-Os -fvisibility=hidden -fPIE -DBOOST_NO_CXX98_FUNCTION_BASE"
117+
flags: "-Os -fvisibility=hidden -fPIE"
118118
options: "--enable-isystem"
119119
packager: "brew"
120120
packages: "llvm@16 icu4c"
@@ -368,7 +368,7 @@ jobs:
368368
llvm: "llvm@16"
369369
secp256k1: "--build-secp256k1"
370370
cc: "clang"
371-
flags: "-Os -fPIE -DBOOST_NO_CXX98_FUNCTION_BASE"
371+
flags: "-Os -fPIE"
372372
options: ""
373373
packager: "brew"
374374
packages: "llvm@16 icu4c"
@@ -385,7 +385,7 @@ jobs:
385385
llvm: "llvm@16"
386386
secp256k1: "--build-secp256k1"
387387
cc: "clang"
388-
flags: "-Os -fvisibility=hidden -fPIE -DBOOST_NO_CXX98_FUNCTION_BASE"
388+
flags: "-Os -fvisibility=hidden -fPIE"
389389
options: ""
390390
packager: "brew"
391391
packages: "llvm@16 icu4c"

install-cmake.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,11 @@ set_os_specific_compiler_settings()
324324
else # Linux
325325
STDLIB="stdc++"
326326
fi
327+
328+
if [[ ($OS == Darwin) && ($CC == clang*) ]]; then
329+
CFLAGS="${CFLAGS} -DBOOST_NO_CXX98_FUNCTION_BASE"
330+
CXXFLAGS="${CXXFLAGS} -DBOOST_NO_CXX98_FUNCTION_BASE"
331+
fi
327332
}
328333

329334
link_to_standard_library()

install-cmakepresets.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,11 @@ set_os_specific_compiler_settings()
332332
else # Linux
333333
STDLIB="stdc++"
334334
fi
335+
336+
if [[ ($OS == Darwin) && ($CC == clang*) ]]; then
337+
CFLAGS="${CFLAGS} -DBOOST_NO_CXX98_FUNCTION_BASE"
338+
CXXFLAGS="${CXXFLAGS} -DBOOST_NO_CXX98_FUNCTION_BASE"
339+
fi
335340
}
336341

337342
link_to_standard_library()

install.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,11 @@ set_os_specific_compiler_settings()
319319
else # Linux
320320
STDLIB="stdc++"
321321
fi
322+
323+
if [[ ($OS == Darwin) && ($CC == clang*) ]]; then
324+
CFLAGS="${CFLAGS} -DBOOST_NO_CXX98_FUNCTION_BASE"
325+
CXXFLAGS="${CXXFLAGS} -DBOOST_NO_CXX98_FUNCTION_BASE"
326+
fi
322327
}
323328

324329
link_to_standard_library()

src/memory/map.cpp

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -554,13 +554,43 @@ bool map::finalize_(size_t size) NOEXCEPT
554554
return false;
555555
}
556556

557-
// TODO: madvise with large length value fails on linux, does 0 imply all?
558-
if (::madvise(memory_map_, 0, MADV_RANDOM) == fail)
559-
{
560-
set_first_code(error::madvise_failure);
561-
unmap_();
562-
return false;
563-
}
557+
// TODO: also, madvise only the size increase.
558+
// TODO: madvise with large length value fails on linux (and zero is noop).
559+
// TODO: Random may not be best since writes are sequential (for bodies).
560+
// TODO: Heads are truly read/write random so could benefit.
561+
// TODO: this fails with large and/or unaligned size. Align size to page,
562+
// TODO: rounded up. Iterate over calls at 1GB (1_u64 << 30), sample:
563+
////// Get page size (usually 4KB)
564+
////const size_t page_size = sysconf(_SC_PAGESIZE);
565+
////if (page_size == static_cast<size_t>(-1))
566+
////{
567+
//// set_first_code(error::sysconf_failure);
568+
//// unmap_();
569+
//// return false;
570+
////}
571+
////
572+
////// Align size up to page boundary
573+
////const size_t aligned_size = (size + page_size - 1) & ~(page_size - 1);
574+
////
575+
////// Use 1GB chunks to avoid large-length issues
576+
////constexpr size_t chunk_size = 1ULL << 30; // 1GB
577+
////uint8_t* ptr = memory_map_;
578+
////for (size_t offset = 0; offset < aligned_size; offset += chunk_size)
579+
////{
580+
//// size_t len = std::min(chunk_size, aligned_size - offset);
581+
//// if (::madvise(ptr + offset, len, MADV_SEQUENTIAL) == fail)
582+
//// {
583+
//// set_first_code(error::madvise_failure);
584+
//// unmap_();
585+
//// return false;
586+
//// }
587+
////}
588+
////if (::madvise(memory_map_, size, MADV_RANDOM) == fail)
589+
////{
590+
//// set_first_code(error::madvise_failure);
591+
//// unmap_();
592+
//// return false;
593+
////}
564594

565595
loaded_ = true;
566596
capacity_ = size;

0 commit comments

Comments
 (0)