You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1398 lines
33 KiB

  1. <!doctype html>
  2. <html lang="en" class="no-js">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <meta name="description" content="mergerfs - a featureful union filesystem">
  7. <link rel="canonical" href="https://trapexit.github.io/mergerfs/benchmarking/">
  8. <link rel="prev" href="../performance/">
  9. <link rel="next" href="../tooling/">
  10. <link rel="icon" href="../assets/images/favicon.png">
  11. <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.49">
  12. <title>Benchmarking - mergerfs</title>
  13. <link rel="stylesheet" href="../assets/stylesheets/main.6f8fc17f.min.css">
  14. <link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
  15. <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  16. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
  17. <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
  18. <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
  19. </head>
  20. <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
  21. <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
  22. <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
  23. <label class="md-overlay" for="__drawer"></label>
  24. <div data-md-component="skip">
  25. <a href="#benchmarking" class="md-skip">
  26. Skip to content
  27. </a>
  28. </div>
  29. <div data-md-component="announce">
  30. </div>
  31. <header class="md-header md-header--shadow" data-md-component="header">
  32. <nav class="md-header__inner md-grid" aria-label="Header">
  33. <a href=".." title="mergerfs" class="md-header__button md-logo" aria-label="mergerfs" data-md-component="logo">
  34. <img src="../logo.jpeg" alt="logo">
  35. </a>
  36. <label class="md-header__button md-icon" for="__drawer">
  37. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
  38. </label>
  39. <div class="md-header__title" data-md-component="header-title">
  40. <div class="md-header__ellipsis">
  41. <div class="md-header__topic">
  42. <span class="md-ellipsis">
  43. mergerfs
  44. </span>
  45. </div>
  46. <div class="md-header__topic" data-md-component="header-topic">
  47. <span class="md-ellipsis">
  48. Benchmarking
  49. </span>
  50. </div>
  51. </div>
  52. </div>
  53. <form class="md-header__option" data-md-component="palette">
  54. <input class="md-option" data-md-color-media="(prefers-color-scheme)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
  55. <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
  56. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m14.3 16-.7-2h-3.2l-.7 2H7.8L11 7h2l3.2 9zM20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12zm-9.15 3.96h2.3L12 9z"/></svg>
  57. </label>
  58. <input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
  59. <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
  60. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
  61. </label>
  62. <input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to system preference" type="radio" name="__palette" id="__palette_2">
  63. <label class="md-header__button md-icon" title="Switch to system preference" for="__palette_0" hidden>
  64. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
  65. </label>
  66. </form>
  67. <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
  68. <label class="md-header__button md-icon" for="__search">
  69. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
  70. </label>
  71. <div class="md-search" data-md-component="search" role="dialog">
  72. <label class="md-search__overlay" for="__search"></label>
  73. <div class="md-search__inner" role="search">
  74. <form class="md-search__form" name="search">
  75. <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
  76. <label class="md-search__icon md-icon" for="__search">
  77. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
  78. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
  79. </label>
  80. <nav class="md-search__options" aria-label="Search">
  81. <a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
  82. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
  83. </a>
  84. <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
  85. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
  86. </button>
  87. </nav>
  88. </form>
  89. <div class="md-search__output">
  90. <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
  91. <div class="md-search-result" data-md-component="search-result">
  92. <div class="md-search-result__meta">
  93. Initializing search
  94. </div>
  95. <ol class="md-search-result__list" role="presentation"></ol>
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. </div>
  101. <div class="md-header__source">
  102. <a href="https://github.com/trapexit/mergerfs" title="Go to repository" class="md-source" data-md-component="source">
  103. <div class="md-source__icon md-icon">
  104. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
  105. </div>
  106. <div class="md-source__repository">
  107. mergerfs
  108. </div>
  109. </a>
  110. </div>
  111. </nav>
  112. </header>
  113. <div class="md-container" data-md-component="container">
  114. <main class="md-main" data-md-component="main">
  115. <div class="md-main__inner md-grid">
  116. <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
  117. <div class="md-sidebar__scrollwrap">
  118. <div class="md-sidebar__inner">
  119. <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  120. <label class="md-nav__title" for="__drawer">
  121. <a href=".." title="mergerfs" class="md-nav__button md-logo" aria-label="mergerfs" data-md-component="logo">
  122. <img src="../logo.jpeg" alt="logo">
  123. </a>
  124. mergerfs
  125. </label>
  126. <div class="md-nav__source">
  127. <a href="https://github.com/trapexit/mergerfs" title="Go to repository" class="md-source" data-md-component="source">
  128. <div class="md-source__icon md-icon">
  129. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
  130. </div>
  131. <div class="md-source__repository">
  132. mergerfs
  133. </div>
  134. </a>
  135. </div>
  136. <ul class="md-nav__list" data-md-scrollfix>
  137. <li class="md-nav__item">
  138. <a href=".." class="md-nav__link">
  139. <span class="md-ellipsis">
  140. Home
  141. </span>
  142. </a>
  143. </li>
  144. <li class="md-nav__item">
  145. <a href="../quickstart/" class="md-nav__link">
  146. <span class="md-ellipsis">
  147. QuickStart
  148. </span>
  149. </a>
  150. </li>
  151. <li class="md-nav__item md-nav__item--nested">
  152. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
  153. <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
  154. <span class="md-ellipsis">
  155. Installation
  156. </span>
  157. <span class="md-nav__icon md-icon"></span>
  158. </label>
  159. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
  160. <label class="md-nav__title" for="__nav_3">
  161. <span class="md-nav__icon md-icon"></span>
  162. Installation
  163. </label>
  164. <ul class="md-nav__list" data-md-scrollfix>
  165. <li class="md-nav__item">
  166. <a href="../setup/installation/" class="md-nav__link">
  167. <span class="md-ellipsis">
  168. Installation
  169. </span>
  170. </a>
  171. </li>
  172. <li class="md-nav__item">
  173. <a href="../setup/upgrade/" class="md-nav__link">
  174. <span class="md-ellipsis">
  175. Upgrade
  176. </span>
  177. </a>
  178. </li>
  179. <li class="md-nav__item">
  180. <a href="../setup/build/" class="md-nav__link">
  181. <span class="md-ellipsis">
  182. Build
  183. </span>
  184. </a>
  185. </li>
  186. </ul>
  187. </nav>
  188. </li>
  189. <li class="md-nav__item md-nav__item--nested">
  190. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
  191. <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
  192. <span class="md-ellipsis">
  193. Config
  194. </span>
  195. <span class="md-nav__icon md-icon"></span>
  196. </label>
  197. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
  198. <label class="md-nav__title" for="__nav_4">
  199. <span class="md-nav__icon md-icon"></span>
  200. Config
  201. </label>
  202. <ul class="md-nav__list" data-md-scrollfix>
  203. <li class="md-nav__item">
  204. <a href="../config/terminology/" class="md-nav__link">
  205. <span class="md-ellipsis">
  206. Terminology
  207. </span>
  208. </a>
  209. </li>
  210. <li class="md-nav__item">
  211. <a href="../config/options/" class="md-nav__link">
  212. <span class="md-ellipsis">
  213. Options
  214. </span>
  215. </a>
  216. </li>
  217. <li class="md-nav__item">
  218. <a href="../config/deprecated_options/" class="md-nav__link">
  219. <span class="md-ellipsis">
  220. Deprecated Options
  221. </span>
  222. </a>
  223. </li>
  224. <li class="md-nav__item">
  225. <a href="../config/branches/" class="md-nav__link">
  226. <span class="md-ellipsis">
  227. branches
  228. </span>
  229. </a>
  230. </li>
  231. <li class="md-nav__item">
  232. <a href="../config/functions_categories_and_policies/" class="md-nav__link">
  233. <span class="md-ellipsis">
  234. functions, categories and policies
  235. </span>
  236. </a>
  237. </li>
  238. <li class="md-nav__item">
  239. <a href="../config/func_readdir/" class="md-nav__link">
  240. <span class="md-ellipsis">
  241. func.readdir
  242. </span>
  243. </a>
  244. </li>
  245. <li class="md-nav__item">
  246. <a href="../config/cache/" class="md-nav__link">
  247. <span class="md-ellipsis">
  248. caching
  249. </span>
  250. </a>
  251. </li>
  252. <li class="md-nav__item">
  253. <a href="../config/ioctl/" class="md-nav__link">
  254. <span class="md-ellipsis">
  255. ioctl
  256. </span>
  257. </a>
  258. </li>
  259. <li class="md-nav__item">
  260. <a href="../config/rename_and_link/" class="md-nav__link">
  261. <span class="md-ellipsis">
  262. rename and link
  263. </span>
  264. </a>
  265. </li>
  266. <li class="md-nav__item">
  267. <a href="../config/statfs/" class="md-nav__link">
  268. <span class="md-ellipsis">
  269. statfs / statvfs
  270. </span>
  271. </a>
  272. </li>
  273. <li class="md-nav__item">
  274. <a href="../config/flush-on-close/" class="md-nav__link">
  275. <span class="md-ellipsis">
  276. flush-on-close
  277. </span>
  278. </a>
  279. </li>
  280. </ul>
  281. </nav>
  282. </li>
  283. <li class="md-nav__item">
  284. <a href="../error_handling/" class="md-nav__link">
  285. <span class="md-ellipsis">
  286. Error Handling
  287. </span>
  288. </a>
  289. </li>
  290. <li class="md-nav__item">
  291. <a href="../runtime_interfaces/" class="md-nav__link">
  292. <span class="md-ellipsis">
  293. Runtime Interfaces
  294. </span>
  295. </a>
  296. </li>
  297. <li class="md-nav__item">
  298. <a href="../remote_filesystems/" class="md-nav__link">
  299. <span class="md-ellipsis">
  300. Remote Filesystems
  301. </span>
  302. </a>
  303. </li>
  304. <li class="md-nav__item">
  305. <a href="../tips_notes/" class="md-nav__link">
  306. <span class="md-ellipsis">
  307. Tips and Notes
  308. </span>
  309. </a>
  310. </li>
  311. <li class="md-nav__item">
  312. <a href="../known_issues_bugs/" class="md-nav__link">
  313. <span class="md-ellipsis">
  314. Known Issues and Bugs
  315. </span>
  316. </a>
  317. </li>
  318. <li class="md-nav__item">
  319. <a href="../project_comparisons/" class="md-nav__link">
  320. <span class="md-ellipsis">
  321. Project Comparisons
  322. </span>
  323. </a>
  324. </li>
  325. <li class="md-nav__item">
  326. <a href="../performance/" class="md-nav__link">
  327. <span class="md-ellipsis">
  328. Tweaking Performance
  329. </span>
  330. </a>
  331. </li>
  332. <li class="md-nav__item md-nav__item--active">
  333. <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
  334. <label class="md-nav__link md-nav__link--active" for="__toc">
  335. <span class="md-ellipsis">
  336. Benchmarking
  337. </span>
  338. <span class="md-nav__icon md-icon"></span>
  339. </label>
  340. <a href="./" class="md-nav__link md-nav__link--active">
  341. <span class="md-ellipsis">
  342. Benchmarking
  343. </span>
  344. </a>
  345. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  346. <label class="md-nav__title" for="__toc">
  347. <span class="md-nav__icon md-icon"></span>
  348. Table of contents
  349. </label>
  350. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  351. <li class="md-nav__item">
  352. <a href="#write-benchmark" class="md-nav__link">
  353. <span class="md-ellipsis">
  354. write benchmark
  355. </span>
  356. </a>
  357. </li>
  358. <li class="md-nav__item">
  359. <a href="#read-benchmark" class="md-nav__link">
  360. <span class="md-ellipsis">
  361. read benchmark
  362. </span>
  363. </a>
  364. </li>
  365. <li class="md-nav__item">
  366. <a href="#other-benchmarks" class="md-nav__link">
  367. <span class="md-ellipsis">
  368. other benchmarks
  369. </span>
  370. </a>
  371. </li>
  372. </ul>
  373. </nav>
  374. </li>
  375. <li class="md-nav__item">
  376. <a href="../tooling/" class="md-nav__link">
  377. <span class="md-ellipsis">
  378. Tooling
  379. </span>
  380. </a>
  381. </li>
  382. <li class="md-nav__item md-nav__item--nested">
  383. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_14" >
  384. <label class="md-nav__link" for="__nav_14" id="__nav_14_label" tabindex="0">
  385. <span class="md-ellipsis">
  386. FAQ
  387. </span>
  388. <span class="md-nav__icon md-icon"></span>
  389. </label>
  390. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="false">
  391. <label class="md-nav__title" for="__nav_14">
  392. <span class="md-nav__icon md-icon"></span>
  393. FAQ
  394. </label>
  395. <ul class="md-nav__list" data-md-scrollfix>
  396. <li class="md-nav__item">
  397. <a href="../faq/compatibility_and_integration/" class="md-nav__link">
  398. <span class="md-ellipsis">
  399. Compatibility and Integration
  400. </span>
  401. </a>
  402. </li>
  403. <li class="md-nav__item">
  404. <a href="../faq/configuration_and_policies/" class="md-nav__link">
  405. <span class="md-ellipsis">
  406. Configuration and Policies
  407. </span>
  408. </a>
  409. </li>
  410. <li class="md-nav__item">
  411. <a href="../faq/general_information_and_overview/" class="md-nav__link">
  412. <span class="md-ellipsis">
  413. General Information and Overview
  414. </span>
  415. </a>
  416. </li>
  417. <li class="md-nav__item">
  418. <a href="../faq/recommendations_and_warnings/" class="md-nav__link">
  419. <span class="md-ellipsis">
  420. Recommendations and Warnings
  421. </span>
  422. </a>
  423. </li>
  424. <li class="md-nav__item">
  425. <a href="../faq/technical_behavior_and_limitations/" class="md-nav__link">
  426. <span class="md-ellipsis">
  427. Technical Behavior and Limitations
  428. </span>
  429. </a>
  430. </li>
  431. <li class="md-nav__item">
  432. <a href="../faq/usage_and_functionality/" class="md-nav__link">
  433. <span class="md-ellipsis">
  434. Usage and Functionality
  435. </span>
  436. </a>
  437. </li>
  438. <li class="md-nav__item">
  439. <a href="../faq/limit_drive_spinup/" class="md-nav__link">
  440. <span class="md-ellipsis">
  441. Limit drive spinup
  442. </span>
  443. </a>
  444. </li>
  445. </ul>
  446. </nav>
  447. </li>
  448. <li class="md-nav__item">
  449. <a href="../related_projects/" class="md-nav__link">
  450. <span class="md-ellipsis">
  451. Related Projects
  452. </span>
  453. </a>
  454. </li>
  455. <li class="md-nav__item">
  456. <a href="../media_and_publicity/" class="md-nav__link">
  457. <span class="md-ellipsis">
  458. Media and Publicity
  459. </span>
  460. </a>
  461. </li>
  462. <li class="md-nav__item">
  463. <a href="../support/" class="md-nav__link">
  464. <span class="md-ellipsis">
  465. Support
  466. </span>
  467. </a>
  468. </li>
  469. <li class="md-nav__item">
  470. <a href="../donations/" class="md-nav__link">
  471. <span class="md-ellipsis">
  472. Donations
  473. </span>
  474. </a>
  475. </li>
  476. </ul>
  477. </nav>
  478. </div>
  479. </div>
  480. </div>
  481. <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
  482. <div class="md-sidebar__scrollwrap">
  483. <div class="md-sidebar__inner">
  484. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  485. <label class="md-nav__title" for="__toc">
  486. <span class="md-nav__icon md-icon"></span>
  487. Table of contents
  488. </label>
  489. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  490. <li class="md-nav__item">
  491. <a href="#write-benchmark" class="md-nav__link">
  492. <span class="md-ellipsis">
  493. write benchmark
  494. </span>
  495. </a>
  496. </li>
  497. <li class="md-nav__item">
  498. <a href="#read-benchmark" class="md-nav__link">
  499. <span class="md-ellipsis">
  500. read benchmark
  501. </span>
  502. </a>
  503. </li>
  504. <li class="md-nav__item">
  505. <a href="#other-benchmarks" class="md-nav__link">
  506. <span class="md-ellipsis">
  507. other benchmarks
  508. </span>
  509. </a>
  510. </li>
  511. </ul>
  512. </nav>
  513. </div>
  514. </div>
  515. </div>
  516. <div class="md-content" data-md-component="content">
  517. <article class="md-content__inner md-typeset">
  518. <a href="https://github.com/trapexit/mergerfs/tree/master/mkdocs/docs/benchmarking.md" title="Edit this page" class="md-content__button md-icon">
  519. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
  520. </a>
  521. <h1 id="benchmarking">Benchmarking</h1>
  522. <p>Filesystems are complicated. They do many things and many of those are
  523. interconnected. Additionally, the OS, drivers, hardware, etc. can all
  524. impact performance. Therefore, when benchmarking, it is <strong>necessary</strong>
  525. that the test focuses as narrowly as possible.</p>
  526. <p>For most throughput is the key benchmark. To test throughput <code>dd</code> is
  527. useful but <strong>must</strong> be used with the correct settings in order to
  528. ensure the filesystem or device is actually being tested. The OS can
  529. and will cache data. Without forcing synchronous reads and writes
  530. and/or disabling caching the values returned will not be
  531. representative of the device's true performance.</p>
  532. <p>When benchmarking through mergerfs ensure you only use 1 branch to
  533. remove any possibility of the policies complicating the
  534. situation. Benchmark the underlying filesystem first and then mount
  535. mergerfs over it and test again. If you're experiencing speeds below
  536. your expectation you will need to narrow down precisely which
  537. component is leading to the slowdown. Preferably test the following in
  538. the order listed (but not combined).</p>
  539. <ol>
  540. <li>Enable <code>nullrw</code> mode with <code>nullrw=true</code>. This will effectively make
  541. reads and writes no-ops. Removing the underlying device /
  542. filesystem from the equation. This will give us the top theoretical
  543. speeds.</li>
  544. <li>Mount mergerfs over <code>tmpfs</code>. <code>tmpfs</code> is a RAM disk. Extremely high
  545. speed and very low latency. This is a more realistic best case
  546. scenario. Example: <code>mount -t tmpfs -o size=2G tmpfs /tmp/tmpfs</code></li>
  547. <li>Mount mergerfs over a local device. NVMe, SSD, HDD, etc. If you
  548. have more than one I'd suggest testing each of them as drives
  549. and/or controllers (their drivers) could impact performance.</li>
  550. <li>Finally, if you intend to use mergerfs with a network filesystem,
  551. either as the source of data or to combine with another through
  552. mergerfs, test each of those alone as above.</li>
  553. </ol>
  554. <p>Once you find the component which has the performance issue you can do
  555. further testing with different options to see if they impact
  556. performance. For reads and writes the most relevant would be:
  557. <code>cache.files</code>, <code>async_read</code>. Less likely but relevant when using NFS
  558. or with certain filesystems would be <code>security_capability</code>, <code>xattr</code>,
  559. and <code>posix_acl</code>. If you find a specific system, device, filesystem,
  560. controller, etc. that performs poorly contact trapexit so he may
  561. investigate further.</p>
  562. <p>Sometimes the problem is really the application accessing or writing
  563. data through mergerfs. Some software use small buffer sizes which can
  564. lead to more requests and therefore greater overhead. You can test
  565. this out yourself by replacing <code>bs=1M</code> in the examples below with <code>ibs</code>
  566. or <code>obs</code> and using a size of <code>512</code> instead of <code>1M</code>. In one example
  567. test using <code>nullrw</code> the write speed dropped from 4.9GB/s to 69.7MB/s
  568. when moving from <code>1M</code> to <code>512</code>. Similar results were had when testing
  569. reads. Small writes overhead may be improved by leveraging a write
  570. cache but in casual tests little gain was found. More tests will need
  571. to be done before this feature would become available. If you have an
  572. app that appears slow with mergerfs it could be due to this. Contact
  573. trapexit so he may investigate further.</p>
  574. <h3 id="write-benchmark">write benchmark</h3>
  575. <div class="language-text highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>$ dd if=/dev/zero of=/mnt/mergerfs/1GB.file bs=1M count=1024 oflag=nocache conv=fdatasync status=progress
  576. </span></code></pre></div>
  577. <h3 id="read-benchmark">read benchmark</h3>
  578. <div class="language-text highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>$ dd if=/mnt/mergerfs/1GB.file of=/dev/null bs=1M count=1024 iflag=nocache conv=fdatasync status=progress
  579. </span></code></pre></div>
  580. <h3 id="other-benchmarks">other benchmarks</h3>
  581. <p>If you are attempting to benchmark other behaviors you must ensure you
  582. clear kernel caches before runs. In fact it would be a good deal to
  583. run before the read and write benchmarks as well just in case.</p>
  584. <div class="language-text highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>sync
  585. </span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>echo 3 | sudo tee /proc/sys/vm/drop_caches
  586. </span></code></pre></div>
  587. </article>
  588. </div>
  589. <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
  590. </div>
  591. <button type="button" class="md-top md-icon" data-md-component="top" hidden>
  592. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
  593. Back to top
  594. </button>
  595. </main>
  596. <footer class="md-footer">
  597. <div class="md-footer-meta md-typeset">
  598. <div class="md-footer-meta__inner md-grid">
  599. <div class="md-copyright">
  600. Made with
  601. <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
  602. Material for MkDocs
  603. </a>
  604. </div>
  605. </div>
  606. </div>
  607. </footer>
  608. </div>
  609. <div class="md-dialog" data-md-component="dialog">
  610. <div class="md-dialog__inner md-typeset"></div>
  611. </div>
  612. <script id="__config" type="application/json">{"base": "..", "features": ["content.action.edit", "content.code.copy", "content.code.select", "navigation.instant", "navigation.instant.prefetch", "navigation.path", "navigation.top", "navigation.tracking", "optimize", "search.share", "toc.follow"], "search": "../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
  613. <script src="../assets/javascripts/bundle.88dd0f4e.min.js"></script>
  614. </body>
  615. </html>