stockpile_linux.cpp 890 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "stockpile.h"
  2. #include <thread>
  3. #include <mutex>
  4. #include <sys/mman.h>
  5. #include <util/system/thread.h>
  6. namespace NYT {
  7. ////////////////////////////////////////////////////////////////////////////////
  8. namespace {
  9. void RunStockpile(const TStockpileOptions& options)
  10. {
  11. TThread::SetCurrentThreadName("Stockpile");
  12. constexpr int MADV_STOCKPILE = 0x59410004;
  13. while (true) {
  14. ::madvise(nullptr, options.BufferSize, MADV_STOCKPILE);
  15. Sleep(options.Period);
  16. }
  17. }
  18. } // namespace
  19. void ConfigureStockpile(const TStockpileOptions& options)
  20. {
  21. static std::once_flag OnceFlag;
  22. std::call_once(OnceFlag, [options] {
  23. for (int i = 0; i < options.ThreadCount; i++) {
  24. std::thread(RunStockpile, options).detach();
  25. }
  26. });
  27. }
  28. ////////////////////////////////////////////////////////////////////////////////
  29. } // namespace NYT