<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
					xmlns:content="http://purl.org/rss/1.0/modules/content/"
					xmlns:wfw="http://wellformedweb.org/CommentAPI/"
					xmlns:atom="http://www.w3.org/2005/Atom"
				  >
<channel>
<atom:link rel="self"  type="application/rss+xml"  href="http://rulinux.net/rss_from_sect_4_subsect_3_thread_43131"  />
<title>rulinux.net - Форум - Admin - А как вы копируете файлы в этом вашем линупсе?</title>
<link>http://rulinux.net/</link>
<description><![CDATA[Портал о GNU/Linux и не только]]></description>
<image><title>rulinux.net - Форум - Admin - А как вы копируете файлы в этом вашем линупсе?</title>
<link>http://rulinux.net/</link>
<url>http://rulinux.net/rss_icon.png</url>
</image>
<item>
<title>А как вы копируете файлы в этом вашем линупсе?</title>
<link>https://rulinux.net/message.php?newsid=43131&amp;page=1#222618</link>
<guid>https://rulinux.net/message.php?newsid=43131&amp;page=1#222618</guid>
<pubDate>Sat, 31 Mar 2018 09:27:29 +0300</pubDate>
<description><![CDATA[<p>Проблема:<br><br>Ну вот, например, дохлое вычислительное устройство под OWRT. Периодически копирует крупные файлы, размер которых совместим с объёмом ОЗУ, а часто и превышает его. <br><br>Ну вот, копирует оно это своё файло с раздела sda1 в бэкапное место на sdb1 - чё происходит?<br><br>Файловая система читает файл с sda1, кешируя прочитанное в памяти. Одновременно пишет на sdb1, ещё раз кешируя в памяти те же байты (файл-то другой уже). <br><br>А кеш - он бесплатный, но не безразмерный. Все эти наши копирования байтов, которые нам никогда больше не потребуются, зачем-то сохраняются в кеше, эффективно вымывая оттуда все нужные данные, которые были закешированы для других, более полезных целей. Соответственно растёт пейджинг, kswapd начинает жрать ЦПУ, всё тормозит и т.д. И никакое ionice этого не исправит.<br><br>Какие средства нам для решения предоставляет этот ваш хвалёный линупс? Да никаких: <br><br>Есть функция posix_fadvise, которая позволяет сказать системе, например POSIX_FADV_SEQUENTIAL что означает что мы собираемся читать-писать файл последовательно. Надеюсь системные утилиты это и так всегда говорят (по крайней мере cp этот параметр выставляет - видно в strace), но к кешу это не имеет отношения. <br><br>У posix_fadvise есть ещё одно заклинание - POSIX_FADV_DONTNEED. Это уже ближе к телу. Но есть проблема - его почему-то утилиты копирования не выставляют, а надо выставлять прочитав каждую страницу данных. Есть <a href="https://github.com/Feh/nocache">костыль</a>, который перехватывает вызовы fopen программы и при закрытии файлового дескриптора объявляет все данные файла как POSIX_FADV_DONTNEED что, кстати, не всегда приводит к немедленному результату - под федорой у меня исходный файл остался закешированным после копирования, а под опенврт - оба файла остались в кеше, и целевой и исходный. Проверяется это программой cachestats, которая входит в состав костыля. <br><br>Ну и, наконец, хит сезона - POSIX_FADV_NOREUSE! Это ещё один флаг для posix_fadvise, который какбэ призван дать программам возможность сразу честно признаться в том, что они собираются лишь однократно потрогать байты из файла и больше они им не потребуются.<br><br>Вот как описывает ман этот самый POSIX_FADV_NOREUSE: <div class="quote"><pre>POSIX_FADV_NOREUSE     The specified data will be accessed only once.<br><br>    In kernels before 2.6.18, POSIX_FADV_NOREUSE had the same semantics as POSIX_FADV_WILLNEED. This was probably a bug; since kernel 2.6.18, this flag is a no-op.</pre></div><br><br>Это же просто охуенно: &quot;this flag is a no-op&quot;!<br><br> Так как копировать файлы в этом вашем линупсе не ставя всю систему раком?<br><br></p>]]></description>
</item>
</channel>
</rss>