proxygen
HugePageUtil.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2012-present Facebook, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include <iostream>
18 #include <stdexcept>
19 
20 #include <folly/Format.h>
21 #include <folly/Range.h>
25 
26 DEFINE_bool(cp, false, "Copy file");
27 
28 using namespace folly;
29 
30 namespace {
31 
32 [[noreturn]] void usage(const char* name) {
33  std::cerr << folly::format(
34  "Usage: {0}\n"
35  " list all huge page sizes and their mount points\n"
36  " {0} -cp <src_file> <dest_nameprefix>\n"
37  " copy src_file to a huge page file\n",
38  name);
39  exit(1);
40 }
41 
42 void copy(const char* srcFile, const char* dest) {
43  fs::path destPath(dest);
44  if (!destPath.is_absolute()) {
45  auto hp = getHugePageSize();
46  CHECK(hp) << "no huge pages available";
47  destPath = fs::canonical_parent(destPath, hp->mountPoint);
48  }
49 
50  mmapFileCopy(srcFile, destPath.c_str());
51 }
52 
53 void list() {
54  for (const auto& p : getHugePageSizes()) {
55  std::cout << p.size << " " << p.mountPoint << "\n";
56  }
57 }
58 
59 } // namespace
60 
61 int main(int argc, char* argv[]) {
62  gflags::ParseCommandLineFlags(&argc, &argv, true);
63  if (FLAGS_cp) {
64  if (argc != 3) {
65  usage(argv[0]);
66  }
67  copy(argv[1], argv[2]);
68  } else {
69  if (argc != 1) {
70  usage(argv[0]);
71  }
72  list();
73  }
74  return 0;
75 }
const HugePageSizeVec & getHugePageSizes()
Definition: HugePages.cpp:201
dest
Definition: upload.py:394
—— Concurrent Priority Queue Implementation ——
Definition: AtomicBitSet.h:29
const HugePageSize * getHugePageSize(size_t size)
Definition: HugePages.cpp:206
const char * name
Definition: http_parser.c:437
constexpr std::decay< T >::type copy(T &&value) noexcept(noexcept(typename std::decay< T >::type(std::forward< T >(value))))
Definition: Utility.h:72
char ** argv
Encoder::MutableCompressedList list
int main(int argc, char *argv[])
DEFINE_bool(cp, false,"Copy file")
Formatter< false, Args... > format(StringPiece fmt, Args &&...args)
Definition: Format.h:271
void mmapFileCopy(const char *src, const char *dest, mode_t mode)
path canonical_parent(const path &pth, const path &base)
Definition: FsUtil.cpp:68